/* ============================================================
   全局基础 + 高端平板适配（iPad Pro / MatePad / Galaxy Tab）
   ============================================================ */

:root {
    --safe-top: env(safe-area-inset-top, 0px);
    --safe-bottom: env(safe-area-inset-bottom, 0px);
    --safe-left: env(safe-area-inset-left, 0px);
    --safe-right: env(safe-area-inset-right, 0px);
    --menu-width: 128px;
    --menu-narrow: 64px;
    --header-h: 48px;
    --footer-h: 28px;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    -webkit-tap-highlight-color: transparent;
}

html {
    height: 100%;
    /* 防止 iOS 横屏自动放大字号 */
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

html, body {
    height: 100%;
    font-family: "Microsoft YaHei", "Segoe UI", -apple-system, "PingFang SC", "Helvetica Neue", Arial, sans-serif;
    font-size: 14px;
    color: #1a1d23;
    background: #f5f6f8;
    /* 防止 iOS Safari 地址栏导致的 100vh 抖动，使用动态视口高度 */
    overflow: hidden;
    overscroll-behavior: contain;
    -webkit-user-select: none;
    user-select: none;
    /* 防止双击缩放延迟 */
    touch-action: manipulation;
}

/* 允许内容区选择文本 */
.content-inner,
.content-inner * {
    -webkit-user-select: text;
    user-select: text;
}

.app {
    display: grid;
    grid-template-rows: calc(var(--header-h) + var(--safe-top)) 1fr calc(var(--footer-h) + var(--safe-bottom));
    grid-template-columns: 1fr;
    height: 100vh;
    height: 100dvh; /* iOS 16+ 动态视口高度，修复 Safari 地址栏抖动 */
    width: 100vw;
    width: 100dvw;
    padding-top: var(--safe-top);
    padding-left: var(--safe-left);
    padding-right: var(--safe-right);
    padding-bottom: var(--safe-bottom);
}

/* ============================================================
   顶部标题栏
   ============================================================ */

.app-header {
    grid-row: 1;
    display: grid;
    grid-template-columns: minmax(180px, 1fr) auto 1fr;  /* 左:最小 180px 撑满 中:内容宽 右:撑满 */
    align-items: center;
    height: var(--header-h);
    background: linear-gradient(180deg, #ffffff 0%, #f0f2f5 100%);
    border-bottom: 1px solid #c0c6d0;
    padding: 0 16px;
    position: relative;
    z-index: 30;
}

.header-left {
    display: flex;
    align-items: center;
    justify-content: flex-start; /* 左侧内容靠左 */
    gap: 5px;
    min-width: 150px; /* 减少最小宽度，让内容更靠左 */
    margin-left: -8px; /* 整体往左移 */
}

.app-logo {
    color: #4fc3f7;
    font-size: 18px;
    flex: 0 0 auto;
}

.app-title {
    font-size: 16px;
    font-weight: 600;
    color: #1a1d23;
    letter-spacing: 1px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.header-center {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 4px;
    min-width: 0;
    overflow: hidden;
}

/* ===== 顶部 8 虚位表格（撑满中间列） ===== */
.slot-table {
    display: block;
    width: 100%;
}

.slot-table tbody {
    display: block;
    width: 100%;
}

.slot-table tr {
    display: flex;
    width: 100%;
    justify-content: flex-start;
    align-items: stretch;
    gap: 4px;                       /* 固定间距，8 格等分 */
}

.slot-cell {
    display: flex;
    flex: 1 1 0;                    /* 8 格等分剩余空间 */
    min-width: 0;
    height: 32px;
    padding: 2px 8px;
    text-align: center;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 4px;
    cursor: pointer;
    color: #a0a6b2;
    font-size: 11px;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
    -webkit-tap-highlight-color: transparent;
    user-select: none;
}

.slot-cell .cell-no {
    display: block;
    font-family: Consolas, "SF Mono", monospace;
    font-size: 9px;
    color: #8c93a3;
    line-height: 1.2;
}

.slot-cell .cell-label {
    display: block;
    font-size: 11px;
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.slot-cell.empty .cell-label::before {
    content: "虚位";
    color: #a0a6b2;
    font-style: italic;
}

@media (hover: hover) {
    .slot-cell:hover {
        background: #e8eaed;
        border-color: #4fc3f7;
        color: #1a1d23;
    }
}

.slot-cell:active {
    background: #d5d9e0;
}

.slot-cell.active {
    background: #e8f4f8;
    border-color: #4fc3f7;
    color: #4fc3f7;
    box-shadow: 0 0 8px rgba(79, 195, 247, 0.3);
}

.slot-cell.filled .cell-no {
    color: #4fc3f7;
}

/* 第3、4、5、6格（索引2、3、4、5）延伸名称并增加前后1px padding */
.slot-cell[data-index="2"],
.slot-cell[data-index="3"],
.slot-cell[data-index="4"],
.slot-cell[data-index="5"] {
    padding: 2px 9px; /* 左右各增加1px */
}

.slot-cell[data-index="2"] .cell-label,
.slot-cell[data-index="3"] .cell-label,
.slot-cell[data-index="4"] .cell-label,
.slot-cell[data-index="5"] .cell-label {
    overflow: visible;
    text-overflow: clip;
    white-space: nowrap;
}

.header-right {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    min-width: 0;
}

.header-time {
    /* 彩色渐变：青蓝 → 紫 → 粉 */
    background: linear-gradient(90deg, #4fc3f7 0%, #b388ff 50%, #ff8a80 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    font-family: Consolas, "SF Mono", "Courier New", monospace;
    font-size: 18px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    flex: 0 1 auto;
    min-width: 0;
    /* 醒目光晕 */
    text-shadow: 0 0 12px rgba(79, 195, 247, 0.4);
    filter: drop-shadow(0 0 2px rgba(179, 136, 255, 0.3));
}

/* 顶部切换按钮（横屏默认隐藏，竖屏/小屏显示） */
.header-btn {
    display: none;
    width: 40px;
    height: 40px;
    background: transparent;
    border: 1px solid transparent;
    border-radius: 8px;
    cursor: pointer;
    color: #a0a6b2;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    transition: background 0.15s, border-color 0.15s;
}

.header-btn:active {
    background: #3a3f4c;
    border-color: #4fc3f7;
}

/* 汉堡图标 */
.hamburger,
.hamburger::before,
.hamburger::after {
    display: block;
    width: 18px;
    height: 2px;
    background: currentColor;
    border-radius: 1px;
    transition: transform 0.2s;
}

.hamburger {
    position: relative;
}

.hamburger::before,
.hamburger::after {
    content: "";
    position: absolute;
    left: 0;
}

.hamburger::before { top: -5px; }
.hamburger::after  { top: 5px; }

/* 三点图标 */
.dots-icon {
    width: 18px;
    height: 18px;
    background: radial-gradient(circle, currentColor 2px, transparent 2.5px) 0 0/100% 33.33%,
                radial-gradient(circle, currentColor 2px, transparent 2.5px) 0 50%/100% 33.33%,
                radial-gradient(circle, currentColor 2px, transparent 2.5px) 0 100%/100% 33.33%;
    background-repeat: no-repeat;
}

/* ============================================================
   主体 + 三栏布局
   ============================================================ */

.app-body {
    grid-row: 2;
    display: grid;
    grid-template-columns: var(--menu-width) 1fr var(--menu-width);
    min-height: 0;
    position: relative;
}

/* ============================================================
   菜单栏通用
   ============================================================ */

.menu-bar {
    background: #ffffff;
    border-right: 1px solid #c0c6d0;
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow: hidden;
    transition: width 0.25s ease, transform 0.25s ease;
}

.menu-right {
    border-right: none;
    border-left: 1px solid #c0c6d0;
}

.menu-title {
    flex: 0 0 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    color: #8c93a3;
    background: #f0f2f5;
    border-bottom: 1px solid #c0c6d0;
    letter-spacing: 2px;
    white-space: nowrap;
}

.menu-list {
    flex: 1 1 auto;
    list-style: none;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 6px 0;
    /* iOS 流畅惯性滚动 */
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
}

.menu-list::-webkit-scrollbar {
    width: 6px;
}

.menu-list::-webkit-scrollbar-thumb {
    background: #c0c6d0;
    border-radius: 3px;
}

.menu-list::-webkit-scrollbar-thumb:hover {
    background: #a0a6b2;
}

/* ============================================================
   虚位项
   ============================================================ */

.menu-item {
    display: flex;
    align-items: center;
    gap: 8px;
    height: 36px;          /* 触摸友好，平板舒适点击高度 */
    padding: 0 10px;
    cursor: pointer;
    color: #a0a6b2;
    border-left: 2px solid transparent;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
    user-select: none;
    -webkit-touch-callout: none;
}

.menu-item .slot-index {
    display: inline-block;
    width: 26px;
    color: #8c93a3;
    font-family: Consolas, "SF Mono", monospace;
    font-size: 11px;
    text-align: right;
    flex: 0 0 26px;
}

.menu-item .slot-label {
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 13px;
}

.menu-item.empty {
    color: #8c93a3;
    font-style: italic;
}

.menu-item.empty .slot-label::before {
    content: "虚位";
    color: #a0a6b2;
}

/* 触摸设备下用 :active 替代 :hover，桌面端保留 hover */
@media (hover: hover) {
    .menu-item:hover {
        background: #e8eaed;
        color: #1a1d23;
        border-left-color: #4fc3f7;
    }
}

.menu-item:active {
    background: #d5d9e0;
}

.menu-item.active {
    background: #e8f4f8;
    color: #4fc3f7;
    border-left-color: #4fc3f7;
}

/* ============================================================
   内容区
   ============================================================ */

.content {
    display: flex;
    flex-direction: column;
    min-width: 0;
    min-height: 0;
    background: #ffffff;
    overflow: hidden;
}

.content-toolbar {
    flex: 0 0 44px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 16px;
    background: #f0f2f5;
    border-bottom: 1px solid #c0c6d0;
    gap: 12px;
}

/* 内容工具栏中的时间戳样式 */
.content-toolbar .header-time {
    flex: 0 0 auto;
    font-size: 14px;
    text-shadow: none;
    filter: none;
}

.breadcrumb {
    color: #a0a6b2;
    font-size: 13px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    flex: 1 1 auto;
    min-width: 0;
}

.btn-home {
    flex: 0 0 auto;
    padding: 6px 12px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    color: #4fc3f7;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.15s;
    white-space: nowrap;
}

.btn-home:hover {
    background: #4fc3f7;
    color: #ffffff;
    border-color: #4fc3f7;
}

.btn-home:active {
    transform: scale(0.98);
}

.toolbar-actions {
    display: flex;
    gap: 8px;
    flex: 0 0 auto;
}

/* 父项目退出按钮（顶栏，首页右侧） */
.btn-logout {
    flex: 0 0 auto;
    padding: 6px 12px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    color: #c62828;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.15s;
}

.btn-logout:hover {
    background: #c62828;
    color: #ffffff;
    border-color: #c62828;
}

.btn-logout:active {
    transform: scale(0.98);
}

.toolbar-actions button {
    padding: 8px 14px;
    background: #ffffff;
    color: #a0a6b2;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    cursor: pointer;
    font-size: 13px;
    min-height: 32px;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}

@media (hover: hover) {
    .toolbar-actions button:hover {
        background: #e8eaed;
        color: #1a1d23;
    }
}

.toolbar-actions button:active {
    background: #d5d9e0;
    transform: scale(0.98);
}

.content-inner {
    flex: 1 1 auto;
    overflow: auto;
    /* 始终预留滚动条槽：有/无滚动条的页面内容宽度一致，避免切换页面时左右边缘跳动 */
    scrollbar-gutter: stable;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    /* 页头统一留 5px，左右、底部保持 24px；relative 为自包含模块(粮油/果蔬)的绝对定位根提供包含块，防止盖住页头 */
    position: relative;
    padding: 5px 24px 24px;
}

/* 灾害与防已改为完全 DOM 内联（见 script.js renderDisaster），不再使用常驻 iframe。 */


.placeholder {
    text-align: center;
    color: #8c93a3;
    margin-top: 80px;
    padding: 0 16px;
}

/* 粮油供应模块（槽位 26）：自包含内联，撑满内容区且不外泄样式 */
.go-host {
    position: relative;
    height: 100%;
    overflow: hidden;
    padding: 0;
}

.placeholder h2 {
    color: #8c93a3;
    margin-bottom: 12px;
    font-weight: 400;
}

.placeholder p {
    line-height: 1.6;
    word-break: break-word;
}

/* ============================================================
   底部公告栏（横向跑马灯）
   ============================================================ */

.app-footer {
    grid-row: 3;
    display: flex;
    align-items: center;
    padding: 0 0 0 12px;
    height: var(--footer-h);
    background: #f0f2f5;
    border-top: 1px solid #c0c6d0;
    font-size: 12px;
    color: #a0a6b2;
    overflow: hidden;
}

.notice-tag {
    flex: 0 0 auto;
    padding: 2px 10px;
    margin-right: 12px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 700;
    font-size: 12px;
    border-radius: 3px;
    letter-spacing: 2px;
    white-space: nowrap;
}

.notice-scroll {
    flex: 1 1 auto;
    overflow: hidden;
    min-width: 0;
    position: relative;
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
    mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
}

.notice-track {
    display: flex;
    flex-wrap: nowrap;
    width: max-content;
    animation: notice-marquee 40s linear infinite;
    will-change: transform;
}

.app-footer:hover .notice-track {
    animation-play-state: paused;  /* 悬停暂停，方便阅读 */
}

.notice-content {
    flex: 0 0 auto;
    white-space: nowrap;
    padding-right: 60px;
    line-height: var(--footer-h);
    color: #8c93a3;
}

.notice-content .notice-item {
    margin-right: 60px;
    color: #a0a6b2;
}

.notice-content .notice-item .notice-time {
    color: #8c93a3;
    font-family: Consolas, "SF Mono", monospace;
    margin-right: 8px;
}

.notice-content .notice-item::before {
    content: "●";
    color: #4fc3f7;
    margin-right: 8px;
    font-size: 8px;
    vertical-align: middle;
}

@keyframes notice-marquee {
    0% {
        transform: translateX(0);
    }
    100% {
        transform: translateX(-50%);
    }
}

/* ============================================================
   公告管理面板（内容区）
   ============================================================ */

.notice-admin {
    /* 页头（公告管理标题）上方只留 5px（抵消内容区 24px padding） */
    margin-top: -19px;
}

.notice-admin h2 {
    color: #1a1d23;
    font-weight: 500;
    margin-bottom: 16px;
}

.notice-form {
    display: flex;
    gap: 8px;
    margin-bottom: 18px;
    flex-wrap: wrap;
}

.notice-form input {
    flex: 1 1 260px;
    min-width: 0;
    padding: 8px 12px;
    background: #ffffff;
    color: #1a1d23;
    border: 1px solid #c0c6d0;
    border-radius: 4px;
    font-size: 13px;
    outline: none;
}

.notice-form input:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 6px rgba(79, 195, 247, 0.25);
}

.notice-form button {
    flex: 0 0 auto;
    padding: 8px 18px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 700;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-size: 13px;
    -webkit-tap-highlight-color: transparent;
}

.notice-form button:active {
    transform: scale(0.97);
}

.notice-table {
    width: 100%;
    border-collapse: collapse;
    background: #ffffff;
    border-radius: 6px;
    overflow: hidden;
}

.notice-table th,
.notice-table td {
    padding: 10px 12px;
    text-align: left;
    border-bottom: 1px solid #c0c6d0;
    font-size: 13px;
    color: #a0a6b2;
}

.notice-table th {
    background: #f0f2f5;
    color: #8c93a3;
    font-weight: 600;
}

.notice-table tbody tr:last-child td {
    border-bottom: none;
}

.notice-table td:first-child {
    color: #8c93a3;
    font-family: Consolas, "SF Mono", monospace;
    white-space: nowrap;
    font-size: 12px;
}

.notice-del-btn {
    padding: 4px 12px;
    background: transparent;
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.4);
    border-radius: 3px;
    cursor: pointer;
    font-size: 12px;
    -webkit-tap-highlight-color: transparent;
}

@media (hover: hover) {
    .notice-del-btn:hover {
        background: rgba(255, 138, 128, 0.12);
        border-color: #ff8a80;
    }
}

/* ============================================================
   用户管理（虚拟表格）
   ============================================================ */

.user-admin {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 360px;
    /* 页头（用户管理标题）上方只留 5px（抵消内容区 24px padding） */
    margin-top: -19px;
}

.user-toolbar {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 12px;
}

.user-toolbar h2 {
    color: #1a1d23;
    font-weight: 500;
    margin: 0;
}

.user-count {
    color: #8c93a3;
    font-size: 12px;
}

.user-count b {
    color: #4fc3f7;
    font-size: 14px;
    margin: 0 2px;
}

/* 条件检索栏 */
.user-search {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 10px 12px;
    margin-bottom: 12px;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
}

.us-input {
    flex: 1 1 280px;
    min-width: 200px;
    padding: 7px 12px;
    background: #ffffff;
    color: #1a1d23;
    border: 1px solid #c0c6d0;
    border-radius: 4px;
    font-size: 13px;
    outline: none;
}

.us-input:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 6px rgba(79, 195, 247, 0.25);
}

.us-select {
    flex: 0 0 auto;
    padding: 7px 10px;
    background: #ffffff;
    color: #a0a6b2;
    border: 1px solid #c0c6d0;
    border-radius: 4px;
    font-size: 13px;
    outline: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

.us-select:focus {
    border-color: #4fc3f7;
}

.us-btn {
    flex: 0 0 auto;
    padding: 7px 18px;
    background: #e8eaed;
    color: #a0a6b2;
    border: 1px solid #c0c6d0;
    border-radius: 4px;
    cursor: pointer;
    font-size: 13px;
    -webkit-tap-highlight-color: transparent;
}

@media (hover: hover) {
    .us-btn:hover {
        background: #3a3f4c;
        color: #1a1d23;
    }
}

.us-btn:active {
    transform: scale(0.97);
}

.us-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 700;
    border: none;
}

@media (hover: hover) {
    .us-btn-primary:hover {
        background: linear-gradient(135deg, #65ccff, #3abef7);
        color: #0d1a26;
    }
}

/* 空结果提示 */
.vtable-empty {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 120px;
    color: #8c93a3;
    font-size: 13px;
    border-bottom: 1px solid #2f333d;
}

.vtable {
    flex: 1 1 auto;
    overflow: auto;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    background: #ffffff;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    min-height: 200px;
    position: relative;
}

.vtable::-webkit-scrollbar {
    height: 10px;
    width: 10px;
}

.vtable::-webkit-scrollbar-thumb {
    background: #3a3f4c;
    border-radius: 5px;
}

.vtable::-webkit-scrollbar-thumb:hover {
    background: #4a5060;
}

.vtable::-webkit-scrollbar-corner {
    background: #f0f2f5;
}

.vtable-spacer {
    position: relative;
}

.vtable-header {
    position: sticky;
    top: 0;
    z-index: 3;
    display: grid;
    height: 40px;
    background: #f0f2f5;
    border-bottom: 1px solid #4a5060;
}

.vtable-viewport {
    position: absolute;
    top: 40px;
    left: 0;
    will-change: transform;
}

.vtable-row {
    display: grid;
    height: 36px;
    border-bottom: 1px solid #2f333d;
    background: #ffffff;
}

.vtable-row.row-even {
    background: #f5f6f8;
}

/* 防篡改：身份信息被改动的行整行警示 */
.vtable-row.row-tampered {
    background: rgba(220, 38, 38, .14);
    box-shadow: inset 3px 0 0 #dc2626;
}
.vtable-row.row-tampered .cell-seal-bad {
    color: #fca5a5;
}
@media (hover: hover) {
    .vtable-row.row-tampered:hover {
        background: rgba(220, 38, 38, .22);
    }
}

/* 营销通知开关（行内可编辑） */
.us-switch {
    display: flex;
    align-items: center;
    gap: 8px;
    height: 100%;
    cursor: pointer;
    user-select: none;
}
.us-switch input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}
.us-switch-track {
    position: relative;
    width: 38px;
    height: 20px;
    border-radius: 20px;
    background: #4b5563;
    transition: background .18s ease;
    flex: 0 0 auto;
}
.us-switch-track::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 2px;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: #fff;
    transition: transform .18s ease;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .4);
}
.us-switch input:checked + .us-switch-track {
    background: #10b981;
}
.us-switch input:checked + .us-switch-track::after {
    transform: translateX(18px);
}
.us-switch input:focus-visible + .us-switch-track {
    box-shadow: 0 0 0 2px rgba(16, 185, 129, .4);
}
.us-switch-label {
    font-size: 13px;
    color: #cbd5e1;
    min-width: 38px;
}

/* 删除按钮 */
.us-del-btn {
    height: 28px;
    min-width: 52px;
    padding: 0 12px;
    border-radius: 6px;
    border: 1px solid rgba(220, 38, 38, .5);
    background: rgba(220, 38, 38, .1);
    color: #fca5a5;
    font-size: 13px;
    cursor: pointer;
    transition: background .15s ease;
}
.us-del-btn:hover {
    background: rgba(220, 38, 38, .22);
    color: #fecaca;
}

/* 删除确认弹窗 */
.us-cf-warn {
    font-size: 30px;
    text-align: center;
    margin-bottom: 10px;
    color: #fbbf24;
}
.us-cf-text {
    font-size: 14px;
    color: #e2e8f0;
    line-height: 1.7;
    text-align: center;
}
.us-cf-text b {
    color: #fca5a5;
}

@media (hover: hover) {
    .vtable-row:hover {
        background: #d5d9e0;
    }
}

.vtable-cell {
    display: flex;
    align-items: center;
    min-width: 0;
    padding: 0 10px;
    font-size: 12px;
    color: #a0a6b2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    border-right: 1px solid #2f333d;
}

.vtable-cell:last-child {
    border-right: none;
}

.vtable-th {
    color: #8c93a3;
    font-weight: 600;
    background: #f0f2f5;
    font-size: 12px;
}

.vtable-cell.mono {
    font-family: Consolas, "SF Mono", monospace;
    font-size: 11.5px;
    color: #9aa0aa;
}

/* 状态标签 */
.tag {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
    line-height: 1.4;
    white-space: nowrap;
}

.tag-green {
    background: rgba(102, 187, 106, 0.14);
    color: #66bb6a;
    border: 1px solid rgba(102, 187, 106, 0.35);
}

.tag-red {
    background: rgba(255, 138, 128, 0.14);
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.35);
}

.tag-gray {
    background: rgba(138, 147, 163, 0.14);
    color: #8c93a3;
    border: 1px solid rgba(138, 147, 163, 0.35);
}

/* ============================================================
   生产监控页 —— 与项目统一暗色主题
   ============================================================ */

.dash {
    display: flex;
    flex-direction: column;
    gap: 3px;
    /* 页头（顶部卡片）上方只留 5px（抵消内容区 24px padding） */
    margin-top: -19px;
}

/* 顶部卡 */
.dash-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
    padding: 18px 20px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
}

.dash-brand {
    display: flex;
    align-items: center;
    gap: 14px;
    min-width: 0;
}

.dash-brand-icon {
    flex: 0 0 auto;
    width: 48px;
    height: 48px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.dash-brand-icon svg {
    width: 28px;
    height: 28px;
    fill: #0d1a26;
}

.dash-brand-text h1 {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.dash-subtitle {
    font-size: 12px;
    color: #8c93a3;
    margin-top: 2px;
}

.dash-hl {
    color: #4fc3f7;
    font-weight: 600;
}

.dash-header-status {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}

.dash-live {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 14px;
    background: rgba(102, 187, 106, 0.1);
    border: 1px solid rgba(102, 187, 106, 0.35);
    border-radius: 20px;
    font-size: 12px;
    color: #66bb6a;
}

.dash-live-dot {
    width: 8px;
    height: 8px;
    background: #66bb6a;
    border-radius: 50%;
    animation: dash-blink 1.5s infinite;
}

@keyframes dash-blink {
    50% { opacity: 0.3; }
}

.dash-cta {
    padding: 10px 22px;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    border: none;
    border-radius: 8px;
    font-weight: 700;
    font-size: 13px;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
    -webkit-tap-highlight-color: transparent;
    transition: transform 0.15s;
}

@media (hover: hover) {
    .dash-cta:hover {
        transform: translateY(-2px);
    }
}

.dash-cta:active {
    transform: scale(0.97);
}

.dash-cta.started {
    background: #66bb6a;
    color: #0d1a26;
}

/* 第一行：四个功能卡 */
.dash-feature-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 16px;
}

.dash-feature-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 18px;
    position: relative;
    overflow: hidden;
    transition: border-color 0.2s, transform 0.2s;
}

@media (hover: hover) {
    .dash-feature-card:hover {
        transform: translateY(-3px);
        border-color: #4fc3f7;
    }
}

.dash-feature-card::before {
    content: "";
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 2px;
    background: linear-gradient(90deg, transparent, #4fc3f7, transparent);
}

.dash-feature-icon {
    width: 40px;
    height: 40px;
    background: rgba(79, 195, 247, 0.12);
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 12px;
    color: #4fc3f7;
}

.dash-feature-icon svg {
    width: 22px;
    height: 22px;
    fill: currentColor;
}

.dash-feature-card h3 {
    font-size: 15px;
    color: #1a1d23;
    margin-bottom: 6px;
}

.dash-feature-card p {
    font-size: 12px;
    color: #8c93a3;
    line-height: 1.5;
}

.dash-feature-tag {
    display: inline-block;
    margin-top: 10px;
    padding: 2px 10px;
    background: rgba(79, 195, 247, 0.1);
    border: 1px solid rgba(79, 195, 247, 0.3);
    border-radius: 10px;
    font-size: 10px;
    color: #4fc3f7;
}

/* 第二行：核心功能 + 评估 */
.dash-main-grid {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 16px;
}

.dash-core,
.dash-eval,
.dash-trending {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 18px;
}

.dash-section-title {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 16px;
    font-size: 14px;
    color: #1a1d23;
    font-weight: 600;
}

.dash-section-title::before {
    content: "";
    width: 3px;
    height: 16px;
    background: linear-gradient(180deg, #4fc3f7, #29b6f6);
    border-radius: 2px;
}

.dash-icon-grid {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 10px;
}

.dash-icon-cell {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 14px 8px;
    text-align: center;
    cursor: pointer;
    transition: background 0.2s, border-color 0.2s, transform 0.2s;
    -webkit-tap-highlight-color: transparent;
}

@media (hover: hover) {
    .dash-icon-cell:hover {
        background: #d5d9e0;
        border-color: #4fc3f7;
        transform: scale(1.04);
    }
}

.dash-icon-cell.flash {
    background: rgba(79, 195, 247, 0.25);
    border-color: #4fc3f7;
}

.dash-icon-cell .icon {
    font-size: 26px;
    margin-bottom: 6px;
    display: block;
}

.dash-icon-cell .label {
    font-size: 11px;
    color: #8c93a3;
}

/* 评估面板 */
.dash-score-display {
    text-align: center;
    padding: 12px 0 16px;
}

.dash-score-number {
    font-size: 44px;
    font-weight: 700;
    color: #4fc3f7;
    font-family: Consolas, "SF Mono", monospace;
}

.dash-score-label {
    font-size: 11px;
    color: #8c93a3;
    letter-spacing: 1px;
    margin-top: 4px;
}

.dash-score-row {
    margin-bottom: 14px;
}

.dash-score-row-info {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    margin-bottom: 5px;
    color: #8c93a3;
}

.dash-score-track {
    width: 100%;
    height: 6px;
    background: #ffffff;
    border-radius: 3px;
    overflow: hidden;
}

.dash-score-fill {
    height: 100%;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    border-radius: 3px;
    transition: width 0.8s ease;
}

/* 第三行：实时榜单 */
.dash-trending-list {
    display: grid;
    gap: 10px;
}

.dash-repo-item {
    display: grid;
    grid-template-columns: auto 1fr auto auto;
    gap: 14px;
    align-items: center;
    padding: 11px 16px;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    transition: background 0.2s, border-color 0.2s, transform 0.2s;
}

@media (hover: hover) {
    .dash-repo-item:hover {
        background: #d5d9e0;
        border-color: #a0a6b2;
        transform: translateX(4px);
    }
}

.dash-repo-rank {
    width: 28px;
    height: 28px;
    background: rgba(79, 195, 247, 0.15);
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 700;
    color: #4fc3f7;
}

.dash-repo-info {
    min-width: 0;
}

.dash-repo-name {
    font-size: 14px;
    color: #1a1d23;
    font-weight: 600;
    margin-bottom: 4px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.dash-lang-color {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    display: inline-block;
    flex: 0 0 auto;
}

.dash-repo-desc {
    font-size: 12px;
    color: #8c93a3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dash-repo-stats {
    display: flex;
    gap: 12px;
    font-size: 12px;
}

.dash-repo-stat {
    display: flex;
    align-items: center;
    gap: 4px;
    color: #8c93a3;
    white-space: nowrap;
}

.dash-repo-trend {
    padding: 4px 10px;
    background: rgba(102, 187, 106, 0.12);
    border: 1px solid rgba(102, 187, 106, 0.3);
    border-radius: 10px;
    font-size: 11px;
    color: #66bb6a;
    font-weight: 600;
    white-space: nowrap;
}

.dash-repo-trend.down {
    background: rgba(255, 138, 128, 0.12);
    border-color: rgba(255, 138, 128, 0.3);
    color: #ff8a80;
}

/* 第四行：特性条 */
.dash-strip {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 12px;
}

.dash-strip-cell {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 16px;
    text-align: center;
    transition: border-color 0.2s;
}

@media (hover: hover) {
    .dash-strip-cell:hover {
        border-color: #4fc3f7;
    }
}

.dash-strip-icon {
    font-size: 26px;
    margin-bottom: 8px;
}

.dash-strip-cell h4 {
    font-size: 12px;
    color: #1a1d23;
    margin-bottom: 4px;
}

.dash-strip-cell p {
    font-size: 10px;
    color: #8c93a3;
}

/* 底部状态栏 */
.dash-statusbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 12px 18px;
    font-size: 12px;
}

.dash-status-left,
.dash-status-right {
    display: flex;
    gap: 18px;
    align-items: center;
    flex-wrap: wrap;
}

.dash-status-item {
    display: flex;
    align-items: center;
    gap: 6px;
    color: #8c93a3;
}

.dash-status-item b {
    color: #4fc3f7;
    font-weight: 600;
}

.dash-status-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #66bb6a;
}

/* 生产监控响应式 */
@media (max-width: 1100px) {
    .dash-feature-row {
        grid-template-columns: repeat(2, 1fr);
    }
    .dash-main-grid {
        grid-template-columns: 1fr;
    }
    .dash-strip {
        grid-template-columns: repeat(2, 1fr);
    }
    .dash-icon-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width: 600px) {
    .dash-feature-row,
    .dash-strip {
        grid-template-columns: 1fr;
    }
    .dash-icon-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    .dash-repo-stats {
        display: none;
    }
}

/* ============================================================
   抽屉遮罩层
   ============================================================ */

.drawer-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
    z-index: 55;
    opacity: 0;
    transition: opacity 0.25s;
    pointer-events: none;
}

.drawer-overlay.show {
    opacity: 1;
    pointer-events: auto;
}

/* ============================================================
   断点 1：平板横屏（≥1024px）
   保留三栏布局，菜单略窄
   ============================================================ */

@media (max-width: 1280px) and (orientation: landscape) {
    :root {
        --menu-width: 120px;
    }
    .app-title {
        font-size: 15px;
    }
}

/* ============================================================
   断点 2：平板竖屏（< 1024px）
   右菜单变抽屉，左菜单收窄为图标条
   补充：竖屏 1024-1100（iPad Pro 11/12.9 竖屏 CSS 宽 1024）同样收窄，
   否则三栏 240+240 会把内容区挤到 544px
   ============================================================ */

@media (max-width: 1023px), (max-width: 1100px) and (orientation: portrait) {
    :root {
        --menu-width: 64px;
    }

    /* 显示顶部切换按钮 */
    .header-btn {
        display: flex;
    }

    /* 左侧菜单脱离文档流，变为左侧浮动抽屉（宽度自适应内容） */
    .menu-left {
        position: fixed;
        top: calc(var(--header-h) + var(--safe-top));
        left: 0;
        bottom: calc(var(--footer-h) + var(--safe-bottom));
        width: auto;
        min-width: 180px;
        max-width: 85vw;
        border-right: 1px solid #c0c6d0;
        box-shadow: 4px 0 20px rgba(0, 0, 0, 0.4);
        transform: translateX(-100%);
        z-index: 60;
        will-change: transform;
    }

    .menu-left.open {
        transform: translateX(0);
    }

    /* 左菜单恢复完整文字显示 */
    .menu-left .slot-label {
        display: block;
        white-space: nowrap; /* 防止文字换行，确保宽度自适应 */
    }
    .menu-left .menu-item {
        justify-content: flex-start;
        padding: 0 14px;
        gap: 10px;
        white-space: nowrap; /* 防止文字换行 */
    }
    .menu-left .slot-index {
        text-align: right;
        width: 26px;
        flex: 0 0 26px;
    }
    .menu-left .menu-title {
        font-size: 13px;
        letter-spacing: 2px;
        white-space: nowrap; /* 防止标题换行 */
    }

    /* 右侧菜单脱离文档流，变为右侧浮动抽屉（宽度自适应内容） */
    .menu-right {
        position: fixed;
        top: calc(var(--header-h) + var(--safe-top));
        right: 0;
        bottom: calc(var(--footer-h) + var(--safe-bottom));
        width: auto;
        min-width: 180px;
        max-width: 85vw;
        border-left: 1px solid #c0c6d0;
        box-shadow: -4px 0 20px rgba(0, 0, 0, 0.4);
        transform: translateX(100%);
        z-index: 60;
        will-change: transform;
    }

    .menu-right.open {
        transform: translateX(0);
    }

    .app-body {
        grid-template-columns: 1fr; /* 左菜单已变抽屉，主内容区占满全宽 */
    }

    .app-title {
        font-size: 15px;
    }

    /* 平板竖屏：保留顶部 8 虚位表格，铺满均匀分散 */
    .slot-table {
        width: 100%;
    }

    .slot-cell {
        height: 28px;
        padding: 1px 2px;
    }

    .slot-cell .cell-no {
        font-size: 8px;
    }

    .slot-cell .cell-label {
        font-size: 10px;
    }

    .app-header {
        grid-template-columns: minmax(180px, 1fr) auto 1fr;  /* 左:最小 180px 对称布局 */
    }

    /* 平板竖屏：时间字号略减但保持醒目 */
    .header-time {
        font-size: 14px;
    }
}

/* ============================================================
   断点 3：小屏（< 600px，小平板/手机竖屏）
   左菜单也变抽屉
   ============================================================ */

@media (max-width: 599px) {
    :root {
        --header-h: 56px;
        --footer-h: 30px;
    }

    /* 小屏：顶部 8 虚位表格移到标题栏下方独立一行 */
    .app-header {
        grid-template-columns: 1fr auto;
        grid-template-rows: 1fr auto;
        height: auto;
        min-height: var(--header-h);
        padding-bottom: 4px;
    }

    .header-left {
        grid-row: 1;
        grid-column: 1;
    }

    .header-center {
        grid-row: 2;
        grid-column: 1 / -1;
        padding: 2px 8px;
        order: 3;
    }

    .header-right {
        grid-row: 1;
        grid-column: 2;
    }

    .slot-table {
        max-width: 100%;
    }

    .slot-cell {
        height: 24px;
        padding: 1px 1px;
    }

    .slot-cell .cell-no {
        font-size: 8px;
    }

    .slot-cell .cell-label {
        font-size: 9px;
    }

    /* 小屏：时间栏改为两行显示，避免挤压按钮 */
    .header-right {
        flex-direction: column;
        align-items: flex-end;
        gap: 0;
    }

    .header-time {
        font-size: 12px;
        font-weight: 700;
        line-height: 1.4;
        white-space: normal;
        text-align: right;
        overflow: visible;
    }

    /* 小屏分行显示：日期+星期 / 时分秒 */
    .time-line {
        display: block;
        white-space: nowrap;
    }

    .app-body {
        grid-template-columns: 1fr;
    }

    .menu-left {
        position: fixed;
        top: calc(var(--header-h) + var(--safe-top));
        left: 0;
        bottom: calc(var(--footer-h) + var(--safe-bottom));
        width: auto;
        min-width: 180px;
        max-width: 85vw;
        border-right: 1px solid #c0c6d0;
        box-shadow: 4px 0 20px rgba(0, 0, 0, 0.4);
        transform: translateX(-100%);
        z-index: 60;
        will-change: transform;
    }

    .menu-left.open {
        transform: translateX(0);
    }

    /* 左菜单恢复完整文字显示 */
    .menu-left .slot-label {
        display: block;
        white-space: nowrap; /* 防止文字换行，确保宽度自适应 */
    }
    .menu-left .menu-item {
        justify-content: flex-start;
        padding: 0 14px;
        gap: 10px;
        white-space: nowrap; /* 防止文字换行 */
    }
    .menu-left .slot-index {
        text-align: right;
        width: 26px;
        flex: 0 0 26px;
    }
    .menu-left .menu-title {
        font-size: 13px;
        letter-spacing: 2px;
        white-space: nowrap; /* 防止标题换行 */
    }

    /* 工具栏按钮变大 */
    .toolbar-actions button {
        padding: 10px 16px;
        font-size: 13px;
    }

    .content-inner {
        padding: 16px;
    }

    .placeholder {
        margin-top: 40px;
    }

    .app-footer {
        font-size: 11px;
        padding: 0 0 0 10px;
    }

    .notice-tag {
        margin-right: 8px;
        padding: 2px 8px;
        letter-spacing: 1px;
    }

    .notice-track {
        animation-duration: 30s;
    }
}

/* ============================================================
   断点 4：超宽横屏（≥1440px，iPad Pro 12.9 横屏 / 桌面）
   菜单略宽，更舒适
   ============================================================ */

@media (min-width: 1440px) {
    :root {
        --menu-width: 136px;
    }
    .content-inner {
        padding: 32px;
    }
}

/* ============================================================
   横竖屏切换优化
   ============================================================ */

@media (orientation: portrait) and (min-width: 600px) and (max-width: 1023px) {
    /* 平板竖屏：内容区 padding 略减 */
    .content-inner {
        padding: 20px;
    }
    /* 自动发包：竖屏下保持全宽，不偏移；容器 overflow:hidden 防止左菜单溢出遮挡 */
    .fb-app {
        margin-left: 0;
        height: calc(100dvh - 160px);
    }
    /* 管理后台侧栏在窄屏收起为图标模式 */
    .fb-side {
        width: 52px;
        padding: 8px 4px;
    }
    .fb-side .fb-sitem span,
    .fb-side .fb-side-logo {
        font-size: 0;
    }
    .fb-side .fb-sitem {
        justify-content: center;
        padding: 10px 4px;
        gap: 0;
    }
}

/* ============================================================
   打印样式（避免用户误打印时浪费纸张）
   ============================================================ */

@media print {
    .app-header,
    .menu-bar,
    .app-footer,
    .content-toolbar,
    .drawer-overlay {
        display: none !important;
    }
    .content-inner {
        padding: 0;
        color: #000;
        background: #fff;
    }
}

/* ============================================================
   记事本 · 事件倒计时（顶部 07，移植页，亮色主题）
   ============================================================ */

.cd-app {
    --cd-surface: #ffffff;
    --cd-surface2: #f5f7fa;
    --cd-border: #d1d5db;
    --cd-text: #1f2937;
    --cd-muted: #6b7280;
    --cd-brand: #2563eb;
    --cd-brand2: #3b82f6;
    --cd-acc: #2563eb;
    --cd-warn: #f59e0b;
    --cd-danger: #ef4444;
    color-scheme: light;
    /* 全宽铺满：左右边缘与生产监控页（.dash）一致，页头上间距保持 5px */
    margin: -19px 0 0;
    color: var(--cd-text);
    font-size: 14px;
}

.cd-top {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    padding: 4px 0 14px;
}

.cd-brand {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

.cd-logo {
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: 12px;
    display: grid;
    place-items: center;
    color: #ffffff;
    background: linear-gradient(135deg, var(--cd-brand), var(--cd-brand2));
}

.cd-logo svg {
    width: 24px;
    height: 24px;
}

.cd-title h1 {
    font-size: 20px;
    font-weight: 700;
    color: #1f2937;
}

.cd-toolbar {
    margin-left: auto;
    display: flex;
    gap: 8px;
}

.cd-tbtn {
    width: 38px;
    height: 38px;
    border-radius: 11px;
    cursor: pointer;
    display: grid;
    place-items: center;
    color: var(--cd-muted);
    background: var(--cd-surface);
    border: 1px solid var(--cd-border);
    transition: 0.2s;
    -webkit-tap-highlight-color: transparent;
}

@media (hover: hover) {
    .cd-tbtn:hover {
        color: #ffffff;
        background: var(--cd-brand);
    }
}

.cd-tbtn svg {
    width: 18px;
    height: 18px;
}

.cd-tbtn.off {
    opacity: 0.5;
}

/* 添加表单卡片 */
.cd-addcard {
    background: var(--cd-surface);
    border: 1px solid var(--cd-border);
    border-radius: 14px;
    padding: 16px;
    margin-bottom: 14px;
}

.cd-addform {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    align-items: center;
}

.cd-field {
    position: relative;
    flex: 1;
    min-width: 180px;
}

.cd-field label {
    position: absolute;
    top: -8px;
    left: 10px;
    font-size: 11px;
    padding: 0 5px;
    color: var(--cd-brand);
    background: var(--cd-surface);
    border-radius: 4px;
    letter-spacing: 0.3px;
}

.cd-field input {
    width: 100%;
    padding: 11px 13px;
    font-size: 14px;
    font-family: inherit;
    color: var(--cd-text);
    background: var(--cd-surface2);
    border: 1px solid var(--cd-border);
    border-radius: 11px;
    outline: none;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.cd-field input:focus {
    border-color: var(--cd-brand);
    box-shadow: 0 0 0 3px rgba(79, 195, 247, 0.18);
}

.cd-field input::placeholder {
    color: var(--cd-muted);
}

.cd-add-time {
    flex: 0 1 250px;
    min-width: 220px;
}

.cd-field-fixed {
    flex: 0 1 205px;
    min-width: 180px;
}

.cd-field-fixed input {
    color: var(--cd-muted);
    cursor: default;
    font-family: Consolas, "JetBrains Mono", monospace;
    letter-spacing: 0.2px;
}

.cd-field-fixed input:focus {
    border-color: var(--cd-border);
    box-shadow: none;
}

.cd-btn-add {
    height: 42px;
    padding: 0 22px;
    border: none;
    border-radius: 11px;
    cursor: pointer;
    background: linear-gradient(135deg, var(--cd-brand), var(--cd-brand2));
    color: #ffffff;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 0.5px;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: 0.2s;
    font-family: inherit;
    -webkit-tap-highlight-color: transparent;
}

@media (hover: hover) {
    .cd-btn-add:hover {
        filter: brightness(1.08);
    }
}

.cd-btn-add:active {
    transform: scale(0.98);
}

.cd-btn-add svg {
    width: 16px;
    height: 16px;
}

.cd-presets {
    display: flex;
    gap: 7px;
    margin-top: 11px;
    flex-wrap: wrap;
    align-items: center;
}

.cd-chip {
    padding: 5px 11px;
    font-size: 12.5px;
    border-radius: 999px;
    cursor: pointer;
    border: 1px solid var(--cd-border);
    color: var(--cd-muted);
    background: transparent;
    transition: 0.15s;
    font-family: inherit;
    -webkit-tap-highlight-color: transparent;
}

@media (hover: hover) {
    .cd-chip:hover {
        color: var(--cd-brand);
        border-color: var(--cd-brand);
        background: rgba(79, 195, 247, 0.08);
    }
}

/* 事件列表 */
.cd-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.cd-ev {
    --acc: var(--cd-acc);
    position: relative;
    overflow: hidden;
    display: grid;
    grid-template-columns: 1fr auto auto;
    gap: 16px;
    align-items: center;
    padding: 16px 18px 16px 24px;
    background: var(--cd-surface);
    border: 1px solid var(--cd-border);
    border-radius: 14px;
    transition: transform 0.18s, border-color 0.18s, background 0.3s;
}

.cd-ev::before {
    content: "";
    position: absolute;
    left: 0;
    top: 14px;
    bottom: 14px;
    width: 4px;
    border-radius: 4px;
    background: var(--acc);
    transition: 0.3s;
}

@media (hover: hover) {
    .cd-ev:hover {
        transform: translateY(-2px);
        border-color: var(--cd-brand);
    }
}

.cd-ev.is-urgent {
    --acc: var(--cd-warn);
}

.cd-ev.is-exp {
    --acc: var(--cd-danger);
    background: rgba(255, 138, 128, 0.07);
    border-color: rgba(255, 138, 128, 0.35);
}

@keyframes cd-expRing {
    0%, 100% { box-shadow: 0 0 0 0 rgba(255, 138, 128, 0.25); }
    50% { box-shadow: 0 0 0 7px transparent; }
}

.cd-ev.is-exp.alert {
    animation: cd-expRing 1.6s infinite;
}

.cd-ev-info {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.cd-ev-name {
    font-size: 16px;
    font-weight: 600;
    word-break: break-word;
    color: var(--cd-text);
}

.cd-ev-sub {
    display: flex;
    gap: 7px;
    flex-wrap: wrap;
}

.cd-pill {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11.5px;
    padding: 3.5px 9px;
    border-radius: 999px;
    white-space: nowrap;
    background: var(--cd-surface2);
    border: 1px solid var(--cd-border);
    color: var(--cd-muted);
}

.cd-pill svg {
    width: 11px;
    height: 11px;
}

.cd-pill.cd-pill-fixed,
.cd-pill.cd-pill-target {
    font-family: Consolas, "JetBrains Mono", monospace;
    letter-spacing: 0.4px;
}

.cd-pill.cd-pill-fixed {
    color: var(--cd-text);
    font-size: 13px;
    padding: 5px 12px;
    align-self: flex-start;
    width: fit-content;
    max-width: 100%;
}

.cd-pill.cd-pill-target {
    font-size: 15px;
    font-weight: 700;
    color: var(--cd-text);
    padding: 7px 15px;
    letter-spacing: 0.6px;
}

.cd-pill.cd-pill-target svg {
    width: 15px;
    height: 15px;
    color: var(--cd-brand);
}

.cd-ev-cd {
    text-align: right;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.cd-cd-main {
    font-size: 23px;
    font-weight: 800;
    color: var(--acc);
    line-height: 1.15;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.5px;
    font-family: Consolas, "JetBrains Mono", "SF Mono", monospace;
    transition: color 0.3s;
}

.cd-ev.is-exp .cd-cd-main {
    color: var(--cd-danger);
}

.cd-ev-actions {
    display: flex;
    gap: 7px;
}

.cd-btnic {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    cursor: pointer;
    display: grid;
    place-items: center;
    color: var(--cd-muted);
    border: 1px solid var(--cd-border);
    background: var(--cd-surface2);
    transition: 0.18s;
    -webkit-tap-highlight-color: transparent;
}

.cd-btnic svg {
    width: 16px;
    height: 16px;
}

@media (hover: hover) {
    .cd-btnic:hover {
        color: #ffffff;
        transform: translateY(-1px);
    }
    .cd-btnic.edit:hover {
        background: var(--cd-brand);
        border-color: var(--cd-brand);
        color: #ffffff;
    }
    .cd-btnic.renew:hover {
        background: var(--cd-warn);
        border-color: var(--cd-warn);
        color: #ffffff;
    }
    .cd-btnic.del:hover {
        background: var(--cd-danger);
        border-color: var(--cd-danger);
        color: #ffffff;
    }
}

/* 空状态 */
.cd-empty {
    text-align: center;
    padding: 60px 20px;
    color: var(--cd-muted);
}

.cd-empty svg {
    width: 54px;
    height: 54px;
    opacity: 0.35;
    margin-bottom: 14px;
}

/* 对话框 */
.cd-app dialog.cd-dlg {
    position: fixed;
    inset: 0;
    margin: auto;
    width: min(430px, calc(100vw - 32px));
    max-height: calc(100vh - 48px);
    overflow: auto;
    border: 1px solid var(--cd-border);
    border-radius: 16px;
    background: var(--cd-surface);
    color: var(--cd-text);
    padding: 22px;
    box-shadow: 0 24px 60px rgba(0, 0, 0, 0.15);
    animation: cd-dlgIn 0.2s ease;
}

.cd-app dialog.cd-dlg::backdrop {
    background: rgba(3, 6, 16, 0.55);
    backdrop-filter: blur(3px);
}

@keyframes cd-dlgIn {
    from { opacity: 0; transform: scale(0.96) translateY(8px); }
    to { opacity: 1; transform: none; }
}

.cd-dlg-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 16px;
}

.cd-dlg-head h3 {
    font-size: 17px;
    font-weight: 700;
    color: #1f2937;
}

.cd-dlg-head svg {
    width: 20px;
    height: 20px;
    color: var(--cd-brand);
}

.cd-dlg-body {
    display: flex;
    flex-direction: column;
    gap: 13px;
}

.cd-dlg-body .cd-field input {
    padding: 10px 12px;
}

.cd-dlg-offset {
    display: flex;
    gap: 7px;
    flex-wrap: wrap;
    margin-top: 2px;
}

.cd-dlg-actions {
    display: flex;
    justify-content: flex-end;
    gap: 9px;
    margin-top: 18px;
}

.cd-dlg-actions button {
    padding: 9px 18px;
    border-radius: 10px;
    font-size: 14px;
    cursor: pointer;
    border: 1px solid var(--cd-border);
    background: var(--cd-surface2);
    color: var(--cd-text);
    transition: 0.15s;
    font-family: inherit;
}

.cd-dlg-actions .ok {
    background: linear-gradient(135deg, var(--cd-brand), var(--cd-brand2));
    border: none;
    color: #ffffff;
    font-weight: 700;
}

.cd-dlg-actions .danger {
    background: var(--cd-danger);
    border: none;
    color: #ffffff;
    font-weight: 700;
}

@media (hover: hover) {
    .cd-dlg-actions button:hover {
        filter: brightness(1.12);
    }
}

.cd-cdlg-icon {
    color: var(--cd-danger) !important;
}

.cd-cdlg-text {
    font-size: 14px;
    color: var(--cd-muted);
    line-height: 1.9;
}

.cd-cdlg-text b {
    color: var(--cd-text);
}

.cd-cdlg-text .cd-meta {
    display: block;
    margin-top: 8px;
    font-size: 12.5px;
    opacity: 0.85;
}

/* 校验失败：红框 + 抖动 */
.cd-invalid,
.cd-invalid:focus {
    border-color: var(--cd-danger) !important;
    box-shadow: 0 0 0 3px rgba(255, 138, 128, 0.26) !important;
    animation: cd-shake 0.35s ease;
}

@keyframes cd-shake {
    0%, 100% { transform: translateX(0); }
    25% { transform: translateX(-4px); }
    75% { transform: translateX(4px); }
}

/* 窄窗口适配 */
@media (max-width: 680px) {
    .cd-ev {
        grid-template-columns: 1fr auto;
        gap: 12px;
        padding-left: 20px;
    }
    .cd-ev-actions {
        grid-column: 1 / -1;
        justify-content: flex-end;
        padding-top: 2px;
    }
    .cd-cd-main {
        font-size: 19px;
    }
}

/* ============================================================
   今天气 · 全国天气预报（顶部 02，Open-Meteo，项目暗色主题）
   ============================================================ */

.wt-app {
    /* 全宽铺满：左右边缘与生产监控页一致，页头上间距 5px */
    margin: -19px 0 0;
    color: #1a1d23;
}

.wt-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 24px 28px 28px;
}

.wt-select-area {
    display: flex;
    gap: 12px;
    margin-bottom: 26px;
    flex-wrap: wrap;
    align-items: center;
}

.wt-select-area select {
    color-scheme: dark;
    padding: 10px 14px;
    border-radius: 10px;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #1a1d23;
    font-size: 15px;
    font-family: inherit;
    outline: none;
    min-width: 200px;
    cursor: pointer;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.wt-select-area select:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 0 3px rgba(79, 195, 247, 0.18);
}

.wt-title-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    flex-wrap: wrap;
}

.wt-city-name {
    font-size: 28px;
    font-weight: 700;
    color: #1a1d23;
}

.wt-update {
    color: #8c93a3;
    font-size: 13px;
    font-family: Consolas, monospace;
}

.wt-temp-big {
    font-size: 108px;
    font-weight: 300;
    line-height: 1.05;
    margin: 10px 0 4px;
    color: #4fc3f7;
    font-variant-numeric: tabular-nums;
    letter-spacing: -2px;
    text-align: center;
}

.wt-temp-big span {
    font-size: 40px;
    font-weight: 400;
    margin-left: 4px;
    color: #81d4fa;
}

.wt-desc {
    font-size: 24px;
    color: #a0a6b2;
    margin-bottom: 28px;
    text-align: center;
}

.wt-info-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
    margin-bottom: 28px;
}

.wt-info-item {
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    padding: 18px 20px;
    border-radius: 12px;
    min-width: 0;
}

.wt-info-label {
    font-size: 13px;
    color: #8c93a3;
}

.wt-info-val {
    font-size: 22px;
    margin-top: 6px;
    color: #1a1d23;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.wt-info-text {
    font-size: 18px;
    color: #4fc3f7;
}

.wt-forecast-title {
    font-size: 18px;
    font-weight: 600;
    color: #1a1d23;
    margin-bottom: 14px;
}

.wt-forecast-wrap {
    display: flex;
    gap: 12px;
    overflow-x: auto;
    padding-bottom: 10px;
    -webkit-overflow-scrolling: touch;
}

.wt-forecast-wrap::-webkit-scrollbar {
    height: 6px;
}

.wt-forecast-wrap::-webkit-scrollbar-thumb {
    background: #3a3f4c;
    border-radius: 3px;
}

.wt-day-item {
    /* 默认等分铺满：7 张卡片等宽分散，首尾贴边，不溢出 */
    flex: 1 1 0;
    min-width: 0;
    text-align: center;
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px 6px;
    transition: border-color 0.15s;
}

.wt-day-item:first-child {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.08);
}

.wt-day-name {
    font-size: 15px;
    font-weight: 600;
    color: #1a1d23;
}

.wt-day-week {
    font-size: 12px;
    color: #8c93a3;
    margin: 2px 0 8px;
}

.wt-day-item:first-child .wt-day-week {
    color: #4fc3f7;
}

.wt-day-desc {
    font-size: 13px;
    color: #a0a6b2;
    margin-bottom: 8px;
}

.wt-day-temp {
    font-size: 14px;
    color: #1a1d23;
    font-family: Consolas, monospace;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.wt-loading,
.wt-error {
    text-align: center;
    padding: 70px 20px;
    font-size: 17px;
    color: #8c93a3;
}

.wt-error {
    color: #ff8a80;
}

/* 平板/窄窗口响应式 */
@media (max-width: 1100px) {
    .wt-info-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    .wt-temp-big {
        font-size: 84px;
    }
    .wt-temp-big span {
        font-size: 32px;
    }
    .wt-city-name {
        font-size: 24px;
    }
    .wt-desc {
        font-size: 20px;
    }
    /* 窄窗口：卡片等分后宽度收窄，温度文本缩小并允许折行，避免溢出产生横向滚动条 */
    .wt-day-item {
        padding: 12px 4px;
    }
    .wt-day-desc {
        font-size: 12px;
    }
    .wt-day-temp {
        font-size: 11px;
        white-space: normal;
        word-break: break-all;
        line-height: 1.35;
    }
}

@media (max-width: 600px) {
    .wt-card {
        padding: 18px 16px 20px;
    }
    .wt-select-area select {
        min-width: 0;
        flex: 1 1 140px;
        font-size: 14px;
    }
    .wt-temp-big {
        font-size: 64px;
    }
    .wt-temp-big span {
        font-size: 26px;
    }
    .wt-desc {
        font-size: 18px;
        margin-bottom: 20px;
    }
    .wt-info-val {
        font-size: 18px;
    }
    .wt-day-item {
        min-width: 84px;
    }
}

/* ============================================================
   今天气 · 底部纯文字汇总卡
   ============================================================ */

.wt-summary {
    margin-top: 12px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-left: 3px solid #4fc3f7;
    border-radius: 14px;
    padding: 18px 24px 16px;
}

.wt-sum-title {
    font-size: 15px;
    font-weight: 600;
    color: #1a1d23;
    margin-bottom: 10px;
    letter-spacing: 0.5px;
}

.wt-sum-line {
    font-size: 14px;
    color: #a0a6b2;
    line-height: 1.9;
}

.wt-sum-line b {
    color: #4fc3f7;
    font-weight: 700;
    font-family: Consolas, monospace;
    font-variant-numeric: tabular-nums;
}

.wt-sum-tips {
    color: #ffb74d;
}

.wt-sum-time {
    margin-top: 10px;
    font-size: 12px;
    color: #8c93a3;
    font-family: Consolas, monospace;
}

.wt-sum-loading {
    text-align: center;
    color: #8c93a3;
    font-size: 14px;
    padding: 14px 0;
}

@media (max-width: 600px) {
    .wt-summary {
        padding: 14px 16px 12px;
    }
    .wt-sum-line {
        font-size: 13px;
        line-height: 1.8;
    }
}

/* ============================================================
   本周计划 · 顶部 03（项目暗色主题）
   ============================================================ */

.wp-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
    color-scheme: dark;
}

.wp-app ::placeholder {
    color: #8c93a3;
}

.wp-header {
    text-align: center;
    padding: 0 8px 18px; /* 顶部无内边距：标题距工具栏正好 5px */
}

.wp-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
    margin-bottom: 6px;
}

.wp-time-range {
    color: #8c93a3;
    font-size: 14px;
    margin-bottom: 12px;
}

.wp-time-range span {
    color: #4fc3f7;
    font-family: Consolas, monospace;
    font-variant-numeric: tabular-nums;
}

.wp-header-ctrl {
    display: flex;
    gap: 10px;
    justify-content: center;
    flex-wrap: wrap;
}

.wp-header-ctrl select {
    color-scheme: dark;
    padding: 7px 12px;
    border-radius: 8px;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #1a1d23;
    font-size: 13px;
    font-family: inherit;
    outline: none;
    cursor: pointer;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.wp-header-ctrl select:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 0 3px rgba(79, 195, 247, 0.18);
}

#wp-clear-btn {
    padding: 7px 14px;
    border-radius: 8px;
    border: 1px solid rgba(255, 138, 128, 0.35);
    background: rgba(232, 74, 95, 0.12);
    color: #ff8a80;
    font-size: 13px;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s;
}

#wp-clear-btn:hover {
    background: rgba(232, 74, 95, 0.25);
}

.wp-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 20px 24px 22px;
    margin-bottom: 12px;
}

.wp-card h2 {
    font-size: 17px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 16px;
}

/* 每日任务 */
.wp-day-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 12px;
}

.wp-day-card {
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 14px 16px;
    min-width: 0;
}

.wp-day-card h3 {
    color: #4fc3f7;
    margin-bottom: 12px;
    font-size: 15px;
    font-weight: 600;
}

.wp-todo-item {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-bottom: 8px;
}

.wp-todo-item:last-child {
    margin-bottom: 0;
}

.wp-todo-item input[type="checkbox"] {
    margin-top: 3px;
    width: 15px;
    height: 15px;
    accent-color: #4fc3f7;
    cursor: pointer;
    flex: 0 0 auto;
}

.wp-todo-item input[type="text"] {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: none;
    border-bottom: 1px dashed #4a5060;
    padding: 3px 0;
    font-size: 13px;
    color: #1a1d23;
    font-family: inherit;
    outline: none;
    transition: border-color 0.15s;
}

.wp-todo-item input[type="text"]:focus {
    border-bottom-color: #4fc3f7;
}

/* 总结复盘 */
.wp-review-label {
    font-size: 13px;
    color: #8c93a3;
    margin-top: 4px;
}

.wp-review textarea {
    width: 100%;
    min-height: 68px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    font-size: 13px;
    color: #1a1d23;
    font-family: inherit;
    resize: vertical;
    outline: none;
    margin: 6px 0 12px;
    transition: border-color 0.15s;
}

.wp-review textarea:last-of-type {
    margin-bottom: 0;
}

.wp-review textarea:focus {
    border-color: #4fc3f7;
}

/* 清空确认弹窗（替代原生 confirm） */
.wp-confirm {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.55);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
}

.wp-confirm[hidden] {
    display: none;
}

.wp-confirm-box {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 24px 28px;
    max-width: 340px;
    width: calc(100% - 48px);
    text-align: center;
}

.wp-confirm-box p {
    color: #1a1d23;
    font-size: 14px;
    line-height: 1.8;
    margin-bottom: 18px;
}

.wp-confirm-btns {
    display: flex;
    gap: 12px;
    justify-content: center;
}

.wp-confirm-btns button {
    padding: 7px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-family: inherit;
    cursor: pointer;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #a0a6b2;
    transition: background 0.15s, color 0.15s;
}

.wp-confirm-btns button:hover {
    background: #3a3f4c;
    color: #1a1d23;
}

#wp-confirm-ok {
    border-color: rgba(255, 138, 128, 0.4);
    background: rgba(232, 74, 95, 0.15);
    color: #ff8a80;
}

#wp-confirm-ok:hover {
    background: rgba(232, 74, 95, 0.3);
}

/* 平板/窄窗口适配 */
@media (max-width: 640px) {
    .wp-header {
        padding: 10px 4px 14px;
    }
    .wp-title {
        font-size: 18px;
    }
    .wp-card {
        padding: 16px 14px 18px;
    }
    .wp-day-grid {
        grid-template-columns: 1fr;
    }
    .wp-time-range {
        font-size: 13px;
    }
}

/* ============================================================
   个人账本 · 顶部 05（项目暗色主题）
   ============================================================ */

.lg-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
    color-scheme: dark;
}

.lg-app ::placeholder {
    color: #8c93a3;
}

.lg-header {
    text-align: center;
    padding: 0 8px 18px; /* 顶部无内边距：标题距工具栏正好 5px */
}

.lg-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.lg-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 20px 24px 22px;
    margin-bottom: 12px;
}

.lg-card h3 {
    font-size: 17px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 16px;
}

/* 统计面板 */
.lg-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

.lg-stat-item {
    text-align: center;
}

.lg-stat-label {
    font-size: 14px;
    color: #8c93a3;
    margin-bottom: 4px;
}

.lg-income {
    color: #66bb6a;
    font-weight: 700;
    font-size: 20px;
    font-variant-numeric: tabular-nums;
}

.lg-expense {
    color: #ff8a80;
    font-weight: 700;
    font-size: 20px;
    font-variant-numeric: tabular-nums;
}

.lg-balance {
    color: #4fc3f7;
    font-weight: 700;
    font-size: 20px;
    font-variant-numeric: tabular-nums;
}

/* 表单 */
.lg-form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-bottom: 12px;
}

.lg-form-full {
    margin-bottom: 12px;
}

.lg-app input,
.lg-app select {
    width: 100%;
    padding: 9px 12px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    font-size: 14px;
    color: #1a1d23;
    font-family: inherit;
    outline: none;
    transition: border-color 0.15s;
}

.lg-app select {
    cursor: pointer;
}

.lg-app input:focus,
.lg-app select:focus {
    border-color: #4fc3f7;
}

#lg-add-btn {
    width: 100%;
    padding: 10px 16px;
    border: none;
    border-radius: 8px;
    background: #4fc3f7;
    color: #0d2233;
    font-size: 15px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s;
}

#lg-add-btn:hover {
    background: #6ad0ff;
}

/* 筛选条 */
.lg-filter-bar {
    display: flex;
    gap: 10px;
    align-items: center;
    margin-bottom: 16px;
    color: #8c93a3;
    font-size: 14px;
}

.lg-filter-bar input {
    width: auto;
}

#lg-reset-filter {
    padding: 8px 14px;
    border-radius: 8px;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #a0a6b2;
    font-size: 13px;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
}

#lg-reset-filter:hover {
    background: #3a3f4c;
    color: #1a1d23;
}

/* 列表 */
.lg-table-wrap {
    overflow-x: auto;
}

.lg-app table {
    width: 100%;
    border-collapse: collapse;
}

.lg-app th,
.lg-app td {
    padding: 10px 6px;
    text-align: left;
    border-bottom: 1px solid #2d313c;
    font-size: 14px;
}

.lg-app th {
    color: #8c93a3;
    font-weight: normal;
    white-space: nowrap;
}

.lg-amt-in {
    color: #66bb6a;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.lg-amt-out {
    color: #ff8a80;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.lg-del-btn {
    background: rgba(232, 74, 95, 0.12);
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.35);
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 12px;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s;
}

.lg-del-btn:hover {
    background: rgba(232, 74, 95, 0.25);
}

/* 轻提示（替代原生 alert） */
.lg-toast {
    position: fixed;
    left: 50%;
    bottom: 48px;
    transform: translateX(-50%);
    background: rgba(35, 39, 48, 0.95);
    border: 1px solid rgba(255, 138, 128, 0.4);
    color: #ff8a80;
    padding: 10px 18px;
    border-radius: 8px;
    font-size: 13px;
    z-index: 1001;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}

.lg-toast[hidden] {
    display: none;
}

/* 删除确认弹窗（替代原生 confirm） */
.lg-confirm {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.55);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
}

.lg-confirm[hidden] {
    display: none;
}

.lg-confirm-box {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 24px 28px;
    max-width: 340px;
    width: calc(100% - 48px);
    text-align: center;
}

.lg-confirm-box p {
    color: #1a1d23;
    font-size: 14px;
    line-height: 1.8;
    margin-bottom: 18px;
}

.lg-confirm-btns {
    display: flex;
    gap: 12px;
    justify-content: center;
}

.lg-confirm-btns button {
    padding: 7px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-family: inherit;
    cursor: pointer;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #a0a6b2;
    transition: background 0.15s, color 0.15s;
}

.lg-confirm-btns button:hover {
    background: #3a3f4c;
    color: #1a1d23;
}

#lg-confirm-ok {
    border-color: rgba(255, 138, 128, 0.4);
    background: rgba(232, 74, 95, 0.15);
    color: #ff8a80;
}

#lg-confirm-ok:hover {
    background: rgba(232, 74, 95, 0.3);
}

/* 平板/窄窗口适配 */
@media (max-width: 640px) {
    .lg-card {
        padding: 16px 14px 18px;
    }
    .lg-stats {
        grid-template-columns: 1fr;
        gap: 14px;
    }
    .lg-form-row {
        grid-template-columns: 1fr;
    }
    .lg-filter-bar {
        flex-wrap: wrap;
    }
}

/* ============================================================
   门禁衔接 · 密码保险箱 · 顶部 06（项目暗色主题）
   ============================================================ */

.ga-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    position: relative;
    color: #1a1d23;
    color-scheme: dark;
    min-height: 400px;
}

.ga-hidden {
    display: none !important;
}

/* 水印（仅在 .ga-app 内部，不覆盖全屏） */
.ga-watermark {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 0;
    overflow: hidden;
    color: rgba(255, 255, 255, 0.04);
    font-size: 14px;
}

.ga-app > .ga-card,
.ga-app > .ga-header {
    position: relative;
    z-index: 1;
}

.ga-header {
    text-align: center;
    padding: 0 8px 18px;
}

.ga-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.ga-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 20px 24px 22px;
    margin-bottom: 12px;
}

.ga-card h3 {
    font-size: 17px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 16px;
}

.ga-sub {
    text-align: center;
    color: #8c93a3;
    font-size: 14px;
    margin-bottom: 18px;
}

.ga-tip {
    color: #fbbf24;
    font-size: 13px;
    line-height: 1.6;
    margin: 12px 0;
    background: rgba(251, 191, 36, 0.08);
    border: 1px solid rgba(251, 191, 36, 0.2);
    border-radius: 8px;
    padding: 10px 12px;
}

.ga-form-item {
    margin-bottom: 14px;
}

.ga-app label {
    display: block;
    margin-bottom: 6px;
    color: #8c93a3;
    font-size: 14px;
}

.ga-app input,
.ga-app select,
.ga-app textarea {
    width: 100%;
    padding: 10px 12px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    color: #1a1d23;
    font-size: 14px;
    font-family: inherit;
    outline: none;
    transition: border-color 0.15s;
    user-select: text;
    -webkit-user-select: text;
}

.ga-app input:focus,
.ga-app select:focus,
.ga-app textarea:focus {
    border-color: #4fc3f7;
}

.ga-app textarea {
    resize: vertical;
}

/* 按钮通用 */
#ga-unlock-btn,
#ga-lock-btn,
#ga-add-btn,
#ga-gen-btn,
#ga-copy-btn,
#ga-save-btn,
#ga-view-copy,
#ga-view-close,
#ga-confirm-cancel,
#ga-confirm-ok,
#ga-edit-cancel {
    padding: 10px 16px;
    border: none;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s, opacity 0.15s;
}

#ga-unlock-btn {
    width: 100%;
    background: #4fc3f7;
    color: #0d2233;
}
#ga-unlock-btn:hover { background: #6ad0ff; }

#ga-lock-btn {
    width: 100%;
    background: rgba(255, 138, 128, 0.15);
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.35);
}
#ga-lock-btn:hover { background: rgba(255, 138, 128, 0.25); }

#ga-add-btn {
    width: 100%;
    background: rgba(102, 187, 106, 0.15);
    color: #66bb6a;
    border: 1px solid rgba(102, 187, 106, 0.35);
}
#ga-add-btn:hover { background: rgba(102, 187, 106, 0.25); }

#ga-gen-btn {
    background: #4fc3f7;
    color: #0d2233;
}
#ga-gen-btn:hover { background: #6ad0ff; }

#ga-copy-btn,
#ga-edit-cancel,
#ga-view-close,
#ga-confirm-cancel {
    background: #d5d9e0;
    color: #a0a6b2;
    border: 1px solid #c0c6d0;
}
#ga-copy-btn:hover,
#ga-edit-cancel:hover,
#ga-view-close:hover,
#ga-confirm-cancel:hover {
    background: #3a3f4c;
    color: #1a1d23;
}

#ga-save-btn {
    background: #4fc3f7;
    color: #0d2233;
}
#ga-save-btn:hover {
    background: #6ad0ff;
}

#ga-view-copy {
    background: #4fc3f7;
    color: #0d2233;
}
#ga-view-copy:hover { background: #6ad0ff; }

#ga-confirm-ok {
    background: rgba(232, 74, 95, 0.15);
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.35);
}
#ga-confirm-ok:hover { background: rgba(232, 74, 95, 0.3); }

.ga-reset-btn {
    width: 100%;
    margin-top: 10px;
    padding: 8px 16px;
    background: transparent;
    color: #8c93a3;
    border: 1px dashed #3a3f4c;
    border-radius: 8px;
    font-size: 12px;
    font-family: inherit;
    cursor: pointer;
    transition: color 0.15s, border-color 0.15s;
}

.ga-reset-btn:hover {
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.35);
}

/* 密码生成器布局 */
.ga-gen-row {
    display: grid;
    grid-template-columns: auto auto 1fr auto auto;
    gap: 10px;
    align-items: end;
}

.ga-chk-wrap {
    display: flex;
    align-items: center;
    gap: 6px;
    padding-bottom: 12px;
    white-space: nowrap;
}

.ga-chk-wrap input {
    width: auto;
}

/* 分组标签 */
.ga-group-tab {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

.ga-group-tab button {
    padding: 6px 14px;
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    color: #a0a6b2;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    transition: background 0.15s, color 0.15s;
}

.ga-group-tab button:hover {
    background: #3a3f4c;
    color: #1a1d23;
}

.ga-group-tab button.active {
    background: #4fc3f7;
    color: #0d2233;
    border-color: #4fc3f7;
}

/* 列表项 */
.ga-item-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 0;
    border-bottom: 1px solid #2d313c;
    gap: 12px;
}

.ga-item-row:last-child {
    border-bottom: none;
}

.ga-item-info {
    flex: 1;
    min-width: 0;
}

.ga-item-info h4 {
    font-size: 15px;
    font-weight: 600;
    color: #1a1d23;
    margin-bottom: 4px;
}

.ga-meta {
    color: #8c93a3;
    font-size: 13px;
    line-height: 1.6;
}

.ga-item-opt {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
}

.ga-view-btn,
.ga-edit-btn,
.ga-del-btn {
    padding: 5px 10px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    font-size: 12px;
    font-family: inherit;
    transition: background 0.15s;
}

.ga-view-btn {
    background: rgba(79, 195, 247, 0.12);
    color: #4fc3f7;
    border: 1px solid rgba(79, 195, 247, 0.3);
}
.ga-view-btn:hover { background: rgba(79, 195, 247, 0.25); }

.ga-edit-btn {
    background: rgba(179, 136, 255, 0.12);
    color: #b388ff;
    border: 1px solid rgba(179, 136, 255, 0.3);
}
.ga-edit-btn:hover { background: rgba(179, 136, 255, 0.25); }

.ga-del-btn {
    background: rgba(232, 74, 95, 0.12);
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.3);
}
.ga-del-btn:hover { background: rgba(232, 74, 95, 0.25); }

/* 弹窗 */
.ga-modal {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.6);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    z-index: 1000;
}

.ga-modal-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 24px 28px;
    max-width: 480px;
    width: 100%;
}

.ga-modal-card h3 {
    font-size: 17px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 16px;
}

.ga-modal-card p {
    color: #1a1d23;
    font-size: 14px;
    line-height: 1.8;
    text-align: center;
    margin-bottom: 18px;
}

.ga-btn-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

/* 查看结果行 */
.ga-view-row {
    display: flex;
    gap: 12px;
    padding: 10px 0;
    border-bottom: 1px solid #2d313c;
    font-size: 14px;
}

.ga-view-row:last-child {
    border-bottom: none;
    margin-bottom: 16px;
}

.ga-view-label {
    flex: 0 0 56px;
    color: #8c93a3;
    text-align: right;
}

.ga-view-val {
    flex: 1;
    color: #1a1d23;
    word-break: break-all;
}

.ga-mono {
    font-family: Consolas, "Courier New", monospace;
    color: #4fc3f7;
    font-weight: 600;
}

/* 轻提示 */
.ga-toast {
    position: fixed;
    left: 50%;
    bottom: 48px;
    transform: translateX(-50%);
    background: rgba(35, 39, 48, 0.95);
    border: 1px solid #c0c6d0;
    color: #1a1d23;
    padding: 10px 18px;
    border-radius: 8px;
    font-size: 13px;
    z-index: 1001;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}

.ga-toast[hidden] {
    display: none;
}

/* 窄窗口适配 */
@media (max-width: 720px) {
    .ga-gen-row {
        grid-template-columns: 1fr;
    }
    .ga-chk-wrap {
        padding-bottom: 0;
    }
    .ga-btn-row {
        grid-template-columns: 1fr;
    }
    .ga-item-row {
        flex-direction: column;
        align-items: flex-start;
    }
    .ga-item-opt {
        width: 100%;
        justify-content: flex-end;
    }
}

/* ============================================================
   年度计划 · 顶部 04（项目暗色主题）
   ============================================================ */

.yr-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
    color-scheme: dark;
}

.yr-app ::placeholder {
    color: #8c93a3;
}

.yr-header {
    text-align: center;
    padding: 0 8px 18px; /* 顶部无内边距：标题距工具栏正好 5px */
}

.yr-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.yr-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 20px 24px 22px;
    margin-bottom: 12px;
}

.yr-card h2 {
    font-size: 17px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 16px;
}

/* 整体进度 */
.yr-progress-text {
    color: #8c93a3;
    font-size: 14px;
    margin-bottom: 10px;
}

.yr-progress-wrap {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 99px;
    height: 14px;
    overflow: hidden;
}

.yr-progress-bar {
    height: 100%;
    width: 0;
    background: linear-gradient(90deg, #66bb6a, #4fc3f7);
    transition: width 0.3s ease;
}

/* 文本块（总目标 / 保障措施 / 复盘机制） */
.yr-text-block {
    color: #c8ccd4;
    font-size: 14px;
    line-height: 1.8;
    white-space: pre-wrap;
    word-break: break-word;
}

/* 季度区块 */
.yr-quarter-block {
    margin-bottom: 18px;
}

.yr-quarter-block:last-child {
    margin-bottom: 0;
}

.yr-quarter-block h3 {
    color: #4fc3f7;
    font-size: 15px;
    font-weight: 600;
    margin-bottom: 12px;
}

/* 任务项 */
.yr-task-item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    border-bottom: 1px solid #2d313c;
}

.yr-task-item:last-child {
    border-bottom: none;
}

.yr-task-item input[type="checkbox"] {
    margin-top: 3px;
    width: 15px;
    height: 15px;
    accent-color: #4fc3f7;
    cursor: pointer;
    flex: 0 0 auto;
}

.yr-task-text {
    flex: 1;
    min-width: 0;
    color: #1a1d23;
    font-size: 14px;
    line-height: 1.6;
    word-break: break-word;
}

.yr-task-done .yr-task-text {
    text-decoration: line-through;
    color: #8c93a3;
}

.yr-empty {
    color: #8c93a3;
    text-align: center;
    padding: 12px 0;
    font-size: 13px;
}

/* 编辑页：输入与文本域 */
.yr-app textarea,
.yr-app input[type="text"] {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    color: #1a1d23;
    font-size: 14px;
    font-family: inherit;
    outline: none;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.yr-app textarea {
    resize: vertical;
    line-height: 1.6;
}

.yr-app textarea:focus,
.yr-app input[type="text"]:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 0 3px rgba(79, 195, 247, 0.15);
}

.yr-add-row {
    display: flex;
    gap: 8px;
    margin: 12px 0;
}

.yr-add-row input[type="text"] {
    flex: 1;
    min-width: 0;
}

.yr-add-row .yr-btn {
    flex: 0 0 auto;
}

/* 按钮通用 */
.yr-btn {
    padding: 8px 14px;
    border: none;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s, opacity 0.15s;
}

.yr-btn-primary {
    background: #4fc3f7;
    color: #0d2233;
}

.yr-btn-primary:hover {
    background: #6ad0ff;
}

.yr-btn-success {
    background: #66bb6a;
    color: #0d2233;
}

.yr-btn-success:hover {
    background: #81c784;
}

.yr-btn-danger {
    background: rgba(255, 138, 128, 0.15);
    color: #ff8a80;
    border: 1px solid rgba(255, 138, 128, 0.35);
}

.yr-btn-danger:hover {
    background: rgba(255, 138, 128, 0.28);
}

.yr-btn-sm {
    padding: 4px 10px;
    font-size: 12px;
}

.yr-btn-group {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin: 16px 0;
}

/* 清空确认弹窗 */
.yr-confirm {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.55);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 2000;
}

.yr-confirm[hidden] {
    display: none;
}

.yr-confirm-box {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 24px;
    width: min(420px, 92vw);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
}

.yr-confirm-box p {
    color: #1a1d23;
    font-size: 15px;
    line-height: 1.7;
    margin-bottom: 18px;
    text-align: center;
}

.yr-confirm-btns {
    display: flex;
    gap: 10px;
    justify-content: center;
}

/* 窄窗口适配 */
@media (max-width: 720px) {
    .yr-add-row {
        flex-direction: column;
    }
    .yr-add-row .yr-btn {
        width: 100%;
    }
}

/* ============================================================
   文件分发 · PDF工具箱（左侧 06，项目暗色主题）
   ============================================================ */

.fd-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
    color-scheme: dark;
}

.fd-app ::placeholder {
    color: #8c93a3;
}

.fd-header {
    text-align: center;
    padding: 0 8px 18px; /* 顶部无内边距：标题距工具栏正好 5px */
}

.fd-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.fd-sub {
    color: #8c93a3;
    font-size: 13px;
    margin-top: 4px;
}

.fd-wrap {
    display: flex;
    gap: 12px;
    align-items: stretch;
}

/* 内部工具菜单 */
.fd-sidebar {
    flex: 0 0 200px;
    width: 200px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 14px 10px;
    align-self: flex-start;
}

.fd-group-title {
    font-size: 12px;
    color: #8c93a3;
    letter-spacing: 1px;
    margin: 14px 6px 6px;
}

.fd-group-title:first-child {
    margin-top: 0;
}

.fd-menu-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 10px;
    border-radius: 8px;
    cursor: pointer;
    color: #c8ccd4;
    font-size: 13.5px;
    border-left: 3px solid transparent;
    transition: background 0.15s, color 0.15s;
}

.fd-menu-item:hover {
    background: #d5d9e0;
}

.fd-menu-item.active {
    background: rgba(79, 195, 247, 0.12);
    color: #4fc3f7;
    border-left-color: #4fc3f7;
}

.fd-menu-item svg {
    width: 18px;
    height: 18px;
    fill: currentColor;
    flex: 0 0 auto;
}

/* 主面板 */
.fd-main {
    flex: 1;
    min-width: 0;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 20px 22px;
    display: flex;
    flex-direction: column;
}

.fd-tool-head h3 {
    color: #1a1d23;
    font-size: 17px;
    font-weight: 600;
}

.fd-tool-head p {
    color: #8c93a3;
    font-size: 13px;
    margin-top: 4px;
}

/* 选项区 */
.fd-options {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
    margin: 14px 0 12px;
}

.fd-options label {
    color: #8c93a3;
    font-size: 13px;
    flex: 0 0 auto;
}

.fd-options select {
    color-scheme: dark;
    padding: 7px 12px;
    border-radius: 8px;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #1a1d23;
    font-size: 13px;
    font-family: inherit;
    outline: none;
    cursor: pointer;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.fd-options select:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 0 3px rgba(79, 195, 247, 0.18);
}

.fd-opt-input {
    flex: 1;
    min-width: 220px;
    padding: 7px 12px;
    border-radius: 8px;
    border: 1px solid #c0c6d0;
    background: #ffffff;
    color: #1a1d23;
    font-size: 13px;
    font-family: inherit;
    outline: none;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.fd-opt-input:focus {
    border-color: #4fc3f7;
    box-shadow: 0 0 0 3px rgba(79, 195, 247, 0.15);
}

/* 拖拽区 */
.fd-dropzone {
    border: 1.5px dashed #3a3f4c;
    border-radius: 12px;
    padding: 24px 16px;
    text-align: center;
    transition: border-color 0.15s, background 0.15s;
    cursor: pointer;
}

.fd-dropzone:hover,
.fd-dropzone.dragover {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.05);
}

.fd-drop-icon {
    font-size: 34px;
    margin-bottom: 6px;
}

.fd-drop-tip {
    color: #8c93a3;
    font-size: 13px;
    margin-bottom: 14px;
}

/* 文件列表 */
.fd-file-list {
    margin-top: 12px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.fd-file-row {
    display: flex;
    align-items: center;
    gap: 10px;
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 13px;
}

.fd-file-idx {
    color: #4fc3f7;
    font-family: Consolas, monospace;
    flex: 0 0 auto;
}

.fd-file-name {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fd-file-size {
    color: #8c93a3;
    font-size: 12px;
    flex: 0 0 auto;
}

.fd-mini-btn {
    padding: 2px 8px;
    font-size: 12px;
    border-radius: 6px;
    border: 1px solid #c0c6d0;
    background: #f0f2f5;
    color: #a0a6b2;
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
    flex: 0 0 auto;
}

.fd-mini-btn:hover {
    background: #3a3f4c;
    color: #1a1d23;
}

.fd-mini-danger {
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.35);
}

.fd-mini-danger:hover {
    background: rgba(255, 138, 128, 0.15);
    color: #ff8a80;
}

/* 执行与结果 */
.fd-run-row {
    margin-top: 14px;
}

.fd-btn {
    padding: 9px 18px;
    border: none;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    transition: background 0.15s, opacity 0.15s;
}

.fd-btn:disabled {
    opacity: 0.45;
    cursor: not-allowed;
}

.fd-btn-primary {
    background: #4fc3f7;
    color: #0d2233;
}

.fd-btn-primary:hover:not(:disabled) {
    background: #6ad0ff;
}

.fd-btn-success {
    width: 100%;
    background: #66bb6a;
    color: #0d2233;
}

.fd-btn-success:hover:not(:disabled) {
    background: #81c784;
}

/* 日志面板 */
.fd-log {
    margin-top: 14px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 12px 14px;
    font-family: Consolas, monospace;
    font-size: 12.5px;
    line-height: 1.7;
    color: #8bc98d;
    max-height: 220px;
    min-height: 60px;
    overflow: auto;
    white-space: pre-wrap;
    word-break: break-all;
}

.fd-log-empty {
    color: #8c93a3;
}

.fd-result {
    margin-top: 12px;
    display: flex;
    align-items: center;
    gap: 12px;
}

.fd-result[hidden] {
    display: none;
}

.fd-result-name {
    color: #8c93a3;
    font-size: 13px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 窄窗口适配 */
@media (max-width: 900px) {
    .fd-wrap {
        flex-direction: column;
    }
    .fd-sidebar {
        width: 100%;
        flex: 0 0 auto;
        display: flex;
        flex-wrap: wrap;
        gap: 2px;
        align-items: center;
    }
    .fd-group-title {
        width: 100%;
        margin: 8px 6px 2px;
    }
    .fd-group-title:first-child {
        margin-top: 0;
    }
}

/* ============================================================
   十堰站 · 产业地图（顶部 01，接入 shiyan.svg）
   ============================================================ */

.sy-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
    color-scheme: dark;
}

.sy-header {
    text-align: center;
    padding: 0 8px 18px; /* 顶部无内边距：标题距工具栏正好 5px */
}

.sy-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.sy-desc {
    color: #8c93a3;
    font-size: 13px;
    line-height: 1.7;
    max-width: 860px;
    margin: 6px auto 0;
}

/* 地图 + 信息卡 左右布局 */
.sy-body {
    display: flex;
    gap: 12px;
    align-items: stretch;
    margin-bottom: 12px;
}

/* 地图卡片 */
.sy-map-card {
    flex: 1;
    min-width: 0;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 18px 20px 20px;
    margin-bottom: 0;
}

.sy-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}

.sy-card-head h3 {
    font-size: 16px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
}

.sy-hint {
    color: #8c93a3;
    font-size: 12px;
}

.sy-map-wrap {
    position: relative;
    background: #ffffff;
    border: 1px solid #2d313c;
    border-radius: 10px;
    padding: 10px;
    min-height: 260px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.sy-svg {
    width: 100%;
    height: auto;
    max-height: 560px;
    display: block;
}

.sy-map-loading {
    color: #8c93a3;
    font-size: 14px;
    padding: 40px 0;
}

/* SVG 辖区与边界 */
.sy-region {
    fill: #2e3340;
    stroke: #4a5060;
    stroke-width: 1;
    cursor: pointer;
    transition: fill 0.18s ease, stroke 0.18s ease, stroke-width 0.18s ease;
}

.sy-region:hover {
    fill: rgba(79, 195, 247, 0.32);
    stroke: #4fc3f7;
    stroke-width: 1.6;
}

.sy-region.sy-selected {
    fill: rgba(79, 195, 247, 0.5);
    stroke: #6ad0ff;
    stroke-width: 2;
}

.sy-boundary {
    fill: none;
    stroke: #4a5060;
    stroke-width: 1;
    stroke-dasharray: 3, 3;
    pointer-events: none;
}

.sy-boundary-outer {
    stroke: #5a6070;
    stroke-width: 1.6;
    stroke-dasharray: none;
}

.sy-label {
    fill: #d8dce4;
    font-size: 13px;
    font-weight: 600;
    font-family: "Microsoft YaHei", system-ui, sans-serif;
    text-anchor: middle;
    pointer-events: none;
    paint-order: stroke;
    stroke: #1a1d23;
    stroke-width: 3px;
    stroke-linejoin: round;
}

/* 悬停提示框 */
.sy-tooltip {
    position: absolute;
    z-index: 5;
    background: rgba(13, 22, 33, 0.95);
    border: 1px solid #4fc3f7;
    color: #4fc3f7;
    font-size: 13px;
    font-weight: 600;
    padding: 5px 12px;
    border-radius: 6px;
    pointer-events: none;
    white-space: nowrap;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4);
}

.sy-tooltip[hidden] {
    display: none;
}

/* 辖区标签行 */
.sy-tag-row {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: center;
    margin-top: 14px;
}

.sy-tag {
    padding: 5px 14px;
    background: rgba(79, 195, 247, 0.08);
    border: 1px solid rgba(79, 195, 247, 0.25);
    color: #9fd8f5;
    border-radius: 99px;
    font-size: 13px;
    cursor: pointer;
    user-select: none;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
}

.sy-tag:hover {
    background: rgba(79, 195, 247, 0.2);
    color: #1a1d23;
}

.sy-tag.active {
    background: #4fc3f7;
    border-color: #4fc3f7;
    color: #0d2233;
    font-weight: 700;
}

/* 右侧信息卡（点击辖区显示简介） */
.sy-info-card {
    flex: 0 0 300px;
    width: 300px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 18px 20px;
    display: flex;
    flex-direction: column;
}

.sy-info-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 12px;
}

.sy-info-badge {
    padding: 3px 12px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 600;
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    color: #8c93a3;
}

.sy-info-badge-on {
    background: rgba(79, 195, 247, 0.16);
    border-color: rgba(79, 195, 247, 0.5);
    color: #4fc3f7;
}

.sy-info-index {
    color: #8c93a3;
    font-size: 12px;
    font-family: Consolas, monospace;
}

.sy-info-name {
    color: #1a1d23;
    font-size: 22px;
    font-weight: 700;
    letter-spacing: 1px;
    margin-bottom: 10px;
}

.sy-info-text {
    color: #c8ccd4;
    font-size: 13.5px;
    line-height: 1.8;
}

.sy-info-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 14px;
}

.sy-info-chip {
    padding: 3px 10px;
    border-radius: 6px;
    font-size: 12px;
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    color: #8c93a3;
}

.sy-info-chip-on {
    background: rgba(102, 187, 106, 0.12);
    border-color: rgba(102, 187, 106, 0.4);
    color: #8fd18f;
}

.sy-info-foot {
    margin-top: auto;
    padding-top: 16px;
    color: #8c93a3;
    font-size: 12px;
    line-height: 1.6;
    text-align: center;
    border-top: 1px dashed #3a3f4c;
}

/* 统计卡片 */
.sy-stat-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 12px;
    margin-bottom: 12px;
}

.sy-stat {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 18px 14px;
    text-align: center;
}

.sy-stat-num {
    font-size: 26px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 4px;
}

.sy-stat-label {
    color: #8c93a3;
    font-size: 13px;
}

/* 入口卡片 */
.sy-entry-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: 12px;
}

.sy-entry {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 18px 18px 16px;
    cursor: pointer;
    transition: border-color 0.2s, transform 0.2s, background 0.2s;
}

.sy-entry:hover {
    border-color: #4fc3f7;
    transform: translateY(-2px);
    background: #e8eaed;
}

.sy-entry-icon {
    font-size: 24px;
    margin-bottom: 8px;
}

.sy-entry h4 {
    color: #1a1d23;
    font-size: 15.5px;
    font-weight: 600;
    margin-bottom: 6px;
}

.sy-entry p {
    color: #8c93a3;
    font-size: 12.5px;
    line-height: 1.65;
}

/* 窄窗口适配 */
@media (max-width: 960px) {
    .sy-body {
        flex-direction: column;
    }
    .sy-info-card {
        flex: 0 0 auto;
        width: 100%;
    }
}

@media (max-width: 720px) {
    .sy-card-head {
        flex-direction: column;
        align-items: flex-start;
    }
    .sy-label {
        font-size: 11px;
        stroke-width: 2.5px;
    }
}

/* ============ 产业集群展示区 ============ */
.sy-industry-wrap {
    margin-top: 12px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.sy-industry-section {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 18px 20px 20px;
}

.sy-section-title {
    font-size: 16px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 14px;
}

.sy-industry-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
    gap: 14px;
}

.sy-industry-card {
    background: #d5d9e0;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 14px 16px 12px;
    transition: border-color 0.18s, box-shadow 0.18s;
}

.sy-industry-card:hover {
    border-color: #4fc3f7;
    box-shadow: 0 2px 10px rgba(79, 195, 247, 0.1);
}

.sy-industry-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
    flex-wrap: wrap;
}

.sy-industry-tag {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 700;
    flex-shrink: 0;
}

.sy-tag-pillar {
    background: rgba(79, 195, 247, 0.16);
    border: 1px solid rgba(79, 195, 247, 0.5);
    color: #4fc3f7;
}

.sy-tag-emerge {
    background: rgba(102, 187, 106, 0.14);
    border: 1px solid rgba(102, 187, 106, 0.5);
    color: #8fd18f;
}

.sy-tag-trad {
    background: rgba(255, 165, 64, 0.14);
    border: 1px solid rgba(255, 165, 64, 0.5);
    color: #ffb74d;
}

.sy-industry-name {
    color: #1a1d23;
    font-size: 15px;
    font-weight: 600;
    letter-spacing: 0.5px;
}

.sy-industry-desc {
    color: #8c93a3;
    font-size: 12.5px;
    line-height: 1.7;
    margin-bottom: 8px;
}

.sy-industry-summary {
    color: #9fa5b4;
    font-size: 12px;
    margin-bottom: 10px;
}

.sy-industry-toggle {
    width: 100%;
    padding: 6px 0;
    background: transparent;
    border: 1px dashed #3a3f4c;
    border-radius: 6px;
    color: #8c93a3;
    font-size: 12.5px;
    cursor: pointer;
    transition: border-color 0.15s, color 0.15s;
}

.sy-industry-toggle:hover {
    border-color: #4fc3f7;
    color: #4fc3f7;
}

.sy-industry-open .sy-industry-toggle {
    border-color: #4fc3f7;
    color: #4fc3f7;
    background: rgba(79, 195, 247, 0.06);
}

.sy-industry-details {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid #c0c6d0;
    animation: syDetailIn 0.2s ease;
}

@keyframes syDetailIn {
    from { opacity: 0; transform: translateY(-4px); }
    to { opacity: 1; transform: translateY(0); }
}

.sy-detail-block {
    margin-bottom: 12px;
}

.sy-detail-block:last-child {
    margin-bottom: 0;
}

.sy-detail-title {
    color: #4fc3f7;
    font-size: 12.5px;
    font-weight: 600;
    margin-bottom: 6px;
}

.sy-detail-block ul {
    padding-left: 18px;
    margin: 0;
}

.sy-detail-block li {
    color: #b8bdc8;
    font-size: 12.5px;
    line-height: 1.7;
    margin: 2px 0;
}

/* info-card 内 chip 颜色区分 */
.sy-info-chip.sy-chip-pillar {
    background: rgba(79, 195, 247, 0.1);
    border-color: rgba(79, 195, 247, 0.35);
    color: #4fc3f7;
}

.sy-info-chip.sy-chip-emerge {
    background: rgba(102, 187, 106, 0.1);
    border-color: rgba(102, 187, 106, 0.35);
    color: #8fd18f;
}

.sy-info-chip.sy-chip-trad {
    background: rgba(255, 165, 64, 0.1);
    border-color: rgba(255, 165, 64, 0.35);
    color: #ffb74d;
}

@media (max-width: 720px) {
    .sy-industry-grid {
        grid-template-columns: 1fr;
    }
}

/* ============================================================
   我要招聘 · 综合招聘平台（左侧 07，rc- 前缀）
   ============================================================ */

.rc-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
}

.rc-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 0 8px 14px;
}

.rc-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.rc-auth-area { display: flex; align-items: center; gap: 8px; }
.rc-user-info { font-size: 13px; color: #7db0ff; font-weight: 600; }
.rc-auth-tabs { display: flex; gap: 0; margin-bottom: 14px; border-bottom: 2px solid #3a3f4c; }
.rc-auth-tab {
    padding: 8px 24px; border: none; background: transparent; color: #8c93a3;
    cursor: pointer; font-size: 14px; font-family: inherit; border-bottom: 2px solid transparent; margin-bottom: -2px;
}
.rc-auth-tab.active { color: #7db0ff; border-bottom-color: #2563eb; }
.rc-auth-form { padding: 4px 0; }

/* 超管管理 */
.rc-admin-sub-tabs { display: flex; gap: 0; margin-bottom: 14px; border-bottom: 2px solid #3a3f4c; }
.rc-sub-tab { padding: 8px 20px; border: none; background: transparent; color: #8c93a3; cursor: pointer; font-size: 14px; font-family: inherit; border-bottom: 2px solid transparent; margin-bottom: -2px; }
.rc-sub-tab.active { color: #facc15; border-bottom-color: #facc15; }
.rc-sub-tab:hover:not(.active) { color: #aab0bd; }
.rc-admin-item { background: #ffffff; border: 1px solid #c0c6d0; border-radius: 8px; padding: 10px 14px; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.rc-admin-main { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }
.rc-admin-main strong { font-size: 14px; color: #1a1d23; }
.rc-admin-sub { font-size: 12px; color: #8c93a3; flex-shrink: 0; }
.rc-admin-item .rc-btn.armed { background: #ef4444 !important; }

.rc-sub {
    color: #8c93a3;
    font-size: 13px;
    margin-top: 6px;
}

/* Tab 栏 */
.rc-tabs {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}

.rc-tab {
    padding: 8px 18px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px 8px 0 0;
    color: #8c93a3;
    font-size: 14px;
    cursor: pointer;
    transition: color 0.15s, border-color 0.15s, background 0.15s;
    position: relative;
}

.rc-tab:hover {
    color: #1a1d23;
    border-color: rgba(79, 195, 247, 0.5);
}

.rc-tab.active {
    background: #ffffff;
    color: #4fc3f7;
    border-color: #4fc3f7;
    border-bottom-color: #262932;
    font-weight: 600;
}

.rc-badge {
    display: inline-block;
    min-width: 18px;
    padding: 0 6px;
    margin-left: 6px;
    background: #ff8a80;
    color: #2a1414;
    border-radius: 99px;
    font-size: 11px;
    font-weight: 700;
    line-height: 18px;
    text-align: center;
}

.rc-badge[hidden] {
    display: none;
}

/* 卡片 */
.rc-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 18px 20px;
    margin-bottom: 12px;
}

.rc-card h3 {
    font-size: 16px;
    font-weight: 600;
    color: #1a1d23;
    border-left: 4px solid #4fc3f7;
    padding-left: 10px;
    margin-bottom: 14px;
}

/* 表单 */
.rc-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 12px;
    margin-bottom: 12px;
}

.rc-field {
    margin-bottom: 12px;
}

.rc-field label {
    display: block;
    color: #8c93a3;
    font-size: 13px;
    margin-bottom: 6px;
}

.rc-field input,
.rc-field select,
.rc-field textarea {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    color: #1a1d23;
    font-size: 14px;
    font-family: inherit;
}

.rc-field textarea {
    resize: vertical;
    line-height: 1.7;
}

.rc-field input:focus,
.rc-field select:focus,
.rc-field textarea:focus {
    outline: none;
    border-color: #4fc3f7;
}

.rc-tip {
    color: #8c93a3;
    font-size: 13px;
    margin-top: 4px;
}

/* 筛选行 */
.rc-filter-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 12px;
    margin-bottom: 14px;
}

.rc-filter-row select {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    color: #1a1d23;
    font-size: 14px;
}

.rc-filter-row select:focus {
    outline: none;
    border-color: #4fc3f7;
}

/* 按钮 */
.rc-btn-row {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 4px;
}

.rc-btn {
    padding: 9px 18px;
    border: none;
    border-radius: 8px;
    cursor: pointer;
    font-size: 14px;
    color: #1a1d23;
    transition: filter 0.15s, transform 0.1s;
}

.rc-btn:active {
    transform: scale(0.97);
}

.rc-btn-sm {
    padding: 5px 14px;
    font-size: 13px;
}

.rc-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
}

.rc-btn-success {
    background: linear-gradient(135deg, #66bb6a, #4caf50);
}

.rc-btn-danger {
    background: linear-gradient(135deg, #ef5350, #e53935);
}

.rc-btn-ghost {
    background: transparent;
    border: 1px solid #c0c6d0;
    color: #8c93a3;
}

.rc-btn-ghost:hover {
    border-color: rgba(79, 195, 247, 0.5);
    color: #1a1d23;
}

.rc-btn:hover {
    filter: brightness(1.1);
}

/* 岗位卡片 */
.rc-job-item {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px 18px;
    margin-bottom: 10px;
    transition: border-color 0.2s;
}

.rc-job-item:hover {
    border-color: rgba(79, 195, 247, 0.5);
}

.rc-job-tags {
    margin-bottom: 8px;
}

.rc-tag {
    display: inline-block;
    font-size: 12px;
    padding: 3px 10px;
    border-radius: 4px;
    margin-right: 6px;
    font-weight: 600;
}

.rc-tag-green {
    background: rgba(102, 187, 106, 0.15);
    color: #66bb6a;
}

.rc-tag-orange {
    background: rgba(245, 158, 11, 0.15);
    color: #ffb74d;
}

.rc-tag-blue {
    background: rgba(79, 195, 247, 0.15);
    color: #4fc3f7;
}

.rc-tag-red {
    background: rgba(239, 83, 80, 0.15);
    color: #ff8a80;
}

.rc-tag-gray {
    background: rgba(140, 147, 163, 0.15);
    color: #8c93a3;
    font-weight: 400;
}

.rc-job-title {
    font-size: 17px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 6px;
}

.rc-job-meta {
    color: #8c93a3;
    font-size: 13.5px;
    margin: 4px 0;
}

/* 投递记录 */
.rc-record-item {
    padding: 14px 4px;
    border-bottom: 1px solid #c0c6d0;
}

.rc-record-item:last-child {
    border-bottom: none;
}

.rc-record-main {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    color: #1a1d23;
    font-size: 15px;
    margin-bottom: 6px;
}

.rc-record-sub {
    color: #8c93a3;
    font-size: 12.5px;
    margin: 4px 0;
}

.rc-record-status {
    color: #8c93a3;
    font-size: 13px;
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.rc-status {
    color: #ffb74d;
}

/* 状态进度条 */
.rc-progress { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; margin: 8px 0; }
.rc-step { font-size: 11px; padding: 2px 8px; border-radius: 10px; background: #e8eaed; color: #5a6070; }
.rc-step.done { background: #ffffff; color: #5a6070; }
.rc-step.current { background: #4fc3f7; color: #0d1a26; font-weight: 600; }
.rc-step-arrow { color: #a0a6b2; font-size: 10px; }

/* 状态色 */
.rc-st-pending { color: #ffb74d; }
.rc-st-success { color: #4ade80; }
.rc-st-reject { color: #f87171; }
.rc-st-interview { color: #7db0ff; }

.rc-record-actions { display: flex; gap: 8px; margin-top: 8px; }

/* 引用简历卡片 */
.rc-resume-card { background: #ffffff; border-left: 3px solid #2563eb; border-radius: 6px; padding: 8px 12px; margin: 6px 0; font-size: 12px; }
.rc-resume-title { font-weight: 600; color: #7db0ff; margin-bottom: 4px; }
.rc-resume-line { color: #aab0bd; line-height: 1.6; }
.rc-resume-line strong { color: #8c93a3; }
.rc-chat-resume { background: rgba(37,99,235,0.08); border-left: 3px solid #2563eb; border-radius: 4px; padding: 8px 10px; font-size: 12px; color: #1a1d23; margin-bottom: 6px; line-height: 1.6; }
.rc-chat-sub { font-size: 11px; color: #8c93a3; margin-top: 4px; }
.rc-msg-count { display: inline-flex; align-items: center; justify-content: center; background: #ef4444; color: #1a1d23; border-radius: 10px; font-size: 10px; min-width: 16px; height: 16px; padding: 0 4px; }

/* 企业收件箱 */
.rc-inbox-status { display: flex; align-items: center; gap: 10px; margin-top: 8px; }
.rc-status-select { padding: 6px 10px; border: 1px solid #c0c6d0; border-radius: 6px; background: #ffffff; color: #1a1d23; font-size: 13px; font-family: inherit; }

/* 对话弹窗 */
.rc-chat-box { max-width: 520px; max-height: 80vh; display: flex; flex-direction: column; }
.rc-chat-head { display: flex; justify-content: space-between; align-items: center; padding: 14px 16px; border-bottom: 1px solid #c0c6d0; }
.rc-chat-head h3 { font-size: 15px; color: #1a1d23; margin: 0; }
.rc-chat-status { padding: 8px 16px; font-size: 12px; color: #8c93a3; border-bottom: 1px solid #c0c6d0; }
.rc-chat-status .rc-status { font-weight: 600; }
.rc-chat-body { flex: 1; overflow-y: auto; padding: 14px 16px; min-height: 200px; max-height: 400px; display: flex; flex-direction: column; gap: 10px; }
.rc-chat-empty { text-align: center; color: #8c93a3; padding: 40px 0; font-size: 13px; }
.rc-msg { max-width: 75%; display: flex; flex-direction: column; }
.rc-msg-mine { align-self: flex-end; }
.rc-msg-other { align-self: flex-start; }
.rc-msg-mine .rc-msg-text { background: #4fc3f7; color: #0d1a26; }
.rc-msg-other .rc-msg-text { background: #f0f2f5; color: #1a1d23; }
.rc-msg-text { padding: 8px 12px; border-radius: 10px; font-size: 14px; word-break: break-word; }
.rc-msg-time { font-size: 10px; color: #8c93a3; margin-top: 2px; }
.rc-msg-mine .rc-msg-time { text-align: right; }
.rc-chat-input { display: flex; gap: 8px; padding: 12px 16px; border-top: 1px solid #c0c6d0; }
.rc-chat-input input { flex: 1; padding: 8px 12px; border: 1px solid #c0c6d0; border-radius: 6px; background: #ffffff; color: #1a1d23; font-size: 14px; font-family: inherit; outline: none; }
.rc-chat-input input:focus { border-color: #2563eb; }

/* 空状态 */
.rc-empty {
    color: #8c93a3;
    text-align: center;
    padding: 36px 0;
    font-size: 14px;
}

/* 弹窗 */
.rc-modal {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.65);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
    padding: 16px;
}

.rc-modal[hidden] {
    display: none;
}

.rc-modal-box {
    width: 100%;
    max-width: 680px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 24px;
    max-height: 88vh;
    overflow-y: auto;
    box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5);
}

.rc-modal-box h3 {
    font-size: 19px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid #c0c6d0;
}

.rc-modal-body p {
    color: #c8ccd4;
    font-size: 14px;
    line-height: 1.9;
}

.rc-modal-body strong {
    color: #1a1d23;
}

.rc-modal-desc {
    margin-top: 10px;
}

.rc-modal-pre {
    white-space: pre-wrap;
    word-break: break-word;
    background: #ffffff;
    border: 1px solid #2d313c;
    border-radius: 8px;
    padding: 12px 14px;
    color: #c8ccd4;
    font-size: 13.5px;
    line-height: 1.8;
    font-family: inherit;
    margin: 6px 0 10px;
}

.rc-modal-time {
    color: #5a6070 !important;
    font-size: 12.5px !important;
}

/* 窄窗口适配 */
@media (max-width: 720px) {
    .rc-tab {
        padding: 7px 12px;
        font-size: 13px;
    }
}

/* ============================================================
   合同管理（左侧 08，ct- 前缀）
   ============================================================ */

.ct-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
}

.ct-header {
    padding: 0 8px 14px;
}

.ct-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.ct-sub {
    color: #8c93a3;
    font-size: 13px;
    margin-top: 6px;
}

/* 统计卡 */
.ct-stat-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 12px;
    margin-bottom: 12px;
}

.ct-stat {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px 14px;
    text-align: center;
}

.ct-stat-num {
    font-size: 26px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 4px;
}

.ct-num-valid {
    color: #66bb6a;
}

.ct-num-expire {
    color: #ffb74d;
}

.ct-num-invalid {
    color: #ff8a80;
}

.ct-stat-label {
    color: #8c93a3;
    font-size: 13px;
}

/* 主卡片 */
.ct-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px 18px;
}

.ct-toolbar {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    align-items: center;
    margin-bottom: 14px;
}

.ct-input {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 9px 12px;
    color: #1a1d23;
    font-size: 14px;
    font-family: inherit;
}

.ct-input:focus {
    outline: none;
    border-color: #4fc3f7;
}

.ct-search-input {
    flex: 1;
    min-width: 220px;
}

.ct-filter-sel {
    min-width: 120px;
}

.ct-add-btn {
    margin-left: auto;
}

/* 按钮 */
.ct-btn {
    padding: 9px 16px;
    border: none;
    border-radius: 7px;
    cursor: pointer;
    font-size: 14px;
    color: #1a1d23;
    transition: filter 0.15s, transform 0.1s;
    white-space: nowrap;
}

.ct-btn:active {
    transform: scale(0.97);
}

.ct-btn:hover {
    filter: brightness(1.1);
}

.ct-btn-xs {
    padding: 4px 12px;
    font-size: 12.5px;
}

.ct-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
}

.ct-btn-success {
    background: linear-gradient(135deg, #66bb6a, #4caf50);
}

.ct-btn-danger {
    background: linear-gradient(135deg, #ef5350, #e53935);
}

.ct-btn-ghost {
    background: transparent;
    border: 1px solid #c0c6d0;
    color: #8c93a3;
}

.ct-btn-ghost:hover {
    border-color: rgba(79, 195, 247, 0.5);
    color: #1a1d23;
}

/* 表格 */
.ct-table-wrap {
    overflow-x: auto;
}

.ct-table {
    width: 100%;
    border-collapse: collapse;
    min-width: 760px;
}

.ct-table th,
.ct-table td {
    border: 1px solid #c0c6d0;
    padding: 11px 10px;
    text-align: left;
    font-size: 13.5px;
}

.ct-table th {
    background: #ffffff;
    color: #9fd8f5;
    font-weight: 600;
    white-space: nowrap;
}

.ct-table tbody tr {
    transition: background 0.15s;
}

.ct-table tbody tr:hover {
    background: rgba(79, 195, 247, 0.06);
}

.ct-row-expire {
    background: rgba(245, 158, 11, 0.08);
}

.ct-row-expire:hover {
    background: rgba(245, 158, 11, 0.14) !important;
}

.ct-row-invalid {
    background: rgba(239, 83, 80, 0.07);
}

.ct-row-invalid:hover {
    background: rgba(239, 83, 80, 0.13) !important;
}

.ct-op-cell {
    white-space: nowrap;
}

.ct-empty-cell {
    text-align: center;
    color: #8c93a3;
    padding: 32px 0 !important;
}

/* 状态标签 */
.ct-tag {
    font-size: 12px;
    padding: 2px 10px;
    border-radius: 4px;
    font-weight: 600;
    white-space: nowrap;
}

.ct-tag-valid {
    background: rgba(102, 187, 106, 0.15);
    color: #66bb6a;
}

.ct-tag-expire {
    background: rgba(245, 158, 11, 0.15);
    color: #ffb74d;
}

.ct-tag-invalid {
    background: rgba(239, 83, 80, 0.15);
    color: #ff8a80;
}

/* 弹窗 */
.ct-modal {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.65);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
    padding: 16px;
}

.ct-modal[hidden] {
    display: none;
}

.ct-modal-box {
    width: 100%;
    max-width: 620px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 24px;
    max-height: 90vh;
    overflow-y: auto;
    box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5);
}

.ct-modal-box h3 {
    font-size: 18px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid #c0c6d0;
}

.ct-form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0 12px;
}

.ct-field {
    margin-bottom: 12px;
}

.ct-field label {
    display: block;
    color: #8c93a3;
    font-size: 13px;
    margin-bottom: 6px;
}

.ct-field input,
.ct-field select,
.ct-field textarea {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    color: #1a1d23;
    font-size: 14px;
    font-family: inherit;
}

.ct-field textarea {
    resize: vertical;
    line-height: 1.7;
}

.ct-field input:focus,
.ct-field select:focus,
.ct-field textarea:focus {
    outline: none;
    border-color: #4fc3f7;
}

.ct-btn-row {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 6px;
}

/* 日期输入框图标在暗色下可见 */
.ct-field input[type="date"]::-webkit-calendar-picker-indicator {
    filter: invert(0.7);
    cursor: pointer;
}

/* 窄窗口适配 */
@media (max-width: 720px) {
    .ct-form-grid {
        grid-template-columns: 1fr;
    }
    .ct-add-btn {
        margin-left: 0;
        width: 100%;
    }
    .ct-table th,
    .ct-table td {
        padding: 8px 6px;
        font-size: 12.5px;
    }
}

/* ===== 图标生成 · ICO在线制作（左侧 09，ic- 前缀） ===== */
.ic-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
}

.ic-header {
    padding: 0 8px 14px;
}

.ic-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.ic-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px 22px;
}

/* 上传区 */
.ic-upload {
    border: 2px dashed #3a3f4c;
    border-radius: 12px;
    padding: 42px 20px;
    text-align: center;
    cursor: pointer;
    transition: border-color 0.2s, background 0.2s;
}

.ic-upload:hover,
.ic-upload.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.06);
}

.ic-upload h3 {
    font-size: 16px;
    color: #1a1d23;
}

.ic-upload p {
    color: #8c93a3;
    font-size: 13px;
    margin-top: 8px;
}

.ic-upload input[type="file"] {
    display: none;
}

/* 尺寸勾选 */
.ic-sizes {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 16px;
    margin: 16px 0 4px;
}

.ic-size {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13.5px;
    color: #1a1d23;
    cursor: pointer;
    user-select: none;
}

.ic-size input {
    accent-color: #4fc3f7;
    width: 15px;
    height: 15px;
    cursor: pointer;
}

/* 按钮 */
.ic-btns {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    margin-top: 14px;
}

.ic-btn {
    padding: 9px 16px;
    border: none;
    border-radius: 7px;
    cursor: pointer;
    font-size: 14px;
    color: #1a1d23;
    transition: filter 0.15s, transform 0.1s;
    white-space: nowrap;
}

.ic-btn:active {
    transform: scale(0.97);
}

.ic-btn:hover {
    filter: brightness(1.1);
}

.ic-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
}

.ic-btn-success {
    background: linear-gradient(135deg, #66bb6a, #4caf50);
}

.ic-btn-ghost {
    background: transparent;
    border: 1px solid #c0c6d0;
    color: #8c93a3;
}

.ic-btn-ghost:hover {
    border-color: rgba(79, 195, 247, 0.5);
    color: #1a1d23;
}

/* 预览区 */
.ic-previews {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    margin-top: 18px;
}

.ic-previews:empty {
    display: none;
}

.ic-preview {
    text-align: center;
}

.ic-canvas {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    margin-bottom: 6px;
}

.ic-preview p {
    font-size: 13px;
    color: #8c93a3;
}

/* 轻提示 */
.ic-toast {
    position: fixed;
    left: 50%;
    bottom: 48px;
    transform: translateX(-50%);
    background: rgba(35, 39, 48, 0.95);
    border: 1px solid rgba(79, 195, 247, 0.45);
    color: #4fc3f7;
    padding: 10px 18px;
    border-radius: 8px;
    font-size: 13px;
    z-index: 1001;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}

.ic-toast[hidden] {
    display: none;
}

@media (max-width: 720px) {
    .ic-btns .ic-btn {
        flex: 1 1 100%;
    }
}

/* 图标库 */
.ic-lib {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px 18px;
    margin-top: 16px;
}

.ic-lib-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 12px;
}

.ic-lib-title {
    font-size: 16px;
    font-weight: 700;
    color: #1a1d23;
}

.ic-lib-count {
    color: #8c93a3;
    font-size: 13px;
}

.ic-lib-clear {
    margin-left: auto;
    padding: 5px 12px;
    font-size: 12.5px;
}

.ic-lib-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 12px;
}

.ic-lib-item {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 12px 10px;
    text-align: center;
}

.ic-lib-thumb {
    width: 64px;
    height: 64px;
    margin: 0 auto 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f5f6f8;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
}

.ic-lib-thumb img {
    width: 48px;
    height: 48px;
    object-fit: contain;
}

.ic-lib-name {
    font-size: 13px;
    color: #1a1d23;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    margin-bottom: 4px;
}

.ic-lib-meta {
    font-size: 12px;
    color: #8c93a3;
    line-height: 1.6;
}

.ic-lib-btns {
    display: flex;
    gap: 6px;
    justify-content: center;
    margin-top: 8px;
}

.ic-lib-btns .ic-btn {
    padding: 5px 12px;
    font-size: 12.5px;
}

.ic-lib-empty {
    grid-column: 1 / -1;
    color: #8c93a3;
    font-size: 13px;
    text-align: center;
    padding: 18px 0 8px;
}

/* ===== 妙手连珠 · 五子棋（左侧 37，mz- 前缀） ===== */
.mz-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    padding-bottom: 24px;
    color: #1a1d23;
}

.mz-header {
    padding: 0 8px 14px;
}

.mz-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 1px;
}

.mz-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px 22px;
}

.mz-board {
    position: relative;
    width: 100%;
    max-width: 600px;
    aspect-ratio: 1 / 1;
    margin: 0 auto 18px;
    background: #e9d8b8;
    border: 12px solid #9b7b5b;
}

.mz-row {
    display: flex;
    height: calc(100% / 15);
}

.mz-cell {
    flex: 1;
    position: relative;
    cursor: pointer;
}

.mz-cell::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 1px;
    background: #444;
}

.mz-cell::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    width: 1px;
    background: #444;
}

.mz-piece {
    position: absolute;
    width: 82%;
    height: 82%;
    border-radius: 50%;
    left: 9%;
    top: 9%;
    z-index: 2;
    animation: mzDrop 0.18s ease-out; /* 落子弹入动画 */
}

.mz-piece-black {
    background: radial-gradient(circle at 35% 35%, #444, #000);
    box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.45);
}

.mz-piece-white {
    background: radial-gradient(circle at 35% 35%, #fff, #cacaca);
    box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);
}

.mz-panel {
    text-align: center;
}

.mz-btn {
    display: inline-block;
    padding: 8px 16px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 7px;
    margin: 4px;
    cursor: pointer;
    font-size: 14px;
    color: #1a1d23;
    transition: filter 0.15s, transform 0.1s;
}

.mz-btn:hover {
    filter: brightness(1.15);
}

.mz-btn:active {
    transform: scale(0.97);
}

.mz-btn.selected {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
}

.mz-info {
    margin: 10px 0 4px;
    font-size: 15px;
    color: #1a1d23;
}

.mz-tips {
    font-size: 14px;
    color: #ff8a80;
    min-height: 20px;
}

/* 落子弹入 */
@keyframes mzDrop {
    0% {
        transform: scale(1.7);
        opacity: 0;
    }

    60% {
        transform: scale(0.9);
        opacity: 1;
    }

    100% {
        transform: scale(1);
        opacity: 1;
    }
}

/* 最后一手红点呼吸标记 */
@keyframes mzLastPulse {
    0%, 100% {
        opacity: 0.95;
    }

    50% {
        opacity: 0.4;
    }
}

.mz-piece-last::after {
    content: "";
    position: absolute;
    left: 42%;
    top: 42%;
    width: 16%;
    height: 16%;
    border-radius: 50%;
    background: #ff5252;
    box-shadow: 0 0 4px rgba(255, 82, 82, 0.8);
    animation: mzLastPulse 1.6s ease-in-out infinite;
}

/* 获胜五连金光呼吸 */
@keyframes mzWinGlow {
    0%, 100% {
        box-shadow: 0 0 0 2px #ffd54f, 0 0 8px 2px rgba(255, 213, 79, 0.85);
    }

    50% {
        box-shadow: 0 0 0 3px #ffe082, 0 0 16px 6px rgba(255, 213, 79, 0.55);
    }
}

.mz-piece-win {
    animation: mzWinGlow 1.1s ease-in-out infinite; /* 定义在 .mz-piece 之后，覆盖落子动画 */
}

/* 电脑思考中状态呼吸 */
@keyframes mzThink {
    0%, 100% {
        opacity: 1;
    }

    50% {
        opacity: 0.45;
    }
}

.mz-info-thinking {
    animation: mzThink 1s ease-in-out infinite;
}

/* 空格悬停幻影棋子 */
.mz-cell:not(.mz-occupied):hover {
    background: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0.3) 0 34%, rgba(0, 0, 0, 0.12) 38%, transparent 42%);
}

/* 失败抖动 */
@keyframes mzShake {
    0%, 100% {
        transform: translateX(0);
    }

    20% {
        transform: translateX(-5px);
    }

    40% {
        transform: translateX(5px);
    }

    60% {
        transform: translateX(-3px);
    }

    80% {
        transform: translateX(3px);
    }
}

.mz-board-lose {
    animation: mzShake 0.4s ease-in-out;
}

/* ===== 本地生活服务平台（左侧 20，bh- 前缀） ===== */
.bh-app {
    margin: -19px 0 0; /* 页头距工具栏 5px（卡片即首块） */
    color: #1a1d23;
}

.bh-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px 18px;
    /* 卡片纵向铺满窗口：100dvh - 48头栏 - 45工具条 - 5间距 - 28底栏 - 24底部内边距 */
    min-height: calc(100vh - 150px);
    min-height: calc(100dvh - 150px);
}

@media (max-width: 599px) {
    .bh-card {
        min-height: calc(100vh - 160px);
        min-height: calc(100dvh - 160px); /* 小屏头栏56/底栏30 */
    }
}

/* 顶部导航（源页固定底栏改为卡片内 Tab） */
.bh-tabs {
    display: flex;
    gap: 8px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 6px;
    margin-bottom: 16px;
}

.bh-tab {
    flex: 1;
    padding: 9px 0;
    border: none;
    border-radius: 8px;
    background: transparent;
    color: #8c93a3;
    font-size: 14px;
    cursor: pointer;
    transition: color 0.15s, background 0.15s;
}

.bh-tab:hover {
    color: #1a1d23;
}

.bh-tab.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
}

.bh-body {
    position: relative;
}

.bh-page {
    display: none;
}

.bh-page.active {
    display: block;
    animation: bhFadeIn 0.2s ease; /* 切页淡入 */
}

@keyframes bhFadeIn {
    from {
        opacity: 0;
        transform: translateY(6px);
    }

    to {
        opacity: 1;
        transform: none;
    }
}

/* 分类子页：左分类右商家（桌面两栏，窄屏堆叠） */
.bh-sub-layout {
    display: grid;
    grid-template-columns: minmax(240px, 320px) 1fr;
    gap: 14px;
    align-items: start;
}

.bh-shop-col .bh-shop-empty {
    border: 1px dashed #3a3f4c;
    border-radius: 10px;
}

@media (max-width: 960px) {
    .bh-sub-layout {
        grid-template-columns: 1fr;
    }
}

.bh-section {
    padding: 4px 0 14px;
}

.bh-title-sm {
    font-size: 16px;
    font-weight: 600;
    margin-bottom: 12px;
    color: #1a1d23;
}

.bh-sub-title {
    font-size: 14px;
    font-weight: 600;
    margin: 12px 0;
    color: #1a1d23;
}

.bh-service-grid,
.bh-sub-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
    gap: 10px;
}

.bh-ico {
    font-size: 20px;
}

.bh-service-btn,
.bh-sub-btn {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px 6px;
    margin: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: #1a1d23;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
}

.bh-service-btn:hover,
.bh-sub-btn:hover {
    border-color: #4fc3f7;
}

.bh-service-btn:active,
.bh-sub-btn:active {
    background: rgba(79, 195, 247, 0.12);
}

#bh-publish-main .bh-sub-btn {
    background: rgba(79, 195, 247, 0.06);
    color: #4fc3f7;
    border-color: rgba(79, 195, 247, 0.3);
}

#bh-publish-sub .bh-sub-btn {
    background: #ffffff;
    color: #1a1d23;
}

.bh-sub-btn.active,
.bh-cate-btn.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6) !important;
    color: #fff !important;
    border-color: transparent !important;
}

/* 返回栏 */
.bh-back-bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 14px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    margin-bottom: 14px;
}

.bh-back-btn {
    background: rgba(79, 195, 247, 0.12);
    border: none;
    padding: 6px 14px;
    border-radius: 6px;
    color: #4fc3f7;
    font-size: 13px;
    cursor: pointer;
}

.bh-back-btn:hover {
    background: rgba(79, 195, 247, 0.22);
}

.bh-cate-title {
    font-size: 14px;
    font-weight: 500;
    color: #1a1d23;
}

.bh-back-spacer {
    width: 60px;
}

/* 内层卡片 */
.bh-card-inner {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 14px;
    margin-bottom: 10px;
}

.bh-card-inner h3 {
    font-size: 15px;
    margin-bottom: 6px;
    color: #1a1d23;
}

.bh-card-inner p {
    font-size: 13px;
    color: #8c93a3;
    line-height: 1.5;
}

/* 商家列表 */
.bh-shop-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.bh-shop-item {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
}

.bh-shop-name {
    font-size: 16px;
    font-weight: 600;
    margin-bottom: 6px;
    color: #1a1d23;
}

.bh-shop-desc {
    font-size: 13px;
    color: #8c93a3;
    line-height: 1.5;
    margin-bottom: 8px;
}

.bh-shop-tag {
    display: inline-block;
    background: rgba(79, 195, 247, 0.12);
    color: #4fc3f7;
    font-size: 11px;
    padding: 2px 8px;
    border-radius: 12px;
}

.bh-shop-info {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 12px;
    color: #8c93a3;
    margin-top: 10px;
}

.bh-shop-contact {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    border: none;
    padding: 7px 14px;
    border-radius: 8px;
    font-size: 13px;
    cursor: pointer;
}

.bh-shop-contact:hover {
    filter: brightness(1.1);
}

.bh-shop-empty {
    color: #8c93a3;
    font-size: 13px;
    text-align: center;
    padding: 16px 0;
}

/* 个人中心 */
.bh-stat-row {
    display: flex;
    justify-content: space-around;
    margin-top: 10px;
}

.bh-stat {
    text-align: center;
}

.bh-stat-num {
    font-size: 20px;
    font-weight: 700;
    color: #4fc3f7;
}

.bh-stat-label {
    font-size: 12px;
    color: #8c93a3;
    margin-top: 2px;
}

/* 入驻抽屉 */
.bh-mask {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.55);
    display: none;
    z-index: 5;
    border-radius: 12px;
}

.bh-mask.open {
    display: block;
}

.bh-join-box {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%); /* 居中上移，替代底部抽屉 */
    width: min(560px, 92%);
    max-height: 88%;
    overflow-y: auto;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45);
    animation: bhPopIn 0.2s ease;
}

@keyframes bhPopIn {
    from {
        opacity: 0;
        transform: translate(-50%, calc(-50% + 16px));
    }

    to {
        opacity: 1;
        transform: translate(-50%, -50%);
    }
}

.bh-join-title {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 15px;
    text-align: center;
    color: #1a1d23;
}

/* 登录 / 注册卡片 */
.bh-auth-card {
    max-width: 400px;
    margin: 30px auto 0;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 24px 22px;
}

.bh-auth-note {
    margin-top: 12px;
    font-size: 12px;
    color: #8c93a3;
    text-align: center;
    line-height: 1.6;
}

.bh-input {
    width: 100%;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 12px;
    margin-bottom: 12px;
    background: #ffffff;
    color: #1a1d23;
    font-size: 14px;
}

.bh-input::placeholder {
    color: #8c93a3;
}

.bh-input:focus {
    outline: none;
    border-color: #4fc3f7;
}

.bh-cate-wrap {
    max-height: 46vh;
    overflow-y: auto;
    margin: 10px 0 20px;
}

.bh-cate-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
    gap: 8px;
}

.bh-cate-btn {
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 8px 0;
    background: #ffffff;
    color: #1a1d23;
    font-size: 13px;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
}

#bh-join-main .bh-cate-btn {
    background: rgba(79, 195, 247, 0.06);
    color: #4fc3f7;
    border-color: rgba(79, 195, 247, 0.3);
}

#bh-join-sub .bh-cate-btn {
    background: #ffffff;
    color: #1a1d23;
}

.bh-btn-submit {
    width: 100%;
    padding: 14px;
    border: none;
    border-radius: 8px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    font-size: 15px;
    cursor: pointer;
}

.bh-btn-submit:hover {
    filter: brightness(1.1);
}

.bh-btn-close {
    width: 100%;
    margin-top: 10px;
    padding: 14px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    background: #ffffff;
    color: #8c93a3;
    font-size: 15px;
    cursor: pointer;
}

.bh-btn-close:hover {
    color: #1a1d23;
}

/* 模块内轻提示 */
.bh-toast {
    position: fixed;
    left: 50%;
    bottom: 60px;
    transform: translateX(-50%);
    background: #ffffff;
    border: 1px solid #4fc3f7;
    color: #1a1d23;
    padding: 10px 18px;
    border-radius: 8px;
    font-size: 14px;
    z-index: 999;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}

.bh-toast[hidden] {
    display: none;
}

/* 商家详情卡片居中 */
#bh-page-detail .bh-card-inner {
    max-width: 720px;
    margin-left: auto;
    margin-right: auto;
}

/* 我的需求列表 */
.bh-req-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    padding: 10px 0;
    border-bottom: 1px solid #c0c6d0;
}

.bh-req-item:last-child {
    border-bottom: none;
}

.bh-req-main {
    min-width: 0;
}

.bh-req-title {
    font-size: 14px;
    font-weight: 600;
    color: #1a1d23;
}

.bh-req-desc {
    font-size: 13px;
    color: #8c93a3;
    margin-top: 2px;
    line-height: 1.5;
}

.bh-req-meta {
    font-size: 12px;
    color: #8c93a3;
    margin-top: 4px;
}

.bh-req-del {
    background: rgba(255, 138, 128, 0.12);
    color: #ff8a80;
    border: none;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 12.5px;
    cursor: pointer;
    flex-shrink: 0;
}

.bh-req-del:hover {
    background: rgba(255, 138, 128, 0.22);
}

/* ===== 全局轻提示（showToast） ===== */
.global-toast {
    position: fixed;
    left: 50%;
    bottom: 60px;
    transform: translateX(-50%);
    background: #ffffff;
    border: 1px solid #4fc3f7;
    color: #1a1d23;
    padding: 10px 18px;
    border-radius: 8px;
    font-size: 14px;
    z-index: 9999;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}

.global-toast[hidden] {
    display: none;
}

/* ===== 自动发包（fb-，内嵌版，暗色卡片，与驾驶舱统一） ===== */
/* 基础层：仅提供布局骨架，视觉样式由暗色主题层(16200)统一覆盖 */
.fb-app {
    display: flex;
    flex-direction: column;
    margin: 0;
    height: calc(100dvh - 180px);
    overflow: hidden;
    min-height: 500px;
}

.fb-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 8px 14px;
}

.fb-bar-left {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
    flex: 1 1 auto;
}

.fb-bar-right {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    flex: 0 1 auto;
    min-width: 0;
}

.fb-logo {
    font-size: 20px;
    line-height: 1;
}

.fb-title {
    font-size: 15px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.fb-status {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    color: #8c93a3;
    padding: 3px 10px;
    border-radius: 999px;
    background: rgba(232, 234, 237, 0.06);
}

.fb-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #8c93a3;
}

.fb-status.is-on {
    color: #66bb6a;
    background: rgba(102, 187, 106, 0.1);
}

.fb-status.is-on .fb-dot {
    background: #66bb6a;
    box-shadow: 0 0 0 0 rgba(102, 187, 106, 0.5);
    animation: fbPulse 2s infinite;
}

.fb-status.is-off {
    color: #ff8a80;
    background: rgba(255, 138, 128, 0.1);
}

.fb-status.is-off .fb-dot {
    background: #ff8a80;
}

.fb-status.is-wait .fb-dot {
    background: #ffb703;
    animation: fbBlink 1s infinite;
}

@keyframes fbPulse {
    0% { box-shadow: 0 0 0 0 rgba(102, 187, 106, 0.45); }
    70% { box-shadow: 0 0 0 7px rgba(102, 187, 106, 0); }
    100% { box-shadow: 0 0 0 0 rgba(102, 187, 106, 0); }
}

@keyframes fbBlink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.3; }
}

.fb-tabs {
    display: flex;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 999px;
    padding: 3px;
    gap: 2px;
    min-width: 0;
}

.fb-tab {
    border: none;
    background: none;
    color: #8c93a3;
    font-size: 13px;
    font-weight: 600;
    padding: 6px 18px;
    border-radius: 999px;
    cursor: pointer;
    transition: 0.2s;
    font-family: inherit;
    white-space: nowrap;
}

.fb-tab:hover {
    color: #1a1d23;
}

.fb-tab.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #ffffff;
    box-shadow: 0 6px 16px -6px rgba(41, 182, 246, 0.6);
}

/* 承载区：iframe 与离线提示共用同一区域 */
.fb-stage {
    position: relative;
    flex: 1;
    min-height: 0;
}

.fb-frame {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    background: #fff;
    display: none;
}

.fb-frame.show {
    display: block;
}

.fb-off {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px;
    overflow: auto;
}

.fb-off.hide {
    display: none;
}

.fb-off-card {
    max-width: 560px;
    width: 100%;
    text-align: center;
}

.fb-off-icon {
    font-size: 46px;
    margin-bottom: 10px;
    opacity: 0.85;
}

.fb-off-card h3 {
    font-size: 19px;
    font-weight: 800;
    color: #1a1d23;
    margin: 0 0 8px;
}

.fb-off-desc {
    font-size: 13px;
    color: #8c93a3;
    margin: 0 auto 18px;
    max-width: 460px;
    line-height: 1.7;
}

.fb-steps {
    text-align: left;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px 18px 14px 34px;
    margin: 0 0 16px;
}

.fb-steps li {
    font-size: 13px;
    color: #1f2937;
    line-height: 1.9;
}

.fb-steps code {
    background: rgba(79, 195, 247, 0.1);
    border: 1px solid rgba(79, 195, 247, 0.25);
    color: #0369a1;
    border-radius: 6px;
    padding: 1px 7px;
    font-family: Consolas, "Courier New", monospace;
    font-size: 12px;
}

.fb-copy {
    border: 1px solid rgba(79, 195, 247, 0.4);
    background: rgba(79, 195, 247, 0.08);
    color: #4fc3f7;
    font-size: 12px;
    font-weight: 600;
    border-radius: 999px;
    padding: 2px 12px;
    margin-left: 8px;
    cursor: pointer;
    font-family: inherit;
    transition: 0.2s;
}

.fb-copy:hover {
    background: rgba(79, 195, 247, 0.18);
}

/* 移动端响应式规则已统一移至暗色主题层（搜索"自动发包 · 响应式布局"） */

/* ===== 视频编辑（ve-，ffmpeg.wasm 视频片段截取，暗色适配） ===== */
.ve-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.ve-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.ve-h-icon {
    font-size: 20px;
}

.ve-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.ve-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
}

.ve-upload {
    border: 2px dashed #3a3f4c;
    border-radius: 12px;
    padding: 46px 20px;
    text-align: center;
    cursor: pointer;
    transition: 0.2s;
    background: #f0f2f5;
    color: #8c93a3;
}

.ve-upload:hover {
    border-color: rgba(79, 195, 247, 0.5);
}

.ve-upload.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.08);
}

.ve-upload svg {
    display: block;
    margin: 0 auto 10px;
    color: #8c93a3;
}

.ve-upload-text {
    font-size: 15px;
    font-weight: 700;
    color: #cfd4de;
}

.ve-upload-sub {
    font-size: 12px;
    color: #6b7285;
    margin-top: 6px;
}

.ve-upload input[type="file"] {
    display: none;
}

.ve-preview {
    background: #000;
    border-radius: 10px;
    overflow: hidden;
    aspect-ratio: 16 / 9;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 18px;
}

.ve-preview video {
    width: 100%;
    height: 100%;
    max-height: 56vh;
}

.ve-time-info {
    display: flex;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    font-size: 13.5px;
    color: #8c93a3;
    margin-bottom: 8px;
}

.ve-time-info strong {
    color: #4fc3f7;
    font-weight: 700;
}

.ve-track {
    width: 100%;
    height: 56px;
    background: #f0f2f5;
    border-radius: 8px;
    position: relative;
    border: 1px solid #c0c6d0;
    cursor: pointer;
    user-select: none;
}

.ve-selection {
    position: absolute;
    top: 0;
    bottom: 0;
    background: rgba(79, 195, 247, 0.18);
}

.ve-handle {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 16px;
    cursor: ew-resize;
    background: linear-gradient(180deg, #4fc3f7, #29b6f6);
    display: flex;
    align-items: center;
    justify-content: center;
    color: #1a1d23;
    font-size: 12px;
    font-weight: bold;
    z-index: 2;
}

.ve-handle-l {
    left: -8px;
    border-radius: 4px 0 0 4px;
}

.ve-handle-r {
    right: -8px;
    border-radius: 0 4px 4px 0;
}

.ve-handle-tip {
    position: absolute;
    top: -26px;
    left: 50%;
    transform: translateX(-50%);
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    font-size: 11px;
    padding: 2px 7px;
    border-radius: 4px;
    white-space: nowrap;
    pointer-events: none;
}

.ve-playhead {
    position: absolute;
    top: -4px;
    bottom: -4px;
    width: 2px;
    background: #ff8a80;
    left: 0;
    pointer-events: none;
    z-index: 3;
}

.ve-playhead::before {
    content: "";
    position: absolute;
    top: -6px;
    left: -5px;
    width: 12px;
    height: 12px;
    background: #ff8a80;
    border-radius: 50%;
}

.ve-action {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-top: 16px;
    flex-wrap: wrap;
    gap: 12px;
}

.ve-btn {
    padding: 10px 20px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    cursor: pointer;
    font-size: 14.5px;
    font-family: inherit;
    background: #f0f2f5;
    color: #1a1d23;
    transition: 0.15s;
}

.ve-btn:hover {
    border-color: #4fc3f7;
}

.ve-btn-success {
    background: linear-gradient(135deg, #66bb6a, #4caf50);
    color: #1a1d23;
    border-color: transparent;
    font-weight: 700;
    box-shadow: 0 6px 16px -6px rgba(102, 187, 106, 0.5);
}

.ve-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.ve-status {
    padding: 10px 14px;
    border-radius: 8px;
    background: #f0f2f5;
    margin-top: 14px;
    font-size: 13.5px;
    color: #8c93a3;
    line-height: 1.6;
}

.ve-progress {
    width: 100%;
    height: 6px;
    background: #3a3f4c;
    border-radius: 3px;
    margin-top: 8px;
    overflow: hidden;
}

.ve-progress-fill {
    height: 100%;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    width: 0%;
    transition: width 0.3s;
}

/* ===== 文字提取（ot-，Tesseract.js v5 OCR 图片文字识别，暗色适配） ===== */
.ot-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.ot-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.ot-h-icon {
    font-size: 20px;
}

.ot-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.ot-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
}

.ot-upload {
    position: relative;
    border: 2px dashed #3a3f4c;
    border-radius: 12px;
    padding: 46px 20px;
    text-align: center;
    cursor: pointer;
    transition: 0.2s;
    background: #f0f2f5;
    color: #8c93a3;
}

.ot-upload:hover {
    border-color: rgba(79, 195, 247, 0.5);
}

.ot-upload.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.08);
}

.ot-upload svg {
    display: block;
    margin: 0 auto 10px;
    color: #8c93a3;
}

.ot-upload-text {
    font-size: 15px;
    font-weight: 700;
    color: #cfd4de;
}

.ot-upload-sub {
    font-size: 12px;
    color: #6b7285;
    margin-top: 6px;
}

.ot-upload input[type="file"] {
    display: none;
}

/* ============ 悬浮拍照按钮 ============ */
.ot-cam-fab {
    position: absolute;
    right: 14px;
    bottom: 14px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(79, 195, 247, 0.12);
    border: 1px solid rgba(79, 195, 247, 0.5);
    color: #4fc3f7;
    font-size: 18px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.15s, background 0.15s, border-color 0.15s;
    padding: 0;
    line-height: 1;
    z-index: 2;
}

@media (hover: hover) {
    .ot-cam-fab:hover {
        background: #4fc3f7;
        border-color: #4fc3f7;
        color: #0d2233;
        transform: scale(1.08);
    }
}

.ot-cam-fab:active {
    transform: scale(0.95);
}

/* ============ 摄像头模态框 ============ */
.ot-camera-modal {
    position: fixed;
    inset: 0;
    z-index: 9999;
    background: rgba(0, 0, 0, 0.82);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    animation: otFadeIn 0.15s ease;
}

/* 关键：display:flex 会覆盖 [hidden] 的默认 display:none，必须显式声明 */
.ot-camera-modal[hidden] {
    display: none;
}

@keyframes otFadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

.ot-camera-inner {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    overflow: hidden;
    width: min(620px, 100%);
    max-height: 92vh;
    display: flex;
    flex-direction: column;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
}

.ot-camera-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 16px;
    background: #f0f2f5;
    border-bottom: 1px solid #c0c6d0;
    color: #1a1d23;
    font-size: 14px;
    font-weight: 600;
}

.ot-camera-close {
    background: transparent;
    border: none;
    color: #8c93a3;
    font-size: 18px;
    cursor: pointer;
    padding: 2px 8px;
    border-radius: 4px;
}

@media (hover: hover) {
    .ot-camera-close:hover {
        background: #d5d9e0;
        color: #1a1d23;
    }
}

.ot-camera-stage {
    position: relative;
    background: #000;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    min-height: 240px;
}

.ot-camera-stage video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transform-origin: center;
}

/* 前置摄像头水平镜像，更符合握持直觉 */
.ot-camera-stage video.ot-cam-selfie {
    transform: scaleX(-1);
}

.ot-camera-error {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 20px;
    color: #ff8a80;
    font-size: 13px;
    line-height: 1.7;
    background: rgba(0, 0, 0, 0.8);
}

.ot-camera-error[hidden] {
    display: none;
}

.ot-camera-controls {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 14px 16px;
    background: #f0f2f5;
    border-top: 1px solid #c0c6d0;
    flex-wrap: wrap;
}

.ot-camera-facing {
    background: #d5d9e0;
    color: #cfd4de;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 6px 10px;
    font-size: 13px;
}

.ot-btn-capture {
    min-width: 100px;
    font-weight: 600;
}

.ot-btn-capture:disabled {
    opacity: 0.5;
    cursor: wait;
}

@media (max-width: 520px) {
    .ot-camera-controls {
        gap: 8px;
        padding: 12px;
    }
    .ot-btn-capture, .ot-camera-facing {
        font-size: 13px;
    }
}

.ot-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

@media (max-width: 768px) {
    .ot-grid {
        grid-template-columns: 1fr;
    }
}

.ot-section-title {
    margin: 0 0 10px;
    font-size: 14px;
    color: #cfd4de;
    font-weight: 700;
}

.ot-preview-box {
    background: #000;
    border-radius: 10px;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 300px;
    margin-bottom: 12px;
}

.ot-preview-box img {
    max-width: 100%;
    max-height: 420px;
    display: block;
}

.ot-result-box {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.ot-result-box textarea,
.ot-result-card textarea {
    flex: 1;
    min-height: 280px;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 12px;
    color: #1a1d23;
    font-size: 14px;
    line-height: 1.6;
    resize: vertical;
    font-family: inherit;
    width: 100%;
}

.ot-result-box textarea:focus,
.ot-result-card textarea:focus {
    outline: none;
    border-color: #4fc3f7;
}

.ot-result-card {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

/* ============================================================
   创意绘画（pa-，AI 创意绘画工作台，统一暗色主题）
   ============================================================ */
.pa-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.pa-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.pa-h-icon {
    font-size: 20px;
}

.pa-title {
    font-size: 17px;
    font-weight: 700;
    color: #1a1d23;
}

/* 左右两栏：左控制 320px，右结果自适应；窄屏堆叠 */
.pa-layout {
    display: grid;
    grid-template-columns: 320px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
}

.pa-panel {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px;
}

.pa-control {
    position: sticky;
    top: 0;
    max-height: calc(100dvh - 96px);
    overflow-y: auto;
    overscroll-behavior: contain;
}

.pa-result {
    min-height: calc(100dvh - 150px);
}

.pa-panel-title {
    margin: 0 0 10px;
    font-size: 13px;
    color: #8c93a3;
    font-weight: 700;
    letter-spacing: .4px;
}

/* Key 行 */
.pa-keyrow {
    display: flex;
    gap: 8px;
    margin-bottom: 12px;
}

.pa-keyrow .pa-input {
    flex: 1;
    min-width: 0;
}

/* 表单元素 */
.pa-label {
    display: block;
    font-size: 12px;
    color: #8c93a3;
    margin: 10px 0 6px;
}

.pa-slider-val {
    color: #4fc3f7;
    font-weight: 700;
}

.pa-input,
.pa-textarea {
    width: 100%;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 8px 10px;
    color: #1a1d23;
    font-size: 13px;
    font-family: inherit;
}

.pa-textarea {
    resize: vertical;
    min-height: 80px;
    line-height: 1.55;
}

.pa-textarea-sm {
    min-height: 56px;
}

.pa-input:focus,
.pa-textarea:focus {
    outline: none;
    border-color: #4fc3f7;
}

.pa-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
}

.pa-range {
    width: 100%;
    accent-color: #4fc3f7;
    cursor: pointer;
}

/* 按钮 */
.pa-btn {
    background: #d5d9e0;
    color: #1a1d23;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 7px 12px;
    font-size: 13px;
    cursor: pointer;
    transition: background .15s, border-color .15s, opacity .15s;
    font-family: inherit;
}

@media (hover: hover) {
    .pa-btn:hover {
        border-color: #4fc3f7;
    }
}

.pa-btn:disabled {
    opacity: .55;
    cursor: not-allowed;
}

.pa-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
    font-weight: 700;
    box-shadow: 0 6px 16px -6px rgba(79, 195, 247, .5);
    flex: 1;
}

.pa-btn-ghost {
    width: 100%;
    margin-top: 8px;
    background: transparent;
    border-style: dashed;
    color: #4fc3f7;
}

@media (hover: hover) {
    .pa-btn-ghost:hover {
        background: rgba(79, 195, 247, .08);
    }
}

.pa-btn-danger {
    background: #3a2024;
    border-color: #6b3033;
    color: #ff8a80;
}

@media (hover: hover) {
    .pa-btn-danger:hover {
        border-color: #ff8a80;
    }
}

.pa-btn-warn {
    background: linear-gradient(135deg, #ef6c57, #e53935);
    border-color: transparent;
    color: #1a1d23;
}

.pa-btn-sm {
    padding: 5px 10px;
    font-size: 12px;
}

.pa-block {
    display: block;
}

/* 模式 Tab */
.pa-mode-tabs {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 6px;
}

.pa-mode-tab {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 8px 4px;
    text-align: center;
    cursor: pointer;
    font-size: 12px;
    color: #cfd4de;
    transition: border-color .15s, background .15s;
}

.pa-mode-tab.active {
    background: rgba(79, 195, 247, .14);
    border-color: #4fc3f7;
    color: #4fc3f7;
    font-weight: 700;
}

/* 情绪 / 构图 chips */
.pa-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.pa-chip {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 999px;
    padding: 5px 11px;
    font-size: 12px;
    color: #cfd4de;
    cursor: pointer;
    transition: border-color .15s, background .15s, color .15s;
}

.pa-chip.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
}

/* 模式专用子选项 */
.pa-subopts {
    margin-top: 12px;
    padding-top: 10px;
    border-top: 1px dashed #3a3f4c;
}

.pa-actions {
    display: flex;
    gap: 8px;
    margin-top: 14px;
}

/* 进度 + 状态 */
.pa-progress {
    height: 5px;
    background: #f0f2f5;
    border-radius: 3px;
    overflow: hidden;
    margin-top: 12px;
}

.pa-progress > div {
    height: 100%;
    width: 0;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    transition: width .25s;
}

.pa-status {
    font-size: 12px;
    color: #8c93a3;
    margin-top: 8px;
    min-height: 18px;
    line-height: 1.5;
    word-break: break-all;
}

.pa-status-ok { color: #66bb6a; }
.pa-status-err { color: #ff8a80; }

/* 结果区 */
.pa-result-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}

.pa-result-head .pa-panel-title {
    margin: 0;
}

.pa-result-tabs {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.pa-result-tab {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 6px 12px;
    cursor: pointer;
    font-size: 12px;
    color: #cfd4de;
    transition: border-color .15s, background .15s, color .15s;
}

.pa-result-tab.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
    font-weight: 700;
}

/* 画廊：自适应列宽，随窗口伸缩 */
.pa-gallery {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 12px;
}

.pa-storyboard {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
    gap: 10px;
}

.pa-art-card,
.pa-frame {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.pa-img-wrap {
    aspect-ratio: 4 / 3;
    background: #000;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.pa-img-wrap-v {
    aspect-ratio: 3 / 4;
}

.pa-img-wrap img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.pa-card-info {
    padding: 8px 10px;
    font-size: 11px;
    color: #8c93a3;
    line-height: 1.5;
}

.pa-card-info strong {
    display: block;
    color: #1a1d23;
    font-size: 12px;
    margin-bottom: 3px;
}

.pa-card-actions {
    display: flex;
    gap: 6px;
    padding: 0 10px 10px;
}

.pa-frame-label {
    padding: 8px 10px;
    font-size: 11px;
    color: #8c93a3;
    line-height: 1.5;
}

.pa-frame-label strong {
    display: block;
    color: #1a1d23;
    margin-bottom: 2px;
}

/* 空状态 */
.pa-empty {
    text-align: center;
    padding: 56px 20px;
    color: #8c93a3;
    border: 2px dashed #3a3f4c;
    border-radius: 12px;
    font-size: 13px;
}

.pa-empty-sub {
    margin-top: 8px;
    font-size: 12px;
}

/* 详情弹窗 */
.pa-modal {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .78);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 9999;
    padding: 18px;
}

.pa-modal.open {
    display: flex;
}

.pa-modal-inner {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    max-width: 860px;
    width: 100%;
    max-height: 90vh;
    overflow-y: auto;
    padding: 14px;
}

.pa-modal-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
}

.pa-modal-inner img {
    width: 100%;
    border-radius: 10px;
    background: #000;
}

.pa-modal-meta {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    margin-top: 10px;
    font-size: 12px;
    color: #8c93a3;
    line-height: 1.8;
    white-space: pre-wrap;
    word-break: break-all;
}

.pa-modal-meta strong {
    color: #1a1d23;
}

/* 响应式：窄屏上下堆叠，控制栏不再 sticky */
@media (max-width: 1024px) {
    .pa-layout {
        grid-template-columns: 1fr;
    }
    .pa-control {
        position: static;
        max-height: none;
    }
    .pa-result {
        min-height: 320px;
    }
}

@media (max-width: 560px) {
    .pa-gallery {
        grid-template-columns: 1fr 1fr;
    }
    .pa-storyboard {
        grid-template-columns: 1fr 1fr;
    }
}

@media (max-width: 380px) {
    .pa-gallery,
    .pa-storyboard {
        grid-template-columns: 1fr;
    }
}

.ot-result-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

.ot-result-meta {
    font-size: 12px;
    color: #8c93a3;
    background: #f0f2f5;
    padding: 4px 10px;
    border-radius: 6px;
    border: 1px solid #c0c6d0;
}

.ot-result-actions {
    justify-content: flex-start;
}

/* ============================================================
   更多信息（mi-，信息页，统一暗色主题）
   ============================================================ */
.mi-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.mi-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 12px;
}

.mi-h-icon {
    font-size: 20px;
}

.mi-title {
    font-size: 17px;
    font-weight: 700;
}

.mi-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}

.mi-card-wide {
    grid-column: 1 / -1;
}

.mi-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    overflow: hidden;
}

.mi-card-head {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 14px;
    border-bottom: 1px solid #c0c6d0;
    background: #f0f2f5;
}

.mi-card-head h3 {
    margin: 0;
    font-size: 14px;
    font-weight: 700;
    color: #1a1d23;
}

.mi-card-icon {
    font-size: 16px;
}

/* ===== 左35 更多信息：联系方式卡片标语行 ===== */
.mi-slogan {
    margin-top: 14px;
    padding: 12px 16px;
    border-radius: 10px;
    background: linear-gradient(135deg, #f4f8ff 0%, #eaf1fb 60%, #f6f2ff 100%);
    border: 1px solid #d9e4f3;
    box-shadow: 0 2px 8px rgba(21, 101, 192, 0.06);
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 6px;
    flex-wrap: wrap;
}

.mi-slogan::before,
.mi-slogan::after {
    content: "";
    flex: 0 1 40px;
    height: 1px;
    align-self: center;
    background: linear-gradient(90deg, transparent, #9db8dc, transparent);
}

.mi-slogan-brand {
    font-size: 22px;
    font-weight: 800;
    letter-spacing: 3px;
    background: linear-gradient(90deg, #0d47a1 0%, #1976d2 55%, #42a5f5 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    filter: drop-shadow(0 1px 2px rgba(13, 71, 161, 0.25));
}

.mi-slogan-name {
    font-size: 16px;
    font-weight: 700;
    color: #1a1d23;
    letter-spacing: 2px;
}

.mi-slogan-sep {
    font-style: normal;
    color: #8c93a3;
    margin: 0 4px;
}

.mi-slogan-tag {
    font-size: 13.5px;
    color: #3a4657;
    letter-spacing: 1px;
}

.mi-card-body {
    padding: 14px;
    font-size: 13px;
    line-height: 1.75;
    color: #cfd4de;
}

.mi-card-body p {
    margin: 0 0 8px;
}

.mi-card-body p:last-child {
    margin-bottom: 0;
}

.mi-muted {
    color: #8c93a3;
    font-size: 12px;
}

/* 键值对列表 */
.mi-kv {
    list-style: none;
    margin: 0;
    padding: 0;
}

.mi-kv li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 7px 0;
    border-bottom: 1px dashed #3a3f4c;
    font-size: 13px;
}

.mi-kv li:last-child {
    border-bottom: none;
    padding-bottom: 0;
}

.mi-kv li:first-child {
    padding-top: 0;
}

.mi-kv span {
    color: #8c93a3;
}

.mi-kv b {
    color: #1a1d23;
    font-weight: 600;
    text-align: right;
}

.mi-todo {
    color: #5a6070 !important;
    font-weight: 400 !important;
}

/* 更新日志时间线 */
.mi-log {
    list-style: none;
    margin: 0 0 8px;
    padding: 0;
}

.mi-log li {
    display: flex;
    gap: 12px;
    padding: 8px 0;
    border-bottom: 1px dashed #3a3f4c;
}

.mi-log li:last-child {
    border-bottom: none;
}

.mi-log-date {
    flex: 0 0 86px;
    color: #4fc3f7;
    font-size: 12px;
    font-weight: 600;
    padding-top: 2px;
}

.mi-log b {
    display: block;
    font-size: 13px;
    color: #1a1d23;
    margin-bottom: 2px;
}

.mi-log p {
    margin: 0;
    font-size: 12px;
    color: #8c93a3;
}

@media (max-width: 760px) {
    .mi-grid {
        grid-template-columns: 1fr;
    }
    .mi-card-wide {
        grid-column: auto;
    }
}

.ot-action-row {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    align-items: center;
}

.ot-preprocess {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    align-items: center;
    margin: 10px 0;
    padding: 10px 12px;
    background: #f0f2f5;
    border-radius: 8px;
    border: 1px solid #c0c6d0;
    font-size: 13px;
    color: #cfd4de;
}

.ot-pp-item {
    display: flex;
    align-items: center;
    gap: 4px;
    cursor: pointer;
    user-select: none;
}

.ot-pp-item input[type="checkbox"] {
    accent-color: #4fc3f7;
    cursor: pointer;
}

.ot-pp-scale {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 5px 8px;
    color: #1a1d23;
    font-size: 12px;
    font-family: inherit;
}

.ot-lang-select {
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 9px 12px;
    color: #1a1d23;
    font-size: 14px;
    font-family: inherit;
}

.ot-btn {
    padding: 10px 16px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    cursor: pointer;
    font-size: 14px;
    font-family: inherit;
    background: #f0f2f5;
    color: #1a1d23;
    transition: 0.15s;
}

.ot-btn:hover {
    border-color: #4fc3f7;
}

.ot-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    border-color: transparent;
    font-weight: 700;
    box-shadow: 0 6px 16px -6px rgba(79, 195, 247, 0.5);
}

.ot-btn-success {
    background: linear-gradient(135deg, #66bb6a, #4caf50);
    color: #1a1d23;
    border-color: transparent;
    font-weight: 700;
    box-shadow: 0 6px 16px -6px rgba(102, 187, 106, 0.5);
}

.ot-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.ot-status {
    padding: 10px 14px;
    border-radius: 8px;
    background: #f0f2f5;
    margin-top: 14px;
    font-size: 13.5px;
    color: #8c93a3;
    line-height: 1.6;
}

.ot-progress {
    width: 100%;
    height: 6px;
    background: #3a3f4c;
    border-radius: 3px;
    margin-top: 8px;
    overflow: hidden;
}

.ot-progress-fill {
    height: 100%;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    width: 0%;
    transition: width 0.3s;
}

.syt-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.syt-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px 22px;
    min-height: calc(100vh - 150px);
    min-height: calc(100dvh - 150px);
}

.syt-hero {
    text-align: center;
    padding: 6px 10px 4px;
}

.syt-pill {
    display: inline-flex;
    gap: 8px;
    align-items: center;
    font-size: 13px;
    font-weight: 700;
    padding: 8px 18px;
    border-radius: 999px;
    background: rgba(79, 195, 247, 0.08);
    border: 1px solid rgba(79, 195, 247, 0.22);
    color: #4b5563;
}

.syt-pill i {
    color: #ffb703;
    font-style: normal;
}

.syt-hero h1 {
    font-size: clamp(34px, 6vw, 56px);
    font-weight: 900;
    line-height: 1.05;
    letter-spacing: -1px;
    margin-top: 14px;
    background: linear-gradient(115deg, #29b6f6 0%, #0277bd 45%, #4fc3f7 90%);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.syt-hero h1 .syt-small {
    display: block;
    font-size: clamp(14px, 2.6vw, 20px);
    letter-spacing: 3px;
    font-weight: 800;
    margin-top: 8px;
    background: none;
    -webkit-text-fill-color: #8c93a3;
    color: #8c93a3;
}

.syt-hero p {
    margin: 12px auto 0;
    max-width: 680px;
    color: #8c93a3;
    font-size: 14px;
}

/* 统计 */
.syt-stats {
    display: grid;
    grid-template-columns: repeat(9, 1fr); /* 9 卡一行显示 */
    gap: 8px;
    margin-top: 20px;
}

.syt-statcard {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 12px 4px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

.syt-statcard::after {
    content: "";
    position: absolute;
    bottom: -20px;
    right: -20px;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    opacity: 0.1;
}

.syt-statnum {
    font-size: clamp(20px, 2.4vw, 30px);
    font-weight: 900;
    line-height: 1;
    background: linear-gradient(120deg, #29b6f6, #0288d1);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.syt-statlabel {
    color: #8c93a3;
    font-size: 11px;
    margin-top: 5px;
    font-weight: 600;
    white-space: nowrap;
}

@media (max-width: 900px) {
    .syt-stats {
        grid-template-columns: repeat(3, 1fr); /* 窄屏回退 3 列 */
    }

    .syt-statlabel {
        white-space: normal;
    }
}

/* 片区快速跳转 */
.syt-quicknav {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    justify-content: center;
    margin-top: 18px;
}

.syt-quicknav a {
    color: #4b5563;
    text-decoration: none;
    font-size: 12.5px;
    font-weight: 600;
    padding: 6px 13px;
    border-radius: 999px;
    border: 1px solid #c0c6d0;
    background: #ffffff;
    transition: 0.2s;
    white-space: nowrap;
}

.syt-quicknav a:hover {
    color: #1a1d23;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
}

/* 筛选条 */
.syt-filterbar {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: center;
    justify-content: space-between;
    padding: 13px 16px;
    margin-top: 20px;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
}

.syt-search {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 999px;
    padding: 9px 16px;
    flex: 1;
    min-width: 230px;
}

.syt-search input {
    background: none;
    border: none;
    outline: none;
    color: #1a1d23;
    flex: 1;
    font-size: 14px;
}

.syt-search input::placeholder {
    color: #6b7285;
}

.syt-search i {
    color: #6b7285;
    font-style: normal;
}

.syt-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.syt-chip {
    font-size: 13px;
    font-weight: 700;
    padding: 7px 15px;
    border-radius: 999px;
    cursor: pointer;
    border: 1px solid #c0c6d0;
    background: #ffffff;
    color: #1a1d23;
    transition: 0.2s;
    user-select: none;
}

.syt-chip:hover {
    color: #1a1d23;
    border-color: #4fc3f7;
}

.syt-chip.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    border-color: transparent;
    box-shadow: 0 8px 20px -8px rgba(41, 182, 246, 0.6);
}

/* 片区 */
.syt-section {
    margin-top: 34px;
}

.syt-region {
    margin-top: 30px;
    scroll-margin-top: 12px;
}

.syt-regionhead {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
    margin-bottom: 16px;
}

.syt-regionindex {
    font-size: clamp(36px, 5vw, 58px);
    font-weight: 900;
    line-height: 0.85;
    background: linear-gradient(135deg, var(--syt-a), var(--syt-b));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.syt-regionmeta {
    flex: 1;
    min-width: 240px;
}

.syt-rtag {
    display: inline-block;
    font-size: 12px;
    font-weight: 800;
    padding: 4px 12px;
    border-radius: 999px;
    background: linear-gradient(135deg, var(--syt-a), var(--syt-b));
    color: #1a1d23;
    margin-right: 8px;
}

.syt-regionmeta h2 {
    font-size: clamp(20px, 3vw, 28px);
    font-weight: 900;
    letter-spacing: -0.5px;
    margin-top: 4px;
    color: #1a1d23;
}

.syt-regionmeta p {
    color: #8c93a3;
    max-width: 680px;
    font-size: 13.5px;
    margin-top: 4px;
}

.syt-regionline {
    flex: 1;
    height: 3px;
    min-width: 50px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--syt-a), transparent);
    align-self: center;
}

/* 景区卡片 */
.syt-spotgrid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(310px, 1fr));
    gap: 14px;
}

.syt-spot {
    position: relative;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 16px;
    overflow: hidden;
    transition: transform 0.25s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.25s;
    display: flex;
    flex-direction: column;
}

.syt-spot::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 4px;
    background: linear-gradient(90deg, var(--syt-a), var(--syt-b));
}

.syt-spot:hover {
    transform: translateY(-5px);
    box-shadow: 0 18px 36px -18px rgba(0, 0, 0, 0.18);
}

.syt-spottop {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
}

.syt-spotname {
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -0.3px;
    line-height: 1.3;
    color: #1a1d23;
}

.syt-tagrow {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 8px;
}

.syt-tagmini {
    font-size: 11px;
    font-weight: 600;
    padding: 3px 9px;
    border-radius: 999px;
    background: #eef1f5;
    color: #4b5563;
}

.syt-badge {
    flex-shrink: 0;
    font-size: 12px;
    font-weight: 900;
    padding: 6px 11px;
    border-radius: 10px;
    color: #1a1d23;
    white-space: nowrap;
    box-shadow: 0 8px 18px -8px rgba(0, 0, 0, 0.15);
}

.syt-lv5 { background: linear-gradient(135deg, #ff9a3c, #ff6b6b); }
.syt-lv4 { background: linear-gradient(135deg, #b794f6, #ff6b9d); }
.syt-lv3 { background: linear-gradient(135deg, #4d96ff, #00b4d8); }
.syt-lv2 { background: linear-gradient(135deg, #43e97b, #38f9d7); }
.syt-lvfree { background: linear-gradient(135deg, #2ecc71, #16a085); }
.syt-lvother { background: linear-gradient(135deg, #7c86a8, #565e80); }

.syt-spotticket {
    margin-top: 11px;
    font-size: 12.5px;
    font-weight: 600;
    color: #6b7285;
    background: #f0f2f5;
    border-left: 3px solid var(--syt-a);
    padding: 7px 11px;
    border-radius: 0 9px 9px 0;
}

.syt-spotnote {
    margin-top: 9px;
    font-size: 12px;
    font-weight: 700;
    color: #c62828;
    background: rgba(255, 138, 128, 0.1);
    border-radius: 8px;
    padding: 6px 10px;
    display: inline-flex;
    gap: 6px;
    align-items: center;
}

.syt-spotres {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    margin-top: 12px;
}

.syt-reschip {
    font-size: 12px;
    padding: 4px 11px;
    border-radius: 999px;
    background: rgba(79, 195, 247, 0.1);
    border: 1px solid rgba(79, 195, 247, 0.16);
    color: #0284c7;
    font-weight: 600;
}

.syt-fac {
    margin-top: 12px;
    border-top: 1px dashed #d8dde6;
    padding-top: 10px;
}

.syt-facgroup {
    margin-bottom: 9px;
}

.syt-facgroup h5 {
    font-size: 12px;
    color: #1976d2;
    font-weight: 800;
    letter-spacing: 0.5px;
    margin-bottom: 6px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.syt-facgroup h5::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--syt-a), var(--syt-b));
}

.syt-facgroup ul {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0;
    padding: 0;
}

.syt-facgroup li {
    font-size: 12px;
    color: #4b5563;
    padding: 4px 10px;
    border-radius: 8px;
    background: #f0f2f5;
}

/* 出行须知 / 全域配套 */
.syt-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 12px;
    font-weight: 800;
    letter-spacing: 2px;
    color: #1976d2;
    padding: 6px 14px;
    border-radius: 999px;
    background: rgba(79, 195, 247, 0.1);
    border: 1px solid rgba(79, 195, 247, 0.22);
}

.syt-section-title {
    font-size: clamp(22px, 3.6vw, 32px);
    font-weight: 900;
    margin: 12px 0 8px;
    letter-spacing: -0.5px;
    background: linear-gradient(100deg, #1a1d23 30%, #29b6f6 70%, #0288d1);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.syt-section-sub {
    color: #8c93a3;
    max-width: 680px;
    font-size: 14px;
}

.syt-notice-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 14px;
    margin-top: 20px;
}

.syt-noticecard {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 16px;
    display: flex;
    gap: 13px;
    align-items: flex-start;
}

.syt-noticecard .syt-nicon {
    font-size: 24px;
    flex-shrink: 0;
}

.syt-noticecard h6 {
    font-size: 14.5px;
    font-weight: 800;
    margin-bottom: 5px;
    color: #1a1d23;
}

.syt-noticecard p {
    font-size: 12.5px;
    color: #8c93a3;
    margin: 0;
}

.syt-gen-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
    gap: 14px;
    margin-top: 20px;
}

.syt-gencard {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 18px;
    transition: 0.25s;
}

.syt-gencard:hover {
    transform: translateY(-4px);
    box-shadow: 0 18px 36px -18px rgba(0, 0, 0, 0.18);
}

.syt-genicon {
    font-size: 25px;
    width: 52px;
    height: 52px;
    border-radius: 15px;
    display: grid;
    place-items: center;
    background: rgba(79, 195, 247, 0.1);
    margin-bottom: 12px;
}

.syt-gencard h3 {
    font-size: 17px;
    font-weight: 900;
    margin-bottom: 8px;
    color: #1a1d23;
}

.syt-genitem {
    padding: 9px 0;
    border-top: 1px solid #c0c6d0;
}

.syt-genitem:first-of-type {
    border-top: none;
}

.syt-genitem h6 {
    font-size: 13.5px;
    font-weight: 800;
    color: #1976d2;
    margin-bottom: 3px;
}

.syt-genitem p {
    font-size: 12.5px;
    color: #8c93a3;
    margin: 0;
}

/* 页脚说明 */
.syt-foot {
    margin-top: 30px;
    padding-top: 16px;
    border-top: 1px solid #c0c6d0;
    text-align: center;
    color: #6b7285;
    font-size: 12.5px;
}

/* 滚动揭示 */
.syt-reveal {
    opacity: 0;
    transform: translateY(16px);
    transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.2, 0.8, 0.2, 1);
}

.syt-reveal.in {
    opacity: 1;
    transform: none;
}

@media (prefers-reduced-motion: reduce) {
    .syt-reveal {
        opacity: 1;
        transform: none;
    }
}

@media (max-width: 640px) {
    .syt-card {
        padding: 14px;
    }

    .syt-spotgrid {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 599px) {
    .syt-card {
        min-height: calc(100vh - 160px);
        min-height: calc(100dvh - 160px); /* 小屏头栏56/底栏30 */
    }
}

/* ===== 打印文件（pr-，A4 合同/文档打印工具，暗色适配；A4 纸张保持白底黑字用于打印） ===== */
.pr-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.pr-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.pr-h-icon {
    font-size: 20px;
}

.pr-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.pr-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
}

.pr-form-row {
    display: flex;
    gap: 16px;
    margin-bottom: 14px;
}

.pr-form-col {
    flex: 1;
    display: flex;
    flex-direction: column;
}

.pr-form-col-grow {
    flex: 2;
}

.pr-form-col-date {
    flex: 0 0 200px;
}

.pr-label {
    display: block;
    font-size: 13px;
    color: #8c93a3;
    margin-bottom: 6px;
    font-weight: 600;
}

.pr-label-sub {
    color: #6b7285;
    font-size: 12px;
    font-weight: 400;
}

.pr-app input[type="text"],
.pr-app input[type="date"],
.pr-app textarea {
    width: 100%;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    color: #1a1d23;
    font-size: 15px;
    font-family: inherit;
    outline: none;
    transition: border-color 0.2s;
    box-sizing: border-box;
}

.pr-app input:focus,
.pr-app textarea:focus {
    border-color: #4fc3f7;
}

.pr-app input[type="date"]::-webkit-calendar-picker-indicator {
    filter: invert(0.85);
    cursor: pointer;
}

.pr-app textarea {
    min-height: 180px;
    resize: vertical;
    line-height: 1.8;
}

.pr-sign-input {
    min-height: 70px !important;
}

.pr-party-input {
    min-height: 60px !important;
    resize: vertical;
}

.pr-preview-title {
    font-size: 15px;
    font-weight: 700;
    color: #cfd4de;
    margin-bottom: 12px;
}

/* A4 纸张容器（纯背景+内边距，随内容自然增长；flex column + gap 让多张纸上下堆叠，align-items:flex-start 不压缩子元素宽度） */
.pr-paper-container {
    background: #ffffff;
    padding: 20px;
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
}

/* A4 纸张：白底黑字，打印用；block 级 + margin:0 auto 水平居中；min-height:297mm 保证单页时够大，多页时随内容撑开；overflow 不限制以便 JS 能正确测量 scrollHeight */
.pr-app .a4-page {
    display: block;
    width: 210mm;
    min-height: 297mm;
    background: #fff;
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.45);
    padding: 25mm 20mm;
    margin: 0 auto;
    position: relative;
    word-break: break-word;
    line-height: 1.8;
    font-size: 14px;
    color: #000;
    flex-shrink: 0; /* flex column 里防止被压缩 */
    /* 预览自适应：容器窄于纸宽时由 JS 设 --pr-zoom 等比缩小。
       用 zoom 而非 transform：zoom 参与布局计算，不产生横向滚动条与底部空白；
       纸面几何始终为标准 A4（内容宽 170mm），换行位置与打印完全一致 */
    zoom: var(--pr-zoom, 1);
}

.pr-app .a4-page .doc-title {
    text-align: center;
    font-size: 22px;
    font-weight: bold;
    margin-bottom: 24px;
    line-height: 1.4;
    color: #000;
}

.pr-app .doc-parties {
    display: flex;
    justify-content: space-between;
    margin-bottom: 20px;
    font-size: 15px;
}

.pr-app .doc-parties .party {
    width: 45%;
    color: #000;
    white-space: pre-wrap;
}

.pr-app .doc-body {
    text-indent: 2em;
    white-space: pre-wrap;
    font-size: 15px;
    line-height: 1.8;
    color: #000;
}

.pr-app .doc-sign-row {
    display: flex;
    justify-content: space-between;
    margin-top: 70px;
    font-size: 15px;
}

.pr-app .doc-sign-row .sign-block {
    width: 40%;
    white-space: pre-wrap;
    color: #000;
}

.pr-print-bar {
    text-align: center;
    margin-top: 4px;
    padding: 16px;
}

.pr-btn-print {
    padding: 12px 36px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    border: none;
    border-radius: 8px;
    font-size: 16px;
    font-weight: 700;
    cursor: pointer;
    font-family: inherit;
    transition: opacity 0.15s;
    box-shadow: 0 6px 16px -6px rgba(79, 195, 247, 0.5);
}

.pr-btn-print:hover {
    opacity: 0.92;
}

.pr-tip {
    font-size: 12px;
    color: #6b7285;
    text-align: center;
    margin-top: 10px;
}

@media (max-width: 800px) {
    .pr-form-row {
        flex-direction: column;
        gap: 14px;
    }
    .pr-form-col-date {
        flex: 1;
    }
    /* A4 纸面不再压扁为 100% 宽：保持标准 A4 几何，由 --pr-zoom 等比缩小适配窄屏，
       保证平板预览与打印排版一致 */
}

/* 打印样式：仅在 body.pr-printing 时生效，避免影响其他页面 */
@media print {
    /* 1. 重置整条父链：去掉所有 flex/max-width/padding 约束，让 .a4-page 能撑满打印页 */
    body.pr-printing .app,
    body.pr-printing .app-body,
    body.pr-printing .content,
    body.pr-printing .content-inner {
        display: block !important;
        width: 100% !important;
        max-width: none !important;
        padding: 0 !important;
        margin: 0 !important;
        background: #fff !important;
    }

    /* 2. 隐藏所有非打印 UI */
    body.pr-printing .app-header,
    body.pr-printing .app-footer,
    body.pr-printing .menu-bar,
    body.pr-printing .content-toolbar,
    body.pr-printing .content-inner > :not(.pr-app),
    body.pr-printing .pr-app > :not(.pr-paper-card),
    body.pr-printing .pr-paper-card > :not(.pr-paper-container) {
        display: none !important;
    }

    /* 3. 简化打印容器链 */
    body.pr-printing .pr-app {
        display: block !important;
        margin: 0 !important;
        padding: 0 !important;
    }
    body.pr-printing .pr-paper-card {
        display: block !important;
        background: #fff !important;
        border: none !important;
        box-shadow: none !important;
        padding: 0 !important;
        margin: 0 !important;
    }
    body.pr-printing .pr-paper-container {
        display: block !important;
        padding: 0 !important;
        background: #fff !important;
        max-height: none !important;
        overflow: visible !important;
    }

    /* 4. A4 纸张：宽度交给可打印区（@page margin 20mm → 170mm，与预览内容宽一致），
       强制 210mm 会被平板打印引擎裁切/缩放导致排版与预览不符；
       页边距统一由 @page margin 提供，纸面 padding 清零避免双重边距 */
    body.pr-printing .a4-page {
        display: block !important;
        width: auto !important;
        padding: 0 !important;
        margin: 0 !important;
        min-height: auto !important;
        zoom: 1 !important; /* 清除屏幕 --pr-zoom 预览缩放 */
        box-shadow: none !important;
        page-break-after: always;
        break-after: page;
        color: #000 !important;
        background: #fff !important;
    }
    body.pr-printing .a4-page:last-child {
        page-break-after: auto;
        break-after: auto;
    }

    @page {
        size: A4;
        margin: 20mm; /* 与 er/ml 统一：@page 全局合并按最后声明生效，各模块一致取 20mm */
    }
}

/* ============================================================
   触摸设备适配（高端平板 / 手机，pointer: coarse）
   1) 触控热区放大到接近 44px 推荐基线
   2) 输入控件字号 ≥16px，避免 iPad/iPhone 聚焦时页面自动缩放
   3) 用 :active 按压反馈替代鼠标 hover 高亮（hover 已隔离）
   ============================================================ */
@media (pointer: coarse) {
    /* 创意绘画：主操作按钮 */
    .pa-btn {
        min-height: 42px;
        padding: 10px 16px;
        font-size: 14px;
    }

    .pa-btn-sm {
        min-height: 38px;
        padding: 8px 12px;
    }

    .pa-btn:not(:disabled):active {
        transform: scale(0.98);
    }

    /* 模式 / 结果页签 */
    .pa-mode-tab {
        padding: 12px 6px;
        font-size: 13px;
    }

    .pa-result-tab {
        padding: 10px 16px;
        font-size: 13px;
    }

    .pa-mode-tab:active,
    .pa-result-tab:active {
        opacity: .82;
    }

    /* 情绪 / 构词标签 */
    .pa-chip {
        padding: 9px 15px;
        font-size: 13px;
    }

    .pa-chip:active {
        opacity: .8;
    }

    /* 表单控件：16px 防聚焦缩放 */
    .pa-input,
    .pa-textarea {
        font-size: 16px;
        padding: 10px 12px;
    }

    /* 滑块加大纵向触摸带 */
    .pa-range {
        height: 34px;
    }

    .pa-keyrow {
        gap: 10px;
    }

    /* 相机弹窗：关闭按钮与底部控件热区加大 */
    .ot-camera-close {
        min-width: 40px;
        min-height: 40px;
        padding: 8px 12px;
        font-size: 20px;
    }

    .ot-camera-controls {
        padding: 18px 16px;
    }
}

/* ============================================================
   精准计算（pc-，高精度科学计算器，统一暗色主题）
   ============================================================ */
.pc-app {
    margin: -19px 0 0;
    color: #1a1d23;
    max-width: 520px;
    margin-left: auto;
    margin-right: auto;
    padding: 0 4px;
}

.pc-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
    padding: 0 2px;
}

.pc-title {
    font-size: 17px;
    font-weight: 700;
}

.pc-modes {
    display: flex;
    gap: 6px;
}

.pc-mode-btn {
    padding: 5px 12px;
    border: 1px solid #c0c6d0;
    background: #ffffff;
    color: #8c93a3;
    border-radius: 6px;
    cursor: pointer;
    font-size: 12px;
    font-family: inherit;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
}

@media (hover: hover) {
    .pc-mode-btn:hover {
        background: #d5d9e0;
        color: #1a1d23;
    }
}

.pc-mode-btn.pc-active {
    background: #4fc3f7;
    border-color: #4fc3f7;
    color: #0d2233;
    font-weight: 700;
}

/* 计算器主卡片 */
.pc-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 16px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
}

/* 显示屏 */
.pc-display {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 14px 16px;
    margin-bottom: 14px;
    text-align: right;
    word-break: break-all;
    min-height: 90px;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
}

.pc-expression {
    font-size: 15px;
    color: #8c93a3;
    min-height: 22px;
    margin-bottom: 4px;
    line-height: 1.4;
}

.pc-result {
    font-size: 30px;
    font-weight: 700;
    color: #1a1d23;
    line-height: 1.2;
    transition: color 0.15s;
}

.pc-result.pc-error {
    color: #ff8a80;
    font-size: 18px;
}

/* 加载提示 */
.pc-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 12px;
    color: #8c93a3;
    font-size: 13px;
    margin-bottom: 14px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
}

.pc-loading[hidden] {
    display: none;
}

.pc-loading-spinner {
    display: inline-block;
    width: 16px;
    height: 16px;
    border: 2px solid #3a3f4c;
    border-top-color: #4fc3f7;
    border-radius: 50%;
    animation: pcSpin 0.7s linear infinite;
}

@keyframes pcSpin {
    to { transform: rotate(360deg); }
}

/* 键盘网格 */
.pc-keypad {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 7px;
}

/* 按钮基础 */
.pc-btn {
    padding: 13px 0;
    border: 1px solid #c0c6d0;
    border-radius: 9px;
    font-size: 16px;
    cursor: pointer;
    background: #d5d9e0;
    color: #1a1d23;
    user-select: none;
    font-family: inherit;
    transition: transform 0.08s, background 0.12s, border-color 0.12s;
    text-align: center;
}

.pc-btn:active {
    transform: scale(0.94);
}

@media (hover: hover) {
    .pc-btn:hover {
        background: #353a48;
        border-color: #4a4f5c;
    }
    .pc-btn-num:hover {
        background: #353a48;
    }
}

/* 数字按钮 */
.pc-btn-num {
    background: #d5d9e0;
    font-weight: 600;
}

/* 运算符按钮 */
.pc-btn-op {
    background: rgba(79, 195, 247, 0.12);
    color: #4fc3f7;
    border-color: rgba(79, 195, 247, 0.25);
    font-weight: 600;
}

@media (hover: hover) {
    .pc-btn-op:hover {
        background: rgba(79, 195, 247, 0.22);
        border-color: rgba(79, 195, 247, 0.4);
    }
}

/* 函数按钮 */
.pc-btn-func {
    background: rgba(179, 136, 255, 0.12);
    color: #b388ff;
    border-color: rgba(179, 136, 255, 0.25);
    font-size: 14px;
}

@media (hover: hover) {
    .pc-btn-func:hover {
        background: rgba(179, 136, 255, 0.22);
        border-color: rgba(179, 136, 255, 0.4);
    }
}

/* 清除按钮 */
.pc-btn-clear {
    background: rgba(255, 138, 128, 0.12);
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.25);
    font-weight: 600;
}

@media (hover: hover) {
    .pc-btn-clear:hover {
        background: rgba(255, 138, 128, 0.22);
        border-color: rgba(255, 138, 128, 0.4);
    }
}

/* 等号按钮 */
.pc-btn-equal {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d2233;
    border-color: transparent;
    font-weight: 700;
    font-size: 18px;
    grid-column: span 2;
    box-shadow: 0 4px 12px -3px rgba(79, 195, 247, 0.4);
}

@media (hover: hover) {
    .pc-btn-equal:hover {
        background: linear-gradient(135deg, #29b6f6, #4fc3f7);
    }
}

/* 宽按钮 */
.pc-btn-wide {
    grid-column: span 2;
}

/* 历史记录卡片 */
.pc-history-card {
    margin-top: 12px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px;
    max-height: 220px;
    overflow-y: auto;
}

.pc-history-head {
    font-size: 14px;
    color: #8c93a3;
    margin-bottom: 8px;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 8px;
}

.pc-history-hint {
    font-size: 11px;
    color: #8c93a3;
    font-weight: 400;
}

.pc-history-list {
    overflow-y: auto;
}

.pc-history-empty {
    text-align: center;
    color: #8c93a3;
    font-size: 13px;
    padding: 10px 0;
}

.pc-history-item {
    padding: 8px 10px;
    border-radius: 6px;
    cursor: pointer;
    border-bottom: 1px solid #c0c6d0;
    transition: background 0.12s;
}

.pc-history-item:last-child {
    border-bottom: none;
}

@media (hover: hover) {
    .pc-history-item:hover {
        background: #d5d9e0;
    }
}

.pc-history-item:active {
    background: #d5d9e0;
}

.pc-history-exp {
    color: #8c93a3;
    font-size: 12px;
    margin-bottom: 2px;
    word-break: break-all;
}

.pc-history-res {
    color: #1a1d23;
    font-weight: 600;
    text-align: right;
    font-size: 14px;
    word-break: break-all;
}

/* 小屏适配 */
@media (max-width: 420px) {
    .pc-keypad {
        grid-template-columns: repeat(4, 1fr);
        gap: 6px;
    }
    .pc-btn-func {
        font-size: 12px;
        padding: 10px 0;
    }
    .pc-btn {
        padding: 12px 0;
        font-size: 15px;
    }
    .pc-result {
        font-size: 24px;
    }
    .pc-btn-equal {
        font-size: 16px;
    }
}

/* 触摸设备适配 */
@media (pointer: coarse) {
    .pc-btn {
        min-height: 44px;
        padding: 14px 0;
    }
    .pc-mode-btn {
        min-height: 38px;
        padding: 8px 14px;
        font-size: 13px;
    }
    .pc-history-item {
        padding: 10px 12px;
        min-height: 44px;
    }
}

/* ============================================================
   电子收据（er-，左侧 17）
   暗色表单 + A4 白纸预览（纸张保持白底黑字用于打印，同 pr- 规范）
   ============================================================ */
.er-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.er-header {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 10px;
}

.er-h-icon {
    font-size: 20px;
}

.er-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.er-h-sub {
    font-size: 12px;
    color: #6b7285;
}

.er-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
}

.er-form-row {
    display: flex;
    gap: 16px;
    margin-bottom: 14px;
}

.er-form-row:last-child {
    margin-bottom: 0;
}

.er-form-col {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.er-col-grow {
    flex: 1.6;
}

.er-col-date {
    flex: 1;
}

.er-label {
    display: block;
    font-size: 13px;
    color: #8c93a3;
    margin-bottom: 6px;
    font-weight: 600;
}

.er-app input[type="text"],
.er-app input[type="number"],
.er-app input[type="date"],
.er-app select,
.er-app textarea {
    width: 100%;
    background: #f0f2f5;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    color: #1a1d23;
    font-size: 15px;
    font-family: inherit;
    outline: none;
    box-sizing: border-box;
    transition: border-color 0.2s;
}

.er-app select option {
    background: #ffffff;
    color: #1a1d23;
}

.er-app input:focus,
.er-app select:focus,
.er-app textarea:focus {
    border-color: #4fc3f7;
}

.er-app input[type="date"]::-webkit-calendar-picker-indicator {
    filter: invert(0.85);
    cursor: pointer;
}

.er-app input[readonly] {
    cursor: default;
}

.er-app textarea {
    min-height: 58px;
    resize: vertical;
    line-height: 1.6;
}

.er-amount-input {
    font-weight: 600;
}

.er-no-row {
    display: flex;
    gap: 8px;
}

.er-no-row input {
    flex: 1;
    min-width: 0;
    background: rgba(79, 195, 247, 0.08) !important;
    border-color: rgba(79, 195, 247, 0.3) !important;
    color: #4fc3f7 !important;
    font-weight: 600;
    letter-spacing: 0.4px;
}

.er-btn-mini {
    flex: 0 0 auto;
    padding: 0 14px;
    min-height: 40px;
    border: 1px solid rgba(79, 195, 247, 0.35);
    background: rgba(79, 195, 247, 0.1);
    color: #4fc3f7;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    transition: background 0.15s, opacity 0.15s;
    -webkit-tap-highlight-color: transparent;
}

.er-amount-big {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    min-height: 42px;
    display: flex;
    align-items: center;
    color: #4fc3f7;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: 0.5px;
    word-break: break-all;
}

.er-btn-row {
    display: flex;
    gap: 10px;
    margin-top: 4px;
}

.er-btn {
    flex: 1;
    min-width: 0;
    min-height: 42px;
    padding: 10px 12px;
    border: none;
    border-radius: 8px;
    cursor: pointer;
    font-size: 14px;
    font-weight: 700;
    font-family: inherit;
    transition: opacity 0.15s, background 0.15s, transform 0.08s, border-color 0.15s, color 0.15s;
    -webkit-tap-highlight-color: transparent;
}

.er-btn:active {
    transform: scale(0.98);
}

.er-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d2233;
    box-shadow: 0 6px 16px -6px rgba(79, 195, 247, 0.5);
}

.er-btn-save {
    background: #d5d9e0;
    color: #1a1d23;
    border: 1px solid #c0c6d0;
}

.er-btn-pdf {
    background: linear-gradient(135deg, #81c784, #66bb6a);
    color: #10301a;
    box-shadow: 0 6px 16px -6px rgba(102, 187, 106, 0.5);
}

.er-btn-new {
    background: transparent;
    color: #8c93a3;
    border: 1px solid #c0c6d0;
}

.er-btn-new.er-armed {
    background: rgba(255, 138, 128, 0.15);
    border-color: rgba(255, 138, 128, 0.55);
    color: #ff8a80;
}

@media (hover: hover) {
    .er-btn-mini:hover {
        background: rgba(79, 195, 247, 0.2);
    }
    .er-btn-primary:hover {
        opacity: 0.92;
    }
    .er-btn-save:hover {
        background: #353a48;
        border-color: #4a4f5c;
    }
    .er-btn-new:hover {
        background: #d5d9e0;
        color: #1a1d23;
    }
    .er-his-ops button:hover {
        background: #353a48;
        border-color: #4a4f5c;
    }
    .er-his-del:hover {
        border-color: rgba(255, 138, 128, 0.5) !important;
        color: #ff8a80;
    }
}

/* ===== A4 收据预览（白纸黑字） ===== */
.er-preview-title {
    font-size: 15px;
    font-weight: 700;
    color: #cfd4de;
    margin-bottom: 12px;
}

.er-paper-container {
    background: #ffffff;
    padding: 20px;
    border-radius: 8px;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    overflow: auto;
}

.er-paper {
    /* A4 规范化：固定 794×1123px（210×297mm @96dpi），不再被容器 max-width 压扁；
       容器不足宽时由 JS 设 --er-scale 等比缩放显示（与 ml 模块同一模式） */
    width: 794px;
    flex: 0 0 auto;
    margin: 0 auto;
    min-height: 1123px;
    background: #fff;
    color: #000;
    padding: 76px; /* 20mm @96dpi：与打印 @page margin 20mm 所见即所得，内容宽=可打印宽 170mm */
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.45);
    box-sizing: border-box;
    font-size: 14px;
    line-height: 1.8;
    transform: scale(var(--er-scale, 1));
    transform-origin: top center;
    /* 规范版式：内容从纸顶自然流式排布（标准收据样式），页脚 margin-top:auto 沉底 */
    display: flex;
    flex-direction: column;
}

.er-pt-title {
    text-align: center;
    font-size: 26px;
    font-weight: bold;
    letter-spacing: 8px;
    margin-bottom: 8px;
    color: #000;
}

.er-pt-no {
    text-align: right;
    font-size: 14px;
    color: #000;
    margin-bottom: 15px;
}

.er-pt-info {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-bottom: 15px;
    font-size: 14px;
    color: #000;
}

.er-pt-info span {
    display: inline-block;
    border-bottom: 1px solid #333;
    min-width: 180px;
    max-width: 100%;
    padding: 0 4px;
    word-break: break-all;
}

.er-pt-table {
    width: 100%;
    table-layout: fixed;
    border-collapse: collapse;
    border: 1px solid #333;
}

.er-pt-table th,
.er-pt-table td {
    border: 1px solid #333;
    padding: 10px 12px;
    vertical-align: middle;
    word-break: break-all;
    color: #000;
}

.er-pt-table th {
    background: #f7f7f7;
    text-align: center;
    font-weight: 600;
    width: 110px;
}

.er-pt-amount {
    text-align: right;
    font-weight: 600;
}

.er-pt-big {
    font-size: 18px;
    font-weight: 700;
    letter-spacing: 1px;
    background: #fafafa;
}

.er-pt-remarkbox {
    border: 1px solid #333;
    border-top: none;
    min-height: 90px;
    padding: 10px 12px;
    width: 100%;
    box-sizing: border-box;
    word-break: break-all;
    color: #000;
}

.er-pt-remark-label {
    font-weight: 600;
    margin-bottom: 6px;
}

.er-pt-warranty {
    margin-top: 8px;
    white-space: nowrap;
}

.er-pt-sign {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 10px;
    margin-top: 40px;
    padding-top: 10px;
    border-top: 1px dashed #999;
    font-size: 14px;
    width: 100%;
    box-sizing: border-box;
    color: #000;
}

.er-pt-sign > div {
    min-width: 0;
    word-break: break-all;
}

.er-pt-sign span {
    display: inline-block;
    border-bottom: 1px solid #333;
    min-width: 120px;
    max-width: 100%;
}

.er-pt-footer {
    text-align: center;
    margin-top: auto; /* 沉底：短内容时贴住纸底，内容超页时自然跟随 */
    font-size: 12px;
    color: #666;
    border-top: 1px solid #ddd;
    padding-top: 10px;
}

/* ===== 已开收据记录 ===== */
.er-history-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 14px;
    font-weight: 700;
    color: #cfd4de;
    margin-bottom: 10px;
}

.er-history-count {
    font-size: 12px;
    font-weight: 400;
    color: #6b7285;
}

.er-history-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    max-height: 300px;
    overflow-y: auto;
}

.er-his-empty {
    text-align: center;
    color: #8c93a3;
    font-size: 13px;
    padding: 14px 0;
}

.er-his-item {
    display: flex;
    align-items: center;
    gap: 12px;
    background: #f0f2f5;
    border: 1px solid #343845;
    border-radius: 10px;
    padding: 10px 12px;
}

.er-his-main {
    flex: 1;
    min-width: 0;
    display: grid;
    grid-template-columns: minmax(150px, 1.3fr) 1fr auto;
    gap: 6px 14px;
    align-items: center;
}

.er-his-no {
    font-size: 13px;
    color: #4fc3f7;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.er-his-payer {
    font-size: 13px;
    color: #1a1d23;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.er-his-meta {
    font-size: 13px;
    color: #66bb6a;
    font-weight: 700;
    white-space: nowrap;
}

.er-his-date {
    color: #6b7285;
    font-weight: 400;
    margin-left: 8px;
}

.er-his-ops {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
}

.er-his-ops button {
    padding: 6px 12px;
    min-height: 34px;
    border-radius: 7px;
    border: 1px solid #c0c6d0;
    background: #d5d9e0;
    color: #cfd4de;
    font-size: 12px;
    cursor: pointer;
    font-family: inherit;
    transition: background 0.15s, border-color 0.15s, color 0.15s, opacity 0.15s;
    -webkit-tap-highlight-color: transparent;
}

.er-his-ops button:active {
    opacity: 0.8;
}

.er-his-del.er-armed {
    background: rgba(255, 138, 128, 0.16);
    border-color: rgba(255, 138, 128, 0.55);
    color: #ff8a80;
}

/* ===== 窄视口：表单行堆叠（1024px 双菜单时内容区仅约 481px） ===== */
@media screen and (max-width: 1100px) {
    .er-form-row {
        flex-direction: column;
        gap: 12px;
    }
    .er-his-main {
        grid-template-columns: 1fr auto;
    }
    .er-his-payer {
        grid-column: 1 / -1;
        order: 2;
    }
    .er-paper-container {
        --er-scale: 1; /* 窄屏走 100% 宽自然排版，不缩放 */
    }
    .er-paper {
        width: 100%;
        /* 保留视口感知最小高度：窄屏下纸宽变小、内容重排变高，
           纸必须高于内容才有余量让 justify-content:center 生效（不能用 auto/过小的 vh）。
           打印时由 body.er-printing 强制 min-height:auto 覆盖，不影响出纸 */
        min-height: 100vh;
        padding: 20px;
    }
    .er-pt-info {
        grid-template-columns: 1fr;
    }
    /* 签字区任何宽度都保持一行三栏（打印/PDF 版式一致），窄屏缩短下划线 */
    .er-pt-sign {
        gap: 8px;
    }
    .er-pt-sign > div {
        white-space: nowrap;
    }
    .er-pt-sign span {
        min-width: 40px;
    }
}

/* ===== 触摸设备（高端平板 / 手机）：热区加大 + 输入 16px 防聚焦缩放 ===== */
@media (pointer: coarse) {
    .er-app input[type="text"],
    .er-app input[type="number"],
    .er-app input[type="date"],
    .er-app select,
    .er-app textarea {
        font-size: 16px;
        padding: 11px 12px;
    }
    .er-btn-mini {
        min-height: 42px;
        padding: 0 16px;
    }
    .er-his-ops button {
        min-height: 40px;
        padding: 8px 14px;
        font-size: 13px;
    }
}

/* ============================================================
   打印样式：仅 body.er-printing 时生效，只打印 A4 收据纸张
   ============================================================ */
@media print {
    body.er-printing .app,
    body.er-printing .app-body,
    body.er-printing .content,
    body.er-printing .content-inner {
        display: block !important;
        width: 100% !important;
        max-width: none !important;
        padding: 0 !important;
        margin: 0 !important;
        background: #fff !important;
    }

    body.er-printing .app-header,
    body.er-printing .app-footer,
    body.er-printing .menu-bar,
    body.er-printing .content-toolbar,
    body.er-printing .content-inner > :not(.er-app),
    body.er-printing .er-app > :not(.er-paper-card),
    body.er-printing .er-paper-card > :not(.er-paper-container) {
        display: none !important;
    }

    body.er-printing .er-app {
        display: block !important;
        margin: 0 !important;
        padding: 0 !important;
    }

    body.er-printing .er-paper-card {
        display: block !important;
        background: #fff !important;
        border: none !important;
        box-shadow: none !important;
        padding: 0 !important;
        margin: 0 !important;
    }

    body.er-printing .er-paper-container {
        display: block !important;
        padding: 0 !important;
        background: #fff !important;
        overflow: visible !important;
    }

    body.er-printing .er-paper {
        display: block !important;
        /* 关键修复：@page 规则跨模块合并生效（全局实际 margin 为 ml 的 20mm，
           可打印宽 170mm），纸张必须 width:auto 填满可打印区，
           绝不能强制 210mm，否则右侧约 40mm 被裁切导致打印内容不全 */
        width: auto !important;
        max-width: none !important;
        min-height: auto !important;
        padding: 0 !important; /* 页边距统一交给 @page margin，避免双重边距 */
        margin: 0 !important;
        box-shadow: none !important;
        transform: none !important; /* 清除屏幕 --er-scale 预览缩放 */
        background: #fff !important;
        color: #000 !important;
    }

    /* 打印时纸高=min-height:auto 被内容撑开，页脚 margin-top:auto 塌陷为 0，补固定间距 */
    body.er-printing .er-pt-footer {
        margin-top: 24px !important;
    }

    /* A4 页宽(~794px)会命中 ≤1024 移动端样式，打印版式强制桌面布局 */
    body.er-printing .er-pt-info {
        grid-template-columns: 1fr 1fr !important;
    }
    body.er-printing .er-pt-sign {
        grid-template-columns: 1fr 1fr 1fr !important;
    }

    @page {
        size: A4;
        margin: 20mm; /* 与 ml 保持一致：@page 全局合并，各模块统一 20mm 安全页边距 */
    }
}

/* ============================================================
   制作清单（ml-，左侧 15，A4 多表格清单编辑器）
   ============================================================ */
.ml-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}

.ml-header {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 10px;
}

.ml-h-icon { font-size: 20px; }

.ml-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.ml-h-sub { font-size: 12px; color: #6b7285; }

.ml-layout {
    display: grid;
    grid-template-columns: minmax(280px, 300px) minmax(0, 1fr);
    gap: 12px;
    align-items: stretch;
}

.ml-panel,
.ml-preview-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    min-width: 0;
}

.ml-sec-title {
    font-size: 13px;
    font-weight: 700;
    color: #c8cdd8;
    margin: 14px 0 8px;
    padding-bottom: 5px;
    border-bottom: 1px solid #c0c6d0;
}

.ml-sec-title:first-child { margin-top: 0; }

.ml-fg { margin-bottom: 10px; }

.ml-frow {
    display: flex;
    gap: 10px;
    margin-bottom: 10px;
}

.ml-fcol { flex: 1; min-width: 0; }

.ml-frow-mid { align-items: center; }

.ml-label {
    display: block;
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 5px;
}

.ml-panel input[type="text"],
.ml-panel input[type="number"],
.ml-panel select {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 14px;
    color: #1a1d23;
    outline: none;
    font-family: inherit;
}

.ml-panel input:focus,
.ml-panel select:focus { border-color: #4fc3f7; }

.ml-check {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: #1a1d23;
    flex: 1;
    cursor: pointer;
}

.ml-check input { width: auto; accent-color: #4fc3f7; }

.ml-btn-row {
    display: flex;
    gap: 8px;
    margin-top: 6px;
    flex-wrap: wrap;
}

.ml-btn-row .ml-btn { flex: 1; min-width: 0; }

.ml-btn {
    padding: 8px 10px;
    border: 1px solid transparent;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    background: #e8eaed;
    color: #1a1d23;
    transition: filter .15s;
}

.ml-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 600;
}

.ml-btn-sec {
    background: #e8eaed;
    color: #1a1d23;
    border-color: #c0c6d0;
}

.ml-btn-danger {
    background: rgba(255, 138, 128, 0.12);
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.35);
}

.ml-btn-mini { flex: 0 0 auto; padding: 8px 12px; }

.ml-btn:disabled { opacity: .45; cursor: not-allowed; }

.ml-format-bar {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    padding: 8px;
    background: #f5f6f8;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
}

.ml-format-btn {
    padding: 6px 12px;
    border: 1px solid #c0c6d0;
    background: #ffffff;
    color: #1a1d23;
    border-radius: 6px;
    cursor: pointer;
    font-size: 13px;
    min-width: 36px;
    text-align: center;
    font-family: inherit;
}

.ml-format-btn.active {
    background: #4fc3f7;
    color: #1a1d23;
    border-color: #4fc3f7;
}

.ml-element-list {
    max-height: 260px;
    overflow-y: auto;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    background: #ffffff;
}

.ml-list-empty {
    text-align: center;
    color: #8c93a3;
    padding: 18px;
    font-size: 12px;
}

.ml-element-item {
    padding: 8px 10px;
    border-bottom: 1px solid #e8eaed;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 8px;
    cursor: pointer;
}

.ml-element-item:last-child { border-bottom: none; }

.ml-element-name {
    font-size: 12px;
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #1a1d23;
}

.ml-element-ops { display: flex; gap: 4px; }

.ml-op-btn {
    padding: 3px 9px;
    font-size: 12px;
    border: 1px solid #c0c6d0;
    background: #ffffff;
    color: #c8cdd8;
    border-radius: 5px;
    cursor: pointer;
    font-family: inherit;
}

.ml-op-danger {
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.4);
}

.ml-op-btn.armed {
    background: #ff8a80;
    color: #1a1d23;
    border-color: #ff8a80;
}

/* A4 预览区：容器与左面板等高，A4 纸张固定 px 基准 + transform scale 适配 */
.ml-preview-card {
    display: flex;
    flex-direction: column;
    min-height: 0;
}

.ml-a4-wrap {
    position: relative;
    flex: 1;
    min-height: 420px;
    background: #ffffff;
    border-radius: 8px;
    padding: 14px;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    overflow: auto;
}

.ml-a4-page {
    /* 常规流布局：absolute+负margin 居中会导致纸张顶部/左侧溢出不可滚动，标题被裁 */
    position: static;
    flex: 0 0 auto;
    width: 794px;
    min-height: 1123px; /* 内容超长时自动撑高，不再溢出纸面 */
    margin: 0 auto;
    background: #fff;
    color: #222;
    padding: 76px;
    box-sizing: border-box;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.45);
    transform: scale(var(--ml-scale, 1));
    transform-origin: top center;
}

.ml-page-title {
    text-align: center;
    font-size: 22px;
    font-weight: bold;
    margin-bottom: 20px;
    outline: none;
    color: #111;
}

.ml-page-content {
    width: 100%;
    min-height: 235mm;
    outline: none;
}

.ml-page-footer {
    position: absolute;
    bottom: 8mm;
    left: 0;
    right: 0;
    text-align: center;
    font-size: 12px;
    color: #888;
}

.ml-doc-block {
    position: relative;
    margin-bottom: 14px;
}

.ml-block-handle {
    position: absolute;
    left: -24px;
    top: 2px;
    width: 20px;
    font-size: 12px;
    color: #aaa;
    opacity: 0;
    pointer-events: none;
}

.ml-doc-block:hover .ml-block-handle { opacity: 1; }

.ml-doc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
}

.ml-doc-table caption {
    font-size: 15px;
    font-weight: 600;
    text-align: center;
    margin-bottom: 8px;
    caption-side: top;
    outline: none;
    color: #111;
}

.ml-doc-table th,
.ml-doc-table td {
    border: 1px solid #333;
    padding: 7px 9px;
    font-size: 13px;
    vertical-align: middle;
    word-break: break-all;
    cursor: cell;
    color: #111;
}

.ml-doc-table th {
    background: #f2f4f7;
    font-weight: 600;
    text-align: center;
}

.ml-doc-table td.selected,
.ml-doc-table th.selected { background: #d6ecff; }

.ml-doc-table.style-three { border: none; }

.ml-doc-table.style-three th,
.ml-doc-table.style-three td {
    border-left: none;
    border-right: none;
}

.ml-doc-table.style-three thead tr {
    border-top: 2px solid #333;
    border-bottom: 1px solid #333;
}

.ml-doc-table.style-three tbody tr:last-child { border-bottom: 2px solid #333; }

.ml-doc-table.style-light th,
.ml-doc-table.style-light td { border: 1px solid #ccc; }

.ml-doc-text {
    font-size: 14px;
    line-height: 1.8;
    margin: 0 0 14px;
    text-indent: 2em;
    outline: none;
    color: #111;
}

.ml-doc-h1 {
    font-size: 18px;
    font-weight: bold;
    margin: 0 0 12px;
    outline: none;
    color: #111;
}

.ml-doc-h2 {
    font-size: 16px;
    font-weight: bold;
    margin: 0 0 10px;
    outline: none;
    color: #111;
}

.ml-doc-divider {
    border: none;
    border-top: 1px solid #999;
    margin: 16px 0;
}

.ml-empty-tip {
    text-align: center;
    color: #999;
    padding: 60px 20px;
    font-size: 14px;
    border: 2px dashed #ccc;
    border-radius: 8px;
}

/* 右键菜单 */
.ml-context-menu {
    position: fixed;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
    padding: 5px 0;
    z-index: 1000;
    display: none;
    min-width: 180px;
}

.ml-cm-item {
    padding: 8px 16px;
    cursor: pointer;
    font-size: 13px;
    color: #c8cdd8;
}

.ml-cm-danger { color: #ff8a80; }

.ml-cm-divider {
    height: 1px;
    background: #3a3f4c;
    margin: 4px 0;
}

/* 悬停态仅鼠标设备，触摸用 :active 反馈 */
@media (hover: hover) {
    .ml-btn:hover { filter: brightness(1.15); }
    .ml-format-btn:hover {
        background: #4fc3f7;
        color: #1a1d23;
        border-color: #4fc3f7;
    }
    .ml-element-item:hover { background: #262b35; }
    .ml-op-btn:hover { background: #323845; }
    .ml-cm-item:hover {
        background: rgba(79, 195, 247, 0.12);
        color: #4fc3f7;
    }
}

/* 高端平板 / 触摸设备适配 */
@media (pointer: coarse) {
    .ml-btn { min-height: 42px; }
    .ml-format-btn { min-height: 40px; }
    .ml-op-btn { min-height: 34px; padding: 4px 12px; }
    .ml-cm-item { padding: 12px 16px; }
    .ml-panel input[type="text"],
    .ml-panel input[type="number"],
    .ml-panel select { font-size: 16px; min-height: 42px; }
    .ml-btn:active,
    .ml-op-btn:active,
    .ml-format-btn:active { opacity: .8; }
}

/* 窄屏单列堆叠：回退为可滚动 A4，不启用 scale 适配 */
@media (max-width: 1024px) {
    .ml-layout { grid-template-columns: 1fr; }
    .ml-a4-wrap {
        position: static;
        flex: none;
        height: auto;
        max-height: 80vh;
        overflow: auto;
        --ml-scale: 1;
    }
    .ml-a4-page {
        position: relative;
        top: auto;
        left: auto;
        margin: 0;
        width: 100%;
        max-width: 794px;
        height: auto;
        min-height: 297mm;
        transform: none;
    }
    .ml-page-content { min-height: auto; }
}

@media (max-width: 760px) {
    .ml-a4-wrap { padding: 10px; }
    .ml-a4-page { padding: 16px; }
    .ml-page-content { min-height: 60vh; }
}

/* 打印样式：仅 body.ml-printing 时生效，只打印 A4 页面 */
@media print {
    body.ml-printing .app,
    body.ml-printing .app-body,
    body.ml-printing .content,
    body.ml-printing .content-inner {
        display: block !important;
        width: 100% !important;
        max-width: none !important;
        padding: 0 !important;
        margin: 0 !important;
        background: #fff !important;
    }

    body.ml-printing .app-header,
    body.ml-printing .app-footer,
    body.ml-printing .menu-bar,
    body.ml-printing .content-toolbar,
    body.ml-printing .content-inner > :not(.ml-app),
    body.ml-printing .ml-app > :not(.ml-layout),
    body.ml-printing .ml-layout > :not(.ml-preview-card),
    body.ml-printing .ml-preview-card > :not(.ml-a4-wrap) {
        display: none !important;
    }

    body.ml-printing .ml-app {
        display: block !important;
        margin: 0 !important;
        padding: 0 !important;
    }

    body.ml-printing .ml-layout {
        display: block !important;
        margin: 0 !important;
        padding: 0 !important;
    }

    body.ml-printing .ml-preview-card {
        display: block !important;
        background: #fff !important;
        border: none !important;
        box-shadow: none !important;
        padding: 0 !important;
        margin: 0 !important;
    }

    body.ml-printing .ml-a4-wrap {
        display: block !important;
        padding: 0 !important;
        background: #fff !important;
        overflow: visible !important;
        max-height: none !important;
    }

    body.ml-printing .ml-a4-page {
        width: auto !important;
        max-width: none !important;
        min-height: auto !important;
        padding: 0 !important;
        margin: 0 !important;
        box-shadow: none !important;
        background: #fff !important;
        transform: none !important; /* 清除屏幕自适应缩放，按原始尺寸出纸 */
    }

    body.ml-printing .ml-page-content { min-height: auto !important; }

    body.ml-printing .ml-page-footer {
        position: static !important;
        margin-top: 10mm !important;
    }

    body.ml-printing .ml-doc-table { page-break-inside: avoid; }

    body.ml-printing .ml-block-handle { display: none !important; }

    @page {
        size: A4;
        margin: 20mm;
    }
}

/* ============================================================
   电子票据（eb-，左侧 05，PDF/图片票据 OCR 管理工具）
   ============================================================ */
.eb-app {
    margin: -19px 0 0;
    color: #1a1d23;
}

.eb-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.eb-h-icon { font-size: 20px; }

.eb-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.eb-layout {
    display: grid;
    grid-template-columns: minmax(300px, 380px) minmax(0, 1fr);
    gap: 12px;
    align-items: start;
}

.eb-panel-left,
.eb-panel-right {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    min-width: 0;
}

.eb-sec-title {
    font-size: 14px;
    font-weight: 700;
    color: #374151;
    margin: 0 0 10px;
    padding-bottom: 6px;
    border-bottom: 1px solid #d1d5db;
}

.eb-sec-inline { border-bottom: none; padding-bottom: 0; margin-bottom: 0; }

.eb-label {
    display: block;
    font-size: 12px;
    color: #8c93a3;
    margin: 10px 0 5px;
}

.eb-input,
.eb-select,
.eb-textarea {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 14px;
    color: #1f2937;
    outline: none;
    font-family: inherit;
    box-sizing: border-box;
}

.eb-input:focus,
.eb-select:focus,
.eb-textarea:focus { border-color: #4fc3f7; }

.eb-textarea { resize: vertical; }

.eb-input-sm { width: 130px; }
.eb-select-sm { width: auto; }

.eb-upload-box {
    border: 2px dashed #d1d5db;
    border-radius: 10px;
    padding: 24px 12px;
    text-align: center;
    cursor: pointer;
    transition: border-color .2s, background .2s;
    position: relative;
    background: #f9fafb;
}

.eb-upload-box.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.06);
}

.eb-upload-icon { font-size: 28px; }

.eb-upload-text { font-size: 13px; color: #8c93a3; margin-top: 4px; }

.eb-upload-hint { font-size: 11px; color: #6b7285; margin-top: 2px; }

.eb-camera-btn {
    position: absolute;
    bottom: 8px;
    right: 8px;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    border: 1.5px solid rgba(79, 195, 247, 0.5);
    background: rgba(79, 195, 247, 0.15);
    color: #4fc3f7;
    font-size: 16px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: inherit;
    transition: background .15s;
}

.eb-file-info {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin: 8px 0;
    font-size: 13px;
    color: #4fc3f7;
}

.eb-ocr-progress { margin: 10px 0; }

.eb-ocr-info {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 5px;
}

.eb-ocr-track {
    width: 100%;
    height: 6px;
    background: #e5e7eb;
    border-radius: 3px;
    overflow: hidden;
}

.eb-ocr-bar {
    height: 100%;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    border-radius: 3px;
    transition: width .3s ease;
}

.eb-preview-box { margin: 8px 0; }

.eb-preview-img {
    max-width: 100%;
    max-height: 160px;
    border-radius: 6px;
    border: 1px solid #c0c6d0;
}

.eb-btn {
    padding: 8px 12px;
    border: 1px solid transparent;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    background: #e5e7eb;
    color: #1f2937;
    transition: filter .15s;
}

.eb-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    font-weight: 600;
    width: 100%;
    margin-top: 12px;
}

.eb-btn-sec {
    background: #f3f4f6;
    color: #374151;
    border-color: #d1d5db;
}

.eb-btn-danger {
    background: rgba(255, 138, 128, 0.12);
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.35);
}

.eb-btn-sm { padding: 4px 8px; font-size: 12px; flex: 0 0 auto; }

.eb-btn:disabled { opacity: .45; cursor: not-allowed; }

/* 表格 */
.eb-table-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.eb-table-tools {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.eb-table-wrap {
    overflow-x: auto;
    max-height: 500px;
    overflow-y: auto;
}

.eb-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.eb-table thead {
    position: sticky;
    top: 0;
    z-index: 1;
}

.eb-table th {
    background: #f5f7fa;
    padding: 8px 10px;
    text-align: left;
    font-weight: 600;
    color: #374151;
    border-bottom: 1px solid #d1d5db;
    white-space: nowrap;
}

.eb-table-row { border-bottom: 1px solid #e5e7eb; }

.eb-td {
    padding: 8px 10px;
    color: #1f2937;
}

.eb-td-right { text-align: right; }
.eb-td-center { text-align: center; }

.eb-status {
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
}

.eb-status-pending { background: rgba(255, 183, 77, 0.15); color: #ffb74d; }
.eb-status-done { background: rgba(102, 187, 106, 0.15); color: #66bb6a; }
.eb-status-archive { background: rgba(108, 117, 125, 0.15); color: #8c93a3; }

.eb-op-btn {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 14px;
    padding: 2px 4px;
    font-family: inherit;
}

.eb-empty-tip {
    text-align: center;
    padding: 40px 16px;
    color: #6b7285;
}

.eb-empty-icon { font-size: 32px; display: block; }

.eb-btn-row {
    display: flex;
    gap: 8px;
    margin-top: 12px;
}

.eb-btn-row .eb-btn { flex: 1; }

/* 详情弹窗 */
.eb-detail-modal {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, 0.6);
    z-index: 9000;
    display: flex;
    align-items: center;
    justify-content: center;
}

.eb-detail-content {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px;
    max-width: 560px;
    width: 90%;
    max-height: 80vh;
    overflow-y: auto;
}

.eb-detail-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 16px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 14px;
}

.eb-detail-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
    font-size: 13px;
    color: #1f2937;
}

.eb-detail-label {
    color: #6b7285;
    margin-right: 6px;
}

.eb-detail-remark {
    margin-top: 10px;
    font-size: 13px;
    color: #1f2937;
}

.eb-detail-footer {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid #c0c6d0;
}

.eb-detail-footer .eb-btn { width: auto; min-width: 80px; }

/* 摄像头弹窗 */
.eb-camera-modal {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, 0.8);
    z-index: 9100;
    display: flex;
    align-items: center;
    justify-content: center;
}

.eb-camera-content {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px;
    max-width: 500px;
    width: 90%;
}

.eb-camera-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 15px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 12px;
}

.eb-video {
    width: 100%;
    border-radius: 8px;
    background: #000;
    display: block;
}

.eb-camera-actions {
    display: flex;
    gap: 8px;
    margin-top: 12px;
    justify-content: center;
}

.eb-camera-actions .eb-btn { width: auto; min-width: 100px; }

/* 悬停态 */
@media (hover: hover) {
    .eb-btn:hover { filter: brightness(1.15); }
    .eb-upload-box:hover { border-color: rgba(79, 195, 247, 0.5); }
    .eb-camera-btn:hover { background: rgba(79, 195, 247, 0.3); }
    .eb-op-btn:hover { opacity: 0.8; }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .eb-btn { min-height: 42px; }
    .eb-input, .eb-select, .eb-textarea { font-size: 16px; }
    .eb-camera-btn { width: 40px; height: 40px; }
    .eb-op-btn { padding: 6px; font-size: 16px; }
}

/* 窄屏堆叠 */
@media (max-width: 860px) {
    .eb-layout { grid-template-columns: 1fr; }
    .eb-detail-grid { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
    .eb-table th, .eb-table td { font-size: 12px; padding: 6px; }
}

/* ============================================================
   权限管理系统（登录页 + 系统设置 RBAC UI）
   ============================================================ */

/* ===== 登录页 ===== */
.auth-login-overlay {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: #ffffff;
    z-index: 99999;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow-y: auto;
    padding: 16px;
    box-sizing: border-box;
}

.auth-login-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 16px;
    padding: 32px 24px;
    max-width: 320px;
    width: 85%;
    text-align: center;
    box-shadow: 0 8px 40px rgba(0, 0, 0, 0.15);
    max-height: calc(100vh - 32px);
    overflow-y: auto;
    box-sizing: border-box;
    align-self: center;
}

.auth-login-icon {
    font-size: 40px;
    margin-bottom: 10px;
}

.auth-login-title {
    font-size: 20px;
    font-weight: 800;
    color: #1a1d23;
    margin-bottom: 4px;
}

.auth-login-subtitle {
    font-size: 13px;
    color: #8c93a3;
    margin-bottom: 20px;
}

.auth-form {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.auth-input {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 12px 14px;
    font-size: 16px;
    color: #1a1d23;
    outline: none;
    box-sizing: border-box;
    font-family: inherit;
}

.auth-input:focus { border-color: #4fc3f7; }

.auth-confirm-pwd-wrap { display: flex; }

.auth-error {
    color: #ff8a80;
    font-size: 13px;
    min-height: 18px;
    text-align: left;
}

.auth-login-btn {
    padding: 12px;
    border: none;
    border-radius: 8px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #1a1d23;
    font-size: 15px;
    font-weight: 700;
    cursor: pointer;
    font-family: inherit;
    letter-spacing: 2px;
    transition: filter .15s;
}

.auth-login-btn:disabled { opacity: .5; cursor: not-allowed; }

@media (hover: hover) {
    .auth-login-btn:hover { filter: brightness(1.1); }
}

@media (pointer: coarse) {
    .auth-input { font-size: 16px; }
    .auth-login-btn { min-height: 48px; }
}

/* ===== 系统设置页 ===== */
.sys-app {
    margin: -19px 0 0;
    color: #1a1d23;
}

.sys-tabs {
    display: flex;
    gap: 2px;
    border-bottom: 1px solid #c0c6d0;
    margin-bottom: 12px;
}

.sys-tab {
    padding: 9px 18px;
    border: none;
    background: transparent;
    color: #8c93a3;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color .15s, border-color .15s;
}

.sys-tab.active {
    color: #4fc3f7;
    border-bottom-color: #4fc3f7;
}

.sys-tab:disabled { opacity: .35; cursor: not-allowed; }

.sys-panel {
    background: transparent;
}

.sys-panel-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.sys-panel-title {
    font-size: 15px;
    font-weight: 700;
    color: #c8cdd8;
}

.sys-table-wrap {
    overflow-x: auto;
    max-height: 500px;
    overflow-y: auto;
}

.sys-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.sys-table thead { position: sticky; top: 0; z-index: 1; }

.sys-table th {
    background: #f0f2f5;
    padding: 8px 10px;
    text-align: left;
    font-weight: 600;
    color: #5a6070;
    border-bottom: 1px solid #c0c6d0;
    white-space: nowrap;
}

.sys-tr { border-bottom: 1px solid #e8eaed; }
.sys-td { padding: 8px 10px; color: #1a1d23; }
.sys-td-center { text-align: center; }

.sys-tag-super {
    background: rgba(79, 195, 247, 0.15);
    color: #4fc3f7;
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 11px;
}

.sys-tag-active {
    background: rgba(102, 187, 106, 0.15);
    color: #66bb6a;
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 11px;
}

.sys-tag-disabled {
    background: rgba(255, 138, 128, 0.15);
    color: #ff8a80;
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 11px;
}

.sys-locked { font-size: 11px; color: #6b7285; }

.sys-op-btn {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 14px;
    padding: 2px 4px;
    font-family: inherit;
}

.sys-empty {
    text-align: center;
    color: #6b7285;
    padding: 40px;
    font-size: 13px;
}

/* ===== 系统设置按钮 ===== */
.sys-btn {
    padding: 7px 14px;
    border: 1px solid transparent;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    background: #e8eaed;
    color: #1a1d23;
    transition: filter .15s;
}

.sys-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 600;
}

.sys-btn-sec { background: #e8eaed; color: #1a1d23; border-color: #c0c6d0; }
.sys-btn-danger { background: rgba(255, 138, 128, 0.12); color: #ff8a80; border-color: rgba(255, 138, 128, 0.35); }
.sys-btn-sm { padding: 4px 10px; font-size: 12px; }

/* ===== 安全设置 ===== */
.sys-sec-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
}

.sys-sec-title {
    font-size: 14px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 10px;
}

.sys-sec-info { display: flex; flex-direction: column; gap: 6px; }

.sys-sec-row {
    font-size: 13px;
    color: #c8cdd8;
    display: flex;
    gap: 8px;
}

.sys-sec-label {
    color: #6b7285;
    min-width: 70px;
}

.sys-sec-card .sys-input { margin-bottom: 8px; }

.sys-input {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 14px;
    color: #1a1d23;
    outline: none;
    font-family: inherit;
    box-sizing: border-box;
}

.sys-input:focus { border-color: #4fc3f7; }

.sys-label {
    display: block;
    font-size: 12px;
    color: #8c93a3;
    margin: 10px 0 5px;
}

/* ===== 模块权限选择 ===== */
.sys-module-grid { margin-top: 6px; }

.sys-module-actions {
    display: flex;
    gap: 6px;
    margin-bottom: 8px;
}

.sys-module-list {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    max-height: 320px;
    overflow-y: auto;
}

.sys-module-chip {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 6px 10px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    cursor: pointer;
    font-size: 12px;
    color: #1a1d23;
    background: #ffffff;
}

.sys-module-chip input { width: auto; accent-color: #4fc3f7; }

/* ===== 弹窗 ===== */
.sys-modal-overlay {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, 0.6);
    z-index: 9000;
    display: flex;
    align-items: center;
    justify-content: center;
}

.sys-modal-content {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px;
    max-width: 500px;
    width: 90%;
    max-height: 85vh;
    overflow-y: auto;
}

.sys-modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 16px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 14px;
}

.sys-modal-close {
    background: none;
    border: none;
    color: #8c93a3;
    cursor: pointer;
    font-size: 16px;
    font-family: inherit;
}

.sys-modal-body { margin-bottom: 14px; }

.sys-modal-footer {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

.sys-modal-footer .sys-btn { width: auto; min-width: 80px; }

/* 悬停态 */
@media (hover: hover) {
    .sys-btn:hover { filter: brightness(1.15); }
    .sys-tab:not(.active):not(:disabled):hover { color: #c8cdd8; }
    .sys-op-btn:hover { opacity: 0.8; }
    .sys-module-chip:hover { border-color: rgba(79, 195, 247, 0.5); }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .sys-btn { min-height: 42px; }
    .sys-input { font-size: 16px; }
    .sys-tab { padding: 12px 18px; }
}

/* ============================================================
   短剧发布（sd-，左侧 18，短视频跨平台发布管理）
   ============================================================ */
.sd-app {
    margin: -19px 0 0;
    color: #1a1d23;
}

.sd-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.sd-h-icon { font-size: 20px; }

.sd-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.sd-layout {
    display: grid;
    grid-template-columns: minmax(260px, 320px) minmax(0, 1fr) minmax(240px, 300px);
    gap: 12px;
    align-items: stretch;
}

.sd-panel,
.sd-panel-mid,
.sd-panel-right {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.sd-sec-title {
    font-size: 14px;
    font-weight: 700;
    color: #c8cdd8;
    margin: 0 0 10px;
    padding-bottom: 6px;
    border-bottom: 1px solid #c0c6d0;
}

.sd-label {
    display: block;
    font-size: 12px;
    color: #8c93a3;
    margin: 10px 0 5px;
}

.sd-input,
.sd-select,
.sd-textarea {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 14px;
    color: #1a1d23;
    outline: none;
    font-family: inherit;
    box-sizing: border-box;
}

.sd-input:focus,
.sd-select:focus,
.sd-textarea:focus { border-color: #4fc3f7; }

.sd-textarea { resize: vertical; }

.sd-list-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin: 12px 0 8px;
}

.sd-list-label { font-size: 13px; font-weight: 600; color: #1a1d23; }

.sd-btn-add {
    background: none;
    border: none;
    color: #4fc3f7;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    padding: 2px 6px;
}

.sd-episode-list {
    max-height: 280px;
    overflow-y: auto;
    margin-bottom: 10px;
}

.sd-list-empty {
    text-align: center;
    color: #6b7285;
    font-size: 13px;
    padding: 20px;
}

.sd-episode-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    margin-bottom: 6px;
    cursor: pointer;
    transition: border-color .15s;
}

.sd-episode-card.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.08);
}

.sd-ep-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.sd-ep-label {
    font-size: 13px;
    font-weight: 600;
    color: #1a1d23;
}

.sd-ep-ops { display: flex; gap: 4px; }

.sd-ep-btn {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 14px;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: inherit;
}

.sd-ep-del.armed {
    background: rgba(255, 138, 128, 0.2);
    color: #ff8a80;
}

.sd-ep-title {
    font-size: 12px;
    color: #8c93a3;
    margin-top: 3px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.sd-platform-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 6px;
}

.sd-platform-chip {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 7px 8px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    color: #c8cdd8;
}

.sd-platform-chip input { width: auto; accent-color: #4fc3f7; }

.sd-ai-bar {
    display: flex;
    gap: 6px;
    margin: 10px 0;
    flex-wrap: wrap;
}

.sd-btn {
    padding: 8px 12px;
    border: 1px solid transparent;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    background: #e8eaed;
    color: #1a1d23;
    transition: filter .15s;
}

.sd-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 600;
    flex: 1;
}

.sd-btn-sec {
    background: #e8eaed;
    color: #1a1d23;
    border-color: #c0c6d0;
}

.sd-btn-danger {
    background: rgba(255, 138, 128, 0.12);
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.35);
}

.sd-btn-ai {
    background: rgba(79, 195, 247, 0.1);
    color: #4fc3f7;
    border-color: rgba(79, 195, 247, 0.3);
    flex: 1;
    font-size: 12px;
    white-space: nowrap;
}

.sd-btn:disabled { opacity: .45; cursor: not-allowed; }

.sd-param-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin: 10px 0;
}

.sd-timing-wrap { margin: 10px 0; }

.sd-upload-area {
    border: 2px dashed #c0c6d0;
    border-radius: 10px;
    padding: 20px 12px;
    text-align: center;
    cursor: pointer;
    transition: border-color .2s, background .2s;
    margin: 6px 0;
    background: #ffffff;
}

.sd-upload-area.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.06);
}

.sd-upload-icon { font-size: 24px; display: block; }

.sd-upload-text { font-size: 12px; color: #8c93a3; display: block; margin-top: 4px; }

.sd-file-info {
    font-size: 12px;
    color: #4fc3f7;
    margin: 4px 0;
}

.sd-cover-preview { margin: 6px 0; }

.sd-cover-img {
    max-height: 100px;
    border-radius: 6px;
    border: 1px solid #c0c6d0;
}

.sd-btn-row {
    display: flex;
    gap: 8px;
    margin-top: 12px;
}

.sd-btn-row .sd-btn { flex: 1; min-width: 0; }

.sd-panel .sd-btn { width: 100%; margin-bottom: 6px; }

/* 右侧任务监控 */
.sd-empty-tip {
    text-align: center;
    padding: 40px 16px;
    color: #6b7285;
}

.sd-empty-icon { font-size: 32px; display: block; }

.sd-empty-text { font-size: 13px; display: block; margin-top: 6px; }

.sd-task-progress { margin-bottom: 12px; }

.sd-progress-info {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 5px;
}

.sd-progress-track {
    width: 100%;
    height: 6px;
    background: #e8eaed;
    border-radius: 3px;
    overflow: hidden;
}

.sd-progress-bar {
    height: 100%;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    border-radius: 3px;
    transition: width .3s ease;
}

.sd-task-log-title,
.sd-task-history-title {
    font-size: 13px;
    font-weight: 600;
    color: #1a1d23;
    margin: 12px 0 6px;
}

.sd-task-log {
    background: #f5f6f8;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px;
    max-height: 200px;
    overflow-y: auto;
    font-size: 12px;
}

.sd-log-line {
    color: #5a6070;
    line-height: 1.6;
    word-break: break-all;
}

.sd-task-history { max-height: 200px; overflow-y: auto; }

.sd-history-empty {
    text-align: center;
    color: #6b7285;
    font-size: 12px;
    padding: 16px;
}

.sd-history-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px 10px;
    margin-bottom: 5px;
}

.sd-history-time { font-size: 11px; color: #8c93a3; }

.sd-history-name { font-size: 12px; color: #1a1d23; margin-top: 2px; }

/* 悬停态 */
@media (hover: hover) {
    .sd-btn:hover { filter: brightness(1.15); }
    .sd-upload-area:hover { border-color: #4fc3f7; }
    .sd-platform-chip:hover { border-color: #4fc3f7; }
    .sd-episode-card:hover { border-color: rgba(79, 195, 247, 0.5); }
    .sd-ep-btn:hover { background: rgba(79, 195, 247, 0.1); }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .sd-btn { min-height: 42px; }
    .sd-platform-chip { padding: 10px 8px; }
    .sd-input, .sd-select, .sd-textarea { font-size: 16px; }
    .sd-btn:active, .sd-platform-chip:active { opacity: .8; }
}

/* 窄屏堆叠 */
@media (max-width: 1280px) {
    .sd-layout { grid-template-columns: 1fr 1fr; }
    .sd-panel-right { grid-column: 1 / -1; }
}

@media (max-width: 860px) {
    .sd-layout { grid-template-columns: 1fr; }
    .sd-platform-grid { grid-template-columns: repeat(2, 1fr); }
    .sd-param-row { grid-template-columns: 1fr; }
}

/* ============================================================
   电商素材（ds-，左侧 16，素材模板智能生成）
   ============================================================ */
.ds-app {
    margin: -19px 0 0;
    color: #1a1d23;
}

.ds-header {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 10px;
}

.ds-h-icon { font-size: 20px; }

.ds-title {
    font-size: 17px;
    font-weight: 800;
    color: #1a1d23;
    letter-spacing: 0.5px;
}

.ds-h-sub { font-size: 12px; color: #6b7285; }

.ds-layout {
    display: grid;
    grid-template-columns: minmax(300px, 380px) minmax(0, 1fr);
    gap: 12px;
    align-items: stretch;
}

.ds-panel,
.ds-result-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    min-width: 0;
}

.ds-result-card {
    display: flex;
    flex-direction: column;
}

.ds-sec-title {
    font-size: 13px;
    font-weight: 700;
    color: #c8cdd8;
    margin: 14px 0 8px;
    padding-bottom: 5px;
    border-bottom: 1px solid #c0c6d0;
}

.ds-sec-title:first-child { margin-top: 0; }

.ds-label {
    display: block;
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 5px;
}

.ds-input,
.ds-select,
.ds-textarea {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 14px;
    color: #1a1d23;
    outline: none;
    font-family: inherit;
}

.ds-input:focus,
.ds-select:focus,
.ds-textarea:focus { border-color: #4fc3f7; }

.ds-textarea { resize: vertical; }

.ds-input-half { width: calc(50% - 4px); }

.ds-custom-size {
    display: flex;
    gap: 8px;
    margin-top: 8px;
}

.ds-select { width: 100%; margin-bottom: 8px; }

.ds-type-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 8px;
}

.ds-type-chip {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 8px 10px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    color: #1a1d23;
    background: #ffffff;
}

.ds-type-chip input { width: auto; accent-color: #4fc3f7; }

.ds-param-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 10px;
}

.ds-slider-row {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.ds-slider-row .ds-label { margin-bottom: 0; min-width: 64px; }

.ds-slider {
    flex: 1;
    accent-color: #4fc3f7;
    height: 6px;
}

.ds-slider-val {
    min-width: 28px;
    text-align: right;
    font-size: 12px;
    color: #4fc3f7;
    font-weight: 600;
}

.ds-check-row {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: #c8cdd8;
    margin-bottom: 8px;
    cursor: pointer;
}

.ds-check-row input { width: auto; accent-color: #4fc3f7; }

.ds-drop-area {
    border: 2px dashed #3a3f4c;
    border-radius: 10px;
    padding: 28px 16px;
    text-align: center;
    cursor: pointer;
    transition: border-color .2s, background .2s;
}

.ds-drop-area.active {
    border-color: #4fc3f7;
    background: rgba(79, 195, 247, 0.08);
}

.ds-drop-icon { font-size: 32px; margin-bottom: 6px; }

.ds-drop-text { font-size: 14px; color: #c8cdd8; }

.ds-drop-hint { font-size: 12px; color: #6b7285; margin-top: 4px; }

.ds-preview-box { margin-top: 12px; }

.ds-preview-row {
    display: flex;
    gap: 12px;
    align-items: flex-start;
}

.ds-preview-img {
    max-height: 120px;
    border-radius: 6px;
    border: 1px solid #c0c6d0;
}

.ds-preview-info { flex: 1; }

.ds-info-row {
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 4px;
}

.ds-info-label { color: #6b7285; margin-right: 6px; }

.ds-info-val { color: #c8cdd8; }

.ds-btn-row {
    display: flex;
    gap: 8px;
    margin-top: 8px;
    flex-wrap: wrap;
}

.ds-btn-row .ds-btn { flex: 1; min-width: 0; }

.ds-btn {
    padding: 9px 12px;
    border: 1px solid transparent;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    background: #e8eaed;
    color: #1a1d23;
    transition: filter .15s;
}

.ds-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0d1a26;
    font-weight: 600;
    width: 100%;
}

.ds-btn-sec {
    background: #e8eaed;
    color: #1a1d23;
    border-color: #c0c6d0;
}

.ds-btn-danger {
    background: rgba(255, 138, 128, 0.12);
    color: #ff8a80;
    border-color: rgba(255, 138, 128, 0.35);
}

.ds-btn-sm { padding: 5px 10px; font-size: 12px; flex: 0 0 auto; }

.ds-btn:disabled { opacity: .45; cursor: not-allowed; }

/* 结果区 */
.ds-result-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 12px;
}

.ds-result-title { font-size: 15px; font-weight: 700; color: #1a1d23; }

.ds-status { font-size: 12px; color: #6b7285; }
.ds-status-active { color: #4fc3f7; }
.ds-status-done { color: #66bb6a; }

.ds-progress-wrap { margin-bottom: 14px; }

.ds-progress-info {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 5px;
}

.ds-progress-track {
    width: 100%;
    height: 6px;
    background: #e8eaed;
    border-radius: 3px;
    overflow: hidden;
}

.ds-progress-bar {
    height: 100%;
    background: linear-gradient(90deg, #4fc3f7, #29b6f6);
    border-radius: 3px;
    transition: width .3s ease;
}

.ds-empty-tip {
    text-align: center;
    padding: 60px 20px;
    color: #6b7285;
}

.ds-empty-icon { font-size: 40px; margin-bottom: 8px; }

.ds-empty-text { font-size: 13px; }

.ds-result-section { margin-bottom: 16px; }

.ds-result-label {
    font-size: 14px;
    font-weight: 600;
    color: #c8cdd8;
    margin-bottom: 8px;
}

.ds-result-label-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 8px;
}

.ds-img-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 8px;
}

.ds-img-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 6px;
    overflow: hidden;
}

.ds-img-thumb {
    width: 100%;
    height: 100px;
    object-fit: contain;
    background: #fff;
    border-radius: 4px;
}

.ds-img-label {
    font-size: 11px;
    color: #8c93a3;
    text-align: center;
    margin-top: 4px;
}

.ds-color-palette {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}

.ds-color-swatch {
    width: 48px;
    height: 48px;
    border-radius: 8px;
    border: 1px solid #c0c6d0;
    position: relative;
    cursor: pointer;
}

.ds-color-hex {
    position: absolute;
    bottom: -16px;
    left: 0;
    right: 0;
    text-align: center;
    font-size: 10px;
    color: #6b7285;
}

.ds-listing-textarea {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 12px;
    font-size: 13px;
    color: #1a1d23;
    resize: vertical;
    font-family: inherit;
    line-height: 1.6;
}

/* 历史模态框 */
.ds-history-modal {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, 0.6);
    z-index: 9000;
    display: flex;
    align-items: center;
    justify-content: center;
}

.ds-history-content {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 20px;
    max-width: 500px;
    width: 90%;
    max-height: 80vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.ds-history-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 16px;
    font-weight: 700;
    color: #1a1d23;
    margin-bottom: 14px;
}

.ds-history-list {
    overflow-y: auto;
    flex: 1;
}

.ds-history-empty {
    text-align: center;
    color: #6b7285;
    padding: 30px;
    font-size: 13px;
}

.ds-history-card {
    background: #1f222a;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 10px 12px;
    margin-bottom: 8px;
}

.ds-history-time { font-size: 11px; color: #6b7285; }

.ds-history-name { font-size: 13px; color: #1a1d23; font-weight: 600; margin: 3px 0; }

/* ============================================================
   今日演出（左 21）— 基于演出管理工具页面，适配驾驶舱窗口
   ============================================================ */
.mod-today-show { color: #1a1d23; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; margin-top: -19px; }
.mod-today-show * { box-sizing: border-box; }
.mod-today-show .ts-header { margin-top: 5px; margin-bottom: 18px; }
.mod-today-show .ts-header h2 { font-size: 22px; font-weight: 700; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; margin-bottom: 4px; }
.mod-today-show .ts-header p { color: #8c93a3; font-size: 13px; }

.mod-today-show .live-section { margin-bottom: 18px; }
.mod-today-show .live-window {
    position: relative; width: 100%; aspect-ratio: 16 / 9; max-height: 460px;
    background: #f0f2f5; border-radius: 12px; overflow: hidden; border: 1px solid #c0c6d0;
    display: flex; align-items: center; justify-content: center;
}
.mod-today-show .live-window:fullscreen { max-height: none; border-radius: 0; }
.mod-today-show .live-window video { width: 100%; height: 100%; object-fit: cover; }
.mod-today-show .ts-live-body { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.mod-today-show .live-placeholder { display: flex; flex-direction: column; align-items: center; gap: 12px; color: #8c93a3; text-align: center; padding: 12px; }
.mod-today-show .live-placeholder .icon { font-size: 48px; }
.mod-today-show .live-badge {
    position: absolute; top: 16px; left: 16px; background: #ff4757; color: #1a1d23; padding: 4px 12px;
    border-radius: 4px; font-size: 12px; font-weight: 600; display: flex; align-items: center; gap: 6px; animation: ts-pulse 2s infinite; z-index: 3;
}
.mod-today-show .live-badge .dot { width: 8px; height: 8px; background: #fff; border-radius: 50%; animation: ts-blink 1s infinite; }
@keyframes ts-blink { 0%, 100% { opacity: 1; } 50% { opacity: .3; } }
@keyframes ts-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 71, 87, .4); } 50% { box-shadow: 0 0 0 8px rgba(255, 71, 87, 0); } }
.mod-today-show .live-info-bar {
    position: absolute; bottom: 0; left: 0; right: 0; padding: 16px 20px;
    background: linear-gradient(transparent, rgba(0, 0, 0, .8)); display: flex; justify-content: space-between; align-items: center; z-index: 2;
}
.mod-today-show .live-info-bar .show-name { font-size: 16px; font-weight: 600; }
.mod-today-show .live-info-bar .viewer-count { font-size: 13px; color: #aaa; }

.mod-today-show .live-fs-btn {
    position: absolute; top: 12px; right: 12px; z-index: 4; width: 36px; height: 36px; border: none; cursor: pointer;
    border-radius: 8px; background: rgba(255, 255, 255, .8); color: #1a1d23; display: flex; align-items: center; justify-content: center;
    transition: background .2s;
}
.mod-today-show .live-fs-btn:hover { background: rgba(102, 126, 234, .8); color: #fff; }
.mod-today-show .live-fs-btn.is-fs { background: rgba(102, 126, 234, .9); color: #fff; }

.mod-today-show .data-source-bar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; padding: 10px 16px; background: #f5f6f8; border-radius: 8px; border: 1px solid #c0c6d0; }
.mod-today-show .data-source-bar .source-label { font-size: 13px; color: #5a6070; display: flex; align-items: center; gap: 8px; }
.mod-today-show .source-dot { width: 8px; height: 8px; border-radius: 50%; }
.mod-today-show .source-dot.online { background: #2ed573; }
.mod-today-show .source-dot.offline { background: #ff6b6b; }
.mod-today-show .refresh-info { font-size: 12px; color: #8c93a3; display: flex; align-items: center; gap: 8px; }

.mod-today-show .filters { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 18px; align-items: center; }
.mod-today-show .filter-group { display: flex; align-items: center; gap: 8px; }
.mod-today-show .filter-group label { font-size: 13px; color: #5a6070; white-space: nowrap; }
.mod-today-show .filter-group select, .mod-today-show .filter-group input {
    background: #ffffff; border: 1px solid #c0c6d0; color: #1a1d23; padding: 8px 12px; border-radius: 6px; font-size: 13px; outline: none; transition: border-color .2s;
}
.mod-today-show .filter-group select:focus, .mod-today-show .filter-group input:focus { border-color: #667eea; }
.mod-today-show .filter-group input { width: 200px; }
.mod-today-show .btn { padding: 8px 16px; border: none; border-radius: 6px; font-size: 13px; font-weight: 500; cursor: pointer; transition: all .2s; display: inline-flex; align-items: center; gap: 6px; }
.mod-today-show .btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: #fff; }
.mod-today-show .btn-primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(102, 126, 234, .4); }
.mod-today-show .btn-outline { background: transparent; border: 1px solid #c0c6d0; color: #5a6070; }
.mod-today-show .btn-outline:hover { border-color: #667eea; color: #667eea; }
.mod-today-show .filters-right { margin-left: auto; display: flex; gap: 8px; }

.mod-today-show .stats-bar { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 16px; }
.mod-today-show .stat-item { background: #ffffff; border: 1px solid #c0c6d0; border-radius: 8px; padding: 12px 16px; flex: 1 1 calc(25% - 12px); min-width: calc(25% - 12px); text-align: center; }
.mod-today-show .stat-item .stat-value { font-size: 22px; font-weight: 700; color: #667eea; }
.mod-today-show .stat-item .stat-label { font-size: 12px; color: #8c93a3; margin-top: 4px; }

.mod-today-show .show-list { display: flex; flex-direction: column; gap: 12px; }
.mod-today-show .show-card { background: #ffffff; border-radius: 10px; padding: 16px 20px; border: 1px solid #c0c6d0; border-left: 4px solid transparent; transition: all .3s ease; position: relative; }
.mod-today-show .show-card:hover { border-color: #a0a6b2; transform: translateX(2px); }
.mod-today-show .show-card.status-ongoing { border-left-color: #4facfe; background: linear-gradient(135deg, rgba(79, 172, 254, .05), #ffffff); }
.mod-today-show .show-card.status-ended { opacity: .5; }
.mod-today-show .show-card.status-upcoming { border-left-color: #2ed573; }
.mod-today-show .show-card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; gap: 12px; }
.mod-today-show .show-name { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.mod-today-show .show-tags { display: flex; gap: 6px; }
.mod-today-show .tag { padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; }
.mod-today-show .tag-highlight { background: rgba(255, 71, 87, .15); color: #ff4757; border: 1px solid rgba(255, 71, 87, .3); }
.mod-today-show .tag-live { background: rgba(79, 172, 254, .15); color: #4facfe; border: 1px solid rgba(79, 172, 254, .3); }
.mod-today-show .tag-status { padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 500; }
.mod-today-show .tag-status.ongoing { background: rgba(79, 172, 254, .15); color: #4facfe; }
.mod-today-show .tag-status.upcoming { background: rgba(46, 213, 115, .15); color: #2ed573; }
.mod-today-show .tag-status.ended { background: rgba(136, 146, 164, .15); color: #5a6070; }
.mod-today-show .show-card-body { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; }
.mod-today-show .show-field { display: flex; align-items: center; gap: 6px; font-size: 13px; color: #5a6070; }
.mod-today-show .show-field .field-label { color: #8c93a3; white-space: nowrap; }
.mod-today-show .show-field .field-value { color: #1a1d23; }
.mod-today-show .show-remark { margin-top: 10px; padding-top: 10px; border-top: 1px solid #c0c6d0; font-size: 12px; color: #8c93a3; font-style: italic; }

.mod-today-show .empty-state { text-align: center; padding: 60px 20px; color: #8c93a3; }
.mod-today-show .empty-state .icon { font-size: 48px; margin-bottom: 12px; }

.mod-today-show .loading-spinner { display: inline-block; width: 14px; height: 14px; border: 2px solid #e8eaed; border-top-color: #667eea; border-radius: 50%; animation: ts-spin .8s linear infinite; }
@keyframes ts-spin { to { transform: rotate(360deg); } }

@media (max-width: 768px) {
    .mod-today-show .show-card-body { grid-template-columns: 1fr; }
    .mod-today-show .stat-item { min-width: calc(50% - 8px); flex: 1 1 calc(50% - 8px); }
}

.ds-history-preview { font-size: 12px; color: #8c93a3; line-height: 1.5; }

/* 悬停态 */
@media (hover: hover) {
    .ds-btn:hover { filter: brightness(1.15); }
    .ds-drop-area:hover { border-color: #4fc3f7; background: rgba(79, 195, 247, 0.05); }
    .ds-type-chip:hover { border-color: #4fc3f7; }
    .ds-img-card:hover { border-color: #4fc3f7; }
    .ds-color-swatch:hover { transform: scale(1.1); }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .ds-btn { min-height: 42px; }
    .ds-type-chip { padding: 10px 12px; }
    .ds-input, .ds-select, .ds-textarea { font-size: 16px; min-height: 42px; }
    .ds-slider { height: 34px; }
    .ds-btn:active, .ds-type-chip:active { opacity: .8; }
}

/* 窄屏堆叠 */
@media (max-width: 1024px) {
    .ds-layout { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
    .ds-type-grid { grid-template-columns: 1fr; }
    .ds-param-grid { grid-template-columns: 1fr; }
    .ds-img-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ============================================================
   鄂西美食（wm-，左 22）— 十堰全域特色美食大全，适配驾驶舱窗口
   ============================================================ */
.wm-app {
    margin: -19px 0 0;
    color: #1a1d23;
}

.wm-head {
    text-align: center;
    margin-bottom: 16px;
}

.wm-head h2 {
    font-size: 24px;
    font-weight: 800;
    background: linear-gradient(135deg, #4fc3f7, #ffb74d);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    margin-bottom: 6px;
}

.wm-head p {
    font-size: 13px;
    color: #8c93a3;
    margin-bottom: 14px;
}

.wm-search {
    position: relative;
    max-width: 480px;
    margin: 0 auto;
}

.wm-search-icon {
    position: absolute;
    left: 12px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 14px;
    pointer-events: none;
}

.wm-search input {
    width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    padding: 10px 14px 10px 36px;
    font-size: 14px;
    color: #1a1d23;
    outline: none;
    font-family: inherit;
    box-sizing: border-box;
    transition: border-color .15s;
}

.wm-search input:focus {
    border-color: #4fc3f7;
}

.wm-cats {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 12px;
    padding-bottom: 2px;
}

.wm-cats::-webkit-scrollbar { display: none; }

.wm-cat-btn {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 4px 9px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 999px;
    cursor: pointer;
    font-size: 12px;
    color: #1a1d23;
    font-family: inherit;
    white-space: nowrap;
    flex-shrink: 0;
    transition: border-color .15s, background .15s, color .15s;
}

.wm-cat-count {
    font-size: 10px;
    color: #6b7285;
    background: #eef1f5;
    border-radius: 999px;
    padding: 0 6px;
    line-height: 16px;
}

.wm-cat-btn.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
    font-weight: 600;
}

.wm-cat-btn.active .wm-cat-count {
    color: #1a1d23;
    background: rgba(255, 255, 255, 0.22);
}

.wm-count {
    font-size: 12px;
    color: #6b7285;
    margin-bottom: 10px;
}

.wm-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

.wm-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px 16px;
    transition: transform .2s, border-color .2s;
}

/* ==================== 接单系统 jd- ==================== */
.jd-app{margin:-19px 0 0;padding:0;font-size:14px;color:#1f2937;background:#f5f7fa;min-height:calc(100dvh - 150px);}
.jd-app *{box-sizing:border-box;}
.jd-app input,.jd-app select,.jd-app textarea{width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;background:#ffffff;color:#1f2937;font-size:14px;outline:none;}
.jd-app input:focus,.jd-app select:focus,.jd-app textarea:focus{border-color:#165DFF;}
.jd-app label{display:block;margin-bottom:4px;font-size:13px;color:#6b7280;}
.jd-app select{appearance:auto;}
.jd-login-card{max-width:440px;margin:40px auto;padding:32px;background:#ffffff;border:1px solid #d1d5db;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.06);}
.jd-login-logo{font-size:20px;font-weight:700;color:#1f2937;text-align:center;margin-bottom:4px;}
.jd-login-sub{text-align:center;color:#6b7280;font-size:13px;margin-bottom:20px;}
.jd-auth-tabs{display:flex;gap:0;margin-bottom:20px;border-bottom:2px solid #e5e7eb;}
.jd-auth-tab{flex:1;padding:10px;border:none;background:transparent;color:#6b7280;font-size:14px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;}
.jd-auth-tab.active{color:#165DFF;border-bottom-color:#165DFF;font-weight:600;}
.jd-form-item{margin-bottom:14px;}
.jd-login-hint{font-size:12px;color:#6b7280;background:#f0f4ff;border:1px solid #d1d5db;border-radius:6px;padding:10px;margin-bottom:16px;line-height:1.8;}
.jd-btn{display:inline-block;padding:8px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer;text-decoration:none;transition:opacity .2s;}
.jd-btn:disabled{opacity:.5;cursor:not-allowed;}
.jd-btn-primary{background:#165DFF;color:#fff;}
.jd-btn-primary:hover{background:#0e4ad8;}
.jd-btn-outline{background:transparent;color:#4b5563;border:1px solid #d1d5db;}
.jd-btn-outline:hover{border-color:#165DFF;color:#165DFF;}
.jd-btn-success{background:#16a34a;color:#fff;}
.jd-btn-success:hover{background:#15803d;}
.jd-btn-sm{padding:5px 12px;font-size:12px;}
.jd-btn-block{width:100%;text-align:center;padding:10px;}
.jd-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:#ffffff;border-bottom:1px solid #e5e7eb;flex-wrap:wrap;gap:8px;}
.jd-header-title{font-size:16px;font-weight:700;color:#1f2937;}
.jd-nav{display:flex;gap:4px;flex-wrap:wrap;}
.jd-nav-btn{padding:8px 14px;border:none;background:transparent;color:#6b7280;font-size:13px;cursor:pointer;border-radius:6px;}
.jd-nav-btn:hover{background:#e5e7eb;}
.jd-nav-btn.active{background:#165DFF;color:#fff;}
.jd-user-area{display:flex;align-items:center;gap:8px;font-size:13px;}
.jd-user-role{background:#f0f4ff;border:1px solid #d1d5db;padding:2px 8px;border-radius:4px;font-size:12px;color:#4b5563;}
.jd-user-name{color:#1f2937;font-weight:500;}
.jd-main{max-width:1024px;margin:0 auto;padding:16px 20px;}
.jd-card{background:#ffffff;border:1px solid #e5e7eb;border-radius:10px;padding:20px;box-shadow:0 1px 4px rgba(0,0,0,.04);}
.jd-card-title{font-size:18px;font-weight:700;color:#1f2937;margin:0 0 14px;}
.jd-page-card{background:#ffffff;border:1px solid #e5e7eb;border-radius:10px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 4px rgba(0,0,0,.04);}
.jd-page-card h2{margin:0 0 4px;font-size:18px;color:#1f2937;}
.jd-page-desc{margin:0;font-size:13px;color:#6b7280;}
.jd-grid-3{display:grid;grid-template-columns:1fr 280px;gap:16px;}
.jd-grid-2{display:flex;flex-direction:column;gap:12px;}
.jd-side-card{background:#ffffff;border:1px solid #e5e7eb;border-radius:10px;padding:16px;height:fit-content;box-shadow:0 1px 4px rgba(0,0,0,.04);}
.jd-side-card h3{margin:0 0 10px;font-size:15px;color:#1f2937;}
.jd-side-list{list-style:none;padding:0;margin:0;font-size:13px;color:#6b7280;line-height:2;}
.jd-proj-card{background:#ffffff;border:1px solid #e5e7eb;border-radius:10px;padding:16px;cursor:pointer;transition:border-color .2s;box-shadow:0 1px 4px rgba(0,0,0,.04);}
.jd-proj-card:hover{border-color:#165DFF;}
.jd-proj-top{display:flex;justify-content:space-between;align-items:start;gap:8px;margin-bottom:8px;}
.jd-proj-top h3{margin:0;font-size:16px;color:#1f2937;}
.jd-proj-info{font-size:13px;color:#6b7280;line-height:1.8;margin-bottom:6px;}
.jd-proj-info p{margin:0;}
.jd-proj-desc{font-size:13px;color:#4b5563;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;}
.jd-proj-foot{font-size:12px;color:#9ca3af;}
.jd-tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;}
.jd-tag-bid{background:rgba(22,93,255,.1);color:#2563eb;}
.jd-tag-sel{background:rgba(234,88,12,.1);color:#ea580c;}
.jd-tag-fin{background:rgba(22,163,74,.1);color:#16a34a;}
.jd-tag-wait{background:rgba(107,114,128,.1);color:#6b7280;}
.jd-form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.jd-row-btns{display:flex;gap:8px;margin-top:16px;}
.jd-proj-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0;font-size:13px;color:#6b7280;}
.jd-desc-box{background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;padding:10px;font-size:13px;color:#4b5563;}
.jd-bid-section{margin-top:16px;}
.jd-bid-section h3{font-size:15px;color:#1f2937;margin:0 0 10px;}
.jd-bid-item{display:flex;justify-content:space-between;align-items:center;gap:8px;border:1px solid #e5e7eb;border-radius:8px;padding:12px;margin-bottom:8px;background:#f9fafb;}
.jd-bid-name{font-weight:600;color:#1f2937;}
.jd-bid-info{font-size:13px;color:#6b7280;margin-top:2px;}
.jd-bid-content{font-size:13px;color:#4b5563;margin-top:4px;}
.jd-bid-form{border-top:1px solid #e5e7eb;margin-top:16px;padding-top:16px;}
.jd-bid-form h3{font-size:15px;color:#1f2937;margin:0 0 10px;}
.jd-bid-done{margin-top:16px;padding:12px;background:rgba(22,93,255,.06);border:1px solid rgba(22,93,255,.2);border-radius:8px;color:#2563eb;font-size:14px;}
.jd-bid-status{margin-top:6px;}
.jd-empty{text-align:center;padding:40px;color:#9ca3af;}
.jd-empty-icon{font-size:36px;margin-bottom:8px;}
.jd-empty-sm{text-align:center;padding:16px;color:#9ca3af;font-size:13px;}
.jd-msg-item{border-bottom:1px solid #e5e7eb;padding:12px 0;}
.jd-msg-title{font-weight:600;font-size:14px;color:#1f2937;}
.jd-msg-content{font-size:13px;color:#6b7280;margin-top:4px;}
.jd-msg-time{font-size:12px;color:#9ca3af;margin-top:4px;}
@media(max-width:768px){.jd-grid-3{grid-template-columns:1fr;}.jd-form-row{grid-template-columns:1fr;}.jd-header{flex-direction:column;align-items:stretch;}.jd-nav{justify-content:center;}.jd-main{padding:12px;}.jd-btn{min-height:42px;}.jd-app input,.jd-app select,.jd-app textarea{font-size:16px;}}
@media(hover:none){.jd-proj-card:hover{border-color:#e5e7eb;}}

/* ==================== 调度系统 dd-（保留源页暖棕琥珀色调） ==================== */
.dd-app{margin:-19px 0 0;padding:0;font-size:14px;color:#44403c;background:#faf5ef;overflow:visible;}
.dd-app *{box-sizing:border-box;}
.dd-app input,.dd-app select,.dd-app textarea{width:100%;padding:8px 12px;border:1px solid #d6cfc8;border-radius:6px;background:#fff;color:#44403c;font-size:14px;outline:none;}
.dd-app input:focus,.dd-app select:focus,.dd-app textarea:focus{border-color:#92400E;}
.dd-app label{display:block;margin-bottom:4px;font-size:13px;color:#78716c;}
.dd-app select{appearance:auto;}
.dd-login-card{max-width:440px;margin:40px auto;padding:32px;background:#fff;border:1px solid #e7e0d8;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.08);}
.dd-login-logo{font-size:20px;font-weight:700;color:#92400E;text-align:center;margin-bottom:4px;}
.dd-login-sub{text-align:center;color:#a8a29e;font-size:13px;margin-bottom:20px;}
.dd-auth-tabs{display:flex;margin-bottom:20px;border-bottom:2px solid #e7e0d8;}
.dd-auth-tab{flex:1;padding:10px;border:none;background:transparent;color:#a8a29e;font-size:14px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;}
.dd-auth-tab.active{color:#92400E;border-bottom-color:#92400E;font-weight:600;}
.dd-form-item{margin-bottom:14px;}
.dd-login-hint{font-size:12px;color:#78716c;background:#faf5ef;border:1px solid #e7e0d8;border-radius:6px;padding:10px;margin-bottom:16px;line-height:1.8;}
.dd-btn{display:inline-block;padding:8px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer;text-decoration:none;transition:opacity .2s;}
.dd-btn:disabled{opacity:.5;cursor:not-allowed;}
.dd-btn-primary{background:#92400E;color:#fff;}
.dd-btn-primary:hover{background:#78350f;}
.dd-btn-outline{background:transparent;color:#78716c;border:1px solid #d6cfc8;}
.dd-btn-outline:hover{border-color:#92400E;color:#92400E;}
.dd-btn-success{background:#16a34a;color:#fff;}
.dd-btn-success:hover{background:#15803d;}
.dd-btn-ship{background:#B45309;color:#fff;}
.dd-btn-ship:hover{background:#93330a;}
.dd-btn-spice{background:#B45309;color:#fff;}
.dd-btn-spice:hover{background:#93330a;}
.dd-btn-sm{padding:5px 12px;font-size:12px;}
.dd-btn-block{width:100%;text-align:center;padding:10px;}
.dd-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:#fff;border-bottom:1px solid #e7e0d8;box-shadow:0 1px 6px rgba(0,0,0,.04);flex-wrap:wrap;gap:8px;}
.dd-header-title{font-size:16px;font-weight:700;color:#92400E;}
.dd-nav{display:flex;gap:4px;flex-wrap:wrap;}
.dd-nav-btn{padding:8px 14px;border:none;background:transparent;color:#78716c;font-size:13px;cursor:pointer;border-radius:6px;border-bottom:3px solid transparent;}
.dd-nav-btn:hover{background:#faf5ef;}
.dd-nav-btn.active{border-bottom-color:#92400E;color:#92400E;font-weight:600;}
.dd-user-area{display:flex;align-items:center;gap:8px;font-size:13px;}
.dd-user-role{background:#faf5ef;border:1px solid #e7e0d8;padding:2px 8px;border-radius:4px;font-size:12px;color:#78716c;}
.dd-user-name{color:#44403c;font-weight:500;}
.dd-main{max-width:1024px;margin:0 auto;padding:16px 20px;}
.dd-card{background:#fff;border:1px solid #e7e0d8;border-radius:10px;padding:20px;box-shadow:0 2px 8px rgba(0,0,0,.04);}
.dd-card-title{font-size:18px;font-weight:700;color:#92400E;margin:0 0 14px;}
.dd-page-card{background:#fff;border:1px solid #e7e0d8;border-radius:10px;padding:16px 20px;margin-bottom:16px;box-shadow:0 2px 8px rgba(0,0,0,.04);}
.dd-page-card h2{margin:0 0 6px;font-size:18px;color:#92400E;}
.dd-cate-row{font-size:13px;color:#78716c;line-height:1.8;}
.dd-goods-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;}
.dd-goods-card{background:#fff;border:1px solid #e7e0d8;border-radius:10px;padding:14px;box-shadow:0 2px 6px rgba(0,0,0,.04);}
.dd-goods-cate{font-size:12px;color:#B45309;}
.dd-goods-name{font-size:15px;font-weight:700;color:#44403c;margin:4px 0;}
.dd-goods-gb{font-size:12px;color:#92400E;font-weight:500;}
.dd-goods-hs{font-size:12px;color:#a8a29e;}
.dd-goods-price{font-size:13px;color:#78716c;}
.dd-goods-stock{font-size:13px;color:#78716c;}
.dd-goods-origin{font-size:12px;color:#B45309;}
.dd-goods-qc{font-size:12px;color:#78716c;}
.dd-goods-batch{font-size:12px;color:#a8a29e;}
.dd-goods-sup{font-size:12px;color:#a8a29e;}
.dd-goods-buy{display:flex;align-items:center;gap:6px;margin-top:8px;}
.dd-qty-input{width:64px;padding:4px 8px;font-size:13px;}
.dd-tag{display:inline-block;padding:2px 8px;border-radius:99px;font-size:12px;}
.dd-tag-cate{background:#fef3c7;color:#92400E;}
.dd-tag-pend{background:#fef9c3;color:#a16207;}
.dd-tag-conf{background:#dbeafe;color:#1d4ed8;}
.dd-tag-ship{background:#fed7aa;color:#c2410c;}
.dd-tag-deliv{background:#dcfce7;color:#16a34a;}
.dd-tag-cancel{background:#f3f4f6;color:#6b7280;}
.dd-cart-item{display:flex;justify-content:space-between;align-items:center;background:#faf5ef;border:1px solid #e7e0d8;border-radius:8px;padding:12px;margin-bottom:8px;}
.dd-cart-name{font-weight:600;color:#44403c;}
.dd-cart-info{font-size:13px;color:#78716c;margin-top:2px;}
.dd-cart-sub{font-weight:700;color:#44403c;}
.dd-btn-dd-del{background:none;border:none;color:#ef4444;cursor:pointer;font-size:13px;margin-left:8px;}
.dd-cart-foot{border-top:1px solid #e7e0d8;margin-top:12px;padding-top:12px;display:flex;justify-content:space-between;align-items:center;}
.dd-cart-total{font-size:18px;font-weight:700;color:#92400E;}
.dd-order-card{background:#faf5ef;border:1px solid #e7e0d8;border-radius:10px;padding:14px;margin-bottom:10px;cursor:pointer;transition:border-color .2s;}
.dd-order-card:hover{border-color:#92400E;}
.dd-order-top{display:flex;justify-content:space-between;align-items:start;gap:8px;margin-bottom:6px;}
.dd-order-no{font-weight:700;color:#44403c;}
.dd-order-info{font-size:13px;color:#78716c;margin-bottom:2px;}
.dd-order-amount{font-size:13px;color:#44403c;font-weight:600;}
.dd-order-time{font-size:12px;color:#a8a29e;}
.dd-detail-info{font-size:13px;color:#78716c;line-height:1.8;margin:12px 0;}
.dd-detail-goods{border-top:1px solid #e7e0d8;padding-top:12px;}
.dd-detail-goods h4{font-size:14px;font-weight:600;color:#44403c;margin:0 0 8px;}
.dd-detail-row{display:flex;justify-content:space-between;border-bottom:1px solid #e7e0d8;padding:6px 0;font-size:13px;color:#44403c;}
.dd-detail-total{font-weight:700;color:#92400E;margin-top:8px;}
.dd-row-btns{display:flex;gap:8px;margin-top:16px;}
.dd-stock-item{display:flex;justify-content:space-between;align-items:center;background:#faf5ef;border:1px solid #e7e0d8;border-radius:8px;padding:12px;margin-bottom:8px;}
.dd-stock-name{font-weight:600;color:#44403c;}
.dd-stock-cate{font-size:12px;color:#a8a29e;}
.dd-stock-info{font-size:13px;color:#78716c;margin-top:2px;}
.dd-stock-edit{display:flex;align-items:center;gap:6px;}
.dd-stock-input{width:80px;padding:4px 8px;font-size:13px;}
.dd-task-card{background:#faf5ef;border:1px solid #e7e0d8;border-radius:10px;padding:14px;margin-bottom:10px;}
.dd-task-no{font-weight:700;color:#44403c;}
.dd-task-addr{font-size:13px;color:#78716c;margin-top:4px;}
.dd-task-driver{font-size:13px;color:#44403c;margin-top:6px;}
.dd-task-status{font-size:13px;color:#78716c;margin-top:2px;}
.dd-task-assign{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap;}
.dd-task-assign input{width:auto;min-width:120px;padding:4px 8px;font-size:13px;}
.dd-msg-item{border-bottom:1px solid #e7e0d8;padding:12px 0;}
.dd-msg-title{font-weight:600;font-size:14px;color:#44403c;}
.dd-msg-content{font-size:13px;color:#78716c;margin-top:4px;}
.dd-msg-time{font-size:12px;color:#a8a29e;margin-top:4px;}
.dd-empty{text-align:center;padding:40px;color:#a8a29e;}
.dd-empty-icon{font-size:36px;margin-bottom:8px;}
@media(max-width:768px){.dd-header{flex-direction:column;align-items:stretch;}.dd-nav{justify-content:center;}.dd-main{padding:12px;}.dd-btn{min-height:42px;}.dd-app input,.dd-app select,.dd-app textarea{font-size:16px;}}
@media(hover:none){.dd-order-card:hover{border-color:#e7e0d8;}}
/* 多供应商筛选 + 伙伴管理 */
.dd-sup-filter{display:flex;align-items:center;gap:12px;margin:10px 0 4px;flex-wrap:wrap;}
.dd-sup-filter select{width:auto;min-width:180px;padding:6px 10px;font-size:13px;}
.dd-sup-fav{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:#57534e;cursor:pointer;}
.dd-sup-fav input{width:auto;margin:0;}
.dd-sup-count{font-size:12px;color:#a8a29e;}
.dd-badge-fav{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:99px;background:#f59e0b;color:#fff;font-size:11px;font-weight:500;vertical-align:middle;}
.dd-task-parties{font-size:13px;color:#57534e;margin-top:4px;}
.dd-partner-h2{font-size:19px;color:#92400E;margin:0 0 12px;}
.dd-partner-sec{margin-bottom:14px;}
.dd-link-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;border:1px solid #ede6de;border-radius:8px;margin-bottom:8px;background:#fdfbf8;flex-wrap:wrap;}
.dd-link-who{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.dd-link-name{font-size:14px;font-weight:600;color:#44403c;}
.dd-link-sub{font-size:12px;color:#a8a29e;}
.dd-link-act{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.dd-link-bound{font-size:12px;color:#16a34a;}
.dd-dir-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap;}
.dd-dir-toolbar input{flex:1;min-width:200px;max-width:320px;padding:7px 12px;font-size:13px;}
.dd-dir-tip{font-size:12px;color:#a8a29e;margin-bottom:10px;line-height:1.6;}
.dd-dir-list{max-height:420px;overflow-y:auto;}
.dd-empty-sm{text-align:center;padding:18px;color:#a8a29e;font-size:13px;}
@media(max-width:768px){.dd-link-row{flex-direction:column;align-items:stretch;}.dd-link-act{justify-content:flex-end;}}

/* ==================== 海鲜供应 hx-（海洋蓝冷色调·批次质检） ==================== */
.hx-app{margin:-19px 0 0;padding:0;font-size:14px;color:#334155;background:#f0f7fb;overflow:visible;}
.hx-app *{box-sizing:border-box;}
.hx-app input,.hx-app select,.hx-app textarea{width:100%;padding:8px 12px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#334155;font-size:14px;outline:none;}
.hx-app input:focus,.hx-app select:focus,.hx-app textarea:focus{border-color:#0369a1;}
.hx-app label{display:block;margin-bottom:4px;font-size:13px;color:#64748b;}
.hx-app select{appearance:auto;}
.hx-login-card{max-width:440px;margin:40px auto;padding:32px;background:#fff;border:1px solid #d9e7f2;border-radius:12px;box-shadow:0 2px 12px rgba(2,132,199,.10);}
.hx-login-logo{font-size:20px;font-weight:700;color:#0369a1;text-align:center;margin-bottom:4px;}
.hx-login-sub{text-align:center;color:#94a3b8;font-size:13px;margin-bottom:20px;}
.hx-auth-tabs{display:flex;margin-bottom:20px;border-bottom:2px solid #e2e8f0;}
.hx-auth-tab{flex:1;padding:10px;border:none;background:transparent;color:#94a3b8;font-size:14px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;}
.hx-auth-tab.active{color:#0369a1;border-bottom-color:#0369a1;font-weight:600;}
.hx-form-item{margin-bottom:14px;}
.hx-login-hint{font-size:12px;color:#475569;background:#f0f7fb;border:1px solid #d9e7f2;border-radius:6px;padding:10px;margin-bottom:16px;line-height:1.8;}
.hx-btn{display:inline-block;padding:8px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer;text-decoration:none;transition:opacity .2s;}
.hx-btn:disabled{opacity:.5;cursor:not-allowed;}
.hx-btn-primary{background:#0369a1;color:#fff;}
.hx-btn-primary:hover{background:#075985;}
.hx-btn-seafood{background:#0284c7;color:#fff;}
.hx-btn-seafood:hover{background:#0369a1;}
.hx-btn-outline{background:transparent;color:#64748b;border:1px solid #cbd5e1;}
.hx-btn-outline:hover{border-color:#0369a1;color:#0369a1;}
.hx-btn-success{background:#16a34a;color:#fff;}
.hx-btn-success:hover{background:#15803d;}
.hx-btn-ship{background:#f97316;color:#fff;}
.hx-btn-ship:hover{background:#ea580c;}
.hx-btn-qc{background:#7c3aed;color:#fff;}
.hx-btn-qc:hover{background:#6d28d9;}
.hx-btn-sm{padding:5px 12px;font-size:12px;}
.hx-btn-block{width:100%;text-align:center;padding:10px;}
.hx-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:#fff;border-bottom:1px solid #d9e7f2;box-shadow:0 1px 6px rgba(2,132,199,.06);flex-wrap:wrap;gap:8px;}
.hx-header-title{font-size:16px;font-weight:700;color:#0369a1;}
.hx-nav{display:flex;gap:4px;flex-wrap:wrap;}
.hx-nav-btn{padding:8px 14px;border:none;background:transparent;color:#64748b;font-size:13px;cursor:pointer;border-radius:6px;border-bottom:3px solid transparent;}
.hx-nav-btn:hover{background:#f0f7fb;}
.hx-nav-btn.active{border-bottom-color:#0369a1;color:#0369a1;font-weight:600;}
.hx-user-area{display:flex;align-items:center;gap:8px;font-size:13px;}
.hx-user-role{background:#f0f7fb;border:1px solid #d9e7f2;padding:2px 8px;border-radius:4px;font-size:12px;color:#64748b;}
.hx-user-name{color:#334155;font-weight:500;}
.hx-main{max-width:1024px;margin:0 auto;padding:16px 20px;}
.hx-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:20px;box-shadow:0 2px 8px rgba(15,42,67,.05);}
.hx-card-title{font-size:18px;font-weight:700;color:#0369a1;margin:0 0 14px;}
.hx-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
.hx-toolbar .hx-card-title{margin-bottom:0;}
.hx-cate-row{font-size:13px;color:#64748b;line-height:2;}
.hx-goods-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;}
.hx-goods-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:14px;box-shadow:0 2px 6px rgba(15,42,67,.05);}
.hx-goods-top{display:flex;justify-content:space-between;align-items:center;gap:6px;}
.hx-goods-cate{font-size:12px;color:#0284c7;}
.hx-goods-name{font-size:15px;font-weight:700;color:#1e293b;margin:6px 0;}
.hx-goods-price{font-size:13px;color:#475569;}
.hx-meta{font-size:12px;color:#94a3b8;margin-top:3px;}
.hx-goods-buy{display:flex;align-items:center;gap:6px;margin-top:10px;}
.hx-qty-input{width:72px !important;padding:5px 8px !important;font-size:13px !important;}
.hx-tag{display:inline-block;padding:2px 8px;border-radius:99px;font-size:12px;}
.hx-tag-cate{background:#e0f2fe;color:#0369a1;}
.hx-tag-custom{background:#f3e8ff;color:#7e22ce;}
.hx-tag-pend{background:#fef9c3;color:#a16207;}
.hx-tag-conf{background:#dbeafe;color:#1d4ed8;}
.hx-tag-qc{background:#f3e8ff;color:#7e22ce;}
.hx-tag-ship{background:#ffedd5;color:#c2410c;}
.hx-tag-deliv{background:#dcfce7;color:#15803d;}
.hx-tag-cancel{background:#f1f5f9;color:#64748b;}
.hx-qc-pass{background:#d1fae5;color:#059669;}
.hx-qc-fail{background:#fee2e2;color:#dc2626;}
.hx-qc-pending{background:#fef3c7;color:#d97706;}
.hx-warn-text{color:#dc2626;font-size:13px;margin-right:10px;}
.hx-link-danger{background:none;border:none;color:#ef4444;cursor:pointer;font-size:13px;margin-left:10px;}
.hx-cart-item{display:flex;justify-content:space-between;align-items:center;background:#f6fafe;border:1px solid #e2e8f0;border-radius:8px;padding:12px;margin-bottom:8px;}
.hx-cart-name{font-weight:600;color:#1e293b;}
.hx-cart-info{font-size:13px;color:#64748b;margin-top:2px;}
.hx-cart-sub{font-weight:700;color:#1e293b;}
.hx-cart-foot{border-top:1px solid #e2e8f0;margin-top:12px;padding-top:12px;display:flex;justify-content:space-between;align-items:center;}
.hx-cart-total{font-size:18px;font-weight:700;color:#0369a1;}
.hx-order-card{background:#f6fafe;border:1px solid #e2e8f0;border-radius:10px;padding:14px;margin-bottom:10px;cursor:pointer;transition:border-color .2s;}
.hx-order-card:hover{border-color:#0284c7;}
.hx-order-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:6px;}
.hx-order-no{font-weight:700;color:#1e293b;}
.hx-order-info{font-size:13px;color:#475569;margin-bottom:2px;}
.hx-order-amount{font-size:13px;color:#334155;font-weight:600;}
.hx-order-time{font-size:12px;color:#94a3b8;}
.hx-detail-info{font-size:13px;color:#475569;line-height:1.8;margin:12px 0;}
.hx-detail-goods{border-top:1px solid #e2e8f0;padding-top:12px;margin-top:4px;}
.hx-detail-goods h4{font-size:14px;font-weight:600;color:#1e293b;margin:0 0 8px;}
.hx-detail-row{display:flex;justify-content:space-between;border-bottom:1px solid #eef2f6;padding:6px 0;font-size:13px;color:#334155;}
.hx-detail-total{font-weight:700;color:#0369a1;margin-top:8px;}
.hx-row-btns{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap;align-items:center;}
.hx-stock-item{display:flex;justify-content:space-between;align-items:center;background:#f6fafe;border:1px solid #e2e8f0;border-radius:8px;padding:12px;margin-bottom:8px;gap:8px;}
.hx-stock-name{font-weight:600;color:#1e293b;}
.hx-stock-cate{font-size:12px;color:#94a3b8;font-weight:400;}
.hx-stock-info{font-size:13px;color:#64748b;margin-top:2px;}
.hx-stock-edit{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.hx-stock-input{width:80px !important;padding:4px 8px !important;font-size:13px !important;}
.hx-task-card{background:#f6fafe;border:1px solid #e2e8f0;border-radius:10px;padding:14px;margin-bottom:10px;}
.hx-task-no{font-weight:700;color:#1e293b;}
.hx-task-parties{font-size:13px;color:#475569;margin-top:4px;}
.hx-task-addr{font-size:13px;color:#64748b;margin-top:4px;}
.hx-task-driver{font-size:13px;color:#334155;margin-top:6px;}
.hx-task-status{font-size:13px;color:#64748b;margin-top:2px;}
.hx-task-assign{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap;}
.hx-task-assign input{width:auto;min-width:130px;padding:4px 8px;font-size:13px;}
.hx-qc-item{background:#f6fafe;border:1px solid #e2e8f0;border-radius:10px;padding:14px;margin-bottom:10px;cursor:pointer;transition:border-color .2s;}
.hx-qc-item:hover{border-color:#0284c7;}
.hx-qc-summary{font-size:12px;color:#94a3b8;margin-top:4px;line-height:1.6;}
.hx-qc-tip{background:#e0f2fe;border:1px solid #bae6fd;color:#075985;font-size:13px;border-radius:6px;padding:9px 12px;margin:0 0 14px;line-height:1.6;}
.hx-qc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;}
.hx-qc-field{border:1px solid #e2e8f0;border-radius:8px;padding:10px;}
.hx-qc-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px;margin-top:6px;}
.hx-qc-detail-item{background:#f6fafe;border:1px solid #e2e8f0;border-radius:6px;padding:8px 10px;font-size:13px;color:#1e293b;}
.hx-qc-conclusion{background:#f6fafe;border:1px solid #e2e8f0;border-radius:6px;padding:10px;font-size:13px;color:#334155;}
.hx-sub-title{font-size:14px;font-weight:600;color:#1e293b;margin:16px 0 10px;}
.hx-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;}
.hx-grid-full{grid-column:1/-1;}
.hx-msg-item{border-bottom:1px solid #e2e8f0;padding:12px 0;}
.hx-msg-title{font-weight:600;font-size:14px;color:#1e293b;}
.hx-msg-content{font-size:13px;color:#64748b;margin-top:4px;}
.hx-msg-time{font-size:12px;color:#94a3b8;margin-top:4px;}
.hx-empty{text-align:center;padding:40px;color:#94a3b8;}
.hx-empty-sm{padding:18px;font-size:13px;}
.hx-empty-icon{font-size:36px;margin-bottom:8px;}
@media(max-width:768px){.hx-header{flex-direction:column;align-items:stretch;}.hx-nav{justify-content:center;}.hx-main{padding:12px;}.hx-btn{min-height:42px;}.hx-app input,.hx-app select,.hx-app textarea{font-size:16px;}.hx-form-grid{grid-template-columns:1fr;}.hx-stock-item{flex-direction:column;align-items:stretch;}.hx-stock-edit{justify-content:flex-end;}}
@media(hover:none){.hx-order-card:hover,.hx-qc-item:hover{border-color:#e2e8f0;}}

.wm-card-top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 8px;
    margin-bottom: 6px;
}

.wm-card h3 {
    font-size: 15px;
    font-weight: 700;
    color: #1a1d23;
    line-height: 1.4;
}

.wm-tag {
    flex-shrink: 0;
    font-size: 11px;
    padding: 2px 8px;
    border-radius: 6px;
    white-space: nowrap;
}

.wm-tag-feiyi  { background: rgba(79, 195, 247, 0.14); color: #4fc3f7; }
.wm-tag-river  { background: rgba(77, 208, 225, 0.14); color: #4dd0e1; }
.wm-tag-lawei  { background: rgba(255, 183, 77, 0.14); color: #ffb74d; }
.wm-tag-shanye { background: rgba(143, 209, 143, 0.14); color: #8fd18f; }
.wm-tag-mianshi{ background: rgba(255, 213, 79, 0.14); color: #ffd54f; }
.wm-tag-suan   { background: rgba(186, 104, 200, 0.16); color: #ba68c8; }
.wm-tag-rare   { background: rgba(255, 138, 101, 0.14); color: #ff8a65; }
.wm-tag-drink  { background: rgba(240, 98, 146, 0.14); color: #f06292; }

.wm-area {
    font-size: 12px;
    color: #8c93a3;
    margin-bottom: 8px;
}

.wm-desc {
    font-size: 13px;
    line-height: 1.7;
    color: #b6bcc9;
    margin: 0;
}

.wm-empty {
    grid-column: 1 / -1;
    text-align: center;
    color: #6b7285;
    padding: 60px 0;
    font-size: 30px;
}

.wm-empty p {
    font-size: 13px;
    margin-top: 8px;
}

/* 悬停态（仅鼠标设备） */
@media (hover: hover) {
    .wm-card:hover {
        transform: translateY(-3px);
        border-color: #4fc3f7;
    }
    .wm-cat-btn:not(.active):hover {
        border-color: rgba(79, 195, 247, 0.5);
        color: #1a1d23;
    }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .wm-cat-btn { padding: 6px 10px; }
    .wm-search input { font-size: 16px; }
    .wm-card:active { opacity: .85; }
}

/* 窄屏适配 */
@media (max-width: 1100px) {
    .wm-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 680px) {
    .wm-grid { grid-template-columns: 1fr; }
}

/* ============================================================
   天天益智（llk-，左 36）— 连连看 80 关，适配驾驶舱窗口
   ============================================================ */
.llk-app {
    margin: -19px 0 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    color: #1a1d23;
}

/* 游戏容器作为光线画布的定位包含块（画布靠 offsetLeft/Top 对齐棋盘） */
.llk-app #llkGameC { position: relative; }

/* 特效光线专设显示区：画布挂在棋盘容器内，尺寸/位置由 drawLine() 按「棋盘 + padding 余量」动态设置 */
.llk-app #llkLineC {
    position: absolute;
    top: 0; left: 0;
    pointer-events: none;
    z-index: 6;
}

.llk-combo-pop {
    position: fixed;
    top: 45%; left: 50%;
    transform: translate(-50%, -50%);
    font-size: 2.2em;
    font-weight: bold;
    color: #feca57;
    pointer-events: none;
    opacity: 0;
    z-index: 200;
    text-shadow: 0 0 15px rgba(254, 202, 87, .7);
}

.llk-combo-pop.show { animation: llkComboA .8s forwards; }

@keyframes llkComboA {
    0% { opacity: 0; transform: translate(-50%, -50%) scale(.5); }
    30% { opacity: 1; transform: translate(-50%, -50%) scale(1.2); }
    70% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
    100% { opacity: 0; transform: translate(-50%, -60%); }
}

.llk-header { text-align: center; padding: 10px; }

.llk-title {
    font-size: 1.6em;
    background: linear-gradient(45deg, #4fc3f7, #feca57, #8fd18f);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

.llk-title-sm { font-size: 1.3em; }

.llk-sub { color: #8c93a3; font-size: .85em; margin-top: 4px; }

.llk-info-bar {
    display: flex;
    justify-content: center;
    gap: 8px;
    flex-wrap: nowrap;
    margin: 8px 0;
    overflow-x: auto;
    scrollbar-width: none;
}

.llk-info-bar::-webkit-scrollbar { display: none; }

.llk-info-item {
    background: #1f222a;
    padding: 4px 12px;
    border-radius: 15px;
    font-size: .85em;
    border: 1px solid #c0c6d0;
    white-space: nowrap;
}

.llk-info-item b { color: #feca57; }

.llk-bar-wrap {
    width: 100%;
    max-width: 500px;
    height: 7px;
    background: #1f222a;
    border-radius: 4px;
    margin: 4px auto;
    overflow: hidden;
}

.llk-bar-fill { height: 100%; border-radius: 4px; transition: width .3s; }
.llk-progress-fill { background: linear-gradient(90deg, #ff6b6b, #feca57); }
.llk-timer-fill { background: linear-gradient(90deg, #00d2d3, #54a0ff); }
.llk-timer-fill.warn { background: linear-gradient(90deg, #ff6b6b, #ee5a24); }

.llk-board {
    /* 自适应放大：棋盘为 N×N 正方形，边长取可用空间的 min(高, 宽)；
       方格用 grid 1fr 自适应、字号随格子等比缩放（--llk-n 由 JS 写入）。
       上方与计时条、下方与五个按钮均保留 margin 间距。 */
    --llk-n: 4;
    --llk-gap: 4px;
    --llk-pad: 14px;
    --llk-side: min(56vh, 46vw);
    width: min(100%, var(--llk-side));
    aspect-ratio: 1 / 1;
    display: grid;
    gap: var(--llk-gap);
    padding: var(--llk-pad);
    box-sizing: border-box;
    background: #1f222a;
    border-radius: 12px;
    border: 1px solid #c0c6d0;
    margin: 14px auto 18px;
    position: relative;
    /* 图案适当缩小（.58 -> .46），在格内留出呼吸空间 */
    font-size: calc((var(--llk-side) - 2 * var(--llk-pad) - (var(--llk-n) - 1) * var(--llk-gap)) / var(--llk-n) * .46);
}

.llk-tile {
    width: auto; height: auto;
    min-width: 0; min-height: 0;
    aspect-ratio: 1 / 1;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1em;
    line-height: 1;
    background: linear-gradient(145deg, #2a2a4a, #1a1a35);
    border-radius: 12%;
    cursor: pointer;
    transition: all .15s;
    border: 2px solid rgba(255, 255, 255, .08);
    user-select: none;
}

.llk-tile.sel {
    border-color: #feca57;
    box-shadow: 0 0 15px rgba(254, 202, 87, .5);
    transform: scale(1.1);
}

.llk-tile.matched { animation: llkMatchA .4s forwards; }
.llk-tile.empty { visibility: hidden; pointer-events: none; }
.llk-tile.hint { animation: llkHintA .5s infinite alternate; border-color: #00d2d3; }

@keyframes llkMatchA { 0% { transform: scale(1.1); opacity: 1; } 100% { transform: scale(0); opacity: 0; } }
@keyframes llkHintA { from { box-shadow: 0 0 5px rgba(0, 210, 211, .4); } to { box-shadow: 0 0 18px rgba(0, 210, 211, .9); } }

.llk-ctrls {
    display: flex;
    gap: 8px;
    /* 五个按钮与棋盘再拉开距离，给下方绕行光线留出空间 */
    margin: 30px 8px 8px;
    flex-wrap: wrap;
    justify-content: center;
}

.llk-btn {
    padding: 8px 16px;
    border: none;
    border-radius: 20px;
    cursor: pointer;
    font-size: .85em;
    font-weight: bold;
    color: #1a1d23;
    font-family: inherit;
    transition: all .2s;
}

.llk-btn:disabled { opacity: .4; cursor: not-allowed; transform: none; }

.llk-b1 { background: linear-gradient(135deg, #00d2d3, #54a0ff); }
.llk-b2 { background: linear-gradient(135deg, #feca57, #ff9f43); }
.llk-b3 { background: linear-gradient(135deg, #ff6b6b, #ee5a24); }
.llk-b4 { background: linear-gradient(135deg, #a29bfe, #6c5ce7); }

.llk-levels { display: none; width: 100%; max-width: 900px; padding: 10px 15px 15px; }
.llk-levels.active { display: block; }

.llk-tier-label { text-align: center; margin: 12px 0 5px; font-size: 1.05em; font-weight: bold; }

.llk-lgrid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(52px, 1fr));
    gap: 8px;
    padding: 8px;
}

.llk-lbtn {
    width: 50px; height: 50px;
    border: 2px solid #3a3f4c;
    border-radius: 9px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    font-weight: bold;
    cursor: pointer;
    transition: all .2s;
    background: #1f222a;
    color: #1a1d23;
    font-size: .95em;
    margin: 0 auto;
}

.llk-lbtn.done { background: rgba(0, 184, 148, .25); border-color: #00b894; }
.llk-lbtn.cur { background: rgba(254, 202, 87, .25); border-color: #feca57; animation: llkPulse 1.5s infinite; }
.llk-lbtn.lock { opacity: .35; cursor: not-allowed; }
.llk-lbtn .st { font-size: .55em; }

@keyframes llkPulse {
    0%, 100% { box-shadow: 0 0 5px rgba(254, 202, 87, .4); }
    50% { box-shadow: 0 0 15px rgba(254, 202, 87, .7); }
}

.llk-modal {
    display: none;
    position: fixed;
    top: 0; left: 0;
    width: 100%; height: 100%;
    background: rgba(0, 0, 0, .75);
    z-index: 999;
    align-items: center;
    justify-content: center;
}

.llk-modal.active { display: flex; }

.llk-mbox {
    background: #ffffff;
    padding: 30px;
    border-radius: 18px;
    text-align: center;
    border: 2px solid #3a3f4c;
    max-width: 380px;
    width: 90%;
}

.llk-mbox h2 { font-size: 1.6em; margin-bottom: 10px; }
.llk-mbox p { margin: 6px 0; color: #b2bec3; font-size: .9em; }
.llk-mbox .llk-btn { margin: 6px 4px; }

.llk-stars { font-size: 2.2em; margin: 10px 0; }
.llk-star { color: #555; }
.llk-star.on { color: #feca57; }

.llk-pause-ov {
    display: none;
    position: absolute;
    top: 0; left: 0;
    width: 100%; height: 100%;
    background: rgba(0, 0, 0, .85);
    z-index: 50;
    align-items: center;
    justify-content: center;
    border-radius: 12px;
    font-size: 1.8em;
}

.llk-pause-ov.active { display: flex; }

/* 悬停态（仅鼠标设备） */
@media (hover: hover) {
    .llk-tile:hover { transform: scale(1.07); border-color: rgba(255, 255, 255, .3); }
    .llk-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, .3); }
    .llk-lbtn:not(.lock):hover { transform: scale(1.1); border-color: #feca57; }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .llk-btn { min-height: 42px; padding: 8px 18px; }
    .llk-btn:active { opacity: .8; transform: none; }
    .llk-tile:active { transform: scale(1.05); }
    .llk-lbtn:active { transform: scale(1.05); }
}

/* 窄屏适配 */
@media (max-width: 600px) {
    .llk-board { --llk-side: min(84vw, 46vh); --llk-gap: 2px; --llk-pad: 8px; }
    .llk-title { font-size: 1.3em; }
    .llk-lgrid { grid-template-columns: repeat(auto-fill, minmax(46px, 1fr)); }
    .llk-lbtn { width: 44px; height: 44px; }
}


/* ============================================================
   演出管理后台（sa-，左 35）— 今日演出的多用户管理后台
   ============================================================ */
.sa-app {
    margin: -19px 0 0;
    color: #1a1d23;
}

.sa-denied {
    margin: -19px 0 0;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 60px 20px;
    text-align: center;
    color: #c62828;
    font-size: 16px;
}

.sa-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 14px;
}

.sa-header h2 {
    font-size: 20px;
    font-weight: 800;
    background: linear-gradient(135deg, #0d47a1, #1976d2);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}

.sa-user-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 999px;
    padding: 5px 14px;
    font-size: 13px;
}

.sa-user-ops {
    display: inline-flex;
    align-items: center;
    gap: 10px;
}

.sa-user-role {
    color: #8c93a3;
    font-size: 12px;
    margin-left: 4px;
    padding-left: 8px;
    border-left: 1px solid #c0c6d0;
}

/* Tabs */
.sa-tabs {
    display: flex;
    gap: 6px;
    margin-bottom: 14px;
    overflow-x: auto;
    scrollbar-width: none;
    padding-bottom: 2px;
}
.sa-tabs::-webkit-scrollbar { display: none; }

.sa-tab {
    padding: 8px 16px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    color: #4b5563;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    white-space: nowrap;
    flex-shrink: 0;
    transition: all .15s;
}

.sa-tab.active {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
    font-weight: 600;
}

.sa-panel { width: 100%; }

/* 概览统计卡 */
.sa-stat-grid {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 10px;
    margin-bottom: 14px;
}

.sa-stat {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px 10px;
    text-align: center;
}

.sa-stat-n { font-size: 24px; font-weight: 800; color: #1a1d23; line-height: 1.2; }
.sa-stat-l { font-size: 12px; color: #8c93a3; margin-top: 4px; }

.sa-overview-cols {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.sa-ov-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 14px 16px;
}

.sa-ov-card h4 { font-size: 14px; margin-bottom: 10px; color: #1a1d23; }
.sa-ov-empty { color: #6b7285; font-size: 13px; padding: 12px 0; text-align: center; }

.sa-dist-row {
    display: grid;
    grid-template-columns: 74px 1fr auto;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
    font-size: 12px;
}
.sa-dist-l { color: #4b5563; white-space: nowrap; }
.sa-dist-n { color: #8c93a3; white-space: nowrap; font-size: 11px; }
.sa-dist-bar { height: 8px; background: #ffffff; border-radius: 999px; overflow: hidden; }
.sa-dist-fill { height: 100%; border-radius: 999px; transition: width .3s; }
.sa-dist-fill-v { background: linear-gradient(90deg, #4fc3f7, #29b6f6); }

.sa-log-mini {
    font-size: 12px;
    color: #4b5563;
    padding: 7px 0;
    border-bottom: 1px dashed #d8dde6;
    line-height: 1.5;
}
.sa-log-mini:last-child { border-bottom: none; }
.sa-log-mini .sa-log-detail { color: #8c93a3; }
.sa-log-mini .sa-log-time { float: right; color: #6b7285; font-size: 11px; }

/* 工具栏 */
.sa-toolbar {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.sa-toolbar-tip { font-size: 12px; color: #8c93a3; margin-right: auto; }

.sa-input {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 13px;
    color: #1a1d23;
    outline: none;
    font-family: inherit;
    transition: border-color .15s;
    box-sizing: border-box;
}
.sa-input:focus { border-color: #4fc3f7; }
#saSearch { width: 220px; max-width: 100%; }
.sa-select { cursor: pointer; }

/* 按钮 */
.sa-btn {
    padding: 8px 14px;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    background: #ffffff;
    color: #1a1d23;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
    white-space: nowrap;
    transition: all .15s;
}
.sa-btn-primary {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    border-color: transparent;
    color: #1a1d23;
    font-weight: 600;
}
.sa-btn-danger { background: rgba(198, 40, 40, .06); border-color: rgba(198, 40, 40, .3); color: #c62828; }
.sa-btn-mini { padding: 4px 10px; font-size: 12px; border-radius: 6px; }
.sa-btn.sa-confirm { background: #ff5252; border-color: #ff5252; color: #1a1d23; }

/* 表格 */
.sa-table-wrap {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    overflow-x: auto;
}

.sa-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 760px; }
.sa-table th {
    text-align: left;
    padding: 11px 12px;
    color: #4b5563;
    font-weight: 600;
    font-size: 12px;
    border-bottom: 1px solid #c0c6d0;
    white-space: nowrap;
    background: #f0f2f5;
}
.sa-table td { padding: 10px 12px; border-bottom: 1px solid #e3e7ee; color: #1a1d23; vertical-align: middle; }
.sa-table tbody tr:last-child td { border-bottom: none; }
.sa-cell-name { font-weight: 600; color: #1a1d23; min-width: 160px; }
.sa-cell-ops { white-space: nowrap; }
.sa-cell-ops .sa-btn + .sa-btn { margin-left: 6px; }

.sa-mini-tag { font-size: 12px; }
.sa-tag-hl { filter: grayscale(0); }

.sa-yn {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 6px;
    font-size: 11px;
    background: #eef1f5;
    color: #5a6270;
}
.sa-yn-y { background: rgba(255, 183, 77, .18); color: #b45309; }
.sa-yn-live { background: rgba(255, 71, 87, .12); color: #c62828; }

.sa-status { display: inline-block; padding: 2px 9px; border-radius: 6px; font-size: 11px; white-space: nowrap; }
.sa-status-ongoing { background: rgba(2, 119, 189, .1); color: #0277bd; }
.sa-status-upcoming { background: rgba(27, 129, 63, .1); color: #1b813f; }
.sa-status-ended { background: rgba(90, 98, 112, .12); color: #5a6270; }

.sa-empty { text-align: center; color: #6b7285; padding: 50px 0; font-size: 14px; }

/* 操作日志列表 */
.sa-logs {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 6px 16px;
}
.sa-log-item {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    padding: 10px 0;
    border-bottom: 1px solid #e3e7ee;
    font-size: 13px;
}
.sa-log-item:last-child { border-bottom: none; }
.sa-log-time2 { color: #6b7285; font-size: 12px; white-space: nowrap; }
.sa-log-user { color: #0277bd; white-space: nowrap; }
.sa-log-action {
    background: rgba(2, 119, 189, .08);
    color: #0277bd;
    padding: 2px 10px;
    border-radius: 6px;
    font-size: 12px;
    white-space: nowrap;
}
.sa-log-detail2 { color: #8c93a3; font-size: 12px; }

/* 弹窗 */
.sa-modal {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .7);
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
}
.sa-modal[hidden] { display: none; }

.sa-mbox {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 22px;
    width: min(640px, 100%);
    max-height: 92vh;
    overflow-y: auto;
}
.sa-mbox-sm { width: min(420px, 100%); }
.sa-mbox h3 { font-size: 17px; margin-bottom: 16px; }

.sa-form {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px 14px;
}
.sa-field { display: flex; flex-direction: column; gap: 5px; }
.sa-field-full { grid-column: 1 / -1; }
.sa-field > span { font-size: 12px; color: #8c93a3; }
.sa-field > span i { color: #c62828; font-style: normal; }
textarea.sa-input { resize: vertical; }

.sa-switch-row {
    grid-column: 1 / -1;
    display: flex;
    gap: 24px;
    flex-wrap: wrap;
}
.sa-switch {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-size: 13px;
    color: #1a1d23;
    cursor: pointer;
}
.sa-switch input { width: 16px; height: 16px; accent-color: #4fc3f7; cursor: pointer; }

.sa-modal-ops {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 18px;
}

/* ===== 左32 演出管理：子项目登录页 ===== */
.sa-login-card {
    max-width: 380px;
    margin: 60px auto 0;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 14px;
    padding: 28px 26px;
    box-shadow: 0 4px 18px rgba(26, 29, 35, 0.06);
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.sa-login-ico {
    font-size: 34px;
    text-align: center;
}
.sa-login-card h3 {
    margin: 0;
    font-size: 18px;
    text-align: center;
    color: #1a1d23;
}
.sa-login-tip {
    margin: -6px 0 4px;
    font-size: 12px;
    color: #8c93a3;
    text-align: center;
}
.sa-login-err {
    background: rgba(198, 40, 40, .07);
    border: 1px solid rgba(198, 40, 40, .3);
    color: #c62828;
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 12.5px;
}
.sa-login-btn { width: 100%; padding: 10px 0; font-size: 14px; }

/* hover 仅鼠标设备 */
@media (hover: hover) {
    .sa-tab:not(.active):hover { border-color: rgba(79, 195, 247, .5); color: #1a1d23; }
    .sa-btn:hover { border-color: #4fc3f7; }
    .sa-btn-primary:hover { filter: brightness(1.08); border-color: transparent; }
    .sa-btn-danger:hover { background: rgba(198, 40, 40, .14); }
    .sa-table tbody tr:hover { background: rgba(79, 195, 247, .05); }
    .sa-stat:hover { border-color: rgba(79, 195, 247, .4); }
}

/* 触摸适配 */
@media (pointer: coarse) {
    .sa-tab { padding: 10px 16px; min-height: 42px; display: inline-flex; align-items: center; }
    .sa-btn { min-height: 42px; display: inline-flex; align-items: center; }
    .sa-btn-mini { min-height: 34px; }
    .sa-input { font-size: 16px; }
    .sa-btn:active { opacity: .8; }
}

/* 平板/窄屏 */
@media (max-width: 1100px) {
    .sa-stat-grid { grid-template-columns: repeat(3, 1fr); }
    .sa-overview-cols { grid-template-columns: 1fr; }
}

@media (max-width: 640px) {
    .sa-stat-grid { grid-template-columns: repeat(2, 1fr); }
    .sa-form { grid-template-columns: 1fr; }
    .sa-header h2 { font-size: 17px; }
    #saSearch { width: 100%; }
    .sa-toolbar .sa-select { flex: 1; min-width: 110px; }
}

/* ===== 俯视视角 / 无人机直播（dl-，驾驶舱暗色适配，源：wurenjizhibo/preview.html） ===== */
.dl-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    min-height: calc(100dvh - 150px);
    display: flex;
    flex-direction: column;
    gap: 8px;
    color: #1a1d23;
}

.dl-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 8px 14px;
    flex-shrink: 0;
}
.dl-nav-left { display: flex; align-items: center; gap: 10px; min-width: 0; }
.dl-logo { font-size: 20px; }
.dl-title {
    font-size: 16px;
    font-weight: 700;
    background: linear-gradient(90deg, #4fc3f7, #81d4fa);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    white-space: nowrap;
}
.dl-envtag {
    font-size: 11px;
    padding: 2px 8px;
    background: rgba(102, 126, 234, 0.25);
    color: #a5b4fc;
    border: 1px solid rgba(102, 126, 234, 0.35);
    border-radius: 10px;
    white-space: nowrap;
}

.dl-btn-ghost {
    padding: 6px 14px;
    background: transparent;
    color: #d1d5db;
    border: 1px solid #4b5563;
    border-radius: 6px;
    font-size: 13px;
    font-family: inherit;
    transition: background .15s, color .15s;
}
.dl-btn-ghost:hover { background: #3a3f4c; color: #1a1d23; }

.dl-main {
    display: flex;
    gap: 8px;
    align-items: stretch;
}

/* 左侧设备列表（随卡片自然排布，内部不滚动，竖条统一交给外层内容区） */
.dl-sidebar {
    width: 250px;
    flex-shrink: 0;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    overflow: visible;
}
.dl-sidebar-title {
    padding: 13px 16px;
    font-size: 14px;
    font-weight: 600;
    color: #c9ced9;
    border-bottom: 1px solid #c0c6d0;
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}
.dl-count {
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0b1622;
    font-size: 12px;
    font-weight: 700;
    padding: 1px 8px;
    border-radius: 10px;
}
.dl-device-list { flex: 1; overflow: visible; min-height: 0; }
.dl-device-item {
    padding: 12px 16px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    cursor: pointer;
    border-bottom: 1px solid rgba(58, 63, 76, 0.6);
    border-left: 3px solid transparent;
    transition: background .15s;
}
.dl-device-item:hover { background: rgba(79, 195, 247, 0.06); }
.dl-device-item.active { background: rgba(79, 195, 247, 0.12); border-left-color: #4fc3f7; }
.dl-device-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dl-device-name {
    font-size: 14px;
    font-weight: 600;
    color: #1a1d23;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dl-stream-path {
    font-size: 12px;
    color: #8c93a3;
    font-family: Consolas, monospace;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dl-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.dl-dot.online { background: #52c41a; box-shadow: 0 0 6px #52c41a; }
.dl-dot.offline { background: #6b7280; }
.dl-empty { padding: 40px 20px; text-align: center; color: #8c93a3; font-size: 13px; }

/* 右侧播放区（自然高度，内部不滚动，竖条统一交给外层内容区） */
.dl-content {
    flex: 1;
    min-width: 0;
    overflow: visible;
    background: transparent;
}
.dl-player-area {
    max-width: 960px;
    width: 100%;
    margin: 0 auto;
}
.dl-placeholder {
    min-height: 300px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.dl-placeholder-inner { text-align: center; color: #8c93a3; }
.dl-placeholder-icon { font-size: 60px; margin-bottom: 14px; }

.dl-player-box {
    width: 100%;
    border-radius: 10px;
    overflow: hidden;
    background: #14161b;
    border: 1px solid #c0c6d0;
}
.dl-player-header {
    padding: 10px 15px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #ffffff;
    flex-shrink: 0;
}
.dl-cur-name { color: #1a1d23; font-size: 15px; font-weight: 600; }
.dl-status-badge { font-size: 12px; padding: 2px 10px; border-radius: 10px; font-weight: 600; }
.dl-status-badge.online { background: #52c41a; color: #1a1d23; }
.dl-status-badge.offline { background: #ef4444; color: #1a1d23; }

.dl-video-wrap {
    position: relative;
    background: #000;
    aspect-ratio: 16 / 9;
    display: flex;
    align-items: center;
    justify-content: center;
}
.dl-video-wrap video { width: 100%; height: 100%; object-fit: contain; display: block; }

.dl-mask {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.62);
    color: #ccc;
    font-size: 14px;
    gap: 10px;
}
.dl-spinner {
    width: 32px;
    height: 32px;
    border: 3px solid rgba(255, 255, 255, 0.2);
    border-top-color: #4fc3f7;
    border-radius: 50%;
    animation: dlSpin 0.8s linear infinite;
}
@keyframes dlSpin { to { transform: rotate(360deg); } }

.dl-video-controls {
    display: flex;
    gap: 8px;
    padding: 10px 15px;
    background: #ffffff;
    border-top: 1px solid #2c303a;
    align-items: center;
    flex-wrap: wrap;
    flex-shrink: 0;
}
.dl-ctrl-btn {
    padding: 6px 14px;
    background: #374151;
    color: #1a1d23;
    border-radius: 6px;
    font-size: 13px;
    font-family: inherit;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    transition: background .15s;
}
.dl-ctrl-btn:hover { background: #4b5563; }
.dl-ctrl-btn.recording { background: #ef4444; }
.dl-ctrl-btn.recording:hover { background: #dc2626; }
.dl-record-time {
    margin-left: auto;
    color: #d1d5db;
    font-size: 13px;
    font-family: Consolas, monospace;
    display: none;
    align-items: center;
}
.dl-record-time.active { display: inline-flex; color: #ff7875; }
.dl-dot-red {
    display: inline-block;
    width: 8px;
    height: 8px;
    background: #ff4d4f;
    border-radius: 50%;
    margin-right: 6px;
    animation: dlBlink 1s infinite;
}
@keyframes dlBlink { 50% { opacity: 0.3; } }

.dl-action-bar { margin-top: 10px; display: flex; gap: 10px; flex-wrap: wrap; flex-shrink: 0; }
.dl-action-bar button {
    padding: 8px 18px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 500;
    font-family: inherit;
    border: 1px solid transparent;
    transition: filter .15s, opacity .15s;
}
.dl-btn-success { background: #52c41a; color: #1a1d23; }
.dl-btn-success:hover:not(:disabled) { filter: brightness(1.08); }
.dl-btn-danger { background: #ef4444; color: #1a1d23; }
.dl-btn-danger:hover:not(:disabled) { filter: brightness(1.08); }
.dl-btn-warn { background: #faad14; color: #1a1a1a; }
.dl-btn-warn:hover { filter: brightness(1.06); }
.dl-btn-danger-outline { background: transparent; color: #ff7875; border-color: #ef4444 !important; }
.dl-btn-danger-outline:hover { background: rgba(239, 68, 68, 0.12); }
.dl-btn-danger-outline.armed { background: #ef4444; color: #1a1d23; }
.dl-action-bar button:disabled { opacity: 0.45; cursor: not-allowed; }

.dl-device-detail {
    margin-top: 10px;
    padding: 10px 14px;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    flex-shrink: 0;
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: 18px;
}
.dl-device-detail h4 { margin: 0 0 6px; font-size: 13px; color: #c9ced9; grid-column: 1 / -1; }
.dl-detail-row { padding: 3px 0; font-size: 12.5px; color: #aab0bd; display: flex; }
.dl-label { color: #8c93a3; width: 90px; flex-shrink: 0; }
.dl-mono { font-family: Consolas, monospace; word-break: break-all; }
.dl-status-text.online { color: #52c41a; font-weight: 600; }
.dl-status-text.offline { color: #ff7875; }

/* 全屏 */
.dl-player-box:fullscreen { width: 100vw; height: 100vh; border-radius: 0; display: flex; flex-direction: column; }
.dl-player-box:fullscreen .dl-video-wrap { flex: 1; aspect-ratio: auto; }
.dl-player-box:-webkit-full-screen { width: 100vw; height: 100vh; border-radius: 0; display: flex; flex-direction: column; }
.dl-player-box:-webkit-full-screen .dl-video-wrap { flex: 1; aspect-ratio: auto; }

/* 弹窗 */
.dl-modal-mask {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.55);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10000;
    padding: 16px;
}
.dl-modal {
    width: 440px;
    max-width: 100%;
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 24px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}
.dl-modal h3 { margin: 0 0 20px; font-size: 17px; color: #1a1d23; }
.dl-form-item { margin-bottom: 16px; }
.dl-form-item label { display: block; margin-bottom: 6px; font-size: 13px; color: #c9ced9; font-weight: 500; }
.dl-form-item input, .dl-form-item select {
    width: 100%;
    padding: 9px 12px;
    border: 1px solid #4a5060;
    border-radius: 6px;
    font-size: 13px;
    font-family: inherit;
    background: #ffffff;
    color: #1a1d23;
}
.dl-form-item input:focus, .dl-form-item select:focus { border-color: #4fc3f7; }
.dl-form-item select option { background: #ffffff; }
.dl-form-tip { margin: 4px 0 0; font-size: 11px; color: #8c93a3; }
.dl-modal-footer { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; }
.dl-btn-cancel {
    padding: 8px 20px;
    background: #3a3f4c;
    color: #d1d5db;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    font-family: inherit;
}
.dl-btn-cancel:hover { background: #4a5060; }
.dl-btn-confirm {
    padding: 8px 20px;
    background: linear-gradient(135deg, #4fc3f7, #29b6f6);
    color: #0b1622;
    font-weight: 600;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    font-family: inherit;
}

/* 平板/窄屏适配 */
@media (max-width: 900px) {
    .dl-app { overflow: visible; height: auto; min-height: calc(100dvh - 150px); }
    .dl-main { flex-direction: column; overflow: visible; }
    .dl-content { overflow: visible; }
    .dl-device-detail { grid-template-columns: 1fr; }
    .dl-player-area { flex: none; }
    .dl-player-box { flex: none; }
    .dl-video-wrap { aspect-ratio: 16 / 9; flex: none; }
    .dl-sidebar {
        width: 100%;
        max-height: 150px;
        flex-shrink: 0;
    }
    .dl-device-list { display: flex; overflow-x: auto; overflow-y: hidden; }
    .dl-device-item {
        flex-direction: column;
        align-items: flex-start;
        gap: 4px;
        min-width: 150px;
        position: relative;
        padding-right: 30px;
        border-bottom: none;
        border-left: none;
        border-bottom: 2px solid transparent;
    }
    .dl-device-item.active { border-left: none; border-bottom-color: #4fc3f7; }
    .dl-device-item .dl-dot { position: absolute; top: 14px; right: 14px; }
}

@media (hover: none) and (pointer: coarse) {
    .dl-action-bar button, .dl-btn-ghost, .dl-ctrl-btn { min-height: 42px; }
    .dl-form-item input, .dl-form-item select { font-size: 16px; }
}

/* ===== 风景赏析 / 摄像头录制+背景音乐同步（fj-） ===== */
.fj-app {
    margin: -19px 0 0; /* 页头距工具栏 5px */
    color: #1a1d23;
}
.fj-title { margin: 0 0 14px; color: #1a1d23; font-size: 18px; font-weight: 700; }
.fj-wrap {
    display: grid;
    grid-template-columns: 1fr 380px;
    gap: 14px;
    align-items: stretch;
}
.fj-col-left { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.fj-row-two { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.fj-panel {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 12px;
    padding: 16px;
    min-width: 0;
}
.fj-panel h3 { margin: 0 0 10px; font-size: 14px; font-weight: 600; color: #c9ced9; }
.fj-full-row { grid-column: auto; }
.fj-app video {
    max-width: 100%;
    width: 100%;
    background: #000;
    border-radius: 8px;
    display: block;
}
.fj-merge-video { margin-top: 8px; }
.fj-app button {
    padding: 8px 14px;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    margin: 4px;
    background: #3b82f6;
    color: #1a1d23;
    font-size: 13px;
    font-family: inherit;
    transition: background .15s, opacity .15s;
}
.fj-app button:hover:not(:disabled) { background: #2f6fe0; }
.fj-app button:disabled { background: #44484f; color: #9aa0ac; cursor: not-allowed; }
.fj-app button.danger { background: #ef4444; }
.fj-app button.danger:hover:not(:disabled) { background: #d93838; }
.fj-app button.mv { background: #374151; padding: 4px 8px; }
.fj-app button.mv:hover:not(:disabled) { background: #46515f; }
.fj-mp3-empty { padding: 20px; text-align: center; color: #8c93a3; font-size: 13px; line-height: 1.8; }
#fj-list2 {
    flex: 1;
    min-height: 180px;
    overflow: auto;
    border: 1px solid #c0c6d0;
    border-radius: 8px;
    margin: 8px 0 0;
}
.fj-mp3-item {
    display: grid;
    grid-template-columns: 32px 1fr 80px 116px;
    gap: 8px;
    padding: 8px 10px;
    border-bottom: 1px solid #33373f;
    align-items: center;
    font-size: 13px;
}
.fj-mp3-item:last-child { border-bottom: none; }
.fj-mp3-item:hover { background: rgba(255, 255, 255, 0.03); }
.fj-mp3-item .idx { color: #8c93a3; text-align: center; }
.fj-mp3-item .name {
    color: #1a1d23;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.fj-mp3-item .dur { color: #aab0bd; font-family: Consolas, monospace; font-size: 12px; }
.fj-mp3-item .acts { text-align: right; white-space: nowrap; }
.fj-mp3-item .acts button { margin: 0 2px; }
.fj-progress-wrap { height: 12px; background: #ffffff; border-radius: 6px; overflow: hidden; margin: 10px 0; }
.fj-progress-fill { height: 100%; width: 0%; background: #3b82f6; transition: width .1s linear; }
.fj-status { font-size: 13px; color: #aab0bd; }
.fj-status.status-yellow { color: #facc15; }
.fj-status.status-green { color: #22c55e; }
.fj-status.status-red { color: #ef4444; }
.fj-ctrl-row { margin: 10px 0; display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.fj-ctrl-row label { font-size: 13px; color: #c9ced9; display: inline-flex; align-items: center; gap: 8px; }
.fj-cam-btn-group { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.fj-cam-btn-group button { margin: 0; }
.fj-music-panel { height: 100%; display: flex; flex-direction: column; }
.fj-app input[type="file"] {
    color: #aab0bd;
    font-size: 12.5px;
    width: 100%;
}
.fj-app input[type="file"]::file-selector-button {
    background: #374151;
    color: #1a1d23;
    border: none;
    border-radius: 6px;
    padding: 6px 12px;
    margin-right: 10px;
    cursor: pointer;
    font-family: inherit;
    font-size: 12.5px;
}
.fj-app input[type="file"]::file-selector-button:hover { background: #46515f; }
.fj-app select {
    background: #ffffff;
    color: #1a1d23;
    border: 1px solid #c0c6d0;
    border-radius: 6px;
    padding: 6px 10px;
    font-size: 13px;
    font-family: inherit;
}
.fj-app input[type="range"] { accent-color: #3b82f6; width: 130px; }

/* 作品展示卡片 */
.fj-works-panel h3 span { color: #8c93a3; font-size: 12px; font-weight: 400; margin-left: 6px; }
.fj-works-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: 12px;
}
.fj-works-empty {
    grid-column: 1 / -1;
    padding: 22px;
    text-align: center;
    color: #8c93a3;
    font-size: 13px;
    border: 1px dashed #3a3f4c;
    border-radius: 8px;
}
.fj-work-card {
    background: #ffffff;
    border: 1px solid #c0c6d0;
    border-radius: 10px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
.fj-work-video {
    width: 100%;
    aspect-ratio: 16 / 9;
    background: #000;
    display: block;
    border-radius: 0;
    border: none;
}
.fj-work-meta {
    padding: 8px 10px 4px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-size: 12px;
    color: #8c93a3;
}
.fj-work-tag {
    align-self: flex-start;
    background: rgba(59, 130, 246, 0.18);
    color: #7db0ff;
    border-radius: 4px;
    padding: 1px 7px;
    font-size: 11.5px;
    margin-bottom: 2px;
}
.fj-work-time { font-family: Consolas, monospace; }
.fj-work-acts { display: flex; gap: 8px; padding: 6px 10px 10px; }
.fj-work-acts button { margin: 0; flex: 1; padding: 6px 10px; font-size: 12.5px; }
.fj-work-acts button.danger.armed { background: #ef4444; color: #1a1d23; }

/* 平板/窄屏：两栏堆叠，录制面板换行 */
@media (max-width: 1100px) {
    .fj-wrap { grid-template-columns: 1fr; }
}
@media (max-width: 700px) {
    .fj-row-two { grid-template-columns: 1fr; }
    #fj-list2 { min-height: 140px; }
}
@media (hover: none) and (pointer: coarse) {
    .fj-app button { min-height: 42px; }
    .fj-app select, .fj-app input[type="file"] { font-size: 16px; }
}

/* ===== 练手实用 / 二手车集群展示（ls-） ===== */
.ls-app { margin: -19px 0 0; color: #1a1d23; }
.ls-topbar {
    display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 14px;
}
.ls-title { font-size: 18px; font-weight: 700; color: #1a1d23; margin: 0; }
.ls-btn-admin {
    padding: 8px 16px; border: none; border-radius: 6px; cursor: pointer;
    background: #2563eb; color: #1a1d23; font-size: 13px; font-family: inherit;
}
.ls-btn-admin:hover { background: #1e40af; }

/* Controls */
.ls-controls {
    display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end;
    background: #ffffff; border: 1px solid #c0c6d0; border-radius: 10px;
    padding: 14px; margin-bottom: 16px;
}
.ls-ctrl-group { flex: 1; min-width: 160px; }
.ls-ctrl-group label { display: block; font-size: 12px; color: #8c93a3; margin-bottom: 4px; font-weight: 600; }
.ls-ctrl-group select, .ls-ctrl-group input {
    width: 100%; padding: 8px 10px; border: 1px solid #c0c6d0;
    border-radius: 6px; background: #ffffff; color: #1a1d23; font-size: 13px;
    font-family: inherit; outline: none;
}
.ls-ctrl-group select:focus, .ls-ctrl-group input:focus { border-color: #2563eb; }

/* Grid */
.ls-car-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 20px;
}
/* Card */
.ls-car-card {
    background: #ffffff; border: 1px solid #c0c6d0; border-radius: 12px;
    overflow: hidden; display: flex; flex-direction: column;
    transition: transform 0.2s, box-shadow 0.2s;
}
@media (hover: hover) {
    .ls-car-card:hover { transform: translateY(-4px); box-shadow: 0 8px 20px rgba(0,0,0,0.3); }
}
.ls-media-container {
    position: relative; width: 100%; padding-top: 56.25%; background: #000; overflow: hidden;
}
.ls-media-container video, .ls-media-container img {
    position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover;
}
.ls-video-badge {
    position: absolute; top: 8px; right: 8px;
    background: rgba(220,38,38,0.9); color: #1a1d23;
    padding: 3px 7px; border-radius: 4px; font-size: 11px; font-weight: 700;
}
.ls-card-content { padding: 14px; flex-grow: 1; display: flex; flex-direction: column; }
.ls-dealer-info {
    display: flex; align-items: center; gap: 6px; margin-bottom: 8px;
    font-size: 12px; color: #7db0ff; font-weight: 600;
}
.ls-dealer-avatar {
    width: 22px; height: 22px; border-radius: 50%; background: #2563eb;
    color: #1a1d23; display: flex; align-items: center; justify-content: center;
    font-size: 11px; flex-shrink: 0;
}
.ls-loc { color: #8c93a3; font-weight: 400; margin-left: auto; }
.ls-car-title { font-size: 14px; font-weight: 700; margin-bottom: 6px; color: #1a1d23; }
.ls-car-specs { display: flex; gap: 12px; font-size: 12px; color: #8c93a3; margin-bottom: 10px; }
.ls-car-price { font-size: 18px; font-weight: 800; color: #ef4444; margin-top: auto; margin-bottom: 10px; }
.ls-car-price span { font-size: 11px; font-weight: 400; color: #8c93a3; text-decoration: line-through; margin-left: 6px; }
.ls-btn-contact {
    background: #2563eb; color: #1a1d23; border: none; padding: 10px;
    border-radius: 6px; font-size: 13px; font-weight: 600; cursor: pointer;
    font-family: inherit; transition: background 0.2s;
}
.ls-btn-contact:hover { background: #1e40af; }
.ls-no-results {
    grid-column: 1 / -1; text-align: center; padding: 40px;
    color: #8c93a3; font-size: 14px;
}

/* Modal */
.ls-modal-overlay {
    display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;
    background: rgba(0,0,0,0.8); z-index: 1000; justify-content: center; align-items: center;
}
.ls-modal-content {
    background: #ffffff; width: 90%; max-width: 700px; border-radius: 12px;
    overflow: hidden; position: relative; max-height: 90vh; overflow-y: auto;
    border: 1px solid #c0c6d0;
}
.ls-close-modal {
    position: absolute; top: 12px; right: 12px; background: rgba(0,0,0,0.5);
    color: #1a1d23; border: none; width: 28px; height: 28px; border-radius: 50%;
    cursor: pointer; font-size: 16px; z-index: 10;
}
.ls-modal-video { width: 100%; aspect-ratio: 16/9; background: #000; display: block; }
.ls-modal-body { padding: 16px; }
.ls-md-title { font-size: 16px; font-weight: 700; color: #1a1d23; margin: 0 0 10px; }
.ls-md-info { display: flex; flex-direction: column; gap: 6px; color: #aab0bd; font-size: 13px; margin-bottom: 14px; }
.ls-md-price-row {
    display: flex; justify-content: space-between; align-items: center;
    background: #ffffff; padding: 12px; border-radius: 8px;
}
.ls-md-label { font-size: 12px; color: #8c93a3; }
.ls-md-price { font-size: 22px; font-weight: 800; color: #ef4444; }
.ls-btn-inquiry {
    background: #2563eb; color: #1a1d23; border: none; padding: 10px 20px;
    border-radius: 6px; font-size: 13px; cursor: pointer; font-family: inherit;
}
.ls-btn-inquiry:hover { background: #1e40af; }

/* ===== 练手管理·后台 ===== */
.ls-auth-card {
    max-width: 400px; margin: 20px auto; background: #ffffff;
    border: 1px solid #c0c6d0; border-radius: 12px; overflow: hidden;
}
.ls-auth-tabs { display: flex; }
.ls-auth-tabs button {
    flex: 1; padding: 12px; border: none; background: #ffffff; color: #8c93a3;
    cursor: pointer; font-size: 14px; font-family: inherit;
}
.ls-auth-tabs button.active { background: #ffffff; color: #1a1d23; border-bottom: 2px solid #2563eb; }
.ls-auth-form { padding: 20px; }
.ls-field { margin-bottom: 14px; }
.ls-field label { display: block; font-size: 12px; color: #8c93a3; margin-bottom: 4px; font-weight: 600; }
.ls-field input, .ls-field textarea, .ls-field select {
    width: 100%; padding: 8px 10px; border: 1px solid #c0c6d0; border-radius: 6px;
    background: #ffffff; color: #1a1d23; font-size: 13px; font-family: inherit; outline: none;
}
.ls-field input:focus, .ls-field textarea:focus { border-color: #2563eb; }
.ls-field textarea { resize: vertical; }
.ls-field-row { display: flex; gap: 12px; }
.ls-field-row .ls-field { flex: 1; }
.ls-btn-primary {
    width: 100%; padding: 10px; border: none; border-radius: 6px;
    background: #2563eb; color: #1a1d23; font-size: 14px; font-weight: 600;
    cursor: pointer; font-family: inherit;
}
.ls-btn-primary:hover { background: #1e40af; }

.ls-admin-header {
    display: flex; justify-content: space-between; align-items: center;
    background: #ffffff; border: 1px solid #c0c6d0; border-radius: 10px;
    padding: 12px 16px; margin-bottom: 12px;
}
.ls-welcome { font-size: 14px; color: #1a1d23; }
.ls-welcome strong { color: #7db0ff; }
.ls-admin-actions { display: flex; gap: 8px; }
.ls-btn-add {
    padding: 8px 14px; border: none; border-radius: 6px; cursor: pointer;
    background: #16a34a; color: #1a1d23; font-size: 13px; font-family: inherit;
}
.ls-btn-add:hover { background: #15803d; }
.ls-btn-logout {
    padding: 8px 14px; border: none; border-radius: 6px; cursor: pointer;
    background: #44484f; color: #1a1d23; font-size: 13px; font-family: inherit;
}
.ls-btn-logout:hover { background: #555a63; }
.ls-admin-stat { font-size: 13px; color: #8c93a3; margin-bottom: 10px; }
.ls-admin-list { display: flex; flex-direction: column; gap: 10px; }
.ls-admin-item {
    display: grid; grid-template-columns: 80px 1fr auto;
    gap: 12px; align-items: center; background: #ffffff; border: 1px solid #c0c6d0;
    border-radius: 8px; padding: 10px;
}
.ls-thumb { width: 80px; height: 50px; object-fit: cover; border-radius: 6px; }
.ls-item-info { min-width: 0; }
.ls-item-title { font-size: 13px; font-weight: 600; color: #1a1d23; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ls-item-meta { font-size: 12px; color: #8c93a3; margin-top: 2px; }
.ls-tag-video { display: inline-block; background: rgba(220,38,38,0.15); color: #f87171; font-size: 11px; padding: 1px 6px; border-radius: 3px; margin-top: 2px; }
.ls-tag-novideo { display: inline-block; background: rgba(140,147,163,0.15); color: #8c93a3; font-size: 11px; padding: 1px 6px; border-radius: 3px; margin-top: 2px; }
.ls-tag-dealer { display: inline-block; background: rgba(59,130,246,0.15); color: #7db0ff; font-size: 11px; padding: 1px 6px; border-radius: 3px; margin-top: 2px; }
.ls-super-badge { color: #facc15; font-weight: 600; background: rgba(250,204,21,0.08); border-radius: 6px; padding: 6px 10px; display: inline-block; }
.ls-super-tabs { display: flex; gap: 0; margin-bottom: 12px; border-bottom: 2px solid #3a3f4c; }
.ls-super-tabs button {
    padding: 8px 20px; border: none; background: transparent; color: #8c93a3;
    cursor: pointer; font-size: 14px; font-family: inherit; border-bottom: 2px solid transparent;
    margin-bottom: -2px;
}
.ls-super-tabs button.active { color: #7db0ff; border-bottom-color: #2563eb; }
.ls-super-tabs button:hover:not(.active) { color: #aab0bd; }
.ls-dealer-item { grid-template-columns: 40px 1fr auto; }
.ls-dealer-avatar-lg {
    width: 36px; height: 36px; border-radius: 50%; background: #2563eb;
    color: #1a1d23; display: flex; align-items: center; justify-content: center;
    font-size: 14px; font-weight: 700;
}
.ls-item-acts { display: flex; gap: 6px; }
.ls-item-acts button {
    padding: 6px 12px; border: none; border-radius: 6px; cursor: pointer;
    background: #374151; color: #1a1d23; font-size: 12px; font-family: inherit;
}
.ls-item-acts button:hover:not(:disabled) { background: #46515f; }
.ls-item-acts button.danger { background: #44484f; }
.ls-item-acts button.danger.armed { background: #ef4444; }

/* Car form modal */
.ls-form-modal {
    background: #ffffff; width: 90%; max-width: 500px; border-radius: 12px;
    border: 1px solid #c0c6d0; overflow: hidden; max-height: 90vh; overflow-y: auto;
}
.ls-form-head {
    display: flex; justify-content: space-between; align-items: center;
    padding: 12px 16px; border-bottom: 1px solid #c0c6d0;
}
.ls-form-head h3 { font-size: 15px; color: #1a1d23; margin: 0; }
.ls-form-head button {
    background: none; border: none; color: #8c93a3; font-size: 18px; cursor: pointer;
}
.ls-form-body { padding: 16px; }
.ls-form-foot { padding: 12px 16px; border-top: 1px solid #c0c6d0; }

/* Responsive */
@media (max-width: 700px) {
    .ls-car-grid { grid-template-columns: 1fr; }
    .ls-controls { flex-direction: column; }
    .ls-ctrl-group { min-width: 100%; }
    .ls-admin-item { grid-template-columns: 60px 1fr; }
    .ls-item-acts { grid-column: 1 / -1; justify-content: flex-end; }
    .ls-field-row { flex-direction: column; }
}
@media (hover: none) and (pointer: coarse) {
    .ls-app button, .ls-btn-contact, .ls-btn-admin { min-height: 42px; }
    .ls-ctrl-group select, .ls-ctrl-group input, .ls-field input { font-size: 16px; }
}

/* ===== 过渡房屋 / 房源管理（fw- 前缀，独立于 ls-） ===== */
.fw-app { margin: -19px 0 0; color: #1a1d23; }
.fw-topbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
.fw-title { font-size: 18px; font-weight: 700; color: #1a1d23; margin: 0; }
.fw-btn-admin { padding: 8px 16px; border: none; border-radius: 6px; cursor: pointer; background: #2563eb; color: #1a1d23; font-size: 13px; font-family: inherit; }
.fw-btn-admin:hover { background: #1e40af; }

.fw-controls { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 10px; padding: 14px; margin-bottom: 16px; }
.fw-ctrl-group { flex: 1; min-width: 160px; }
.fw-ctrl-group label { display: block; font-size: 12px; color: #8c93a3; margin-bottom: 4px; font-weight: 600; }
.fw-ctrl-group select, .fw-ctrl-group input { width: 100%; padding: 8px 10px; border: 1px solid #c0c6d0; border-radius: 6px; background: #ffffff; color: #1a1d23; font-size: 13px; font-family: inherit; outline: none; }
.fw-ctrl-group select:focus, .fw-ctrl-group input:focus { border-color: #2563eb; }

.fw-house-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; }
.fw-house-card { background: #ffffff; border: 1px solid #c0c6d0; border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; transition: transform 0.2s, box-shadow 0.2s; }
@media (hover: hover) { .fw-house-card:hover { transform: translateY(-4px); box-shadow: 0 8px 20px rgba(0,0,0,0.3); } }
.fw-media { position: relative; width: 100%; padding-top: 56.25%; background: #000; overflow: hidden; }
.fw-media img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
.fw-type-badge { position: absolute; top: 8px; left: 8px; background: rgba(37,99,235,0.9); color: #1a1d23; padding: 3px 8px; border-radius: 4px; font-size: 11px; font-weight: 700; }
.fw-card-content { padding: 14px; flex-grow: 1; display: flex; flex-direction: column; }
.fw-agent-info { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; font-size: 12px; color: #7db0ff; font-weight: 600; }
.fw-agent-dot { width: 22px; height: 22px; border-radius: 50%; background: #2563eb; color: #1a1d23; display: flex; align-items: center; justify-content: center; font-size: 11px; flex-shrink: 0; }
.fw-loc { color: #8c93a3; font-weight: 400; margin-left: auto; }
.fw-house-title { font-size: 14px; font-weight: 700; margin-bottom: 6px; color: #1a1d23; }
.fw-house-specs { display: flex; gap: 12px; font-size: 12px; color: #8c93a3; margin-bottom: 10px; }
.fw-house-price { font-size: 18px; font-weight: 800; color: #ef4444; margin-top: auto; margin-bottom: 10px; }
.fw-btn-detail { background: #2563eb; color: #1a1d23; border: none; padding: 10px; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: pointer; font-family: inherit; }
.fw-btn-detail:hover { background: #1e40af; }
.fw-no-results { grid-column: 1 / -1; text-align: center; padding: 40px; color: #8c93a3; font-size: 14px; }

.fw-modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 1000; justify-content: center; align-items: center; }
.fw-modal-content { background: #ffffff; width: 90%; max-width: 700px; border-radius: 12px; overflow: hidden; position: relative; max-height: 90vh; overflow-y: auto; border: 1px solid #c0c6d0; }
.fw-close-modal { position: absolute; top: 12px; right: 12px; background: rgba(0,0,0,0.5); color: #1a1d23; border: none; width: 28px; height: 28px; border-radius: 50%; cursor: pointer; font-size: 16px; z-index: 10; }
.fw-modal-img { width: 100%; aspect-ratio: 16/9; object-fit: cover; display: block; }
.fw-modal-body { padding: 16px; }
.fw-md-title { font-size: 16px; font-weight: 700; color: #1a1d23; margin: 0 0 10px; }
.fw-md-info { display: flex; flex-direction: column; gap: 6px; color: #aab0bd; font-size: 13px; margin-bottom: 14px; }
.fw-md-price-row { display: flex; justify-content: space-between; align-items: center; background: #ffffff; padding: 12px; border-radius: 8px; }
.fw-md-label { font-size: 12px; color: #8c93a3; }
.fw-md-price { font-size: 22px; font-weight: 800; color: #ef4444; }
.fw-btn-inquiry { background: #2563eb; color: #1a1d23; border: none; padding: 10px 20px; border-radius: 6px; font-size: 13px; cursor: pointer; font-family: inherit; }
.fw-btn-inquiry:hover { background: #1e40af; }

/* 房源管理·后台 */
.fw-auth-card { max-width: 400px; margin: 20px auto; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 12px; overflow: hidden; }
.fw-auth-tabs { display: flex; }
.fw-auth-tabs button { flex: 1; padding: 12px; border: none; background: #ffffff; color: #8c93a3; cursor: pointer; font-size: 14px; font-family: inherit; }
.fw-auth-tabs button.active { background: #ffffff; color: #1a1d23; border-bottom: 2px solid #2563eb; }
.fw-auth-form { padding: 20px; }
.fw-field { margin-bottom: 14px; }
.fw-field label { display: block; font-size: 12px; color: #8c93a3; margin-bottom: 4px; font-weight: 600; }
.fw-field input, .fw-field textarea, .fw-field select { width: 100%; padding: 8px 10px; border: 1px solid #c0c6d0; border-radius: 6px; background: #ffffff; color: #1a1d23; font-size: 13px; font-family: inherit; outline: none; }
.fw-field input:focus, .fw-field textarea:focus { border-color: #2563eb; }
.fw-field textarea { resize: vertical; }
.fw-field-row { display: flex; gap: 12px; }
.fw-field-row .fw-field { flex: 1; }
.fw-btn-primary { width: 100%; padding: 10px; border: none; border-radius: 6px; background: #2563eb; color: #1a1d23; font-size: 14px; font-weight: 600; cursor: pointer; font-family: inherit; }
.fw-btn-primary:hover { background: #1e40af; }

.fw-admin-header { display: flex; justify-content: space-between; align-items: center; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 10px; padding: 12px 16px; margin-bottom: 12px; }
.fw-welcome { font-size: 14px; color: #1a1d23; }
.fw-welcome strong { color: #7db0ff; }
.fw-admin-actions { display: flex; gap: 8px; }
.fw-btn-add { padding: 8px 14px; border: none; border-radius: 6px; cursor: pointer; background: #16a34a; color: #1a1d23; font-size: 13px; font-family: inherit; }
.fw-btn-add:hover { background: #15803d; }
.fw-btn-logout { padding: 8px 14px; border: none; border-radius: 6px; cursor: pointer; background: #44484f; color: #1a1d23; font-size: 13px; font-family: inherit; }
.fw-btn-logout:hover { background: #555a63; }
.fw-admin-stat { font-size: 13px; color: #8c93a3; margin-bottom: 10px; }
.fw-super-badge { color: #facc15; font-weight: 600; background: rgba(250,204,21,0.08); border-radius: 6px; padding: 6px 10px; display: inline-block; }
.fw-super-tabs { display: flex; gap: 0; margin-bottom: 12px; border-bottom: 2px solid #3a3f4c; }
.fw-super-tabs button { padding: 8px 20px; border: none; background: transparent; color: #8c93a3; cursor: pointer; font-size: 14px; font-family: inherit; border-bottom: 2px solid transparent; margin-bottom: -2px; }
.fw-super-tabs button.active { color: #7db0ff; border-bottom-color: #2563eb; }
.fw-super-tabs button:hover:not(.active) { color: #aab0bd; }
.fw-admin-list { display: flex; flex-direction: column; gap: 10px; }
.fw-admin-item { display: grid; grid-template-columns: 80px 1fr auto; gap: 12px; align-items: center; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 8px; padding: 10px; }
.fw-thumb { width: 80px; height: 50px; object-fit: cover; border-radius: 6px; }
.fw-item-info { min-width: 0; }
.fw-item-title { font-size: 13px; font-weight: 600; color: #1a1d23; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fw-item-meta { font-size: 12px; color: #8c93a3; margin-top: 2px; }
.fw-tag-agent { display: inline-block; background: rgba(59,130,246,0.15); color: #7db0ff; font-size: 11px; padding: 1px 6px; border-radius: 3px; margin-top: 2px; }
.fw-item-acts { display: flex; gap: 6px; }
.fw-item-acts button { padding: 6px 12px; border: none; border-radius: 6px; cursor: pointer; background: #374151; color: #1a1d23; font-size: 12px; font-family: inherit; }
.fw-item-acts button:hover:not(:disabled) { background: #46515f; }
.fw-item-acts button.danger { background: #44484f; }
.fw-item-acts button.danger.armed { background: #ef4444; }
.fw-agent-item { grid-template-columns: 40px 1fr auto; }
.fw-agent-avatar-lg { width: 36px; height: 36px; border-radius: 50%; background: #2563eb; color: #1a1d23; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; }

.fw-form-modal { background: #ffffff; width: 90%; max-width: 500px; border-radius: 12px; border: 1px solid #c0c6d0; overflow: hidden; max-height: 90vh; overflow-y: auto; }
.fw-form-head { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; border-bottom: 1px solid #c0c6d0; }
.fw-form-head h3 { font-size: 15px; color: #1a1d23; margin: 0; }
.fw-form-head button { background: none; border: none; color: #8c93a3; font-size: 18px; cursor: pointer; }
.fw-form-body { padding: 16px; }
.fw-form-foot { padding: 12px 16px; border-top: 1px solid #c0c6d0; }

@media (max-width: 700px) {
    .fw-house-grid { grid-template-columns: 1fr; }
    .fw-controls { flex-direction: column; }
    .fw-ctrl-group { min-width: 100%; }
    .fw-admin-item { grid-template-columns: 60px 1fr; }
    .fw-item-acts { grid-column: 1 / -1; justify-content: flex-end; }
    .fw-field-row { flex-direction: column; }
}
@media (hover: none) and (pointer: coarse) {
    .fw-app button, .fw-btn-detail, .fw-btn-admin { min-height: 42px; }
    .fw-ctrl-group select, .fw-ctrl-group input, .fw-field input { font-size: 16px; }
}

/* ============ 左侧34 今日渔获（yh-） ============ */
.yh-app { margin: -19px 0 0; padding-bottom: 24px; color: #1a1d23; }
.yh-header { background: linear-gradient(135deg, #0891b2, #0e7490); border-radius: 10px; padding: 16px 20px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; box-shadow: 0 2px 10px rgba(0,0,0,.35); }
.yh-logo { font-size: 20px; font-weight: 700; color: #1a1d23; letter-spacing: 1px; }
.yh-btn { border: none; border-radius: 6px; padding: 9px 14px; font-size: 14px; font-weight: 600; cursor: pointer; transition: background .2s, opacity .2s; }
.yh-btn-pub { background: rgba(255,255,255,.18); color: #1a1d23; }
.yh-btn-pub:hover { background: rgba(255,255,255,.3); }
.yh-btn-primary { background: #0891b2; color: #1a1d23; width: 100%; }
.yh-btn-primary:hover { background: #0e7490; }
.yh-btn-danger { background: transparent; border: 1px solid #ef4444; color: #c62828; min-width: 76px; }
.yh-btn-danger:hover { background: rgba(239,68,68,.12); }
.yh-btn-danger.armed { background: #ef4444; color: #1a1d23; }
.yh-filter { margin: 16px 0 8px; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 10px; padding: 14px 16px; display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }
.yh-filter-item { flex: 1; min-width: 150px; }
.yh-filter-grow { flex: 1.6; min-width: 200px; }
.yh-filter-item label { display: block; font-size: 12px; color: #8c93a3; margin-bottom: 4px; }
.yh-filter-item select, .yh-filter-item input { width: 100%; padding: 8px 10px; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 6px; color: #1a1d23; font-size: 14px; }
.yh-filter-item select:focus, .yh-filter-item input:focus { outline: none; border-color: #0891b2; }
.yh-section-title { font-size: 18px; margin: 22px 0 12px; color: #1a1d23; display: flex; align-items: center; gap: 6px; }
.yh-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 18px; justify-items: center; }
.yh-card { width: 100%; max-width: 400px; background: #ffffff; border: 1px solid #d8dde6; border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; transition: transform .2s, box-shadow .2s, border-color .2s; box-shadow: 0 1px 4px rgba(0,0,0,.05); }
.yh-card:hover { transform: translateY(-3px); border-color: #0891b2; box-shadow: 0 8px 18px rgba(15,40,60,.12); }
.yh-card-img { width: 100%; padding-top: 60%; position: relative; background: #eef1f5; }
.yh-card-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.yh-card-body { padding: 14px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.yh-card-title { font-size: 15px; font-weight: 600; color: #1a1d23; }
.yh-card-desc { font-size: 12.5px; color: #6b7285; }
.yh-tag-group { display: flex; gap: 6px; flex-wrap: wrap; }
.yh-tag { font-size: 11.5px; padding: 2px 9px; border-radius: 99px; background: #e0f2f7; color: #0e7490; white-space: nowrap; }
.yh-tag-accent { background: #fef3e2; color: #b45309; }
.yh-tag-mine { background: #e7f6ee; color: #047857; font-weight: 600; }
.yh-card-actions { display: flex; gap: 8px; margin-top: auto; }
.yh-card-actions .yh-btn-primary { flex: 1; width: auto; }
.yh-empty { grid-column: 1 / -1; text-align: center; padding: 40px 0; color: #6b7280; font-size: 14px; }
.yh-modal { position: fixed; inset: 0; background: rgba(0,0,0,.65); z-index: 999; display: flex; justify-content: center; align-items: center; padding: 16px; }
.yh-modal[hidden] { display: none; }
.yh-modal-box { background: #ffffff; border: 1px solid #c0c6d0; width: 100%; max-width: 680px; max-height: 88vh; overflow-y: auto; border-radius: 12px; padding: 22px; position: relative; }
.yh-modal-close { position: absolute; top: 12px; right: 12px; width: 32px; height: 32px; border-radius: 50%; border: none; background: #eef1f5; color: #1a1d23; font-size: 18px; cursor: pointer; line-height: 1; }
.yh-modal-close:hover { background: #e3e7ee; }
.yh-modal-title { font-size: 19px; color: #1a1d23; margin-bottom: 12px; padding-right: 40px; }
.yh-modal-img { width: 100%; border-radius: 8px; margin-bottom: 12px; max-height: 300px; object-fit: cover; }
.yh-modal-line { color: #374151; font-size: 14px; line-height: 1.9; }
.yh-modal-note { margin: 12px 0; padding: 12px; background: #f0f7fa; border-left: 3px solid #0891b2; border-radius: 6px; color: #475569; font-size: 13.5px; line-height: 1.7; }
.yh-modal-actions { display: flex; gap: 10px; margin-top: 14px; }
.yh-modal-actions .yh-btn-primary { flex: 1; width: auto; }
.yh-form { display: flex; flex-direction: column; gap: 12px; }
.yh-field label { display: block; font-size: 12.5px; color: #8c93a3; margin-bottom: 5px; }
.yh-field input, .yh-field select, .yh-field textarea { width: 100%; padding: 9px 11px; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 6px; color: #1a1d23; font-size: 14px; font-family: inherit; }
.yh-field input:focus, .yh-field select:focus, .yh-field textarea:focus { outline: none; border-color: #0891b2; }
.yh-checks { display: flex; flex-wrap: wrap; gap: 12px; }
.yh-check { display: flex; align-items: center; gap: 5px; font-size: 14px; color: #1f2937; cursor: pointer; }
@media (max-width: 700px) {
    .yh-grid { grid-template-columns: 1fr; }
    .yh-filter-item, .yh-filter-grow { flex: 1 1 100%; }
    .yh-app button { min-height: 42px; }
    .yh-field input, .yh-field select { font-size: 16px; }
}

/* ============ 今日渔获：账号/发布/巡查 扩展 ============ */
.yh-header { gap: 10px; }
.yh-header-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.yh-btn-login { background: rgba(255,255,255,.18); color: #1a1d23; }
.yh-btn-login:hover { background: rgba(255,255,255,.3); }
.yh-btn-logout { background: transparent; border: 1px solid rgba(255,255,255,.45); color: #1a1d23; padding: 7px 12px; font-size: 13px; }
.yh-btn-logout:hover { background: rgba(255,255,255,.15); }
.yh-btn-admin { background: #f59e0b; color: #1f2937; }
.yh-btn-admin:hover { background: #fbbf24; }
.yh-btn-super { background: linear-gradient(135deg, #f59e0b, #d97706); color: #1a1d23; }
.yh-btn-super:hover { filter: brightness(1.08); }
.yh-user-badge { color: #1a1d23; font-size: 13px; font-weight: 600; background: rgba(255,255,255,.12); border-radius: 99px; padding: 6px 12px; }
.yh-badge-super { background: rgba(245,158,11,.25); color: #fde68a; border: 1px solid rgba(245,158,11,.5); }
.yh-pub-row { display: flex; gap: 10px; margin: 12px 0 4px; flex-wrap: wrap; }
.yh-btn-pub2 { background: #0891b2; color: #1a1d23; }
.yh-btn-pub2:hover { background: #0e7490; }
.yh-tag-official { background: #eef1f5; color: #475569; }
.yh-tag-pub { background: #e7f6ee; color: #047857; }
/* 登录弹窗 */
.yh-auth-box { max-width: 420px; }
.yh-auth-tabs { display: flex; gap: 6px; margin-bottom: 16px; background: #ffffff; border-radius: 8px; padding: 4px; }
.yh-auth-tab { flex: 1; padding: 9px 0; border: none; border-radius: 6px; background: transparent; color: #8c93a3; font-size: 14px; font-weight: 600; cursor: pointer; }
.yh-auth-tab.active { background: #0891b2; color: #1a1d23; }
.yh-super-tip { background: #fef3e2; border-left: 3px solid #f59e0b; border-radius: 4px; padding: 9px 11px; font-size: 12.5px; color: #b45309; line-height: 1.6; margin-bottom: 12px; }
/* 巡查管理 */
.yh-admin-head { margin: 16px 0 12px; }
.yh-admin-head h2 { font-size: 19px; color: #1a1d23; margin-bottom: 6px; }
.yh-subtabs { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }
.yh-subtab { padding: 9px 18px; border-radius: 8px; border: 1px solid #c0c6d0; background: #ffffff; color: #6b7285; font-size: 14px; font-weight: 600; cursor: pointer; }
.yh-subtab.active { background: #0891b2; border-color: #0891b2; color: #1a1d23; }
.yh-admin-list { display: flex; flex-direction: column; gap: 10px; }
.yh-admin-row { display: flex; align-items: center; gap: 14px; background: #ffffff; border: 1px solid #d8dde6; border-radius: 10px; padding: 12px 14px; box-shadow: 0 1px 4px rgba(0,0,0,.05); }
.yh-admin-thumb { width: 96px; height: 64px; object-fit: cover; border-radius: 6px; flex-shrink: 0; background: #eef1f5; }
.yh-admin-info { flex: 1; min-width: 0; }
.yh-admin-name { font-size: 15px; font-weight: 600; color: #1a1d23; margin-bottom: 4px; }
.yh-admin-meta { font-size: 12.5px; color: #6b7285; line-height: 1.6; }
.yh-admin-desc { font-size: 12.5px; color: #6b7280; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.yh-admin-row .yh-btn-danger { width: auto; flex-shrink: 0; }
@media (max-width: 700px) {
    .yh-admin-row { flex-wrap: wrap; }
    .yh-admin-thumb { width: 100%; height: 150px; }
    .yh-admin-row .yh-btn-danger { width: 100%; }
}

/* ============ 左侧29 精工加工（jg-） ============ */
.jg-app { margin: -19px 0 0; padding-bottom: 24px; color: #1a1d23; }
.jg-login-wrap { display: flex; justify-content: center; padding: 30px 0; }
.jg-login-card { max-width: 420px; width: 100%; }
.jg-card { background: #ffffff; border: 1px solid #d1d5db; border-radius: 12px; padding: 22px; margin-bottom: 14px; box-shadow: 0 2px 8px rgba(0,0,0,.06); }
.jg-card h2 { font-size: 18px; color: #1a1d23; margin-bottom: 16px; }
.jg-header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; background: linear-gradient(135deg,#1d4ed8,#0e7490); border-radius: 10px; padding: 14px 20px; margin-bottom: 14px; }
.jg-logo { font-size: 19px; font-weight: 700; color: #1a1d23; }
.jg-user-info { display: flex; align-items: center; gap: 10px; color: #dbeafe; font-size: 13.5px; flex-wrap: wrap; }
.jg-btn { border: none; border-radius: 6px; padding: 8px 14px; font-size: 13.5px; font-weight: 600; cursor: pointer; background: #e5e7eb; color: #1f2937; transition: background .18s, opacity .18s; }
.jg-btn:hover { background: #d1d5db; }
.jg-btn-primary { background: #2563eb; color: #1a1d23; }
.jg-btn-primary:hover { background: #1d4ed8; }
.jg-btn-success { background: #059669; color: #1a1d23; }
.jg-btn-success:hover { background: #047857; }
.jg-btn-danger { background: transparent; border: 1px solid #ef4444; color: #f87171; }
.jg-btn-danger:hover { background: rgba(239,68,68,.12); }
.jg-btn-danger.armed { background: #ef4444; color: #1a1d23; }
.jg-btn-logout { background: rgba(255,255,255,.15); color: #1a1d23; }
.jg-btn-logout:hover { background: rgba(255,255,255,.28); }
.jg-btn-block { width: 100%; padding: 11px; margin-top: 6px; }
.jg-tabs { display: flex; flex-wrap: nowrap; gap: 6px; margin-bottom: 14px; overflow-x: auto; }
.jg-tab { flex: 1 1 0; min-width: 84px; white-space: nowrap; text-align: center; padding: 9px 10px; border-radius: 8px 8px 0 0; border: 1px solid #d1d5db; border-bottom: none; background: #f5f7fa; color: #6b7280; font-size: 13px; font-weight: 600; cursor: pointer; }
.jg-tab.active { background: #2563eb; border-color: #2563eb; color: #ffffff; }
.jg-form-item { margin-bottom: 13px; }
.jg-form-item label { display: block; font-size: 12.5px; color: #8c93a3; margin-bottom: 5px; }
.jg-form-item input, .jg-form-item select, .jg-form-item textarea { width: 100%; padding: 9px 11px; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 6px; color: #1a1d23; font-size: 14px; font-family: inherit; box-sizing: border-box; }
.jg-form-item input:focus, .jg-form-item select:focus, .jg-form-item textarea:focus { outline: none; border-color: #2563eb; }
.jg-form-item textarea { min-height: 76px; resize: vertical; }
.jg-form-row { display: flex; gap: 12px; }
.jg-form-row .jg-form-item { flex: 1; }
.jg-login-hint { background: #f0f4ff; border-left: 3px solid #2563eb; border-radius: 4px; padding: 10px 12px; font-size: 12.5px; color: #475569; line-height: 1.9; margin-bottom: 14px; }
.jg-file-preview { margin-top: 6px; font-size: 12.5px; color: #8c93a3; }
.jg-home-title { font-size: 26px; color: #1a1d23; margin-bottom: 10px; }
.jg-home-sub { color: #6b7280; font-size: 14.5px; line-height: 1.8; margin-bottom: 14px; }
.jg-home-h3 { font-size: 15px; color: #374151; margin: 16px 0 8px; }
.jg-home-list { margin: 0 0 18px 0; padding-left: 20px; color: #1f2937; font-size: 14px; line-height: 2; }
.jg-filter-row { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.jg-filter-row input { flex: 1; min-width: 200px; padding: 9px 11px; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 6px; color: #1a1d23; font-size: 14px; }
.jg-filter-row select { padding: 9px 11px; background: #ffffff; border: 1px solid #c0c6d0; border-radius: 6px; color: #1a1d23; font-size: 14px; }
.jg-order-item { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 13px 15px; border: 1px solid #33373f; border-radius: 8px; margin-bottom: 10px; background: #ffffff; flex-wrap: wrap; }
.jg-order-title { font-size: 14.5px; color: #1a1d23; }
.jg-order-sub { font-size: 12.5px; color: #8c93a3; margin-top: 4px; }
.jg-tag { display: inline-block; font-size: 11.5px; padding: 2px 9px; border-radius: 99px; margin-left: 6px; }
.jg-tag-wait { background: rgba(245,158,11,.16); color: #fbbf24; }
.jg-tag-doing { background: rgba(37,99,235,.18); color: #93c5fd; }
.jg-tag-finish { background: rgba(5,150,105,.18); color: #6ee7b7; }
.jg-tag-reject { background: rgba(239,68,68,.16); color: #fca5a5; }
.jg-empty { text-align: center; padding: 36px 0; color: #6b7280; font-size: 14px; }
.jg-modal { position: fixed; inset: 0; background: rgba(0,0,0,.65); z-index: 999; display: flex; justify-content: center; align-items: center; padding: 16px; }
.jg-modal[hidden] { display: none; }
.jg-modal-box { background: #ffffff; border: 1px solid #c0c6d0; width: 100%; max-width: 620px; max-height: 86vh; overflow-y: auto; border-radius: 12px; padding: 22px; position: relative; }
.jg-modal-close { position: absolute; top: 12px; right: 12px; width: 32px; height: 32px; border-radius: 50%; border: none; background: #e5e7eb; color: #374151; font-size: 18px; cursor: pointer; }
.jg-modal-close:hover { background: #d1d5db; }
.jg-modal-title { font-size: 17px; color: #1a1d23; margin-bottom: 14px; padding-right: 36px; }
.jg-detail-line { font-size: 13.5px; color: #1f2937; line-height: 2; }
.jg-status-box { margin-top: 14px; padding-top: 12px; border-top: 1px solid #c0c6d0; }
.jg-status-box p { font-size: 13px; color: #8c93a3; margin-bottom: 8px; }
.jg-status-btns { display: flex; gap: 8px; flex-wrap: wrap; }
.jg-row-list { margin-top: 14px; }
.jg-user-row { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 11px 13px; background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; margin-bottom: 8px; font-size: 13.5px; color: #1f2937; flex-wrap: wrap; }
.jg-row-btns { display: flex; gap: 8px; }
@media (max-width: 700px) {
    .jg-form-row { flex-direction: column; gap: 0; }
    .jg-tab { min-width: 72px; font-size: 12px; }
    .jg-app button { min-height: 42px; }
    .jg-form-item input, .jg-form-item select { font-size: 16px; }
}

/* 精工加工：登录注册子标签 + 交易巡查统计条 */
.jg-auth-tabs { display: flex; gap: 6px; margin-bottom: 16px; background: #ffffff; border-radius: 8px; padding: 4px; }
.jg-auth-tab { flex: 1; padding: 9px 0; border: none; border-radius: 6px; background: transparent; color: #8c93a3; font-size: 14px; font-weight: 600; cursor: pointer; }
.jg-auth-tab.active { background: #2563eb; color: #1a1d23; }
.jg-audit-stat { font-size: 13px; color: #93c5fd; background: rgba(37,99,235,.1); border-left: 3px solid #2563eb; border-radius: 4px; padding: 8px 12px; margin-bottom: 12px; }

/* ==================== 汽车保养（qc-） ==================== */
.qc-app { margin: -19px 0 0; color: #1f2937; font-size: 14px; line-height: 1.6; min-height: calc(100dvh - 131px); background: #f5f7fa; }
.qc-app * { box-sizing: border-box; }
.qc-app input, .qc-app select, .qc-app textarea { font-family: inherit; outline: none; }
.qc-app input:focus, .qc-app select:focus, .qc-app textarea:focus { border-color: #2563eb; box-shadow: 0 0 0 3px rgba(37,99,235,.12); }

/* 登录 */
.qc-login-card { max-width: 420px; margin: 60px auto; background: #ffffff; border: 1px solid #d1d5db; border-radius: 12px; padding: 40px; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.qc-login-logo { text-align: center; font-size: 1.8rem; font-weight: 800; color: #2563eb; margin-bottom: 4px; }
.qc-login-sub { text-align: center; color: #6b7280; margin-bottom: 24px; font-size: 0.875rem; }
.qc-auth-tabs { display: flex; gap: 6px; margin-bottom: 16px; background: #f5f7fa; border-radius: 8px; padding: 4px; }
.qc-auth-tab { flex: 1; padding: 9px 0; border: none; border-radius: 6px; background: transparent; color: #6b7280; font-size: 14px; font-weight: 600; cursor: pointer; }
.qc-auth-tab.active { background: #2563eb; color: #ffffff; }
.qc-form-item { margin-bottom: 16px; }
.qc-form-item label { display: block; font-size: 0.8rem; font-weight: 600; margin-bottom: 6px; color: #374151; }
.qc-form-item input, .qc-form-item select, .qc-form-item textarea { width: 100%; padding: 10px 14px; border: 1.5px solid #d1d5db; border-radius: 8px; font-size: 0.95rem; background: #ffffff; color: #1f2937; }
.qc-form-item textarea { resize: vertical; min-height: 80px; }
.qc-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.qc-login-hint { background: #f5f7fa; border: 1px dashed #d1d5db; border-radius: 8px; padding: 10px 12px; font-size: 0.78rem; color: #6b7280; margin-bottom: 16px; }

/* 按钮 */
.qc-btn { padding: 8px 16px; border: none; border-radius: 8px; font-weight: 600; cursor: pointer; font-size: 0.9rem; display: inline-flex; align-items: center; justify-content: center; gap: 6px; transition: all .15s; background: #e5e7eb; color: #1f2937; }
.qc-btn:hover:not(:disabled) { filter: brightness(0.95); }
.qc-btn-primary { background: #2563eb; color: #ffffff; }
.qc-btn-success { background: #10b981; color: #ffffff; }
.qc-btn-danger { background: #ef4444; color: #ffffff; }
.qc-btn-warning { background: #f59e0b; color: #ffffff; }
.qc-btn-outline { background: transparent; border: 1.5px solid #d1d5db; color: #374151; }
.qc-btn-block { width: 100%; }
.qc-btn-sm { padding: 5px 10px; font-size: 0.8rem; }

/* 布局 */
.qc-layout { display: flex; min-height: calc(100dvh - 131px); }
.qc-sidebar { width: 200px; background: #ffffff; border-right: 1px solid #d1d5db; display: flex; flex-direction: column; flex-shrink: 0; }
.qc-sidebar-header { padding: 16px 14px; border-bottom: 1px solid #d1d5db; }
.qc-sidebar-logo { font-size: 1.1rem; font-weight: 800; color: #2563eb; }
.qc-sidebar-nav { flex: 1; padding: 10px 8px; overflow-y: auto; }
.qc-nav-item { padding: 10px 12px; border-radius: 8px; cursor: pointer; font-weight: 500; color: #374151; margin-bottom: 2px; display: flex; align-items: center; gap: 8px; font-size: 0.9rem; }
.qc-nav-item:hover { background: #f5f7fa; }
.qc-nav-item.active { background: rgba(37,99,235,.1); color: #2563eb; }
.qc-nav-icon { font-size: 1.1rem; width: 22px; text-align: center; }
.qc-sidebar-footer { padding: 12px 14px; border-top: 1px solid #d1d5db; }
.qc-user-badge { display: flex; align-items: center; gap: 10px; }
.qc-avatar { width: 36px; height: 36px; border-radius: 50%; background: #2563eb; color: #ffffff; display: flex; align-items: center; justify-content: center; font-weight: 700; }
.qc-user-meta { flex: 1; }
.qc-user-name { font-weight: 600; font-size: 0.85rem; color: #1f2937; }
.qc-user-role { font-size: 0.72rem; color: #6b7280; }
.qc-main { flex: 1; display: flex; flex-direction: column; overflow: hidden; }
.qc-topbar { height: 52px; background: #ffffff; border-bottom: 1px solid #d1d5db; display: flex; align-items: center; justify-content: space-between; padding: 0 20px; flex-shrink: 0; }
.qc-topbar-title { font-size: 1rem; font-weight: 700; color: #1f2937; }
.qc-topbar-time { font-size: 0.8rem; color: #6b7280; }
.qc-content { padding: 20px; flex: 1; overflow-y: auto; }

/* 统计卡 */
.qc-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin-bottom: 20px; }
.qc-stat-card { background: #ffffff; border: 1px solid #d1d5db; border-radius: 10px; padding: 18px; display: flex; align-items: center; gap: 14px; box-shadow: 0 1px 2px rgba(0,0,0,0.04); }
.qc-stat-icon { width: 48px; height: 48px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 1.3rem; }
.qc-stat-icon.blue { background: rgba(37,99,235,.12); color: #2563eb; }
.qc-stat-icon.green { background: rgba(16,185,129,.12); color: #059669; }
.qc-stat-icon.orange { background: rgba(245,158,11,.12); color: #d97706; }
.qc-stat-icon.purple { background: rgba(139,92,246,.12); color: #7c3aed; }
.qc-stat-info h3 { font-size: 1.5rem; font-weight: 800; line-height: 1; margin-bottom: 2px; color: #1f2937; }
.qc-stat-info p { font-size: 0.8rem; color: #6b7280; }

/* 卡片 */
.qc-card { background: #ffffff; border: 1px solid #d1d5db; border-radius: 10px; margin-bottom: 20px; overflow: hidden; box-shadow: 0 1px 2px rgba(0,0,0,0.04); }
.qc-card-header { padding: 14px 20px; border-bottom: 1px solid #e5e7eb; display: flex; justify-content: space-between; align-items: center; }
.qc-card-header h2 { font-size: 1rem; font-weight: 700; color: #1f2937; }
.qc-card-body { padding: 20px; }
.qc-row-btns { display: flex; gap: 10px; flex-wrap: wrap; }

/* 门店 */
.qc-shop-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }
.qc-shop-card { background: #ffffff; border: 1px solid #d1d5db; border-radius: 10px; overflow: hidden; transition: border-color .2s; }
.qc-shop-card:hover { border-color: #3b82f6; }
.qc-shop-banner { height: 80px; background: linear-gradient(135deg, #2563eb, #60a5fa); display: flex; align-items: center; justify-content: center; font-size: 2rem; }
.qc-shop-info { padding: 16px; }
.qc-shop-info h3 { font-size: 1rem; margin-bottom: 6px; color: #1f2937; }
.qc-shop-info p { font-size: 0.82rem; color: #6b7280; margin-bottom: 4px; }
.qc-shop-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; }
.qc-shop-tag { background: #f5f7fa; color: #374151; padding: 3px 8px; border-radius: 20px; font-size: 0.72rem; }

/* 文件上传 */
.qc-file-upload { display: block; border: 2px dashed #d1d5db; border-radius: 8px; padding: 20px; text-align: center; cursor: pointer; background: #f5f7fa; }
.qc-file-upload:hover { border-color: #2563eb; }
.qc-file-upload input { display: none; }
.qc-img-preview { max-width: 100%; border-radius: 8px; margin-top: 8px; }

/* 订单 */
.qc-order-list { display: flex; flex-direction: column; gap: 10px; }
.qc-order-item { border: 1px solid #d1d5db; border-radius: 8px; padding: 14px 16px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; background: #ffffff; }
.qc-order-item:hover { border-color: #3b82f6; }
.qc-order-main { flex: 1; min-width: 200px; }
.qc-order-title { font-weight: 700; font-size: 0.95rem; margin-bottom: 4px; display: flex; align-items: center; gap: 6px; color: #1f2937; }
.qc-order-meta { font-size: 0.82rem; color: #6b7280; display: flex; flex-wrap: gap: 10px; }
.qc-order-actions { display: flex; gap: 6px; }
.qc-filter-row { display: flex; gap: 10px; margin-bottom: 16px; flex-wrap: wrap; }
.qc-filter-row input, .qc-filter-row select { padding: 8px 12px; border: 1.5px solid #d1d5db; border-radius: 8px; background: #ffffff; color: #1f2937; font-size: 0.9rem; }
.qc-filter-row input { flex: 1; min-width: 160px; }
.qc-filter-row select { width: 140px; }

/* 标签 */
.qc-tag { padding: 3px 10px; border-radius: 20px; font-size: 0.72rem; font-weight: 600; display: inline-flex; align-items: center; }
.qc-tag-wait { background: #fef3c7; color: #b45309; }
.qc-tag-doing { background: #dbeafe; color: #1e40af; }
.qc-tag-pay { background: #ede9fe; color: #5b21b6; }
.qc-tag-finish { background: #d1fae5; color: #065f46; }
.qc-tag-cancel { background: #fee2e2; color: #991b1b; }

/* 列表行 */
.qc-list-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid #e5e7eb; }
.qc-list-row:last-child { border-bottom: none; }

/* 图表 */
.qc-chart-container { height: 160px; display: flex; align-items: flex-end; gap: 10px; padding: 16px 0; }
.qc-chart-bar { flex: 1; background: linear-gradient(to top, #2563eb, #60a5fa); border-radius: 6px 6px 0 0; min-height: 10px; position: relative; }
.qc-chart-bar span { position: absolute; top: -18px; left: 50%; transform: translateX(-50%); font-size: 0.72rem; font-weight: 600; color: #374151; }
.qc-chart-label { text-align: center; font-size: 0.72rem; color: #6b7280; }

/* 弹窗 */
.qc-modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.4); z-index: 1000; justify-content: center; align-items: center; padding: 20px; }
.qc-modal-overlay.show { display: flex; }
.qc-modal-box { background: #ffffff; border: 1px solid #d1d5db; border-radius: 12px; width: 100%; max-width: 560px; max-height: 80vh; display: flex; flex-direction: column; box-shadow: 0 10px 30px rgba(0,0,0,0.15); }
.qc-modal-header { padding: 14px 20px; border-bottom: 1px solid #e5e7eb; display: flex; justify-content: space-between; align-items: center; }
.qc-modal-header h3 { font-size: 1rem; font-weight: 700; color: #1f2937; }
.qc-modal-close { width: 28px; height: 28px; border-radius: 50%; border: none; background: #e5e7eb; cursor: pointer; font-size: 1.1rem; display: flex; align-items: center; justify-content: center; color: #374151; }
.qc-modal-close:hover { background: #d1d5db; }
.qc-modal-body { padding: 20px; overflow-y: auto; flex: 1; color: #1f2937; }
.qc-modal-footer { padding: 12px 20px; border-top: 1px solid #e5e7eb; display: flex; justify-content: flex-end; gap: 10px; }

/* 空状态 */
.qc-empty { text-align: center; padding: 40px 16px; color: #6b7280; }
.qc-empty-icon { font-size: 2.5rem; margin-bottom: 12px; }

/* 响应式 */
@media (max-width: 768px) {
    .qc-layout { flex-direction: column; }
    .qc-sidebar { width: 100%; flex-direction: row; flex-wrap: wrap; border-right: none; border-bottom: 1px solid #d1d5db; }
    .qc-sidebar-header, .qc-sidebar-footer { display: none; }
    .qc-sidebar-nav { display: flex; flex-wrap: wrap; padding: 8px; gap: 4px; }
    .qc-nav-item { margin-bottom: 0; }
    .qc-form-row { grid-template-columns: 1fr; }
    .qc-stats-grid { grid-template-columns: 1fr; }
    .qc-shop-grid { grid-template-columns: 1fr; }
    .qc-order-item { flex-direction: column; align-items: flex-start; }
    .qc-app button { min-height: 42px; }
    .qc-form-item input, .qc-form-item select, .qc-form-item textarea { font-size: 16px; }
}

/* ============================================================
   全终端统一适配层（2026-09-14）
   目标设备：高端平板 / PC / 高端笔记本 / 4K 大屏 / 折叠屏展开态
   说明：小屏入门机（<600px）仅保持抽屉式可用，不追求完美适配
   断点：≥2560 4K ｜ ≥1920 高端大屏 ｜ 1366-1599 笔记本（默认档）
         1024-1280 平板横屏（三栏收窄，沿用既有规则）
         竖屏 ≤1100 图标条+右抽屉 ｜ 600-1023 折叠展开（图标条）
         pointer:coarse 触屏增强（触控目标/粘滞hover/按压反馈）
   ============================================================ */

/* ---- A. 高端大屏 ≥1920：框架放大、模块限宽放宽、卡片网格加密 ---- */
@media (min-width: 1920px) {
    :root { --menu-width: 280px; --header-h: 54px; --footer-h: 32px; }
    .app-title { font-size: 17px; }
    .app-logo { font-size: 20px; }
    .header-time { font-size: 20px; }
    .slot-cell { height: 38px; }
    .slot-cell .cell-no { font-size: 10px; }
    .slot-cell .cell-label { font-size: 12px; }
    .menu-title { flex: 0 0 42px; font-size: 14px; }
    .menu-item { height: 42px; }
    .menu-item .slot-label { font-size: 14px; }
    .menu-item .slot-index { width: 30px; flex: 0 0 30px; font-size: 12px; }
    .content-toolbar { flex: 0 0 50px; }
    .breadcrumb { font-size: 14px; }
    .toolbar-actions button { font-size: 14px; padding: 9px 18px; }
    .content-inner { padding: 32px 40px; }
    /* 业务模块限宽容器放宽，消除大屏两侧大片留白 */
    .jd-main, .dd-main, .hx-main, .hd-main { max-width: 1280px; }
    /* auto-fit 网格抬升最小卡宽，抑制超宽屏下列数过多、卡片被压窄 */
    .dd-goods-grid, .hx-goods-grid { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
    .hd-goods-grid { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
    .hx-qc-grid { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
    .hx-qc-detail-grid { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
    .qc-stats-grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
    .qc-shop-grid { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
    .fw-house-grid { grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); }
    .yh-grid { grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); }
}

/* ---- B. 4K / 超宽高端屏 ≥2560：整体再放大一档 ---- */
@media (min-width: 2560px) {
    :root { --menu-width: 320px; --header-h: 62px; --footer-h: 38px; }
    .app-title { font-size: 19px; }
    .app-logo { font-size: 23px; }
    .header-time { font-size: 24px; }
    .slot-cell { height: 46px; }
    .slot-cell .cell-no { font-size: 11px; }
    .slot-cell .cell-label { font-size: 14px; }
    .menu-title { flex: 0 0 50px; font-size: 16px; letter-spacing: 3px; }
    .menu-item { height: 50px; }
    .menu-item .slot-label { font-size: 16px; }
    .menu-item .slot-index { width: 34px; flex: 0 0 34px; font-size: 13px; }
    .content-toolbar { flex: 0 0 58px; }
    .breadcrumb { font-size: 16px; }
    .toolbar-actions button { font-size: 15px; padding: 12px 26px; min-height: 40px; }
    .content-inner { padding: 44px 60px; }
    .jd-main, .dd-main, .hx-main, .hd-main { max-width: 1560px; }
    .dd-goods-grid, .hx-goods-grid { grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 18px; }
    .hd-goods-grid { grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 18px; }
    .hx-qc-grid { grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); }
    .hx-qc-detail-grid { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
    .qc-stats-grid { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; }
    .qc-shop-grid { grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px; }
    .fw-house-grid { grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); gap: 24px; }
    .yh-grid { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 22px; }
}

/* ---- C. 触屏设备（高端平板 / 折叠屏 / 触屏一体机）：触控三件套 ---- */
@media (pointer: coarse) {
    /* 1) 触控目标：菜单/顶栏/操作按钮 ≥40px，菜单 ≥44px */
    .menu-item { height: 44px; }
    .header-btn { width: 44px; height: 44px; }
    .toolbar-actions button { min-height: 40px; }
    .slot-cell { height: 36px; }
    /* 内容区操作按钮统一最低高度；排除计算器键位与弹窗圆形关闭钮（固定宽高，拉成椭圆） */
    #contentInner button:not(.pc-btn):not([class*="modal-close"]) { min-height: 40px; }
    /* 2) 取消未按 hover 能力隔离的卡片上浮，防止触屏点按后位移粘滞（其余模块已包 hover:hover） */
    .sy-entry:hover,
    .fb-quickstart-btn:hover,
    .syt-spot:hover,
    .syt-gencard:hover,
    .mod-today-show .btn-primary:hover { transform: none; }
    /* 3) 按压即时反馈，替代鼠标 hover 态 */
    #contentInner button:not(.pc-btn):not([class*="modal-close"]):active { transform: scale(0.97); }
    .menu-item:active, .slot-cell:active { transform: scale(0.99); }
}

/* ---- D. 折叠屏展开态 / 平板竖屏区间（≤1024，触屏） ---- */
@media (pointer: coarse) and (max-width: 1024px) {
    /* iOS WebKit：输入字号 <16px 聚焦时会自动放大整页，统一兜底 */
    #contentInner input,
    #contentInner select,
    #contentInner textarea { font-size: 16px; }
}

/* 横屏状态：子项目不再向上偏移，避免内容被工具栏遮挡 */
@media (orientation: landscape) {
    /* 横屏时子项目不再向上偏移，避免内容被工具栏遮挡 */
    .cd-app, .wt-app, .wp-app, .lg-app, .ga-app, .yr-app, .fd-app, .sy-app,
    .rc-app, .ct-app, .ic-app, .mz-app, .bh-app, .fb-app, .ve-app, .ot-app,
    .pa-app, .mi-app, .pr-app, .pc-app, .er-app, .ml-app, .eb-app, .sd-app,
    .ds-app, .wm-app, .jd-app, .dd-app, .hx-app, .sa-app, .dl-app, .fj-app,
    .ls-app, .fw-app, .yh-app, .jg-app, .qc-app, .hd-app, .zx-app, .mc-app,
    .dm-app, .zl-app, .ly-app, .jz-app, .cp-app, .yq-app, .tn-app, .xz-app,
    .cw-app, .ax-app, .yw-app, .hj-app, .wx-app, .jx-app {
        margin-top: 0 !important;
    }
}

/* 折叠屏横屏展开（高约 600-700px）：收紧内容留白，避免纵向局促 */
@media (max-width: 1023px) and (orientation: landscape) {
    .content-inner { padding: 16px 20px; }
}

/* ---- E. 大屏触屏一体机（≥1600 粗指针）：触控目标再放大 ---- */
@media (min-width: 1600px) and (pointer: coarse) {
    .menu-item { height: 50px; }
    .menu-item .slot-label { font-size: 15px; }
    .slot-cell { height: 42px; }
    .toolbar-actions button { min-height: 46px; }
    #contentInner button:not(.pc-btn):not([class*="modal-close"]) { min-height: 46px; }
}

/* ---- F. 减弱动态效果（系统级无障碍/省电设置，同时降低低端 GPU 压力） ---- */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ==================== 右侧06 好多工具 hd-（琥珀工业风·电动工具供应兼容维修） ==================== */
.hd-app{margin:-19px 0 0;padding:0;font-size:14px;color:#3f3428;background:#faf6ef;overflow:visible;}
.hd-app *{box-sizing:border-box;}
.hd-app input,.hd-app select,.hd-app textarea{width:100%;padding:8px 12px;border:1px solid #d9c9a8;border-radius:6px;background:#fff;color:#3f3428;font-size:14px;outline:none;}
.hd-app input:focus,.hd-app select:focus,.hd-app textarea:focus{border-color:#b45309;}
.hd-app label{display:block;margin-bottom:4px;font-size:13px;color:#8a7a5f;}
.hd-app select{appearance:auto;}
.hd-app textarea{resize:vertical;}
.hd-auth-wrap{min-height:520px;display:flex;align-items:flex-start;justify-content:center;}
.hd-login-card{width:100%;max-width:440px;margin:36px auto;padding:32px;background:#fff;border:1px solid #eadfce;border-radius:12px;box-shadow:0 2px 12px rgba(180,83,9,.10);}
.hd-login-logo{font-size:20px;font-weight:700;color:#b45309;text-align:center;margin-bottom:4px;}
.hd-login-sub{text-align:center;color:#a8a29e;font-size:13px;margin-bottom:20px;}
.hd-auth-tabs{display:flex;margin-bottom:20px;border-bottom:2px solid #eadfce;}
.hd-auth-tab{flex:1;padding:10px;border:none;background:transparent;color:#a8a29e;font-size:14px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;}
.hd-auth-tab.active{color:#b45309;border-bottom-color:#b45309;font-weight:600;}
.hd-form-item{margin-bottom:14px;}
.hd-login-hint{font-size:12px;color:#6b5b3e;background:#fdf8ee;border:1px solid #eadfce;border-radius:6px;padding:10px;margin-bottom:16px;line-height:1.8;}
.hd-btn{display:inline-block;padding:8px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer;text-decoration:none;transition:opacity .2s;}
.hd-btn-primary{background:#d97706;color:#fff;}
.hd-btn-primary:hover{background:#b45309;}
.hd-btn-tool{background:#b45309;color:#fff;}
.hd-btn-tool:hover{background:#92400e;}
.hd-btn-outline{background:transparent;color:#8a7a5f;border:1px solid #d9c9a8;}
.hd-btn-outline:hover{border-color:#b45309;color:#b45309;}
.hd-btn-success{background:#16a34a;color:#fff;}
.hd-btn-success:hover{background:#15803d;}
.hd-btn-ship{background:#ea580c;color:#fff;}
.hd-btn-ship:hover{background:#c2410c;}
.hd-btn-sm{padding:5px 12px;font-size:12px;}
.hd-btn-block{width:100%;text-align:center;padding:10px;}
.hd-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:#fff;border-bottom:1px solid #eadfce;box-shadow:0 1px 6px rgba(180,83,9,.06);flex-wrap:wrap;gap:8px;}
.hd-header-title{font-size:16px;font-weight:700;color:#b45309;}
.hd-nav{display:flex;gap:4px;flex-wrap:wrap;}
.hd-nav-btn{padding:8px 14px;border:none;background:transparent;color:#8a7a5f;font-size:13px;cursor:pointer;border-radius:6px;border-bottom:3px solid transparent;}
.hd-nav-btn:hover{background:#fdf8ee;}
.hd-nav-btn.active{border-bottom-color:#d97706;color:#b45309;font-weight:600;}
.hd-user-area{display:flex;align-items:center;gap:8px;font-size:13px;}
.hd-user-role{background:#fdf8ee;border:1px solid #eadfce;padding:2px 8px;border-radius:4px;font-size:12px;color:#8a7a5f;}
.hd-user-name{color:#3f3428;font-weight:500;}
.hd-link-danger{background:none;border:none;color:#dc2626;cursor:pointer;font-size:13px;}
.hd-main{max-width:1024px;margin:0 auto;padding:16px 20px;}
.hd-card{background:#fff;border:1px solid #eadfce;border-radius:10px;padding:20px;box-shadow:0 2px 8px rgba(120,80,20,.05);}
.hd-card-title{font-size:18px;font-weight:700;color:#b45309;margin:0 0 14px;}
.hd-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
.hd-toolbar .hd-card-title{margin-bottom:0;}
.hd-search-row{display:flex;gap:8px;margin-bottom:12px;}
.hd-search-row input{flex:1;width:auto;}
.hd-cate-row{font-size:13px;color:#8a7a5f;line-height:2;}
.hd-goods-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:14px;}
.hd-goods-card{background:#fff;border:1px solid #eadfce;border-radius:10px;padding:14px;box-shadow:0 2px 6px rgba(120,80,20,.05);}
.hd-goods-top{display:flex;justify-content:space-between;align-items:center;gap:6px;}
.hd-goods-brand{font-size:12px;font-weight:600;color:#6b5b3e;}
.hd-goods-name{font-size:15px;font-weight:700;color:#3f3428;margin:6px 0;}
.hd-goods-price{font-size:13px;color:#6b5b3e;}
.hd-meta{font-size:12px;color:#a8a29e;margin-top:3px;}
.hd-compat{font-size:12px;color:#c2410c;margin-top:4px;line-height:1.5;}
.hd-goods-buy{display:flex;align-items:center;gap:6px;margin-top:10px;}
.hd-qty-input{width:72px !important;padding:5px 8px !important;font-size:13px !important;}
.hd-tag{display:inline-block;padding:2px 8px;border-radius:99px;font-size:12px;}
.hd-tag-cate{background:#fdf1dc;color:#b45309;}
.hd-tag-pend{background:#fef9c3;color:#a16207;}
.hd-tag-conf{background:#dbeafe;color:#1d4ed8;}
.hd-tag-parts{background:#fef3c7;color:#d97706;}
.hd-tag-ship{background:#ffedd5;color:#c2410c;}
.hd-tag-deliv{background:#dcfce7;color:#15803d;}
.hd-tag-cancel{background:#f1f5f9;color:#64748b;}
.hd-cart-item{display:flex;justify-content:space-between;align-items:center;background:#fdf8ee;border:1px solid #eadfce;border-radius:8px;padding:12px;margin-bottom:8px;}
.hd-cart-name{font-weight:600;color:#3f3428;}
.hd-cart-info{font-size:13px;color:#8a7a5f;margin-top:2px;}
.hd-cart-sub{font-weight:700;color:#3f3428;}
.hd-cart-foot{border-top:1px solid #eadfce;margin-top:12px;padding-top:12px;}
.hd-addr-item{max-width:420px;}
.hd-cart-foot-row{display:flex;justify-content:space-between;align-items:center;margin-top:8px;}
.hd-cart-total{font-size:18px;font-weight:700;color:#b45309;}
.hd-order-card{background:#fdf8ee;border:1px solid #eadfce;border-radius:10px;padding:14px;margin-bottom:10px;cursor:pointer;transition:border-color .2s;}
.hd-order-card:hover{border-color:#d97706;}
.hd-order-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:6px;}
.hd-order-no{font-weight:700;color:#3f3428;}
.hd-order-info{font-size:13px;color:#6b5b3e;margin-bottom:2px;}
.hd-order-amount{font-size:13px;color:#3f3428;font-weight:600;}
.hd-order-time{font-size:12px;color:#a8a29e;}
.hd-detail-info{font-size:13px;color:#6b5b3e;line-height:1.8;margin:12px 0;}
.hd-detail-goods{border-top:1px solid #eadfce;padding-top:12px;margin-top:4px;}
.hd-detail-goods h4{font-size:14px;font-weight:600;color:#3f3428;margin:0 0 8px;}
.hd-detail-row{display:flex;justify-content:space-between;border-bottom:1px solid #f3ece0;padding:6px 0;font-size:13px;color:#3f3428;gap:8px;}
.hd-detail-total{font-weight:700;color:#b45309;margin-top:8px;}
.hd-row-btns{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap;align-items:center;}
.hd-stock-item{display:flex;justify-content:space-between;align-items:center;background:#fdf8ee;border:1px solid #eadfce;border-radius:8px;padding:12px;margin-bottom:8px;gap:8px;}
.hd-stock-name{font-weight:600;color:#3f3428;}
.hd-stock-cate{font-size:12px;color:#a8a29e;font-weight:400;}
.hd-stock-info{font-size:13px;color:#8a7a5f;margin-top:2px;}
.hd-stock-edit{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.hd-stock-input{width:80px !important;padding:4px 8px !important;font-size:13px !important;}
.hd-tip{font-size:12px;color:#8a7a5f;background:#fdf8ee;border:1px solid #eadfce;border-radius:6px;padding:10px;margin-top:14px;line-height:1.7;}
.hd-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;}
.hd-grid-full{grid-column:1/-1;}
.hd-msg-item{border-bottom:1px solid #eadfce;padding:12px 0;}
.hd-msg-title{font-weight:600;font-size:14px;color:#3f3428;}
.hd-msg-content{font-size:13px;color:#6b5b3e;margin-top:4px;}
.hd-msg-time{font-size:12px;color:#a8a29e;margin-top:4px;}
.hd-empty{text-align:center;padding:40px;color:#a8a29e;}
.hd-empty-sm{padding:18px;font-size:13px;}
.hd-empty-icon{font-size:36px;margin-bottom:8px;}
@media(max-width:768px){.hd-header{flex-direction:column;align-items:stretch;}.hd-nav{justify-content:center;}.hd-main{padding:12px;}.hd-btn{min-height:42px;}.hd-app input,.hd-app select,.hd-app textarea{font-size:16px;}.hd-form-grid{grid-template-columns:1fr;}.hd-stock-item{flex-direction:column;align-items:stretch;}.hd-stock-edit{justify-content:flex-end;}.hd-cart-foot-row{flex-direction:column;align-items:stretch;gap:10px;}}
@media(hover:none){.hd-order-card:hover{border-color:#eadfce;}}

/* ==================== 右侧07 智能装修 zx-（蓝色工程风·建材供应/国标智能算量台账） ==================== */
.zx-app{margin:-19px 0 0;font-size:14px;color:#333;background:#eef2f7;}
.zx-app *{box-sizing:border-box;}
.zx-app input,.zx-app select,.zx-app textarea{width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:14px;color:#333;outline:none;background:#fff;}
.zx-app input:focus,.zx-app select:focus,.zx-app textarea:focus{border-color:#2563eb;}
.zx-app label{display:block;margin-bottom:6px;font-weight:500;color:#475569;}
.zx-app select{appearance:auto;}
.zx-login-wrap{min-height:560px;display:flex;align-items:flex-start;justify-content:center;background:linear-gradient(135deg,#2563eb,#4f46e5);padding:36px 12px;}
.zx-login-card{width:100%;max-width:420px;background:#fff;border-radius:16px;padding:32px;box-shadow:0 10px 40px rgba(0,0,0,.15);}
.zx-login-logo{text-align:center;font-size:20px;font-weight:700;color:#1e293b;margin-bottom:4px;}
.zx-login-sub{text-align:center;color:#94a3b8;font-size:13px;margin-bottom:22px;}
.zx-form-item{margin-bottom:16px;}
.zx-btn{display:inline-block;padding:11px 22px;border:none;border-radius:8px;font-size:15px;cursor:pointer;transition:opacity .2s;}
.zx-btn-primary{background:#2563eb;color:#fff;}
.zx-btn-primary:hover{background:#1d4ed8;}
.zx-btn-block{width:100%;}
.zx-tip{color:#64748b;font-size:13px;margin-top:12px;}
.zx-header{background:#fff;padding:12px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 8px rgba(0,0,0,.06);flex-wrap:wrap;gap:8px;}
.zx-sys-title{font-size:17px;font-weight:700;color:#1e293b;}
.zx-user-info{display:flex;gap:16px;align-items:center;font-size:13px;color:#64748b;}
.zx-logout{color:#ef4444;cursor:pointer;}
.zx-logout:hover{text-decoration:underline;}
.zx-body{display:flex;align-items:stretch;}
.zx-sidebar{width:200px;flex-shrink:0;background:#1e293b;color:#fff;padding:16px 0;}
.zx-menu-item{padding:12px 20px;cursor:pointer;transition:background .2s;font-size:14px;}
.zx-menu-item:hover{background:#334155;}
.zx-menu-item.active{background:#2563eb;}
.zx-content{flex:1;min-width:0;padding:20px;}
.zx-card{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;box-shadow:0 2px 12px rgba(0,0,0,.06);}
.zx-card-title{font-size:17px;margin-bottom:16px;font-weight:600;color:#1e293b;border-left:4px solid #2563eb;padding-left:10px;}
.zx-sub-title{font-size:14px;font-weight:600;color:#334155;margin:16px 0 4px;}
.zx-app table{width:100%;border-collapse:collapse;margin-top:10px;}
.zx-app th,.zx-app td{border:1px solid #e2e8f0;padding:10px;text-align:left;font-size:13px;}
.zx-app th{background:#f8fafc;font-weight:600;color:#334155;}
.zx-app tr:hover td{background:#f8fafc;}
.zx-empty-td{text-align:center;color:#94a3b8;padding:18px !important;}
.zx-grid-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px;}
.zx-stat-card{padding:18px;border-radius:10px;color:#fff;font-size:14px;}
.zx-stat-num{font-size:26px;font-weight:700;margin-top:8px;}
.zx-stat1{background:#2563eb;}
.zx-stat2{background:#10b981;}
.zx-stat3{background:#f59e0b;}
.zx-stat4{background:#8b5cf6;}
.zx-op-bar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center;}
.zx-btn-sm{padding:8px 14px;border-radius:6px;border:none;cursor:pointer;font-size:13px;}
.zx-btn-sm:hover{opacity:.9;}
.zx-btn-success{background:#10b981;color:#fff;}
.zx-btn-warning{background:#f59e0b;color:#fff;}
.zx-btn-danger{background:#ef4444;color:#fff;margin-left:6px;}
.zx-form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px;}
.zx-form-full{grid-column:1/-1;}
.zx-tag{display:inline-block;padding:2px 10px;border-radius:99px;font-size:12px;}
.zx-tag-in{background:#dbeafe;color:#1d4ed8;}
.zx-tag-ok{background:#dcfce7;color:#15803d;}
.zx-tag-arrive{background:#ffedd5;color:#c2410c;}
.zx-tag-wait{background:#fef9c3;color:#a16207;}
.zx-tag-cancel{background:#f1f5f9;color:#64748b;}
.zx-calc-result{padding:14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;margin:14px 0;line-height:2;font-size:13px;color:#166534;}
.zx-aux-result{padding:14px;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;margin:14px 0;line-height:2;font-size:13px;color:#92400e;}
.zx-tier-std td{background:#f0fdf4;}
.zx-chart-title{font-size:13px;color:#64748b;margin:6px 0 10px;}
.zx-chart{display:flex;align-items:flex-end;gap:14px;height:250px;padding:0 8px;border-bottom:1px solid #e2e8f0;}
.zx-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:6px;}
.zx-bar{width:60%;max-width:64px;background:linear-gradient(180deg,#3b82f6,#2563eb);border-radius:6px 6px 0 0;transition:height .3s;}
.zx-bar-zero{background:#e2e8f0;}
.zx-bar-val{font-size:12px;color:#475569;}
.zx-bar-label{font-size:12px;color:#64748b;}
.zx-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:99;}
.zx-modal-box{width:620px;max-width:92vw;background:#fff;border-radius:12px;padding:24px;max-height:90vh;overflow:auto;}
.zx-modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;}
.zx-modal-header h3{font-size:16px;color:#1e293b;}
.zx-close-modal{cursor:pointer;font-size:22px;color:#666;line-height:1;}
@media(max-width:768px){.zx-body{flex-direction:column;}.zx-sidebar{width:100%;display:flex;flex-wrap:wrap;padding:8px 0;}.zx-menu-item{padding:9px 14px;font-size:13px;}.zx-content{padding:12px;}.zx-form-row{grid-template-columns:1fr;}.zx-chart{gap:6px;}.zx-app input,.zx-app select{font-size:16px;}}
@media(min-width:1920px){.zx-content-inner,.zx-content{max-width:1400px;margin:0 auto;width:100%;}}
@media(hover:none){.zx-menu-item:hover{background:transparent;}.zx-menu-item.active:hover{background:#2563eb;}.zx-btn-sm:hover{opacity:1;}}

/* 右侧 08 家有萌宠 mc-（宠物医院清洁护理管理系统 · 靛青护理风） */
.mc-app{margin:-19px 0 0;font-size:14px;color:#333;background:#f1f5f9;}
.mc-app *{box-sizing:border-box;}
.mc-app input,.mc-app select,.mc-app textarea{width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:14px;color:#333;outline:none;background:#fff;font-family:inherit;}
.mc-app input:focus,.mc-app select:focus,.mc-app textarea:focus{border-color:#4f46e5;}
.mc-app label{display:block;margin-bottom:6px;font-weight:500;color:#475569;}
.mc-app select{appearance:auto;}
.mc-login-wrap{min-height:520px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#4f46e5,#0ea5e9);border-radius:12px;padding:24px;}
.mc-login-card{width:100%;max-width:420px;background:#fff;border-radius:16px;padding:32px;box-shadow:0 10px 40px rgba(0,0,0,.15);}
.mc-login-logo{text-align:center;font-size:20px;font-weight:700;color:#1e293b;margin-bottom:4px;}
.mc-login-sub{text-align:center;color:#94a3b8;font-size:13px;margin-bottom:22px;}
.mc-form-item{margin-bottom:16px;}
.mc-btn{display:inline-block;padding:11px 22px;border:none;border-radius:8px;font-size:15px;cursor:pointer;transition:opacity .2s;}
.mc-btn-primary{background:#4f46e5;color:#fff;}
.mc-btn-primary:hover{background:#4338ca;}
.mc-btn-block{width:100%;}
.mc-tip{color:#64748b;font-size:13px;margin-top:12px;}
.mc-header{background:#fff;padding:12px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 8px rgba(0,0,0,.06);flex-wrap:wrap;gap:8px;border-radius:12px 12px 0 0;}
.mc-sys-title{font-size:17px;font-weight:700;color:#1e293b;}
.mc-user-info{display:flex;gap:16px;align-items:center;font-size:13px;color:#64748b;}
.mc-logout{color:#ef4444;cursor:pointer;}
.mc-logout:hover{text-decoration:underline;}
.mc-body{display:flex;align-items:stretch;background:#fff;border-radius:0 0 12px 12px;overflow:hidden;}
.mc-sidebar{width:190px;flex-shrink:0;background:#1e293b;color:#fff;padding:16px 0;}
.mc-menu-item{padding:12px 20px;cursor:pointer;transition:background .2s;font-size:14px;}
.mc-menu-item:hover{background:#334155;}
.mc-menu-item.active{background:#4f46e5;}
.mc-content{flex:1;min-width:0;padding:20px;background:#f8fafc;}
.mc-card{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;box-shadow:0 2px 12px rgba(0,0,0,.06);}
.mc-card-title{font-size:17px;margin-bottom:16px;font-weight:600;color:#1e293b;border-left:4px solid #4f46e5;padding-left:10px;}
.mc-app table{width:100%;border-collapse:collapse;margin-top:10px;}
.mc-app th,.mc-app td{border:1px solid #e2e8f0;padding:10px;text-align:left;font-size:13px;}
.mc-app th{background:#f8fafc;font-weight:600;color:#334155;}
.mc-app tr:hover td{background:#f8fafc;}
.mc-empty-td{text-align:center;color:#94a3b8;padding:18px !important;}
.mc-grid-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px;}
.mc-stat-card{padding:18px;border-radius:10px;color:#fff;font-size:14px;}
.mc-stat-num{font-size:26px;font-weight:700;margin-top:8px;}
.mc-stat1{background:#4f46e5;}
.mc-stat2{background:#10b981;}
.mc-stat3{background:#f59e0b;}
.mc-stat4{background:#ec4899;}
.mc-warn-box{padding:12px 14px;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;margin-bottom:14px;font-size:13px;color:#92400e;}
.mc-op-bar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center;}
.mc-btn-sm{padding:8px 14px;border-radius:6px;border:none;cursor:pointer;font-size:13px;margin-right:6px;}
.mc-btn-sm:hover{opacity:.9;}
.mc-btn-success{background:#10b981;color:#fff;}
.mc-btn-warning{background:#f59e0b;color:#fff;}
.mc-btn-danger{background:#ef4444;color:#fff;margin-right:0;}
.mc-form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px;}
.mc-form-full{grid-column:1/-1;}
.mc-tag{display:inline-block;padding:2px 10px;border-radius:99px;font-size:12px;}
.mc-tag-wait{background:#fef9c3;color:#a16207;}
.mc-tag-arrive{background:#ffedd5;color:#c2410c;}
.mc-tag-open{background:#e0e7ff;color:#4338ca;}
.mc-tag-work{background:#dbeafe;color:#1d4ed8;}
.mc-tag-ok{background:#dcfce7;color:#15803d;}
.mc-tag-cancel{background:#f1f5f9;color:#64748b;}
.mc-tag-bad{background:#fee2e2;color:#b91c1c;}
.mc-row-warn td{background:#fff7f7;}
.mc-qty-bad{color:#ef4444;font-weight:700;}
.mc-info-box{padding:12px 14px;background:#eef2ff;border:1px solid #c7d2fe;border-radius:8px;margin-bottom:14px;font-size:13px;color:#3730a3;line-height:1.9;}
.mc-chart-title{font-size:13px;color:#64748b;margin:6px 0 10px;}
.mc-chart{display:flex;align-items:flex-end;gap:14px;height:250px;padding:0 8px;border-bottom:1px solid #e2e8f0;}
.mc-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:6px;}
.mc-bar{width:60%;max-width:64px;background:linear-gradient(180deg,#818cf8,#4f46e5);border-radius:6px 6px 0 0;transition:height .3s;}
.mc-bar-zero{background:#e2e8f0;}
.mc-bar-val{font-size:12px;color:#475569;}
.mc-bar-label{font-size:12px;color:#64748b;}
.mc-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:99;}
.mc-modal-box{width:640px;max-width:92vw;background:#fff;border-radius:12px;padding:24px;max-height:90vh;overflow:auto;}
.mc-modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;}
.mc-modal-header h3{font-size:16px;color:#1e293b;}
.mc-close-modal{cursor:pointer;font-size:22px;color:#666;line-height:1;}
@media(max-width:768px){.mc-body{flex-direction:column;}.mc-sidebar{width:100%;display:flex;flex-wrap:wrap;padding:8px 0;}.mc-menu-item{padding:9px 14px;font-size:13px;}.mc-content{padding:12px;}.mc-form-row{grid-template-columns:1fr;}.mc-chart{gap:6px;}.mc-app input,.mc-app select{font-size:16px;}}
@media(min-width:1920px){.mc-content{max-width:1400px;margin:0 auto;width:100%;}}
@media(hover:none){.mc-menu-item:hover{background:transparent;}.mc-menu-item.active:hover{background:#4f46e5;}.mc-btn-sm:hover{opacity:1;}}

/* 右侧 01 数据管理 dm-（1+6+N 全域数据治理SaaS · 科技蓝） */
.dm-app{margin:-19px 0 0;font-size:14px;color:#333;background:#f1f5f9;}
.dm-app *{box-sizing:border-box;}
.dm-app input,.dm-app select,.dm-app textarea{width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:14px;color:#333;outline:none;background:#fff;font-family:inherit;}
.dm-app input:focus,.dm-app select:focus,.dm-app textarea:focus{border-color:#2563eb;}
.dm-app label{display:block;margin-bottom:6px;font-weight:500;color:#475569;}
.dm-app select{appearance:auto;}
.dm-login-wrap{min-height:520px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e40af,#0284c7);border-radius:12px;padding:24px;}
.dm-login-card{width:100%;max-width:440px;background:#fff;border-radius:16px;padding:32px;box-shadow:0 10px 40px rgba(0,0,0,.15);}
.dm-login-logo{text-align:center;font-size:20px;font-weight:700;color:#1e293b;margin-bottom:6px;}
.dm-login-sub{text-align:center;color:#94a3b8;font-size:13px;margin-bottom:22px;line-height:1.7;}
.dm-form-item{margin-bottom:16px;}
.dm-btn{display:inline-block;padding:11px 22px;border:none;border-radius:8px;font-size:15px;cursor:pointer;transition:opacity .2s;}
.dm-btn-primary{background:#2563eb;color:#fff;}
.dm-btn-primary:hover{background:#1d4ed8;}
.dm-btn-block{width:100%;}
.dm-tip{color:#64748b;font-size:13px;margin-top:12px;text-align:center;}
.dm-header{background:#fff;padding:12px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 8px rgba(0,0,0,.06);flex-wrap:wrap;gap:8px;border-radius:12px 12px 0 0;}
.dm-sys-title{font-size:17px;font-weight:700;color:#1e293b;}
.dm-user-info{display:flex;gap:16px;align-items:center;font-size:13px;color:#64748b;}
.dm-logout{color:#ef4444;cursor:pointer;}
.dm-logout:hover{text-decoration:underline;}
.dm-body{display:flex;align-items:stretch;background:#fff;border-radius:0 0 12px 12px;overflow:hidden;}
.dm-sidebar{width:200px;flex-shrink:0;background:#1e293b;color:#fff;padding:16px 0;}
.dm-menu-item{padding:12px 20px;cursor:pointer;transition:background .2s;font-size:14px;white-space:nowrap;}
.dm-menu-item:hover{background:#334155;}
.dm-menu-item.active{background:#2563eb;}
.dm-content{flex:1;min-width:0;padding:20px;background:#f8fafc;}
.dm-card{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;box-shadow:0 2px 12px rgba(0,0,0,.06);}
.dm-card-title{font-size:17px;margin-bottom:16px;font-weight:600;color:#1e293b;border-left:4px solid #2563eb;padding-left:10px;}
.dm-app table{width:100%;border-collapse:collapse;margin-top:10px;}
.dm-app th,.dm-app td{border:1px solid #e2e8f0;padding:10px;text-align:left;font-size:13px;}
.dm-app th{background:#f8fafc;font-weight:600;color:#334155;}
.dm-app tr:hover td{background:#f8fafc;}
.dm-empty-td{text-align:center;color:#94a3b8;padding:18px !important;}
.dm-grid-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px;}
.dm-stat-card{padding:18px;border-radius:10px;color:#fff;font-size:14px;}
.dm-stat-num{font-size:26px;font-weight:700;margin-top:8px;}
.dm-stat1{background:#2563eb;}
.dm-stat2{background:#10b981;}
.dm-stat3{background:#f59e0b;}
.dm-stat4{background:#8b5cf6;}
.dm-warn-box{padding:12px 14px;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;margin-bottom:14px;font-size:13px;color:#92400e;line-height:1.8;}
.dm-ok-box{padding:12px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;margin-bottom:14px;font-size:13px;color:#166534;}
.dm-op-bar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center;}
.dm-op-hint{font-size:12px;color:#94a3b8;}
.dm-btn-sm{padding:8px 14px;border-radius:6px;border:none;cursor:pointer;font-size:13px;margin-right:6px;}
.dm-btn-sm:hover{opacity:.9;}
.dm-btn-success{background:#10b981;color:#fff;}
.dm-btn-warning{background:#f59e0b;color:#fff;}
.dm-btn-danger{background:#ef4444;color:#fff;margin-right:0;}
.dm-btn-primary{background:#2563eb;color:#fff;}
.dm-btn-info{background:#0ea5e9;color:#fff;}

/* ============================================================
   右侧 09 房屋租赁 zl-（房屋租赁SaaS管理平台 · 蓝色主题）
   ============================================================ */
.zl-app{margin:-19px 0 0;font-size:14px;color:#333;background:#f1f5f9;}
.zl-app *{box-sizing:border-box;}
.zl-app input,.zl-app select,.zl-app textarea{width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:14px;color:#333;outline:none;background:#fff;font-family:inherit;}
.zl-app input:focus,.zl-app select:focus,.zl-app textarea:focus{border-color:#2563eb;}
.zl-app label{display:block;margin-bottom:6px;font-weight:500;color:#475569;}
.zl-app table{width:100%;border-collapse:collapse;}
.zl-app th,.zl-app td{border:1px solid #e2e8f0;padding:10px 12px;text-align:left;font-size:13px;vertical-align:middle;}
.zl-app th{background:#f8fafc;font-weight:600;color:#334155;white-space:nowrap;}
.zl-app tbody tr:hover{background:#f8fafc;}
.zl-login-wrap{min-height:520px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e293b,#0f172a);border-radius:12px;padding:24px;}
.zl-login-card{width:100%;max-width:440px;background:#fff;border-radius:16px;padding:32px;box-shadow:0 10px 40px rgba(0,0,0,.18);}
.zl-login-logo{font-size:22px;font-weight:700;text-align:center;color:#1e293b;margin-bottom:8px;}
.zl-login-sub{text-align:center;color:#64748b;font-size:13px;margin-bottom:24px;}
.zl-form-item{margin-bottom:16px;}
.zl-tip{margin-top:14px;text-align:center;color:#94a3b8;font-size:13px;}
.zl-header{background:#fff;padding:12px 20px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;border-radius:12px 12px 0 0;box-shadow:0 2px 8px rgba(0,0,0,.06);}
.zl-sys-title{font-size:17px;font-weight:700;color:#1e293b;}
.zl-user-info{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:13px;color:#475569;}
.zl-logout{color:#ef4444;cursor:pointer;font-weight:500;}
.zl-logout:hover{text-decoration:underline;}
.zl-body{display:flex;align-items:stretch;background:#fff;border-radius:0 0 12px 12px;overflow:hidden;}
.zl-sidebar{width:200px;flex-shrink:0;background:#1e293b;padding:14px 0;align-self:stretch;}
.zl-menu-item{padding:12px 18px;cursor:pointer;color:#e2e8f0;font-size:14px;transition:background .2s;white-space:nowrap;}
.zl-menu-item:hover{background:#334155;}
.zl-menu-item.active{background:#2563eb;color:#fff;}
.zl-content{flex:1;min-width:0;padding:18px;background:#f8fafc;}
.zl-card{background:#fff;border-radius:12px;padding:18px;margin-bottom:18px;box-shadow:0 2px 12px rgba(0,0,0,.06);}
.zl-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:10px;flex-wrap:wrap;}
.zl-card-title{font-size:16px;font-weight:600;color:#1e293b;border-left:4px solid #2563eb;padding-left:10px;}
.zl-table-wrap{overflow-x:auto;}
.zl-empty{text-align:center;color:#94a3b8;padding:24px 0 !important;}
.zl-acts{white-space:nowrap;}
.zl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:6px;}
.zl-stat-card{border-radius:10px;padding:16px;color:#fff;font-size:13px;}
.zl-stat1{background:#2563eb;}
.zl-stat2{background:#10b981;}
.zl-stat3{background:#f59e0b;}
.zl-stat4{background:#8b5cf6;}
.zl-stat-num{font-size:26px;font-weight:700;margin-top:8px;}
.zl-chart-title{font-size:14px;font-weight:600;color:#475569;margin:18px 0 10px;}
.zl-chart{display:flex;align-items:flex-end;gap:12px;height:200px;padding:0 6px;border-bottom:2px solid #e2e8f0;}
.zl-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:6px;min-width:0;}
.zl-bar{width:44px;max-width:60%;background:linear-gradient(180deg,#3b82f6,#1d4ed8);border-radius:6px 6px 0 0;min-height:4px;}
.zl-bar-val{font-size:12px;color:#475569;}
.zl-bar-label{font-size:12px;color:#64748b;}
.zl-tag{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;white-space:nowrap;}
.zl-tag-green{background:#d1fae5;color:#065f46;}
.zl-tag-red{background:#fee2e2;color:#991b1b;}
.zl-tag-orange{background:#ffedd5;color:#9a3412;}
.zl-tag-gray{background:#e2e8f0;color:#475569;}
.zl-btn{border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:500;padding:12px;}
.zl-btn-primary{background:#2563eb;color:#fff;}
.zl-btn-primary:hover{background:#1d4ed8;}
.zl-btn-block{width:100%;}
.zl-btn-sm{padding:9px 16px;border:none;border-radius:7px;cursor:pointer;font-size:14px;}
.zl-btn-green{background:#10b981;color:#fff;}
.zl-btn-green:hover{background:#059669;}
.zl-btn-plain{background:#e2e8f0;color:#475569;}
.zl-btn-plain:hover{background:#cbd5e1;}
.zl-btn-mini{padding:5px 10px;border:none;border-radius:6px;cursor:pointer;font-size:12px;background:#eff6ff;color:#2563eb;margin:0 2px;}
.zl-btn-mini:hover{background:#dbeafe;}
.zl-btn-danger{background:#fef2f2;color:#ef4444;}
.zl-btn-danger:hover{background:#fee2e2;}
.zl-btn-warn{background:#fffbeb;color:#d97706;}
.zl-btn-warn:hover{background:#fef3c7;}
.zl-del-armed{background:#ef4444 !important;color:#fff !important;}
.zl-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:999;}
.zl-modal-box{width:720px;max-width:92vw;background:#fff;border-radius:14px;padding:24px;max-height:88vh;overflow:auto;}
.zl-modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;}
.zl-modal-header h3{font-size:16px;color:#1e293b;margin:0;}
.zl-close-modal{cursor:pointer;font-size:22px;color:#666;line-height:1;}
.zl-form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.zl-form-col{margin-bottom:12px;}
.zl-form-full{grid-column:1/-1;}
.zl-modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:16px;}
@media(max-width:900px){.zl-body{flex-direction:column;}.zl-sidebar{width:100%;display:flex;flex-wrap:wrap;padding:6px 0;}.zl-menu-item{padding:9px 12px;font-size:13px;}.zl-content{padding:12px;}.zl-form-row{grid-template-columns:1fr;}.zl-modal-box{width:94vw;padding:16px;}}
@media(min-width:1920px){.zl-content{max-width:1400px;margin:0 auto;width:100%;}}
@media(hover:none){.zl-menu-item:hover{background:transparent;}.zl-menu-item.active:hover{background:#2563eb;}.zl-btn-mini:hover{background:#eff6ff;}.zl-btn-danger:hover{background:#fef2f2;}.zl-btn-warn:hover{background:#fffbeb;}.zl-btn-green:hover{background:#10b981;}.zl-btn-plain:hover{background:#e2e8f0;}.zl-btn-primary:hover{background:#2563eb;}.zl-app tbody tr:hover{background:transparent;}}
@media(hover:none) and (max-width:1024px){.zl-app input,.zl-app select,.zl-app textarea{font-size:16px;}}
@media(prefers-reduced-motion:reduce){.zl-app *{transition:none !important;animation:none !important;}}
.dm-btn-save{margin-top:4px;padding:10px 28px;font-size:14px;}
.dm-form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px;}
.dm-form-full{grid-column:1/-1;}
.dm-tag{display:inline-block;padding:2px 10px;border-radius:4px;font-size:12px;color:#fff;white-space:nowrap;}
.dm-tag-green{background:#10b981;}
.dm-tag-orange{background:#f59e0b;}
.dm-tag-red{background:#ef4444;}
.dm-tag-blue{background:#2563eb;}
.dm-tag-gray{background:#94a3b8;}
.dm-tag-purple{background:#8b5cf6;}
.dm-row-warn td{background:#fff7f7;}
.dm-chart-title{font-size:13px;color:#64748b;margin:6px 0 6px;}
.dm-svg{width:100%;height:auto;display:block;}
.dm-arch-desc{line-height:2.1;color:#334155;font-size:14px;}
.dm-arch-desc b{color:#1e40af;}
.dm-pie-wrap{display:flex;align-items:center;gap:40px;flex-wrap:wrap;justify-content:center;padding:10px 0;}
.dm-pie{width:230px;height:230px;border-radius:50%;position:relative;flex-shrink:0;}
.dm-pie-in{position:absolute;inset:42px;background:#fff;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 0 1px #f1f5f9;}
.dm-pie-num{font-size:30px;font-weight:700;color:#1e293b;}
.dm-pie-lbl{font-size:13px;color:#64748b;margin-top:2px;}
.dm-legend{min-width:220px;}
.dm-legend-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed #e2e8f0;font-size:14px;}
.dm-legend-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0;}
.dm-legend-name{flex:1;color:#334155;}
.dm-legend-val{color:#64748b;font-size:13px;}
.dm-lv-row{display:flex;align-items:center;gap:12px;margin-bottom:14px;}
.dm-lv-label{width:110px;font-size:13px;color:#475569;flex-shrink:0;}
.dm-lv-track{flex:1;height:18px;background:#f1f5f9;border-radius:9px;overflow:hidden;}
.dm-lv-bar{height:100%;border-radius:9px;min-width:2px;transition:width .3s;}
.dm-lv-pct{width:46px;text-align:right;font-size:13px;color:#64748b;flex-shrink:0;}
.dm-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:99;}
.dm-modal-box{width:680px;max-width:92vw;background:#fff;border-radius:12px;padding:24px;max-height:90vh;overflow:auto;}
.dm-modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;}
.dm-modal-header h3{font-size:16px;color:#1e293b;}
.dm-close-modal{cursor:pointer;font-size:22px;color:#666;line-height:1;}
@media(max-width:768px){.dm-body{flex-direction:column;}.dm-sidebar{width:100%;display:flex;flex-wrap:wrap;padding:8px 0;}.dm-menu-item{padding:9px 14px;font-size:13px;}.dm-content{padding:12px;}.dm-form-row{grid-template-columns:1fr;}.dm-app input,.dm-app select{font-size:16px;}.dm-pie-wrap{gap:20px;}}
@media(min-width:1920px){.dm-content{max-width:1400px;margin:0 auto;width:100%;}}
@media(hover:none){.dm-menu-item:hover{background:transparent;}.dm-menu-item.active:hover{background:#2563eb;}.dm-btn-sm:hover{opacity:1;}}

/* ============================================================
   用户注册/登录体系 · 注册表单 + 门户首页
   ============================================================ */
.auth-login-card{max-height:94vh;overflow-y:auto;}
.auth-reg-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px;margin-bottom:4px;}
.auth-reg-grid label{display:block;margin-bottom:5px;font-size:13px;color:#1f2937;font-weight:600;}
.auth-reg-grid input,.auth-reg-grid select{width:100%;padding:10px 12px;border:1px solid #c0c6d0;border-radius:8px;font-size:14px;background:#ffffff;color:#1a1d23;outline:none;font-family:inherit;transition:border-color 0.2s,box-shadow 0.2s;}
.auth-reg-grid input:focus,.auth-reg-grid select:focus{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,0.1);}
.auth-reg-grid input::placeholder{color:#9ca3af;}
.auth-reg-full{grid-column:1/-1;}
/* 密码生成行：输入框 + 复制按钮 */
.auth-pwd-row{display:flex;gap:8px;align-items:center;}
.auth-pwd-row input{flex:1;min-width:0;font-family:Consolas,monospace;letter-spacing:1px;}
.auth-pwd-copy{flex-shrink:0;padding:0 16px;border:1px solid #2563eb;border-radius:8px;background:#2563eb;color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:0.2s;height:40px;}
.auth-pwd-copy:hover{background:#1d4ed8;border-color:#1d4ed8;}
.auth-pwd-copy:active{transform:scale(0.96);}
.auth-pwd-gen{font-size:11px;color:#9ca3af;font-weight:400;}
/* 生日选择器：年月日三列横排 */
.auth-birthday-row{display:flex;gap:6px;}
.auth-birthday-row select{flex:1;min-width:0;}
.auth-register-btn{width:100%;padding:13px;border:1.5px solid #4fc3f7;border-radius:10px;background:transparent;color:#4fc3f7;font-size:16px;font-weight:600;cursor:pointer;margin-top:6px;}
.auth-register-btn:hover{background:rgba(79,195,247,.12);}
.auth-register-btn:disabled{opacity:.5;cursor:not-allowed;}
.auth-switch{text-align:center;margin-top:12px;color:#90a4ae;font-size:13px;cursor:pointer;}
.auth-switch b{color:#4fc3f7;font-weight:600;}
.auth-switch:hover{text-decoration:underline;}
.auth-id-hint{margin-top:6px;font-size:13px;min-height:16px;line-height:1.3;}
.auth-id-hint.hint-ok{color:#6ee7b7;}
.auth-id-hint.hint-bad{color:#fca5a5;}
.auth-id-hint.hint-warn{color:#fcd34d;}

/* 门户首页 */
.portal-home{margin-top:5px;max-width:1080px;}
.portal-hero{background:linear-gradient(120deg,#1e3a5f,#2b6cb0);border-radius:14px;padding:22px 26px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;box-shadow:0 4px 18px rgba(30,58,95,.25);}
.portal-avatar{width:64px;height:64px;border-radius:50%;background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;font-size:34px;flex-shrink:0;}
.portal-hello{flex:1;min-width:200px;}
.portal-hello h2{color:#fff;font-size:22px;margin:0 0 6px;}
.portal-hello div{color:#cfe4f5;font-size:13px;}
.portal-logout-btn{padding:10px 22px;border:1.5px solid rgba(255,255,255,.7);background:transparent;color:#fff;border-radius:9px;font-size:14px;cursor:pointer;}
.portal-logout-btn:hover{background:rgba(255,255,255,.15);}
.portal-info-card{background:#fff;border-radius:14px;padding:20px 24px;margin-top:16px;box-shadow:0 2px 12px rgba(0,0,0,.07);}
.portal-info-title{font-size:16px;font-weight:600;color:#1e293b;border-left:4px solid #2b6cb0;padding-left:10px;margin-bottom:14px;}
.portal-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 28px;}
.portal-kv{display:flex;justify-content:space-between;gap:14px;padding:8px 0;border-bottom:1px solid #eef2f6;font-size:14px;}
.portal-kv span{color:#64748b;flex-shrink:0;}
.portal-kv b{color:#1e293b;font-weight:600;text-align:right;word-break:break-all;}
.portal-kv-full{grid-column:1/-1;}
@media(max-width:768px){
  .auth-login-overlay{padding:10px;align-items:flex-start;}
  .auth-login-card{padding:20px 16px;width:92%;max-width:340px;border-radius:12px;margin:8px auto;}
  .auth-login-icon{font-size:32px;margin-bottom:6px;}
  .auth-login-title{font-size:18px;margin-bottom:2px;}
  .auth-login-subtitle{font-size:12px;margin-bottom:14px;}
  .auth-form{gap:4px;}
  .auth-input{padding:10px 12px;font-size:16px;}
  .auth-login-btn{padding:11px;font-size:14px;}
  /* 注册表单：移动端保持两列布局，仅全宽字段占整行 */
  .auth-reg-grid{grid-template-columns:1fr 1fr;gap:8px 10px;}
  .auth-reg-grid input,.auth-reg-grid select{font-size:15px;padding:9px 10px;border-width:1.5px;}
  .auth-reg-grid label{font-size:12px;margin-bottom:3px;font-weight:700;color:#1f2937;}
  .auth-register-btn{min-height:44px;font-size:15px;}
  .portal-info-grid{grid-template-columns:1fr;}
  .portal-hero{padding:18px;}
}

/* ============================================================
   自动发包（内嵌版）—— 亮色卡片
   布局策略：.fb-app 为 flex column 容器，overflow:hidden 防止内容溢出；
   .fb-bar 为顶部导航栏（flex-wrap 适应窄屏折行）；
   .fb-body 为内容区（flex:1 + overflow:auto 实现内部滚动）。
   ============================================================ */
.fb-app{display:flex;flex-direction:column;margin:0;overflow:hidden;min-height:500px;height:calc(100dvh - 180px);}
.fb-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:#ffffff;border:1px solid #d1d5db;border-radius:12px;gap:10px;flex-wrap:wrap;flex-shrink:0;box-shadow:0 1px 2px rgba(0,0,0,.04);}
.fb-bar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0;flex:1 1 auto;}
.fb-bar-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:0 1 auto;min-width:0;}
.fb-logo{font-size:22px;}
.fb-title{font-size:16px;font-weight:700;color:#1f2937;}
.fb-status{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#059669;}
.fb-dot{width:8px;height:8px;border-radius:50%;background:#059669;box-shadow:0 0 6px #059669;}
.fb-tabs{display:inline-flex;gap:2px;flex-wrap:nowrap;background:#f5f7fa;border:1px solid #d1d5db;border-radius:999px;padding:3px;}
.fb-tab{padding:8px 18px;border-radius:999px;border:1px solid transparent;background:transparent;color:#6b7280;font-size:13px;cursor:pointer;transition:.15s;white-space:nowrap;}
.fb-tab:hover{color:#1f2937;border-color:#2563eb;}
.fb-tab.active{background:#2563eb;border-color:#2563eb;color:#fff;}
.fb-body{flex:1;overflow:auto;margin-top:12px;min-height:0;}

/* 商城 */
.fb-notice{background:linear-gradient(90deg,rgba(37,99,235,.08),rgba(37,99,235,.02));border:1px solid rgba(37,99,235,.2);color:#1e40af;padding:9px 14px;border-radius:10px;font-size:13px;margin-bottom:12px;}
.fb-cattabs{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px;}
.fb-cattab{padding:7px 14px;border-radius:20px;border:1px solid #d1d5db;background:#ffffff;color:#374151;font-size:13px;cursor:pointer;}
.fb-cattab:hover{border-color:#2563eb;color:#2563eb;}
.fb-cattab.active{background:#2563eb;border-color:#2563eb;color:#fff;}
.fb-querybtn{margin-left:auto;}
.fb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;}
.fb-card{background:#ffffff;border:1px solid #d1d5db;border-radius:12px;padding:14px;cursor:pointer;transition:.15s;display:flex;flex-direction:column;gap:8px;box-shadow:0 1px 2px rgba(0,0,0,.04);}
.fb-card:hover{border-color:#2563eb;transform:translateY(-2px);}
.fb-pimg{font-size:38px;text-align:center;padding:10px 0;background:#f5f7fa;border-radius:10px;}
.fb-pname{font-size:14px;color:#1f2937;font-weight:600;min-height:40px;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.fb-pprice{color:#ea580c;font-weight:700;font-size:17px;}
.fb-pxl{font-size:24px;}
.fb-pold{color:#9ca3af;text-decoration:line-through;font-size:12px;margin-left:8px;}
.fb-pfoot{display:flex;justify-content:space-between;align-items:center;font-size:12px;}
.fb-pstock{color:#6b7280;}
.fb-pstock.is-zero{color:#ef4444;}
.fb-psales{color:#9ca3af;}
.fb-empty{text-align:center;color:#9ca3af;padding:50px 0;font-size:42px;}
.fb-empty p{font-size:14px;margin-top:8px;}
.fb-empty-tip{color:#6b7280;padding:18px;text-align:center;font-size:13px;}

/* 通用控件 */
.fb-btn{padding:9px 16px;border-radius:9px;border:1px solid #d1d5db;background:#e5e7eb;color:#1f2937;font-size:13px;cursor:pointer;transition:.15s;}
.fb-btn:hover{filter:brightness(.95);}
.fb-btn-primary{background:#2563eb;border-color:#2563eb;color:#fff;}
.fb-btn-success{background:#10b981;border-color:#10b981;color:#fff;}
.fb-btn-danger{background:#ef4444;border-color:#ef4444;color:#fff;}
.fb-btn-ghost{background:transparent;}
.fb-btn-sm{padding:6px 12px;font-size:12px;}
.fb-btn-xs{padding:4px 9px;font-size:12px;border-radius:7px;}
.fb-block{display:block;width:100%;}
.fb-input,.fb-select,.fb-textarea{background:#ffffff;border:1px solid #d1d5db;border-radius:9px;padding:9px 12px;color:#1f2937;font-size:13px;outline:none;width:100%;}
.fb-input:focus,.fb-select:focus,.fb-textarea:focus{border-color:#2563eb;}
.fb-textarea{resize:vertical;font-family:inherit;}
.fb-label{display:block;font-size:13px;color:#374151;margin:12px 0 6px;}
.fb-disabled{opacity:.6;}
.fb-muted{color:#9ca3af;font-size:12px;}
.fb-tiny{font-size:11px;}
.fb-mt{margin-top:14px;}
.fb-pad8{padding:8px 12px;}
.fb-nowrap{white-space:nowrap;}
.fb-mono{font-family:Consolas,monospace;}
.fb-center{text-align:center;}
.fb-hide{display:none !important;}
.fb-check{display:flex;gap:8px;align-items:center;font-size:13px;color:#6b7280;margin-top:10px;}

/* 弹窗（fixed 模态，不受容器滚动影响） */
.fb-modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:400;padding:20px;animation:fbfade .18s;}
.fb-modal{background:#ffffff;border:1px solid #d1d5db;border-radius:14px;width:100%;max-width:460px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.15);}
.fb-modal-lg{max-width:680px;}
.fb-modal-pay{max-width:380px;}
.fb-mh{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-bottom:1px solid #e5e7eb;flex-shrink:0;}
.fb-mh h3{font-size:15px;color:#1f2937;}
.fb-mx{background:transparent;border:none;color:#6b7280;font-size:15px;cursor:pointer;}
.fb-mb{padding:16px 18px;overflow:auto;}
.fb-mf{padding:12px 18px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end;gap:10px;align-items:center;flex-shrink:0;}
.fb-total{font-size:14px;color:#6b7280;margin-right:auto;}
.fb-total b{color:#ea580c;font-size:19px;}
.fb-modal-mask.closing{opacity:0;transition:.18s;}
@keyframes fbfade{from{opacity:0;}to{opacity:1;}}

/* 商品详情 */
.fb-dhero{display:flex;gap:16px;}
.fb-dimg{font-size:60px;width:108px;height:108px;display:flex;align-items:center;justify-content:center;background:#f5f7fa;border-radius:12px;flex-shrink:0;}
.fb-dinfo{min-width:0;}
.fb-dinfo h2{font-size:18px;color:#1f2937;margin-bottom:10px;}
.fb-dmeta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px;}
.fb-badge{font-size:12px;padding:3px 9px;border-radius:6px;}
.fb-badge-blue{background:rgba(37,99,235,.1);color:#2563eb;}
.fb-ddesc{color:#374151;font-size:13px;line-height:1.7;margin:14px 0;padding:12px;background:#f5f7fa;border-radius:10px;}
.fb-qty{display:flex;align-items:center;gap:12px;}
.fb-qtybtn{width:40px;height:40px;border-radius:9px;border:1px solid #d1d5db;background:#e5e7eb;color:#1f2937;font-size:18px;cursor:pointer;}
.fb-qtyfix{color:#1f2937;font-size:14px;}
#fb-qtyv{font-size:16px;color:#1f2937;min-width:24px;text-align:center;}
.fb-payms{display:flex;gap:8px;flex-wrap:wrap;}
.fb-paym{padding:8px 12px;border-radius:9px;border:1px solid #d1d5db;background:#ffffff;color:#374151;font-size:13px;cursor:pointer;}
.fb-paym.active{border-color:#10b981;color:#059669;background:rgba(16,185,129,.1);}

/* 收银台（伪二维码） */
.fb-cash-logo{font-size:34px;}
.fb-cash-amount{font-size:16px;color:#6b7280;margin:8px 0;}
.fb-cash-amount b{font-size:36px;color:#1f2937;}
.fb-cash-tag{display:inline-block;padding:4px 14px;border-radius:20px;background:rgba(16,185,129,.1);color:#059669;font-size:13px;margin-bottom:14px;}
.fb-qrbox{display:flex;justify-content:center;margin:10px 0;}
.fb-qr{width:180px;height:180px;background:#fff;border-radius:12px;position:relative;padding:14px;}
.fb-qr-grid{position:absolute;inset:14px;background:repeating-conic-gradient(#111 0 25%,#fff 0 50%);background-size:13px 13px;border-radius:4px;}
.fb-qr-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:30px;}
.fb-cash-timer{color:#b45309;font-size:13px;margin:10px 0;}

/* 支付结果 */
.fb-res-icon{font-size:52px;margin-bottom:6px;}
.fb-res-msg{font-size:19px;color:#1f2937;margin-bottom:8px;}
.fb-orderno{color:#6b7280;font-size:13px;margin:10px 0;}
.fb-res-title{font-size:14px;color:#1f2937;margin:12px 0 8px;}
.fb-card-content{background:#f5f7fa;border:1px solid #d1d5db;border-radius:10px;padding:12px;color:#059669;font-family:Consolas,monospace;font-size:13px;white-space:pre-wrap;word-break:break-all;text-align:left;margin-bottom:10px;}
.fb-res-link{display:block;color:#2563eb;word-break:break-all;margin-bottom:10px;text-align:left;}
.fb-res-warn{background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.25);color:#b45309;padding:12px;border-radius:10px;font-size:13px;text-align:left;margin:10px 0;}
.fb-qrow{display:flex;gap:8px;}
.fb-qlist{margin-top:14px;}

/* 管理后台布局 */
.fb-admin{display:flex;gap:12px;min-height:520px;}
.fb-side{width:178px;flex-shrink:0;background:#ffffff;border:1px solid #d1d5db;border-radius:12px;padding:12px;display:flex;flex-direction:column;}
.fb-side-logo{font-size:14px;font-weight:700;color:#1f2937;padding:6px 8px 12px;border-bottom:1px solid #e5e7eb;margin-bottom:10px;}
.fb-sidenav{display:flex;flex-direction:column;gap:4px;flex:1;}
.fb-sitem{display:flex;align-items:center;gap:9px;padding:10px 11px;border-radius:9px;background:transparent;border:none;color:#374151;font-size:13px;cursor:pointer;text-align:left;}
.fb-sitem:hover{background:#f5f7fa;color:#1f2937;}
.fb-sitem.active{background:#2563eb;color:#fff;}
.fb-side-foot{font-size:11px;color:#9ca3af;text-align:center;padding-top:10px;border-top:1px solid #e5e7eb;margin-top:10px;}
.fb-side-foot .fb-admin-user{font-size:12px;color:#374151;font-weight:500;}
.fb-main{flex:1;min-width:0;display:flex;flex-direction:column;}
.fb-ptitle{font-size:16px;font-weight:700;color:#1f2937;margin-bottom:10px;}
.fb-admin-page{flex:1;overflow:auto;min-height:0;}

/* 管理员登录界面 */
.fb-admin-login-wrap{display:flex;align-items:center;justify-content:center;min-height:460px;padding:20px;}
.fb-admin-login-card{background:#ffffff;border:1px solid #d1d5db;border-radius:16px;padding:36px 32px;width:100%;max-width:380px;text-align:center;box-shadow:0 4px 24px rgba(0,0,0,.08);}
.fb-admin-login-icon{font-size:48px;margin-bottom:12px;}
.fb-admin-login-title{font-size:20px;font-weight:700;color:#1f2937;margin:0 0 6px;}
.fb-admin-login-sub{font-size:13px;color:#6b7280;margin:0 0 24px;}
.fb-admin-login-form{display:flex;flex-direction:column;gap:12px;text-align:left;}
.fb-admin-login-form .fb-input{width:100%;box-sizing:border-box;}
.fb-admin-login-error{color:#dc2626;font-size:12px;min-height:18px;margin-top:-4px;}
.fb-admin-login-hint{font-size:11px;color:#9ca3af;margin:18px 0 0;padding-top:14px;border-top:1px solid #e5e7eb;}

/* 统计卡 */
.fb-statgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:12px;margin-bottom:14px;}
.fb-stat{background:#ffffff;border:1px solid #d1d5db;border-radius:12px;padding:14px 16px;position:relative;box-shadow:0 1px 2px rgba(0,0,0,.04);}
.fb-stat-ico{position:absolute;right:12px;top:10px;font-size:26px;opacity:.35;}
.fb-stat-label{font-size:12px;color:#6b7280;}
.fb-stat-value{font-size:22px;font-weight:700;color:#1f2937;margin-top:4px;}
.fb-stat-sub{font-size:11px;color:#9ca3af;margin-top:3px;}
.fb-stat.green .fb-stat-value{color:#059669;}
.fb-stat.blue .fb-stat-value{color:#2563eb;}
.fb-stat.orange .fb-stat-value{color:#b45309;}

/* 面板与表格 */
.fb-panel{background:#ffffff;border:1px solid #d1d5db;border-radius:12px;margin-bottom:14px;box-shadow:0 1px 2px rgba(0,0,0,.04);}
.fb-ph{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #e5e7eb;gap:10px;flex-wrap:wrap;}
.fb-ph h3{font-size:14px;color:#1f2937;}
.fb-ph-acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.fb-pb{padding:14px 16px;}
.fb-select{width:auto;padding:7px 10px;}
.fb-filters{display:flex;gap:8px;flex-wrap:wrap;}
.fb-search{width:200px;}
.fb-table-wrap{overflow-x:auto;}
.fb-table{width:100%;border-collapse:collapse;font-size:13px;}
.fb-table th{text-align:left;padding:10px 12px;color:#374151;font-weight:500;background:#f5f7fa;white-space:nowrap;border-bottom:1px solid #d1d5db;}
.fb-table td{padding:9px 12px;border-bottom:1px solid #e5e7eb;color:#1f2937;}
.fb-table tr:hover td{background:#f9fafb;}
.fb-table-empty{text-align:center;color:#9ca3af;padding:30px;}
.fb-st{font-size:12px;padding:2px 8px;border-radius:6px;}
.fb-st-unused{background:rgba(16,185,129,.12);color:#059669;}
.fb-st-sold{background:rgba(245,158,11,.12);color:#b45309;}
.fb-st-locked{background:rgba(239,68,68,.12);color:#dc2626;}
.fb-zero{color:#ef4444;font-weight:700;}

/* 卡券管理 */
.fb-cards-layout{display:grid;grid-template-columns:278px 1fr;gap:14px;align-items:start;}
.fb-catcards{display:flex;flex-direction:column;gap:8px;margin-bottom:14px;}
.fb-catcard{background:#ffffff;border:1px solid #d1d5db;border-radius:10px;padding:11px 13px;cursor:pointer;}
.fb-catcard.active,.fb-catcard:hover{border-color:#2563eb;}
.fb-catcard b{color:#1f2937;font-size:13px;}
.fb-catcard-foot{font-size:12px;color:#6b7280;margin-top:5px;}
.fb-newcat{display:flex;flex-direction:column;gap:8px;}
.fb-catrow{display:grid;grid-template-columns:168px 1fr 190px;gap:12px;align-items:center;padding:8px 0;}
.fb-catname{color:#1f2937;font-size:13px;}
.fb-catbar{height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden;}
.fb-catbar i{display:block;height:100%;background:linear-gradient(90deg,#2563eb,#4fc3f7);border-radius:4px;}
.fb-catnums{font-size:12px;color:#6b7280;text-align:right;}

/* 商品/订单表单 */
.fb-form2{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;}
.fb-modes{display:flex;gap:8px;flex-wrap:wrap;}
.fb-modebtn{padding:8px 13px;border-radius:9px;border:1px solid #d1d5db;background:#ffffff;color:#374151;font-size:13px;cursor:pointer;}
.fb-modebtn.active{border-color:#2563eb;color:#fff;background:#2563eb;}
.fb-kvgrid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px;margin-bottom:8px;}
.fb-kv{display:flex;justify-content:space-between;gap:10px;font-size:13px;border-bottom:1px solid #e5e7eb;padding:7px 0;}
.fb-kv span{color:#6b7280;}
.fb-kv b{color:#1f2937;font-weight:500;text-align:right;}
.fb-orderops{display:flex;gap:10px;margin-top:10px;flex-wrap:wrap;}
.fb-manualbox{margin-top:12px;border-top:1px solid #d1d5db;padding-top:12px;display:flex;flex-direction:column;gap:8px;}
.fb-delivery{margin-top:8px;}

/* 二级页签 */
.fb-subtabs{display:flex;gap:6px;background:#f5f7fa;border:1px solid #d1d5db;padding:5px;border-radius:10px;width:fit-content;margin-bottom:14px;flex-wrap:wrap;}
.fb-subtab{padding:7px 15px;border-radius:8px;border:none;background:transparent;color:#6b7280;font-size:13px;cursor:pointer;}
.fb-subtab.active{background:#2563eb;color:#fff;}

/* 分销设置 */
.fb-settings-form{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:6px;}
.fb-switch-row{display:flex;justify-content:space-between;align-items:center;gap:14px;background:#f5f7fa;border:1px solid #d1d5db;border-radius:10px;padding:11px 14px;grid-column:1/-1;}
.fb-switch-row input{width:20px;height:20px;flex-shrink:0;}

/* 统计图表 */
.fb-daytabs{display:flex;gap:8px;margin-bottom:12px;}
.fb-daytab{padding:7px 16px;border-radius:9px;border:1px solid #d1d5db;background:#ffffff;color:#374151;font-size:13px;cursor:pointer;}
.fb-daytab.active{background:#2563eb;border-color:#2563eb;color:#fff;}
.fb-bars{display:flex;gap:6px;align-items:flex-end;overflow-x:auto;padding-bottom:6px;min-height:226px;}
.fb-barcol{display:flex;flex-direction:column;align-items:center;min-width:44px;flex:1;}
.fb-barval{font-size:10px;color:#6b7280;margin-bottom:4px;white-space:nowrap;}
.fb-barfill{width:60%;background:linear-gradient(180deg,#4fc3f7,#2563eb);border-radius:5px 5px 0 0;}
.fb-barcount{font-size:10px;color:#9ca3af;margin-top:3px;}
.fb-barlbl{font-size:10px;color:#6b7280;}
.fb-toprow{display:flex;align-items:center;gap:10px;padding:8px 0;}
.fb-toprank{width:24px;height:24px;border-radius:7px;background:#e5e7eb;color:#6b7280;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;}
.fb-toprank.r1{background:linear-gradient(135deg,#f59e0b,#fbbf24);color:#fff;}
.fb-toprank.r2{background:linear-gradient(135deg,#9ca3af,#d1d5db);color:#fff;}
.fb-toprank.r3{background:linear-gradient(135deg,#b45309,#d97706);color:#fff;}
.fb-topimg{font-size:20px;}
.fb-topname{width:190px;color:#1f2937;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fb-topbar{flex:1;height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden;}
.fb-topbar i{display:block;height:100%;background:linear-gradient(90deg,#2563eb,#4fc3f7);}

/* 分销中心 */
.fb-dist-disabled{padding:40px 0;}
.fb-bigicon{font-size:52px;margin-bottom:8px;}
.fb-dist-authcard{max-width:430px;margin:30px auto;background:#ffffff;border:1px solid #d1d5db;border-radius:16px;padding:24px;box-shadow:0 2px 8px rgba(0,0,0,.06);}
.fb-auth-tabs{display:flex;gap:6px;background:#f5f7fa;padding:5px;border-radius:10px;margin-bottom:18px;}
.fb-auth-tab{flex:1;padding:9px;border-radius:8px;border:none;background:transparent;color:#6b7280;font-size:13px;cursor:pointer;}
.fb-auth-tab.active{background:#2563eb;color:#fff;}
.fb-errline{background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.25);color:#dc2626;padding:9px 12px;border-radius:9px;font-size:13px;margin-bottom:14px;}
.fb-dist-banner{background:linear-gradient(135deg,#7c3aed,#2563eb);border-radius:14px;padding:16px 20px;display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px;}
.fb-dist-hi{color:#fff;font-size:17px;font-weight:700;margin-bottom:8px;}
.fb-dist-codes{color:rgba(255,255,255,.9);font-size:13px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.fb-dist-codes b{color:#fff;font-size:17px;letter-spacing:1px;}
.fb-dist-parent{margin-left:8px;font-size:12px;opacity:.8;}
.fb-banner-btn{background:rgba(255,255,255,.2);border-color:transparent;color:#fff;}
.fb-banner-btn:hover{background:rgba(255,255,255,.35);filter:none;}
.fb-team-item{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid #e5e7eb;}
.fb-team-avatar{width:38px;height:38px;border-radius:50%;background:rgba(37,99,235,.12);color:#2563eb;display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;}
.fb-team-avatar.lv2{background:rgba(124,58,237,.12);color:#7c3aed;}
.fb-team-comm{margin-left:auto;color:#6b7280;font-size:13px;}
.fb-apply-box{max-width:460px;}
.fb-apply-info{font-size:13px;color:#6b7280;margin-bottom:10px;}
.fb-apply-info b{color:#1f2937;font-size:16px;}

/* toast */
.fb-toast-wrap{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center;}
.fb-toast{background:#ffffff;color:#1f2937;padding:10px 18px;border-radius:10px;font-size:13px;box-shadow:0 8px 24px rgba(0,0,0,.12);opacity:0;transform:translateY(-8px);transition:.25s;border:1px solid #d1d5db;}
.fb-toast.show{opacity:1;transform:translateY(0);}
.fb-toast.is-ok{background:#d1fae5;border-color:#10b981;color:#065f46;}
.fb-toast.is-err{background:#fee2e2;border-color:#ef4444;color:#991b1b;}

/* ============================================================
   自动发包 · 响应式布局（统一断点，覆盖全尺寸）
   ============================================================ */

/* ---- A. 平板横屏 / 小桌面 (≤1100px)：卡券布局改单列 ---- */
@media (max-width:1100px){
    .fb-cards-layout{grid-template-columns:1fr;}
    .fb-settings-form{grid-template-columns:1fr 1fr;}
    .fb-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));}
}

/* ---- B. 平板竖屏 (≤760px)：管理侧栏隐藏，表单改单列 ---- */
@media (max-width:760px){
    .fb-side{display:none;}
    .fb-form2,.fb-kvgrid{grid-template-columns:1fr;}
    .fb-topname{width:110px;}
    .fb-admin{min-height:420px;}
    .fb-statgrid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));}
    .fb-dhero{flex-direction:column;align-items:center;text-align:center;}
    .fb-dimg{width:80px;height:80px;font-size:44px;}
    .fb-settings-form{grid-template-columns:1fr;}
}

/* ---- C. 手机 / 小屏 (≤599px)：紧凑布局 ---- */
@media (max-width:599px){
    .fb-app{height:auto;min-height:450px;max-height:calc(100dvh - 140px);}
    .fb-body{min-height:350px;}
    .fb-tab{padding:6px 12px;font-size:12px;}
    .fb-bar{padding:8px 10px;gap:6px;}
    .fb-status{display:none;}
    .fb-modal-mask{padding:10px;}
    .fb-modal{max-width:100%;border-radius:10px;}
    .fb-modal-lg{max-width:100%;}
    .fb-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;}
    .fb-card{padding:10px;}
    .fb-pimg{font-size:28px;padding:6px 0;}
    .fb-pname{font-size:13px;min-height:36px;}
    .fb-pprice{font-size:15px;}
    .fb-statgrid{grid-template-columns:1fr 1fr;}
    .fb-stat{padding:10px 12px;}
    .fb-stat-value{font-size:18px;}
    .fb-table{font-size:12px;}
    .fb-table th,.fb-table td{padding:7px 8px;}
    .fb-subtabs{gap:4px;padding:3px;}
    .fb-subtab{padding:6px 10px;font-size:12px;}
    .fb-dist-banner{flex-direction:column;align-items:flex-start;}
}

/* ---- D. 超小屏 (≤380px)：极窄设备 ---- */
@media (max-width:380px){
    .fb-title{font-size:14px;}
    .fb-logo{font-size:18px;}
    .fb-tabs{gap:1px;padding:2px;}
    .fb-tab{padding:5px 8px;font-size:11px;}
    .fb-grid{grid-template-columns:1fr 1fr;gap:6px;}
    .fb-statgrid{grid-template-columns:1fr;}
}

/* ---- E. 横屏优化：充分利用横向空间 ---- */
@media (orientation:landscape) and (max-height:600px){
    .fb-app{height:calc(100dvh - 120px);min-height:380px;}
    .fb-body{min-height:300px;}
    .fb-statgrid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));}
    .fb-bars{min-height:160px;}
}

/* ===================== 露营平台（内嵌版，ly- 前缀） ===================== */
.ly-app {
    background: #f6f8f7;
    color: #333;
    min-height: 100%;
    font-family: "Microsoft YaHei", sans-serif;
    padding-bottom: 1px;
}
.ly-container {
    width: 92%;
    max-width: 1300px;
    margin: 0 auto;
}
.ly-app .ly-header {
    background: linear-gradient(135deg, #235c43, #3a7d5c);
    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
    border-radius: 14px;
    margin: 0 auto;
    width: 96%;
    max-width: 1400px;
}
.ly-header-inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
    /* min-height 替代固定 height：窄屏/平板横屏导航折行时头部自适应增高，胶囊不会从顶部溢出 */
    min-height: 60px;
    padding: 10px 0;
    column-gap: 14px;
    row-gap: 8px;
    flex-wrap: wrap;
}
.ly-app .logo {
    display: flex;
    align-items: center;
    gap: 8px;
    color: #1a1d23;
    font-size: 21px;
    font-weight: bold;
    white-space: nowrap;
}
.ly-logo-ico { font-size: 24px; }
.ly-nav {
    display: flex;
    flex-wrap: wrap;
    row-gap: 6px;
}
.ly-nav a {
    color: #ffffff;
    text-decoration: none;
    margin: 0 12px;
    font-size: 15px;
    padding: 6px 2px;
    border-bottom: 2px solid transparent;
    transition: border-color 0.2s, opacity 0.2s;
}
.ly-nav a:hover { opacity: 0.85; }
.ly-nav a.on { border-bottom-color: #ffd043; font-weight: bold; }
.ly-user-chip {
    color: #eafff3;
    font-size: 13px;
    background: rgba(255, 255, 255, 0.14);
    border-radius: 999px;
    padding: 5px 12px;
    white-space: nowrap;
}
.ly-user-chip a { color: #ffd043; margin-left: 6px; text-decoration: none; }
.ly-notice {
    background: #e7f3ee;
    color: #235c43;
    font-size: 13px;
    padding: 7px 4%;
    margin-top: 8px;
    border-radius: 8px;
    width: 92%;
    max-width: 1352px;
    margin-left: auto;
    margin-right: auto;
}
/* Banner 轮播 */
.ly-app .banner-wrap {
    position: relative;
    height: 380px;
    border-radius: 16px;
    overflow: hidden;
    margin: 16px auto 0;
    width: 96%;
    max-width: 1400px;
}
.ly-app .banner-item {
    position: absolute;
    inset: 0;
    background-size: cover;
    background-position: center;
    display: flex;
    align-items: center;
    opacity: 0;
    transition: opacity 0.8s ease;
    pointer-events: none;
}
.ly-app .banner-item.on { opacity: 1; pointer-events: auto; }
.ly-app .banner-mask {
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.38);
    display: flex;
    align-items: center;
}
.ly-app .banner-text { color: #1a1d23; }
.ly-app .banner-text h1 { font-size: 42px; margin-bottom: 14px; }
.ly-app .banner-text p { font-size: 18px; opacity: 0.92; }
.banner-dots {
    position: absolute;
    bottom: 14px;
    left: 0;
    right: 0;
    display: flex;
    justify-content: center;
    gap: 8px;
    z-index: 5;
}
.bdot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.45);
    cursor: pointer;
    transition: all 0.25s;
}
.bdot.on { background: #ffd043; width: 26px; border-radius: 999px; }
/* 搜索卡片：不再负边距上浮，避免压住首页 banner 和营地列表页头/公告条 */
.ly-app .search-card {
    background: #fff;
    padding: 22px;
    border-radius: 14px;
    box-shadow: 0 4px 18px rgba(0, 0, 0, 0.1);
    margin-top: 16px;
    position: relative;
    z-index: 10;
}
.ly-search-row {
    display: grid;
    grid-template-columns: 2fr 1.2fr 1.2fr auto;
    gap: 12px;
}
.ly-app .ly-input {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid #d8e3dd;
    border-radius: 10px;
    font-size: 14px;
    color: #333;
    background: #fff;
    font-family: inherit;
    outline: none;
    transition: border-color 0.2s, box-shadow 0.2s;
}
.ly-app .ly-input:focus {
    border-color: #3a7d5c;
    box-shadow: 0 0 0 3px rgba(58, 125, 92, 0.14);
}
.ly-app textarea.ly-input { resize: vertical; }
.ly-sort { min-width: 120px; }
/* 标题与统计 */
.ly-app .section-title {
    font-size: 22px;
    font-weight: bold;
    margin: 36px 0 18px;
    display: flex;
    align-items: center;
    gap: 10px;
    color: #235c43;
}
.ly-count { font-size: 13px; color: #8aa396; font-weight: normal; }
.ly-app .card-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
    gap: 22px;
    margin-bottom: 40px;
}
.ly-app .camp-card {
    background: #fff;
    border-radius: 16px;
    overflow: hidden;
    box-shadow: 0 2px 14px rgba(0, 0, 0, 0.07);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    display: flex;
    flex-direction: column;
}
.ly-app .camp-card:hover {
    transform: translateY(-6px);
    box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12);
}
.ly-app .card-img {
    width: 100%;
    height: 185px;
    object-fit: cover;
    display: block;
}
.ly-app .card-body { padding: 16px 18px 18px; flex: 1; display: flex; flex-direction: column; }
.ly-app .card-title { font-size: 17px; font-weight: bold; margin-bottom: 5px; }
.ly-app .merchant-name { font-size: 13px; color: #777; margin-bottom: 8px; }
.ly-app .tag-group { display: flex; flex-wrap: wrap; gap: 7px; margin: 8px 0 10px; }
.ly-app .tag {
    font-size: 12px;
    padding: 3px 10px;
    background: #e7f3ee;
    color: #235c43;
    border-radius: 99px;
}
.ly-tag-off {
    font-size: 11px;
    padding: 2px 8px;
    background: #fdeaea;
    color: #d64545;
    border-radius: 99px;
    vertical-align: middle;
    font-weight: normal;
}
.ly-app .card-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-top: auto;
    padding-top: 6px;
    font-size: 14px;
    color: #555;
}
.ly-app .price {
    color: #e04444;
    font-size: 20px;
    font-weight: bold;
}
.ly-app .price i { font-size: 12px; font-weight: normal; font-style: normal; color: #999; margin-left: 2px; }
/* 按钮 */
.ly-app .ly-btn {
    border: none;
    border-radius: 10px;
    padding: 10px 20px;
    font-size: 14px;
    font-family: inherit;
    cursor: pointer;
    transition: filter 0.2s, transform 0.15s, box-shadow 0.2s;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    text-decoration: none;
}
.ly-app .ly-btn:hover { filter: brightness(1.08); }
.ly-app .ly-btn:active { transform: scale(0.98); }
.ly-app .ly-btn:disabled { opacity: 0.45; cursor: not-allowed; }
.ly-btn-primary { background: linear-gradient(135deg, #235c43, #3a7d5c); color: #1a1d23; }
.ly-btn-success { background: linear-gradient(135deg, #2f8f5b, #47b073); color: #1a1d23; }
.ly-btn-plain {
    background: #fff;
    color: #3a7d5c;
    border: 1px solid #bcd6c8;
}
.ly-btn-danger { background: #fdeaea; color: #d64545; }
.ly-btn-block { width: 100%; margin-top: 12px; }
.ly-btn-sm { padding: 6px 14px; font-size: 13px; border-radius: 8px; }
/* 平台保障 */
.ly-app .intro-block {
    background: #fff;
    border-radius: 16px;
    padding: 32px;
    margin: 10px 0 30px;
}
.ly-app .intro-row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 30px;
}
.ly-app .intro-item { text-align: center; }
.ly-guar-ico { font-size: 40px; margin-bottom: 10px; }
.ly-app .intro-item h3 { font-size: 17px; margin-bottom: 8px; color: #235c43; }
.ly-app .intro-item p { font-size: 14px; color: #7d8a83; }
/* 页脚 */
.ly-app .ly-footer {
    background: #1f2937;
    color: #b8b8b8;
    padding: 34px 0;
    margin-top: 40px;
    font-size: 13px;
    text-align: center;
}
/* 空态 / 返回 */
.ly-empty {
    text-align: center;
    color: #8aa396;
    padding: 60px 0;
    font-size: 16px;
    line-height: 2;
    background: #fff;
    border-radius: 16px;
    margin-bottom: 30px;
}
.ly-empty a { color: #3a7d5c; font-weight: bold; }
.ly-empty span { font-size: 13px; color: #a9bbb1; }
.ly-back {
    display: inline-block;
    margin: 24px 0 14px;
    color: #3a7d5c;
    text-decoration: none;
    font-size: 14px;
    font-weight: bold;
}
/* 营地详情 */
.ly-detail {
    display: grid;
    grid-template-columns: 1.15fr 1fr;
    gap: 24px;
    align-items: start;
    margin-bottom: 20px;
}
.ly-detail-img {
    border-radius: 16px;
    overflow: hidden;
    position: relative;
    background: #fff;
    box-shadow: 0 2px 14px rgba(0, 0, 0, 0.07);
}
.ly-detail-img img { width: 100%; height: 420px; object-fit: cover; display: block; }
.ly-detail-tags { position: absolute; left: 14px; bottom: 14px; display: flex; gap: 8px; }
.ly-detail-tags .tag { background: rgba(255, 255, 255, 0.92); }
.ly-detail-info {
    background: #fff;
    border-radius: 16px;
    padding: 26px;
    box-shadow: 0 2px 14px rgba(0, 0, 0, 0.07);
}
.ly-detail-info h1 { font-size: 24px; color: #23452f; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ly-score {
    font-size: 14px;
    color: #e08a00;
    background: #fff7e6;
    border-radius: 99px;
    padding: 3px 10px;
    font-weight: bold;
}
.ly-desc { font-size: 14px; color: #5c6b62; line-height: 1.9; margin: 14px 0; }
.ly-fac { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.ly-fac-item {
    font-size: 12px;
    color: #2f8f5b;
    background: #eef8f2;
    border-radius: 8px;
    padding: 4px 10px;
}
.ly-book-card {
    border: 1px solid #e2ede7;
    border-radius: 14px;
    padding: 18px;
    background: #fbfdfc;
}
.ly-price-row { display: flex; align-items: baseline; gap: 6px; margin-bottom: 14px; }
.ly-price-unit { font-size: 13px; color: #999; }
.ly-form-row {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 12px;
}
.ly-form-row label {
    width: 72px;
    font-size: 14px;
    color: #43554b;
    flex-shrink: 0;
    text-align: right;
}
.ly-stepper {
    display: flex;
    align-items: center;
    gap: 0;
}
.ly-stepper button {
    width: 38px;
    height: 38px;
    border: 1px solid #d8e3dd;
    background: #fff;
    font-size: 18px;
    cursor: pointer;
    color: #3a7d5c;
    font-family: inherit;
}
.ly-stepper button:first-child { border-radius: 10px 0 0 10px; }
.ly-stepper button:last-child { border-radius: 0 10px 10px 0; }
.ly-stepper button:hover { background: #eef8f2; }
.ly-stepper .ly-input {
    width: 56px;
    text-align: center;
    border-radius: 0;
    border-left: none;
    border-right: none;
    padding: 9px 4px;
}
.ly-total-row {
    display: flex;
    justify-content: flex-end;
    align-items: baseline;
    gap: 8px;
    font-size: 14px;
    color: #666;
    margin: 16px 0 4px;
}
.ly-total-row b { font-size: 26px; color: #e04444; }
/* 弹窗 */
.ly-mask {
    position: fixed;
    inset: 0;
    background: rgba(15, 25, 20, 0.55);
    z-index: 400;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    animation: lyFadeIn 0.2s ease;
}
@keyframes lyFadeIn { from { opacity: 0; } to { opacity: 1; } }
.ly-modal {
    background: #fff;
    border-radius: 18px;
    padding: 26px;
    width: 100%;
    max-width: 440px;
    max-height: 88vh;
    overflow-y: auto;
    box-shadow: 0 18px 50px rgba(0, 0, 0, 0.25);
    animation: lyPop 0.22s ease;
}
@keyframes lyPop { from { transform: scale(0.94); opacity: 0; } to { transform: scale(1); opacity: 1; } }
.ly-modal.ly-wide { max-width: 560px; }
.ly-modal-title { font-size: 19px; font-weight: bold; color: #23452f; margin-bottom: 16px; }
/* 收银台 */
.ly-cashier { text-align: center; }
.ly-cash-no { font-size: 12px; color: #9aa89f; margin-bottom: 8px; word-break: break-all; }
.ly-cash-amount { font-size: 40px; font-weight: bold; color: #e04444; margin-bottom: 18px; }
.ly-pay-methods { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 18px; }
.ly-pay-item {
    border: 1.5px solid #e2ede7;
    border-radius: 12px;
    padding: 12px 6px;
    font-size: 13px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    transition: all 0.2s;
}
.ly-pay-item input { display: none; }
.ly-pay-item.on { border-color: #3a7d5c; background: #eef8f2; color: #235c43; font-weight: bold; }
.ly-qrcode { margin-bottom: 14px; }
.ly-qr-grid {
    width: 168px;
    height: 168px;
    margin: 0 auto 10px;
    border: 1px solid #e2ede7;
    border-radius: 12px;
    padding: 10px;
    display: grid;
    grid-template-columns: repeat(10, 1fr);
    gap: 1px;
}
.ly-qr-grid i { background: #fff; border-radius: 1px; }
.ly-qr-grid i.b { background: #23452f; }
.ly-qrcode p { font-size: 13px; color: #7d8a83; }
.ly-cash-count { font-size: 13px; color: #999; margin-bottom: 6px; }
.ly-cash-count b { color: #e08a00; }
.ly-pay-ok .ly-ok-ico { font-size: 52px; margin-bottom: 6px; }
.ly-ok-tip { font-size: 13px; color: #7d8a83; line-height: 1.8; margin: 10px 0 14px; }
/* 租赁弹窗 */
.ly-rent-goods {
    display: flex;
    gap: 14px;
    background: #fbfdfc;
    border: 1px solid #e2ede7;
    border-radius: 12px;
    padding: 12px;
    margin-bottom: 16px;
    align-items: center;
}
.ly-rent-goods img { width: 96px; height: 72px; object-fit: cover; border-radius: 8px; flex-shrink: 0; }
.ly-rent-goods p { font-size: 12px; color: #8aa396; margin: 4px 0; }
.ly-rent-goods b { font-size: 14px; color: #23452f; }
.ly-code-row { display: flex; gap: 10px; flex: 1; }
.ly-code-row .ly-input { flex: 1; }
/* 登录卡片 */
.ly-login-card {
    background: #fff;
    border-radius: 16px;
    padding: 36px 32px;
    max-width: 460px;
    margin: 0 auto 40px;
    box-shadow: 0 2px 14px rgba(0, 0, 0, 0.07);
    text-align: center;
}
.ly-login-ico { font-size: 44px; margin-bottom: 8px; }
.ly-login-card > p { font-size: 14px; color: #5c6b62; margin-bottom: 18px; }
.ly-login-card .ly-form-row { text-align: left; }
.ly-login-tip { font-size: 12px; color: #a9bbb1; margin-top: 14px; line-height: 1.8; }
/* 页签 */
.ly-tabs {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    margin-bottom: 18px;
}
.ly-tabs a {
    padding: 8px 18px;
    border-radius: 999px;
    font-size: 14px;
    color: #43554b;
    background: #fff;
    border: 1px solid #e2ede7;
    text-decoration: none;
    transition: all 0.2s;
    white-space: nowrap;
}
.ly-tabs a:hover { border-color: #3a7d5c; color: #235c43; }
.ly-tabs a.on {
    background: linear-gradient(135deg, #235c43, #3a7d5c);
    color: #1a1d23;
    border-color: transparent;
    font-weight: bold;
}
/* 订单卡片 */
.ly-order-list { display: flex; flex-direction: column; gap: 14px; margin-bottom: 40px; }
.ly-order-card {
    background: #fff;
    border-radius: 14px;
    padding: 14px;
    display: flex;
    gap: 14px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
}
.ly-order-card > img { width: 120px; height: 88px; object-fit: cover; border-radius: 10px; flex-shrink: 0; }
.ly-order-main { flex: 1; min-width: 0; }
.ly-order-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
    margin-bottom: 6px;
    font-size: 14px;
}
.ly-order-top b { color: #23452f; }
.ly-order-info { font-size: 13px; color: #5c6b62; margin-bottom: 4px; }
.ly-order-sub { font-size: 12px; color: #a9bbb1; margin-bottom: 8px; }
.ly-order-bottom {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
}
.ly-order-acts { display: flex; gap: 8px; }
.ly-st {
    font-size: 12px;
    padding: 3px 10px;
    border-radius: 99px;
    white-space: nowrap;
    flex-shrink: 0;
}
.ly-st-pending { background: #fff7e6; color: #e08a00; }
.ly-st-paid { background: #e7f3ee; color: #235c43; }
.ly-st-confirmed { background: #e6f4ff; color: #1677ff; }
.ly-st-rejected, .ly-st-refunded { background: #fdeaea; color: #d64545; }
.ly-st-cancelled { background: #f0f1f3; color: #8c93a3; }
/* 商家中心 / 管理后台 */
.ly-mc-head {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 14px;
    flex-wrap: wrap;
}
.ly-mc-head .section-title { margin-bottom: 4px; }
.ly-stat-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
    margin-bottom: 24px;
}
.ly-stat-row.ly-stat-6 { grid-template-columns: repeat(6, 1fr); }
.ly-stat {
    background: #fff;
    border-radius: 14px;
    padding: 18px 12px;
    text-align: center;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
}
.ly-stat b { font-size: 26px; color: #235c43; display: block; }
.ly-stat span { font-size: 12px; color: #8aa396; }
.ly-stat .ly-warn { color: #e04444; font-style: normal; }
.ly-mc-toolbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #fff;
    border-radius: 12px;
    padding: 10px 16px;
    margin-bottom: 14px;
    font-size: 14px;
    color: #5c6b62;
}
.ly-mc-item {
    background: #fff;
    border-radius: 14px;
    padding: 12px;
    display: flex;
    gap: 14px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
    margin-bottom: 12px;
}
.ly-mc-item > img { width: 110px; height: 80px; object-fit: cover; border-radius: 10px; flex-shrink: 0; }
.ly-mc-main { flex: 1; min-width: 0; }
.ly-mc-main b { font-size: 15px; color: #23452f; }
.ly-mc-main p { font-size: 13px; color: #7d8a83; margin: 6px 0; }
.ly-mc-acts { display: flex; gap: 8px; flex-wrap: wrap; }
/* 图表 */
.ly-chart-card {
    background: #fff;
    border-radius: 16px;
    padding: 22px;
    margin-bottom: 30px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
}
.ly-chart-card h3 { font-size: 15px; color: #23452f; margin-bottom: 18px; }
.ly-bars {
    display: flex;
    align-items: flex-end;
    justify-content: space-around;
    gap: 10px;
    height: 170px;
}
.ly-bar-col { display: flex; flex-direction: column; align-items: center; gap: 8px; flex: 1; height: 100%; justify-content: flex-end; }
.ly-bar {
    width: 70%;
    max-width: 52px;
    background: linear-gradient(180deg, #47b073, #235c43);
    border-radius: 8px 8px 3px 3px;
    position: relative;
    min-height: 4px;
    transition: height 0.4s ease;
}
.ly-bar i {
    position: absolute;
    top: -20px;
    left: 50%;
    transform: translateX(-50%);
    font-size: 11px;
    font-style: normal;
    color: #2f8f5b;
    white-space: nowrap;
}
.ly-bar-col span { font-size: 11px; color: #8aa396; }
/* 表格 */
.ly-table-wrap {
    background: #fff;
    border-radius: 14px;
    padding: 8px;
    overflow-x: auto;
    margin-bottom: 30px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
}
.ly-table { width: 100%; border-collapse: collapse; min-width: 640px; }
.ly-table th {
    text-align: left;
    font-size: 13px;
    color: #8aa396;
    font-weight: normal;
    padding: 12px 14px;
    border-bottom: 1px solid #eef3f0;
    white-space: nowrap;
}
.ly-table td {
    padding: 12px 14px;
    font-size: 14px;
    color: #43554b;
    border-bottom: 1px solid #f4f8f6;
    vertical-align: middle;
}
.ly-table tr:last-child td { border-bottom: none; }
.ly-table tr:hover td { background: #f7fbf9; }
.ly-tb-img { width: 72px; height: 50px; object-fit: cover; border-radius: 8px; display: block; }
/* 设置卡片 */
.ly-settings-card {
    background: #fff;
    border-radius: 16px;
    padding: 26px;
    max-width: 560px;
    margin-bottom: 30px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
}
/* Toast */
.ly-toast {
    position: fixed;
    top: 76px;
    left: 50%;
    transform: translate(-50%, -12px);
    background: rgba(28, 44, 36, 0.94);
    color: #1a1d23;
    font-size: 14px;
    padding: 11px 22px;
    border-radius: 999px;
    z-index: 500;
    opacity: 0;
    transition: all 0.3s ease;
    pointer-events: none;
    max-width: 82vw;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
}
.ly-toast.show { opacity: 1; transform: translate(-50%, 0); }
.ly-toast-err { background: rgba(168, 49, 49, 0.95); }
/* 响应式 */
@media (max-width: 1100px) {
    .ly-stat-row.ly-stat-6 { grid-template-columns: repeat(3, 1fr); }
    .ly-app .banner-text h1 { font-size: 32px; }
}
@media (max-width: 760px) {
    .ly-header-inner { height: auto; padding: 10px 0; }
    .ly-nav { margin-top: 6px; }
    .ly-nav a { margin: 0 8px 4px; font-size: 13px; }
    .ly-search-row { grid-template-columns: 1fr; }
    .ly-app .banner-wrap { height: 220px; }
    .ly-app .banner-text h1 { font-size: 24px; }
    .ly-app .banner-text p { font-size: 14px; }
    .ly-detail { grid-template-columns: 1fr; }
    .ly-detail-img img { height: 240px; }
    .ly-app .intro-row { grid-template-columns: 1fr; gap: 22px; }
    .ly-stat-row { grid-template-columns: repeat(2, 1fr); }
    .ly-stat-row.ly-stat-6 { grid-template-columns: repeat(2, 1fr); }
    .ly-form-row label { width: 64px; }
    .ly-order-card { flex-direction: column; }
    .ly-order-card > img { width: 100%; height: 150px; }
    .ly-pay-methods { grid-template-columns: 1fr; }
}


/* ===================== 家政平台（jz- 前缀） ===================== */
.jz-app { font-family: -apple-system, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; font-size: 14px; line-height: 1.65; color: #374151; background: #f9fafb; min-height: 100%; }
.jz-app, .jz-app * { box-sizing: border-box; }
.jz-container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
.jz-max-4xl { max-width: 900px; margin: 0 auto; padding: 0 20px; }
.jz-wide { width: 100%; }
.jz-link { color: #2563eb; cursor: pointer; text-decoration: none; }
.jz-bg-white { background: #fff; }

/* 顶栏 */
.jz-header { position: sticky; top: 0; z-index: 20; background: #fff; box-shadow: 0 1px 4px rgba(0,0,0,.06); }
.jz-header-inner { display: flex; align-items: center; justify-content: space-between; min-height: 60px; flex-wrap: wrap; gap: 6px; }
.jz-logo { display: flex; align-items: center; gap: 8px; font-size: 19px; font-weight: 700; color: #1e293b; cursor: pointer; }
.jz-logo-ico { color: #2563eb; font-size: 22px; }
.jz-nav { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }
.jz-nav a { cursor: pointer; color: #4b5563; text-decoration: none; padding: 6px 2px; font-weight: 500; }
.jz-nav a:hover, .jz-nav a.on { color: #2563eb; }
.jz-notice { background: #fffbeb; border-bottom: 1px solid #fde68a; color: #92400e; padding: 7px 0; font-size: 13px; }

/* 按钮 */
.jz-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: none; border-radius: 8px; padding: 9px 18px; min-height: 40px; font-size: 14px; font-family: inherit; cursor: pointer; transition: background .15s, color .15s, transform .1s; text-decoration: none; }
.jz-btn:active { transform: scale(.97); }
.jz-btn-primary { background: #2563eb; color: #1a1d23; }
.jz-btn-primary:hover { background: #1d4ed8; }
.jz-btn-secondary { background: #f97316; color: #1a1d23; }
.jz-btn-secondary:hover { background: #ea580c; }
.jz-btn-plain { background: #eff6ff; color: #2563eb; }
.jz-btn-plain:hover { background: #dbeafe; }
.jz-btn-ghost { border: 1px solid rgba(255,255,255,.75); color: #1a1d23; background: transparent; }
.jz-btn-ghost:hover { background: rgba(255,255,255,.12); }
.jz-btn-danger { background: #fee2e2; color: #dc2626; }
.jz-btn-danger:hover { background: #fecaca; }
.jz-btn-white { background: #fff; color: #2563eb; }
.jz-btn-white:hover { background: #e0e7ff; }
.jz-btn-sm { padding: 5px 12px; min-height: 30px; font-size: 12.5px; border-radius: 6px; }
.jz-btn-block { width: 100%; }

/* Hero */
.jz-hero { background: linear-gradient(135deg, #1e40af, #2563eb 55%, #3b82f6); color: #1a1d23; padding: 58px 0 54px; }
.jz-hero-inner { max-width: 760px; }
.jz-hero h1 { font-size: clamp(26px, 4.2vw, 44px); font-weight: 800; line-height: 1.25; margin: 0 0 18px; text-shadow: 0 2px 4px rgba(0,0,0,.15); }
.jz-hero p { font-size: clamp(14px, 1.5vw, 17px); opacity: .95; margin: 0; }
.jz-hero-chip { display: inline-flex; background: rgba(255,255,255,.16); border: 1px solid rgba(255,255,255,.35); padding: 4px 14px; border-radius: 999px; font-size: 13px; margin-bottom: 16px; }
.jz-hero-btns { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 26px; }

/* 区块 */
.jz-section { padding: 50px 0; }
.jz-sec-head { text-align: center; margin-bottom: 32px; }
.jz-sec-head h2 { font-size: clamp(21px, 3vw, 29px); color: #1e293b; margin: 0; font-weight: 700; }
.jz-sub { color: #6b7280; margin: 8px auto 0; max-width: 620px; font-size: 14px; }
.jz-grid-3, .jz-features, .jz-join-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.jz-feat-card { background: #fff; border-radius: 14px; padding: 22px; box-shadow: 0 10px 25px -10px rgba(0,0,0,.1); }
.jz-feat-card h3 { font-size: 16px; color: #1e293b; margin: 0 0 8px; display: flex; gap: 8px; align-items: center; }
.jz-feat-ico { color: #f97316; }
.jz-feat-card p, .jz-end-card p { color: #6b7280; font-size: 13.5px; margin: 0; }
.jz-svc-card { background: #f9fafb; border-radius: 14px; padding: 28px; box-shadow: 0 10px 25px -10px rgba(0,0,0,.1); cursor: pointer; transition: transform .2s; }
.jz-svc-card:hover { transform: translateY(-4px); }
.jz-svc-card h3 { font-size: 19px; color: #1e293b; margin: 0 0 10px; }
.jz-svc-card p { color: #6b7280; font-size: 14px; margin: 0; }
.jz-ico-box { width: 56px; height: 56px; border-radius: 12px; background: rgba(37,99,235,.1); display: flex; align-items: center; justify-content: center; font-size: 26px; margin-bottom: 16px; }
.jz-svc-count { color: #2563eb; font-size: 13px; margin-top: 12px; font-weight: 600; }
.jz-end-card, .jz-join-card { background: #fff; border: 1px solid #e5e7eb; border-radius: 14px; padding: 24px; }
.jz-end-ico { font-size: 30px; margin-bottom: 12px; }
.jz-end-card h3, .jz-join-card h3 { font-size: 16.5px; color: #1e293b; margin: 0 0 10px; }
.jz-block-title { font-size: 15px; font-weight: 700; color: #1e293b; margin: 0 0 12px; }

/* 页脚 */
.jz-footer { background: #1e293b; color: #94a3b8; padding: 34px 0 0; }
.jz-footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 24px; padding-bottom: 22px; }
.jz-footer-grid h4 { color: #e2e8f0; font-size: 15px; margin: 0 0 10px; }
.jz-footer-grid p { margin: 4px 0; font-size: 13px; }
.jz-footer-desc { font-size: 13px; line-height: 1.8; }
.jz-footer-bottom { border-top: 1px solid rgba(255,255,255,.1); padding: 14px 0; text-align: center; font-size: 12.5px; color: #64748b; }

/* 服务预约 */
.jz-book-cat { margin-bottom: 4px; }
.jz-cat-tabs { display: flex; gap: 10px; margin: 0 0 18px; flex-wrap: wrap; }
.jz-cat { padding: 9px 20px; border-radius: 999px; background: #fff; border: 1px solid #e5e7eb; cursor: pointer; font-size: 14px; color: #4b5563; min-height: 40px; display: inline-flex; align-items: center; }
.jz-cat.on { background: #2563eb; border-color: #2563eb; color: #1a1d23; }
.jz-book-goods { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 20px; }
.jz-item-card { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 16px; }
.jz-item-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.jz-item-head b { color: #1e293b; font-size: 15px; }
.jz-item-cat { font-size: 12px; background: #eff6ff; color: #2563eb; padding: 2px 10px; border-radius: 999px; white-space: nowrap; }
.jz-item-desc { color: #6b7280; font-size: 13px; margin: 6px 0 10px; }
.jz-item-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; }
.jz-item-price { color: #f97316; font-weight: 800; font-size: 17px; }
.jz-item-unit { color: #9ca3af; font-size: 12px; font-weight: 400; }
.jz-book { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 20px; }
.jz-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }
.jz-input { width: 100%; border: 1px solid #d1d5db; border-radius: 8px; padding: 10px 12px; min-height: 42px; font-size: 14px; font-family: inherit; background: #fff; color: #1f2937; }
.jz-input:focus { outline: none; border-color: #2563eb; box-shadow: 0 0 0 3px rgba(37,99,235,.12); }
textarea.jz-input { min-height: 74px; resize: vertical; }
.jz-check-row { display: flex; gap: 16px; flex-wrap: wrap; margin: 4px 0 10px; }
.jz-check { display: flex; gap: 6px; align-items: center; font-size: 14px; cursor: pointer; }
.jz-check input { width: 16px; height: 16px; accent-color: #2563eb; }
.jz-bk-total { background: #fffbeb; border: 1px dashed #f59e0b; border-radius: 10px; padding: 12px 16px; margin: 14px 0; font-size: 14.5px; }
.jz-total-row { display: flex; justify-content: space-between; padding: 3px 0; color: #4b5563; }
.jz-total-row b { color: #f97316; }
.jz-pool-tip { background: #eff6ff; color: #1d4ed8; border-radius: 8px; padding: 10px 14px; font-size: 13px; margin-bottom: 14px; }

/* 页签 */
.jz-tabs { display: flex; gap: 4px; border-bottom: 2px solid #e5e7eb; margin-bottom: 16px; overflow-x: auto; }
.jz-otab, .jz-atab, .jz-wtab { padding: 10px 15px; cursor: pointer; white-space: nowrap; color: #4b5563; border-bottom: 2px solid transparent; margin-bottom: -2px; font-size: 14px; min-height: 42px; display: inline-flex; align-items: center; }
.jz-otab:hover, .jz-atab:hover, .jz-wtab:hover { color: #2563eb; }
.jz-otab.on, .jz-atab.on, .jz-wtab.on { color: #2563eb; border-color: #2563eb; font-weight: 600; }

/* 订单卡 */
.jz-order-list { display: flex; flex-direction: column; gap: 14px; }
.jz-order-card { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 16px; }
.jz-order-top { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding-bottom: 10px; border-bottom: 1px dashed #e5e7eb; margin-bottom: 10px; font-size: 13px; color: #6b7280; flex-wrap: wrap; }
.jz-order-sub { font-weight: 700; color: #1e293b; font-size: 15px; }
.jz-order-info { color: #4b5563; font-size: 13.5px; line-height: 1.9; }
.jz-order-bottom { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; gap: 10px; flex-wrap: wrap; }
.jz-order-acts { display: flex; gap: 8px; flex-wrap: wrap; }
.jz-order-pay { color: #f97316; font-weight: 800; font-size: 16px; }
.jz-review-view { color: #4b5563; font-size: 13px; background: #f9fafb; border-radius: 8px; padding: 8px 12px; margin-top: 10px; }
.jz-review-stars { color: #f59e0b; font-size: 14px; letter-spacing: 2px; }

/* 状态徽章 */
.jz-st { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; white-space: nowrap; }
.jz-st-pending { background: #fef3c7; color: #92400e; }
.jz-st-paid { background: #dbeafe; color: #1d4ed8; }
.jz-st-assigned { background: #e0e7ff; color: #4338ca; }
.jz-st-accepted { background: #cffafe; color: #0e7490; }
.jz-st-onsite { background: #ede9fe; color: #6d28d9; }
.jz-st-finished { background: #ffedd5; color: #c2410c; }
.jz-st-completed { background: #dcfce7; color: #15803d; }
.jz-st-cancelled { background: #f3f4f6; color: #6b7280; }
.jz-st-refunded { background: #fee2e2; color: #b91c1c; }
.jz-st-warn { background: #fee2e2; color: #b91c1c; }

/* 时间线 */
.jz-timeline { border-left: 2px solid #e5e7eb; margin: 10px 0 0 6px; padding-left: 16px; }
.jz-tl-row { position: relative; padding: 4px 0; font-size: 13px; color: #4b5563; }
.jz-tl-row::before { content: ""; position: absolute; left: -21.5px; top: 12px; width: 9px; height: 9px; border-radius: 50%; background: #2563eb; }

/* 星级评价 */
.jz-stars { display: flex; gap: 6px; font-size: 24px; margin: 6px 0 12px; }
.jz-star { cursor: pointer; color: #d1d5db; transition: color .12s; min-width: 30px; text-align: center; }
.jz-star.on { color: #f59e0b; }
.jz-accept-form { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 18px; }
.jz-acc-text { width: 100%; min-height: 72px; border: 1px solid #d1d5db; border-radius: 8px; padding: 10px; box-sizing: border-box; font-size: 14px; font-family: inherit; margin: 10px 0; }
.jz-acc-text:focus { outline: none; border-color: #2563eb; }

/* 统计卡 */
.jz-stat-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 16px; }
.jz-stat-6 { display: grid; grid-template-columns: repeat(6, 1fr); gap: 12px; margin-bottom: 16px; }
.jz-stat { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 14px 16px; }
.jz-stat b { display: block; font-size: 21px; color: #1e293b; margin-bottom: 2px; }
.jz-stat span { font-size: 12.5px; color: #6b7280; }
.jz-warn-box { background: #fff7ed; border: 1px solid #fdba74; color: #9a3412; border-radius: 10px; padding: 12px 16px; margin-bottom: 16px; font-size: 13.5px; }

/* 表格 */
.jz-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.jz-table-wrap { overflow-x: auto; background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; }
.jz-table { width: 100%; border-collapse: collapse; font-size: 13.5px; min-width: 640px; }
.jz-table th { background: #f9fafb; text-align: left; padding: 10px 12px; color: #4b5563; font-weight: 600; border-bottom: 1px solid #e5e7eb; white-space: nowrap; }
.jz-table td { padding: 10px 12px; border-bottom: 1px solid #f3f4f6; color: #374151; }
.jz-table tr:last-child td { border-bottom: none; }
.jz-table tbody tr:hover td { background: #f9fafb; }

/* 柱图 */
.jz-chart-card { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 16px; margin-bottom: 16px; }
.jz-chart-card h3 { font-size: 14.5px; margin: 0 0 12px; color: #1e293b; }
.jz-bars { display: flex; align-items: stretch; gap: 10px; height: 160px; padding-top: 8px; }
.jz-bar { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 6px; min-width: 0; }
.jz-bar-col { width: 62%; max-width: 36px; background: linear-gradient(180deg, #3b82f6, #2563eb); border-radius: 6px 6px 0 0; min-height: 4px; }
.jz-bar em { font-style: normal; font-size: 11.5px; color: #6b7280; white-space: nowrap; }

/* 设置卡 */
.jz-settings-card { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 20px; max-width: 580px; }
.jz-mc-head { font-size: 15px; font-weight: 700; color: #1e293b; margin: 0 0 10px; }

/* 登录/空态 */
.jz-login-card { max-width: 410px; margin: 56px auto; background: #fff; border-radius: 16px; padding: 32px 28px; box-shadow: 0 10px 30px rgba(0,0,0,.08); text-align: center; }
.jz-login-ico { font-size: 40px; margin-bottom: 10px; }
.jz-login-card h2 { color: #1e293b; margin: 0 0 18px; font-size: 20px; }
.jz-login-tip { color: #6b7280; font-size: 13px; margin-top: 12px; }
.jz-empty { text-align: center; color: #9ca3af; padding: 50px 0; font-size: 14px; }

/* 弹窗 */
.jz-mask { position: fixed; inset: 0; background: rgba(15,23,42,.55); z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 20px; }
.jz-modal { background: #fff; border-radius: 14px; width: min(540px, 94vw); max-height: 86vh; display: flex; flex-direction: column; overflow: hidden; animation: jzPop .18s ease-out; }
@keyframes jzPop { from { opacity: 0; transform: translateY(10px) scale(.98); } }
.jz-modal-title { padding: 15px 20px; font-weight: 700; color: #1e293b; border-bottom: 1px solid #f3f4f6; font-size: 16px; display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.jz-modal-close { cursor: pointer; color: #9ca3af; font-size: 20px; line-height: 1; padding: 4px; }
.jz-modal-close:hover { color: #374151; }
.jz-scroll { overflow-y: auto; padding: 18px 20px; }

/* 收银台 */
.jz-cashier { text-align: center; }
.jz-cash-amount { font-size: 30px; color: #f97316; font-weight: 800; margin: 4px 0; }
.jz-cash-no { color: #6b7280; font-size: 12.5px; margin-bottom: 10px; }
.jz-qrcode { width: 180px; height: 180px; margin: 8px auto; border: 1px solid #e5e7eb; border-radius: 10px; padding: 10px; background: #fff; }
.jz-qr-grid { display: grid; grid-template-columns: repeat(9, 1fr); gap: 2px; width: 100%; height: 100%; }
.jz-qr-grid i { background: #1e293b; border-radius: 1.5px; }
.jz-qr-grid i.off { background: transparent; }
.jz-cash-countdown { color: #dc2626; font-weight: 700; margin: 8px 0 12px; }
.jz-cash-count { color: #6b7280; font-size: 12.5px; }
.jz-pay-methods { display: flex; gap: 10px; justify-content: center; margin: 12px 0 4px; flex-wrap: wrap; }
.jz-pay-method { border: 1.5px solid #e5e7eb; border-radius: 10px; padding: 10px 20px; cursor: pointer; font-size: 14px; min-height: 42px; display: inline-flex; align-items: center; }
.jz-pay-method.on { border-color: #2563eb; color: #2563eb; background: #eff6ff; }
.jz-pay-item { display: flex; justify-content: space-between; font-size: 13.5px; color: #4b5563; padding: 3px 0; }
.jz-ok-ico { font-size: 44px; line-height: 1; }
.jz-ok-tip { text-align: center; font-size: 16px; font-weight: 700; color: #1e293b; margin: 10px 0 4px; }

/* 演示申请 */
.jz-demo-box { background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 14px; padding: 26px; max-width: 580px; margin: 0 auto; }
.jz-demo-row { display: flex; gap: 10px; margin-bottom: 10px; }
.jz-demo-row .jz-input { flex: 1; }
.jz-demo-tip { color: #6b7280; font-size: 12.5px; margin-top: 8px; }

/* 杂项文本 */
.jz-fin-text, .jz-cp-text, .jz-rp-text, .jz-dm-text { color: #6b7280; font-size: 13px; }
.jz-ra-worker, .jz-cust-orders { cursor: pointer; }

/* Toast */
.jz-toast { position: fixed; left: 50%; top: 12%; transform: translateX(-50%); background: rgba(15,23,42,.92); color: #1a1d23; padding: 10px 24px; border-radius: 999px; z-index: 2000; font-size: 14px; box-shadow: 0 6px 20px rgba(0,0,0,.25); animation: jzToastIn .2s ease-out; max-width: 80vw; }
.jz-toast-err { background: rgba(220,38,38,.95); }
@keyframes jzToastIn { from { opacity: 0; transform: translate(-50%, -8px); } }

/* 响应式 */
@media (max-width: 960px) {
    .jz-grid-3, .jz-features, .jz-join-grid { grid-template-columns: 1fr 1fr; }
    .jz-stat-6 { grid-template-columns: repeat(3, 1fr); }
    .jz-book-goods { grid-template-columns: 1fr 1fr; }
    .jz-footer-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 760px) {
    .jz-form-row { grid-template-columns: 1fr; }
    .jz-stat-row { grid-template-columns: 1fr 1fr; }
    .jz-hero { padding: 40px 0; }
    .jz-section { padding: 36px 0; }
}
@media (max-width: 600px) {
    .jz-grid-3, .jz-features, .jz-join-grid, .jz-book-goods, .jz-footer-grid { grid-template-columns: 1fr; }
    .jz-stat-6 { grid-template-columns: 1fr 1fr; }
    .jz-nav { gap: 14px; }
}
@media (prefers-reduced-motion: reduce) {
    .jz-toast, .jz-modal { animation: none; }
    .jz-svc-card, .jz-svc-card:hover { transition: none; transform: none; }
}


/* === 产品溯源平台 cp- 样式（右侧槽位 11）=== */
.cp-app { --cp-primary:#1b5e20; --cp-secondary:#2e7d32; --cp-accent:#fb8c00; --cp-cream:#f7faf4; --cp-earth:#6d4c41; --cp-text:#374151; --cp-muted:#6b7280; --cp-line:#e5e7eb; font-family:'PingFang SC','Microsoft YaHei',system-ui,sans-serif; color:var(--cp-text); background:#fff; }
.cp-app * { box-sizing:border-box; }
.cp-app .cp-ok { color:var(--cp-secondary); font-weight:600; }

/* 顶栏 */
.cp-header { position:sticky; top:0; z-index:10; display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 18px; background:#fff; border-bottom:1px solid var(--cp-line); box-shadow:0 1px 4px rgba(0,0,0,.04); }
.cp-brand { display:flex; align-items:center; gap:8px; font-weight:700; color:var(--cp-primary); }
.cp-brand-icon { display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:8px; background:linear-gradient(135deg,var(--cp-secondary),var(--cp-primary)); color:#fff; font-size:16px; }
.cp-brand-name { font-size:16px; }
.cp-nav { display:flex; gap:4px; flex-wrap:wrap; }
.cp-nav-btn { padding:6px 12px; border:1px solid transparent; background:transparent; color:var(--cp-text); border-radius:8px; cursor:pointer; font-size:13px; transition:all .15s; }
.cp-nav-btn:hover { background:var(--cp-cream); color:var(--cp-primary); }
.cp-nav-btn.active { background:var(--cp-primary); color:#fff; }
.cp-nav-right { display:flex; align-items:center; gap:8px; }
.cp-user-tag { font-size:12px; color:var(--cp-muted); padding:4px 8px; background:var(--cp-cream); border-radius:6px; }
.cp-link { background:transparent; border:none; color:var(--cp-secondary); cursor:pointer; font-size:13px; padding:4px 6px; }
.cp-link:hover { text-decoration:underline; }

/* 按钮 */
.cp-btn { display:inline-flex; align-items:center; justify-content:center; gap:4px; padding:8px 16px; border:1px solid var(--cp-primary); background:var(--cp-primary); color:#fff; border-radius:8px; cursor:pointer; font-size:14px; transition:all .15s; }
.cp-btn:hover { filter:brightness(1.08); }
.cp-btn-sm { padding:4px 10px; font-size:12px; }
.cp-btn-primary { background:var(--cp-primary); border-color:var(--cp-primary); color:#fff; }
.cp-btn-light { background:#fff; border-color:#fff; color:var(--cp-primary); }
.cp-btn-outline { background:transparent; border:1px solid rgba(255,255,255,.5); color:#fff; }
.cp-btn-outline.cp-btn-outline, .cp-btn.outline { background:transparent; border:1px solid var(--cp-primary); color:var(--cp-primary); }
.cp-btn-accent { background:var(--cp-accent); border-color:var(--cp-accent); color:#fff; }
.cp-btn-danger { background:#dc2626; border-color:#dc2626; color:#fff; }

/* 表单 */
.cp-input, .cp-select, .cp-textarea { width:100%; padding:8px 12px; border:1px solid var(--cp-line); border-radius:8px; font-size:14px; color:var(--cp-text); background:#fff; outline:none; }
.cp-input:focus, .cp-select:focus, .cp-textarea:focus { border-color:var(--cp-secondary); box-shadow:0 0 0 2px rgba(46,125,50,.12); }
.cp-textarea { resize:vertical; min-height:60px; }
.cp-label { display:block; margin-bottom:6px; font-size:13px; color:var(--cp-muted); font-weight:500; }
.cp-form-row { margin-bottom:14px; }
.cp-form-row-2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.cp-form-actions { display:flex; gap:10px; margin-top:8px; }

/* 首屏 hero */
.cp-hero { background:radial-gradient(circle at 10% 20%, rgba(251,140,0,.12), transparent 40%), radial-gradient(circle at 90% 80%, rgba(46,125,50,.18), transparent 45%), linear-gradient(135deg,var(--cp-primary),var(--cp-secondary)); color:#fff; padding:36px 18px; }
.cp-hero-inner { max-width:1280px; margin:0 auto; display:grid; grid-template-columns:1.2fr 1fr; gap:30px; align-items:center; }
.cp-hero-tag { display:inline-block; background:rgba(255,255,255,.15); border:1px solid rgba(255,255,255,.2); padding:5px 12px; border-radius:999px; font-size:12px; margin-bottom:14px; }
.cp-hero-title { font-size:30px; font-weight:700; line-height:1.25; margin:0 0 14px; }
.cp-hero-desc { font-size:14px; line-height:1.7; color:rgba(255,255,255,.92); margin:0 0 18px; }
.cp-hero-btns { display:flex; gap:10px; flex-wrap:wrap; }
.cp-hero-stats { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-top:18px; max-width:520px; }
.cp-hero-stat { background:rgba(255,255,255,.1); border:1px solid rgba(255,255,255,.15); border-radius:12px; padding:12px; }
.cp-hero-stat-num { font-size:22px; font-weight:700; }
.cp-hero-stat-label { font-size:12px; color:rgba(255,255,255,.8); margin-top:2px; }
.cp-hero-right { position:relative; }
.cp-trace-card { background:#fff; border-radius:16px; padding:18px; box-shadow:0 20px 40px -20px rgba(0,0,0,.3); color:var(--cp-text); }
.cp-trace-card-top { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.cp-trace-card-label { font-size:11px; color:var(--cp-muted); }
.cp-trace-card-code { font-weight:600; }
.cp-trace-card-qr { width:44px; height:44px; background:var(--cp-cream); border-radius:8px; display:flex; align-items:center; justify-content:center; font-size:22px; }
.cp-trace-card-rows { display:flex; flex-direction:column; gap:8px; }
.cp-trace-card-row { display:flex; justify-content:space-between; padding:10px 12px; background:var(--cp-cream); border-radius:8px; font-size:13px; }
.cp-trace-card-val { font-weight:500; }
.cp-trace-card-foot { display:flex; justify-content:space-between; padding-top:12px; margin-top:12px; border-top:1px solid var(--cp-line); font-size:11px; color:var(--cp-muted); }
.cp-mt { margin-top:14px; width:100%; }

/* 通用 section */
.cp-section { padding:28px 18px; }
.cp-section-white { background:#fff; }
.cp-section-cream { background:var(--cp-cream); }
.cp-section-head { text-align:center; margin-bottom:20px; }
.cp-section-eyebrow { font-size:12px; color:var(--cp-secondary); font-weight:600; margin-bottom:6px; }
.cp-section-title { font-size:22px; font-weight:700; color:var(--cp-primary); margin:0; }
.cp-section-sub { font-size:13px; color:var(--cp-muted); margin-top:8px; max-width:680px; margin-left:auto; margin-right:auto; line-height:1.6; }

/* 溯源流程 5 环节 */
.cp-stages { display:grid; grid-template-columns:repeat(5,1fr); gap:8px; max-width:1100px; margin:0 auto; }
.cp-stage { text-align:center; padding:10px 6px 16px; position:relative; }
.cp-stage:not(.last)::after { content:''; position:absolute; left:50%; top:36px; width:100%; height:2px; background:linear-gradient(to right,#a5d6a7,#2e7d32); }
.cp-stage-icon { width:52px; height:52px; margin:0 auto 10px; border-radius:12px; background:rgba(46,125,50,.1); display:flex; align-items:center; justify-content:center; font-size:24px; position:relative; z-index:1; }
.cp-stage-name { font-weight:600; color:var(--cp-primary); font-size:14px; }
.cp-stage-sub { font-size:11px; color:var(--cp-muted); margin-top:4px; }

/* 平台能力 */
.cp-feat-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; max-width:1280px; margin:0 auto; }
.cp-feat-card { background:#fff; border-radius:14px; padding:18px; transition:transform .2s, box-shadow .2s; }
.cp-feat-card:hover { transform:translateY(-3px); box-shadow:0 12px 24px -12px rgba(27,94,32,.25); }
.cp-feat-icon { width:40px; height:40px; border-radius:10px; background:var(--cp-primary); color:#fff; display:flex; align-items:center; justify-content:center; font-size:20px; margin-bottom:10px; }
.cp-feat-name { font-weight:600; color:var(--cp-primary); font-size:16px; margin:0 0 6px; }
.cp-feat-desc { font-size:13px; color:var(--cp-muted); line-height:1.6; margin:0; }

/* 商家入驻引导 */
.cp-merchant-promo { display:grid; grid-template-columns:1.1fr 1fr; gap:24px; align-items:center; max-width:1280px; margin:0 auto; }
.cp-merchant-promo-desc { font-size:14px; color:var(--cp-muted); line-height:1.7; margin:8px 0 16px; }
.cp-merchant-promo-list { display:flex; flex-direction:column; gap:12px; }
.cp-merchant-promo-item { display:flex; gap:12px; align-items:flex-start; }
.cp-merchant-promo-check { width:32px; height:32px; border-radius:8px; background:var(--cp-secondary); color:#fff; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.cp-merchant-promo-t { font-weight:600; color:var(--cp-primary); margin:0 0 2px; font-size:14px; }
.cp-merchant-promo-d { font-size:12px; color:var(--cp-muted); margin:0; }
.cp-merchant-promo-right { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.cp-merchant-promo-card { background:#fff; border-radius:14px; padding:14px; text-align:center; }
.cp-merchant-promo-card.mt { margin-top:14px; }
.cp-merchant-promo-card-icon { font-size:26px; color:var(--cp-secondary); margin-bottom:6px; }
.cp-merchant-promo-card-t { font-weight:600; color:var(--cp-primary); font-size:14px; margin:0 0 4px; }
.cp-merchant-promo-card-d { font-size:11px; color:var(--cp-muted); margin:0; }

/* 看板 */
.cp-dash-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-bottom:16px; }
.cp-dash-card { background:#fff; border:1px solid var(--cp-line); border-radius:12px; padding:16px; text-align:center; }
.cp-dash-num { font-size:22px; font-weight:700; color:var(--cp-primary); }
.cp-dash-label { font-size:12px; color:var(--cp-muted); margin-top:4px; }
.cp-home-cta { text-align:center; margin-top:14px; display:flex; gap:10px; justify-content:center; }

/* 联系表单 */
.cp-contact { max-width:900px; margin:0 auto; background:linear-gradient(135deg,var(--cp-primary),var(--cp-secondary)); border-radius:20px; padding:28px; color:#fff; }
.cp-contact-head { text-align:center; margin-bottom:16px; }
.cp-contact-title { font-size:22px; font-weight:700; margin:0; }
.cp-contact-sub { font-size:13px; color:rgba(255,255,255,.85); margin-top:6px; }
.cp-contact-form { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.cp-contact-form .cp-textarea { grid-column:1/-1; }
.cp-contact-btn { grid-column:1/-1; text-align:center; margin-top:6px; }
.cp-contact-foot { display:flex; justify-content:space-between; margin-top:14px; padding-top:12px; border-top:1px solid rgba(255,255,255,.15); font-size:12px; color:rgba(255,255,255,.8); }

/* 商品列表 */
.cp-shop { padding:18px; }
.cp-shop-bar { display:flex; gap:10px; align-items:center; margin-bottom:12px; flex-wrap:wrap; }
.cp-shop-cats { display:flex; gap:6px; flex-wrap:wrap; }
.cp-cat-btn { padding:6px 14px; border:1px solid var(--cp-line); background:#fff; border-radius:999px; cursor:pointer; font-size:13px; color:var(--cp-text); }
.cp-cat-btn.active { background:var(--cp-primary); color:#fff; border-color:var(--cp-primary); }
.cp-shop-kw { max-width:260px; }
.cp-shop-sort { max-width:160px; }
.cp-shop-result { font-size:13px; color:var(--cp-muted); margin:0 0 10px; }
.cp-prod-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
.cp-prod-card { background:#fff; border:1px solid var(--cp-line); border-radius:14px; overflow:hidden; transition:transform .2s, box-shadow .2s; }
.cp-prod-card:hover { transform:translateY(-4px); box-shadow:0 16px 32px -16px rgba(27,94,32,.25); }
.cp-prod-img { height:130px; background:linear-gradient(135deg,#dcfce7,#86efac); display:flex; align-items:center; justify-content:center; font-size:60px; }
.cp-prod-body { padding:14px; }
.cp-prod-tags { display:flex; gap:6px; margin-bottom:6px; flex-wrap:wrap; }
.cp-tag { display:inline-block; padding:2px 8px; border-radius:6px; font-size:11px; }
.cp-tag-green { background:rgba(46,125,50,.12); color:var(--cp-secondary); }
.cp-tag-orange { background:rgba(251,140,0,.14); color:var(--cp-accent); }
.cp-tag-gray { background:#f3f4f6; color:var(--cp-muted); }
.cp-tag-blue { background:#dbeafe; color:#1d4ed8; }
.cp-prod-name { font-weight:600; color:var(--cp-primary); font-size:16px; margin:0 0 6px; }
.cp-prod-desc { font-size:12px; color:var(--cp-muted); line-height:1.6; margin:0 0 10px; }
.cp-prod-meta { display:flex; gap:12px; font-size:11px; color:var(--cp-muted); margin-bottom:10px; }
.cp-prod-foot { display:flex; justify-content:space-between; align-items:center; }
.cp-prod-price { color:var(--cp-accent); font-weight:700; font-size:16px; }
.cp-prod-shop { font-size:11px; color:var(--cp-muted); margin-top:8px; padding-top:8px; border-top:1px dashed var(--cp-line); }

/* 扫码溯源详情页 */
.cp-trace-page { padding:18px; }
.cp-trace-topbar { display:flex; justify-content:space-between; align-items:center; margin-bottom:14px; padding-bottom:10px; border-bottom:1px solid var(--cp-line); }
.cp-trace-code { font-size:13px; color:var(--cp-muted); }
.cp-trace-hero { background:linear-gradient(135deg,var(--cp-primary),var(--cp-secondary)); color:#fff; border-radius:18px; padding:20px; display:grid; grid-template-columns:100px 1fr 140px; gap:16px; align-items:center; margin-bottom:18px; }
.cp-trace-hero-img { width:100px; height:100px; border-radius:14px; background:rgba(255,255,255,.15); display:flex; align-items:center; justify-content:center; font-size:60px; }
.cp-trace-hero-main { }
.cp-trace-hero-tags { display:flex; gap:6px; margin-bottom:6px; flex-wrap:wrap; }
.cp-trace-hero-tags .cp-tag { background:rgba(255,255,255,.18); color:#fff; }
.cp-trace-hero-name { font-size:22px; font-weight:700; margin:0 0 6px; }
.cp-trace-hero-desc { font-size:13px; color:rgba(255,255,255,.9); margin:0 0 10px; line-height:1.6; }
.cp-trace-hero-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }
.cp-trace-hero-item { background:rgba(255,255,255,.1); border-radius:8px; padding:8px 10px; }
.cp-trace-hero-item-label { font-size:11px; color:rgba(255,255,255,.75); }
.cp-trace-hero-item-val { font-size:14px; font-weight:600; margin-top:2px; }
.cp-trace-hero-side { text-align:center; }
.cp-trace-qr { width:90px; height:90px; margin:0 auto 6px; background:#fff; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:48px; color:var(--cp-primary); }
.cp-trace-qr-label { font-size:13px; font-weight:600; }
.cp-trace-qr-sub { font-size:11px; color:rgba(255,255,255,.8); margin-top:2px; }

.cp-trace-block { background:#fff; border:1px solid var(--cp-line); border-radius:14px; padding:18px; margin-bottom:16px; }
.cp-trace-block-head { margin-bottom:14px; }
.cp-trace-block-title { font-size:17px; font-weight:700; color:var(--cp-primary); margin:0; }
.cp-trace-block-sub { font-size:12px; color:var(--cp-muted); margin-top:4px; }

/* 时间轴 */
.cp-timeline { position:relative; padding-left:8px; }
.cp-timeline-item { position:relative; padding-left:36px; padding-bottom:18px; }
.cp-timeline-item:not(.last)::before { content:''; position:absolute; left:15px; top:30px; bottom:0; width:2px; background:linear-gradient(to bottom,#a5d6a7,#2e7d32); }
.cp-timeline-dot { position:absolute; left:0; top:0; width:32px; height:32px; border-radius:50%; background:var(--cp-secondary); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:14px; z-index:1; }
.cp-timeline-body { background:var(--cp-cream); border-radius:10px; padding:12px 14px; }
.cp-timeline-stage { display:inline-block; padding:2px 8px; background:var(--cp-primary); color:#fff; border-radius:6px; font-size:11px; margin-bottom:6px; }
.cp-timeline-title { font-weight:600; color:var(--cp-primary); font-size:15px; margin:0 0 6px; }
.cp-timeline-content { font-size:13px; color:var(--cp-text); line-height:1.6; margin:0 0 8px; }
.cp-timeline-meta { display:flex; gap:14px; font-size:11px; color:var(--cp-muted); flex-wrap:wrap; }

/* 检测报告 */
.cp-report-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.cp-report-card { background:var(--cp-cream); border-radius:10px; padding:12px; }
.cp-report-row { display:flex; justify-content:space-between; padding:4px 0; font-size:12px; border-bottom:1px dashed var(--cp-line); }
.cp-report-row:last-child { border-bottom:0; }
.cp-report-row > span:first-child { color:var(--cp-muted); }
.cp-report-val { font-weight:500; }

/* 物流轨迹 */
.cp-logistics { position:relative; padding-left:8px; }
.cp-logistics-item { position:relative; padding-left:24px; padding-bottom:14px; }
.cp-logistics-item:not(.last)::before { content:''; position:absolute; left:7px; top:14px; bottom:0; width:2px; background:var(--cp-secondary); }
.cp-logistics-dot { position:absolute; left:0; top:6px; width:16px; height:16px; border-radius:50%; background:var(--cp-secondary); border:3px solid #fff; box-shadow:0 0 0 2px var(--cp-secondary); }
.cp-logistics-body { }
.cp-logistics-node { font-weight:600; color:var(--cp-primary); font-size:14px; margin-bottom:4px; }
.cp-logistics-status { display:inline-block; padding:1px 6px; background:rgba(46,125,50,.12); color:var(--cp-secondary); border-radius:6px; font-size:11px; font-weight:400; margin-left:6px; }
.cp-logistics-meta { display:flex; gap:14px; font-size:11px; color:var(--cp-muted); flex-wrap:wrap; }

/* 商家信息卡 */
.cp-mer-info-card { background:var(--cp-cream); border-radius:12px; padding:16px; }
.cp-mer-info-row { display:flex; justify-content:space-between; padding:6px 0; font-size:13px; border-bottom:1px dashed var(--cp-line); }
.cp-mer-info-row:last-child { border-bottom:0; }
.cp-mer-info-row > span:first-child { color:var(--cp-muted); }
.cp-mer-info-val { font-weight:500; }

.cp-trace-foot { display:flex; gap:10px; justify-content:center; margin-top:18px; }

/* 入驻 */
.cp-settle { padding:18px; max-width:900px; margin:0 auto; }
.cp-settle-head { text-align:center; margin-bottom:16px; }
.cp-settle-title { font-size:22px; font-weight:700; color:var(--cp-primary); margin:0; }
.cp-settle-sub { font-size:13px; color:var(--cp-muted); margin-top:6px; }
.cp-settle-card { background:#fff; border:1px solid var(--cp-line); border-radius:14px; padding:18px; margin-bottom:16px; }
.cp-settle-info { background:var(--cp-cream); border-radius:12px; padding:14px 18px; }
.cp-settle-info-title { font-weight:600; color:var(--cp-primary); margin:0 0 8px; }
.cp-settle-steps { margin:0; padding-left:20px; color:var(--cp-muted); font-size:13px; line-height:1.9; }
.cp-settle-steps li { margin-bottom:4px; }

/* 登录卡 */
.cp-mer-login, .cp-adm-login { padding:30px 18px; display:flex; justify-content:center; }
.cp-mer-login-card, .cp-adm-login-card { max-width:420px; width:100%; background:#fff; border:1px solid var(--cp-line); border-radius:14px; padding:24px; }
.cp-mer-login-title { font-size:20px; font-weight:700; color:var(--cp-primary); margin:0 0 6px; text-align:center; }
.cp-mer-login-sub { font-size:12px; color:var(--cp-muted); text-align:center; margin:0 0 18px; }

/* 子页签 */
.cp-mer-page, .cp-adm-page { padding:14px 18px; }
.cp-sub-tabs { display:flex; gap:6px; margin-bottom:14px; border-bottom:1px solid var(--cp-line); flex-wrap:wrap; }
.cp-sub-tab { padding:8px 14px; background:transparent; border:none; border-bottom:2px solid transparent; color:var(--cp-muted); cursor:pointer; font-size:14px; }
.cp-sub-tab.active { color:var(--cp-primary); border-bottom-color:var(--cp-primary); font-weight:600; }

/* 内容块 */
.cp-block { background:#fff; border:1px solid var(--cp-line); border-radius:12px; padding:16px; margin-bottom:14px; }
.cp-block-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.cp-block-title { font-size:16px; font-weight:600; color:var(--cp-primary); margin:0; }
.cp-block-sub { font-size:12px; color:var(--cp-muted); margin:0 0 12px; line-height:1.6; }

/* 表格 */
.cp-table { width:100%; border-collapse:collapse; font-size:13px; }
.cp-table th, .cp-table td { padding:8px 10px; text-align:left; border-bottom:1px solid var(--cp-line); }
.cp-table th { background:var(--cp-cream); color:var(--cp-muted); font-weight:600; font-size:12px; }
.cp-table tbody tr:hover { background:#fafdf8; }
.cp-emoji { font-size:22px; }
.cp-ops { white-space:nowrap; display:flex; gap:4px; }
.cp-empty { text-align:center; padding:24px 10px; color:var(--cp-muted); font-size:13px; }

/* 柱图 */
.cp-bar-chart { display:flex; align-items:flex-end; gap:8px; height:160px; padding:10px 4px 0; border-bottom:1px solid var(--cp-line); }
.cp-bar-col { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:100%; }
.cp-bar { width:60%; max-width:38px; background:linear-gradient(to top,var(--cp-secondary),var(--cp-primary)); border-radius:6px 6px 0 0; position:relative; min-height:8px; display:flex; align-items:flex-start; justify-content:center; padding-top:2px; }
.cp-bar-val { color:#fff; font-size:11px; font-weight:600; }
.cp-bar-label { font-size:11px; color:var(--cp-muted); margin-top:6px; }

/* 排行榜 */
.cp-rank-list { display:flex; flex-direction:column; gap:10px; }
.cp-rank-item { display:grid; grid-template-columns:28px 1fr 140px 50px; align-items:center; gap:10px; font-size:13px; }
.cp-rank-name { color:var(--cp-text); }
.cp-rank-bar { height:10px; background:var(--cp-cream); border-radius:999px; overflow:hidden; }
.cp-rank-bar-fill { height:100%; background:linear-gradient(to right,var(--cp-secondary),var(--cp-accent)); }
.cp-rank-val { text-align:right; color:var(--cp-primary); font-weight:600; }

/* 溯源档案管理 */
.cp-trace-manage-item { background:var(--cp-cream); border-radius:12px; padding:14px; margin-bottom:14px; }
.cp-trace-manage-head { display:flex; align-items:center; gap:10px; margin-bottom:12px; }
.cp-trace-manage-name { font-weight:600; color:var(--cp-primary); font-size:15px; }
.cp-trace-manage-sec { margin-top:14px; }
.cp-trace-manage-sec-title { font-size:14px; font-weight:600; color:var(--cp-secondary); margin:0 0 8px; }

/* 弹窗 */
.cp-mask { position:fixed; inset:0; background:rgba(0,0,0,.45); display:flex; align-items:center; justify-content:center; z-index:10000; }
.cp-modal { background:#fff; border-radius:14px; width:min(560px,92vw); max-height:90vh; display:flex; flex-direction:column; box-shadow:0 20px 50px -20px rgba(0,0,0,.4); }
.cp-modal-head { display:flex; justify-content:space-between; align-items:center; padding:14px 18px; border-bottom:1px solid var(--cp-line); }
.cp-modal-title { font-weight:600; color:var(--cp-primary); font-size:16px; }
.cp-modal-close { background:transparent; border:none; font-size:24px; color:var(--cp-muted); cursor:pointer; line-height:1; padding:0 4px; }
.cp-modal-body { padding:18px; overflow:auto; flex:1; }
.cp-modal-foot { padding:12px 18px; border-top:1px solid var(--cp-line); display:flex; justify-content:flex-end; gap:10px; }

/* 响应式 */
@media (max-width:1024px) {
    .cp-hero-inner { grid-template-columns:1fr; }
    .cp-hero-right { display:none; }
    .cp-feat-grid { grid-template-columns:repeat(2,1fr); }
    .cp-merchant-promo { grid-template-columns:1fr; }
    .cp-prod-grid { grid-template-columns:repeat(2,1fr); }
    .cp-dash-grid { grid-template-columns:repeat(2,1fr); }
    .cp-stages { grid-template-columns:repeat(2,1fr); }
    .cp-stage:not(.last)::after { display:none; }
    .cp-trace-hero { grid-template-columns:80px 1fr; }
    .cp-trace-hero-side { grid-column:1/-1; }
    .cp-trace-hero-grid { grid-template-columns:repeat(2,1fr); }
    .cp-report-grid { grid-template-columns:1fr; }
    .cp-contact-form { grid-template-columns:1fr; }
    .cp-rank-item { grid-template-columns:24px 1fr 60px; }
    .cp-rank-bar { display:none; }
}
@media (max-width:640px) {
    .cp-header { flex-wrap:wrap; }
    .cp-nav { order:3; width:100%; justify-content:flex-start; overflow-x:auto; }
    .cp-feat-grid, .cp-prod-grid, .cp-dash-grid { grid-template-columns:1fr; }
    .cp-hero-title { font-size:24px; }
    .cp-form-row-2 { grid-template-columns:1fr; }
    .cp-trace-hero-grid { grid-template-columns:1fr; }
}


/* === 园区管理平台 yq- 样式（右侧槽位 12，明亮蓝青主题）=== */
.yq-app{--yq-primary:#165DFF;--yq-secondary:#0FC6C2;--yq-warning:#FF7D00;--yq-success:#00B42A;--yq-dark:#1D2129;--yq-soft:#F2F3F5;--yq-border:#E5E6EB;--yq-text:#4E5969;--yq-radius:12px;font-family:'Inter','PingFang SC','Microsoft YaHei',system-ui,sans-serif;color:var(--yq-text);min-height:100%;}
.yq-app *{box-sizing:border-box;}
.yq-topbar{display:flex;align-items:center;gap:16px;background:#fff;padding:10px 18px;border-radius:var(--yq-radius);box-shadow:0 2px 12px rgba(22,93,255,.06);position:sticky;top:0;z-index:5;}
.yq-brand{display:flex;align-items:center;gap:8px;flex-shrink:0;}
.yq-logo{width:30px;height:30px;border-radius:8px;background:var(--yq-primary);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;}
.yq-title{font-weight:700;color:var(--yq-dark);font-size:16px;white-space:nowrap;}
.yq-nav{display:flex;gap:4px;flex:1;flex-wrap:wrap;}
.yq-nav-item{background:none;border:none;cursor:pointer;padding:8px 14px;border-radius:8px;font-size:14px;color:var(--yq-text);transition:all .2s;font-weight:500;}
.yq-nav-item:hover{background:var(--yq-soft);color:var(--yq-primary);}
.yq-nav-item.active{background:var(--yq-primary);color:#fff;}
.yq-user{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.yq-user-name{font-size:13px;color:var(--yq-dark);display:flex;align-items:center;gap:6px;}
.yq-user-name .yq-tag{font-size:11px;padding:1px 6px;}
.yq-marquee{margin-top:8px;background:linear-gradient(90deg,#e8f3ff,#e6fffb);border-radius:8px;padding:7px 14px;font-size:13px;color:var(--yq-dark);display:flex;align-items:center;gap:10px;}
.yq-mq-tag{background:var(--yq-primary);color:#fff;font-size:11px;padding:2px 8px;border-radius:4px;flex-shrink:0;}

/* 按钮 */
.yq-btn-primary{background:var(--yq-primary);color:#fff;border:none;border-radius:8px;padding:9px 18px;cursor:pointer;font-size:14px;font-weight:600;transition:all .2s;}
.yq-btn-primary:hover{background:#0e54e0;}
.yq-btn-primary:active{transform:scale(.97);}
.yq-btn-line{background:#fff;color:var(--yq-primary);border:1px solid var(--yq-primary);border-radius:8px;padding:8px 16px;cursor:pointer;font-size:14px;}
.yq-btn-line:hover{background:var(--yq-soft);}
.yq-btn-white{background:#fff;color:var(--yq-primary);border:none;border-radius:8px;padding:10px 22px;cursor:pointer;font-size:14px;font-weight:600;}
.yq-btn-white:hover{background:#f5f7ff;}
.yq-btn-ghost{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.5);border-radius:8px;padding:10px 22px;cursor:pointer;font-size:14px;font-weight:600;}
.yq-btn-ghost:hover{background:rgba(255,255,255,.22);}
.yq-btn-primary-sm{background:var(--yq-primary);color:#fff;border:none;border-radius:6px;padding:5px 12px;cursor:pointer;font-size:13px;}
.yq-btn-line-sm{background:#fff;color:var(--yq-text);border:1px solid var(--yq-border);border-radius:6px;padding:5px 12px;cursor:pointer;font-size:13px;}
.yq-btn-grab{background:var(--yq-warning);color:#fff;border:none;border-radius:6px;padding:5px 12px;cursor:pointer;font-size:13px;font-weight:600;}
.yq-btn-grab:hover{background:#e67200;}
.yq-link{background:none;border:none;color:var(--yq-primary);cursor:pointer;font-size:13px;text-decoration:underline;padding:2px;}

/* Banner */
.yq-banner{background:linear-gradient(135deg,#165DFF 0%,#0FC6C2 100%);color:#fff;border-radius:var(--yq-radius);padding:42px 44px;display:grid;grid-template-columns:1.2fr 1fr;gap:30px;align-items:center;}
.yq-banner-inner .yq-banner-chip{display:inline-block;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.2);font-size:13px;padding:5px 14px;border-radius:20px;margin-bottom:18px;}
.yq-banner-h{font-size:34px;font-weight:700;line-height:1.2;margin:0 0 14px;}
.yq-banner-p{font-size:15px;line-height:1.7;color:rgba(255,255,255,.9);margin:0 0 22px;}
.yq-banner-btns{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:28px;}
.yq-banner-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;max-width:480px;}
.yq-bs{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);border-radius:10px;padding:12px 14px;}
.yq-bs b{display:block;font-size:18px;font-weight:700;}
.yq-bs span{font-size:12px;color:rgba(255,255,255,.8);}
.yq-banner-card{background:#fff;border-radius:14px;padding:22px;color:var(--yq-dark);box-shadow:0 12px 32px rgba(0,0,0,.15);}
.yq-bc-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;}
.yq-bc-sub{font-size:12px;color:#999;}
.yq-bc-no{font-weight:600;}
.yq-bc-tag{background:rgba(255,125,0,.12);color:var(--yq-warning);font-size:12px;padding:3px 10px;border-radius:12px;}
.yq-bc-rows{display:flex;flex-direction:column;gap:8px;}
.yq-bc-row{display:flex;justify-content:space-between;background:var(--yq-soft);border-radius:8px;padding:10px 12px;font-size:13px;}
.yq-bc-row span{color:#999;}
.yq-bc-foot{margin-top:16px;padding-top:14px;border-top:1px solid var(--yq-border);display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#999;}

/* Section */
.yq-section{padding:34px 4px;}
.yq-section.yq-soft{background:var(--yq-soft);border-radius:var(--yq-radius);padding:34px 24px;margin-top:24px;}
.yq-sec-head{text-align:center;margin-bottom:26px;}
.yq-sec-sub{font-size:13px;color:var(--yq-primary);font-weight:600;margin-bottom:6px;}
.yq-sec-title{font-size:26px;font-weight:700;color:var(--yq-dark);margin:0;}
.yq-sec-desc{font-size:14px;color:#999;margin-top:10px;max-width:640px;margin-left:auto;margin-right:auto;}
.yq-feat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;}
.yq-feat{background:var(--yq-soft);border-radius:14px;padding:24px;transition:all .3s;}
.yq-feat:hover{transform:translateY(-4px);box-shadow:0 12px 32px rgba(22,93,255,.15);}
.yq-feat-ic{width:44px;height:44px;border-radius:10px;background:var(--yq-primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:14px;}
.yq-feat-t{font-size:17px;font-weight:600;color:var(--yq-dark);margin:0 0 8px;}
.yq-feat-d{font-size:13px;line-height:1.7;color:var(--yq-text);margin:0;}
.yq-flow-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;}
.yq-flow{background:#fff;border-radius:12px;padding:22px;text-align:center;box-shadow:0 4px 20px rgba(22,93,255,.08);}
.yq-flow-ic{width:50px;height:50px;border-radius:12px;background:rgba(22,93,255,.1);color:var(--yq-primary);display:flex;align-items:center;justify-content:center;font-size:22px;margin:0 auto 12px;}
.yq-flow-t{font-size:15px;font-weight:600;color:var(--yq-dark);margin:0 0 4px;}
.yq-flow-d{font-size:12px;color:#999;margin:0;}
.yq-cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;}
.yq-cat{background:var(--yq-soft);border-radius:14px;padding:22px;transition:all .3s;}
.yq-cat:hover{transform:translateY(-4px);box-shadow:0 12px 32px rgba(22,93,255,.15);}
.yq-cat-ic{font-size:26px;color:var(--yq-primary);margin-bottom:10px;}
.yq-cat-t{font-size:16px;font-weight:600;color:var(--yq-dark);margin:0 0 6px;}
.yq-cat-d{font-size:12px;color:#999;margin:0;}

.yq-footer{background:var(--yq-dark);color:#a9aeb8;border-radius:var(--yq-radius) var(--yq-radius) 0 0;padding:34px 30px 14px;margin-top:24px;}
.yq-foot-inner{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:24px;padding-bottom:24px;border-bottom:1px solid #2b2f37;}
.yq-foot-inner b{color:#fff;font-size:16px;}
.yq-foot-inner p{font-size:13px;line-height:1.7;margin:8px 0 0;}
.yq-foot-inner h4{color:#fff;font-size:14px;margin:0 0 12px;}
.yq-foot-inner ul{list-style:none;padding:0;margin:0;}
.yq-foot-inner li{font-size:13px;margin-bottom:8px;}
.yq-foot-bottom{text-align:center;font-size:12px;padding-top:14px;color:#6b7075;}

/* Auth */
.yq-auth-wrap{min-height:60vh;display:flex;align-items:flex-start;justify-content:center;padding:20px 0;}
.yq-auth-card{background:#fff;border-radius:14px;padding:28px;box-shadow:0 6px 30px rgba(22,93,255,.1);max-width:460px;width:100%;}
.yq-auth-tabs{display:flex;gap:6px;background:var(--yq-soft);border-radius:8px;padding:4px;margin-bottom:18px;}
.yq-auth-tab{flex:1;background:none;border:none;cursor:pointer;padding:9px;border-radius:6px;font-size:14px;color:var(--yq-text);transition:all .2s;}
.yq-auth-tab.active{background:#fff;color:var(--yq-primary);font-weight:600;box-shadow:0 2px 8px rgba(0,0,0,.08);}
.yq-auth-sub{font-size:13px;color:#999;margin-bottom:18px;}
.yq-auth-btns{display:flex;gap:10px;margin-top:20px;}
.yq-auth-btns button{flex:1;}
.yq-auth-tip{font-size:12px;color:#b0b3bb;margin-top:16px;line-height:1.6;background:var(--yq-soft);padding:10px 12px;border-radius:8px;}
.yq-auth-back{text-align:center;margin-top:14px;}

/* Form */
.yq-field{margin-bottom:16px;}
.yq-field label{display:block;font-size:13px;color:var(--yq-dark);font-weight:600;margin-bottom:6px;}
.yq-input{width:100%;padding:10px 12px;border:1px solid var(--yq-border);border-radius:8px;font-size:14px;color:var(--yq-dark);background:#fff;outline:none;font-family:inherit;transition:border-color .2s;}
.yq-input:focus{border-color:var(--yq-primary);}
.yq-textarea{resize:vertical;min-height:70px;}
.yq-chips{display:flex;flex-wrap:wrap;gap:8px;}
.yq-chip{display:inline-flex;align-items:center;gap:4px;background:var(--yq-soft);border-radius:16px;padding:4px 12px;font-size:13px;cursor:pointer;}
.yq-chip input{width:auto;margin:0;}
.yq-chip input:checked+span{color:var(--yq-primary);font-weight:600;}

/* Page */
.yq-page{padding:5px 0 0;}
.yq-page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:10px;}
.yq-page-title{font-size:20px;font-weight:700;color:var(--yq-dark);margin:0;}
.yq-page-actions{display:flex;gap:8px;}
.yq-stats-row{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:18px;}
.yq-stat{background:#fff;border-radius:10px;padding:14px 20px;box-shadow:0 2px 12px rgba(0,0,0,.05);min-width:130px;}
.yq-stat b{display:block;font-size:22px;color:var(--yq-primary);font-weight:700;}
.yq-stat span{font-size:12px;color:#999;}
.yq-stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin-bottom:18px;}
.yq-stat-card{background:#fff;border-radius:12px;padding:18px;box-shadow:0 2px 12px rgba(0,0,0,.05);}
.yq-stat-card b{display:block;font-size:24px;color:var(--yq-primary);font-weight:700;}
.yq-stat-card span{font-size:13px;color:var(--yq-text);display:block;margin-top:2px;}
.yq-stat-card i{font-size:12px;font-style:normal;margin-top:8px;display:inline-block;padding:2px 8px;border-radius:10px;}
.yq-st-orange{background:rgba(255,125,0,.12);color:var(--yq-warning);}
.yq-st-warn{background:rgba(255,125,0,.12);color:var(--yq-warning);}
.yq-st-blue{background:rgba(22,93,255,.12);color:var(--yq-primary);}
.yq-st-green{background:rgba(0,180,42,.12);color:var(--yq-success);}
.yq-st-cyan{background:rgba(15,198,194,.12);color:var(--yq-secondary);}

.yq-card{background:#fff;border-radius:12px;padding:18px;box-shadow:0 2px 12px rgba(0,0,0,.05);margin-bottom:18px;}
.yq-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;}
.yq-card-head h3{font-size:16px;font-weight:600;color:var(--yq-dark);margin:0;}
.yq-card-sub{font-size:12px;color:#999;}
.yq-empty{text-align:center;color:#bbb;padding:30px 10px;font-size:14px;}
.yq-center{text-align:center;}

.yq-tabs{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap;}
.yq-tab{background:#fff;border:1px solid var(--yq-border);border-radius:8px;padding:7px 16px;cursor:pointer;font-size:14px;color:var(--yq-text);transition:all .2s;}
.yq-tab:hover{border-color:var(--yq-primary);color:var(--yq-primary);}
.yq-tab.active{background:var(--yq-primary);color:#fff;border-color:var(--yq-primary);}

.yq-table-wrap{overflow-x:auto;border-radius:8px;}
.yq-table{width:100%;border-collapse:collapse;font-size:13px;}
.yq-table th{background:var(--yq-soft);color:var(--yq-dark);font-weight:600;text-align:left;padding:10px 12px;white-space:nowrap;}
.yq-table td{padding:10px 12px;border-bottom:1px solid var(--yq-border);color:var(--yq-text);}
.yq-table tbody tr:hover{background:#fafbff;}
.yq-td-clip{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

.yq-tag{display:inline-block;font-size:12px;padding:2px 10px;border-radius:10px;font-weight:500;}
.yq-tag-green{background:rgba(0,180,42,.12);color:var(--yq-success);}
.yq-tag-red{background:rgba(230,72,72,.12);color:#e64848;}
.yq-tag-orange{background:rgba(255,125,0,.12);color:var(--yq-warning);}
.yq-tag-blue{background:rgba(22,93,255,.12);color:var(--yq-primary);}
.yq-tag-cyan{background:rgba(15,198,194,.12);color:var(--yq-secondary);}
.yq-tag-warn{background:rgba(255,200,0,.15);color:#c9a000;}
.yq-tag-gray{background:#eef0f2;color:#86909c;}

.yq-order-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;}
.yq-order-card{background:var(--yq-soft);border-radius:12px;padding:16px;}
.yq-oc-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
.yq-oc-no{font-weight:600;color:var(--yq-dark);font-size:14px;}
.yq-oc-row{display:flex;justify-content:space-between;font-size:13px;padding:4px 0;}
.yq-oc-row span{color:#999;}
.yq-oc-row b{color:var(--yq-dark);font-weight:500;text-align:right;}
.yq-oc-foot{margin-top:10px;padding-top:10px;border-top:1px dashed var(--yq-border);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;font-size:12px;color:#999;}

.yq-bar-chart{display:flex;align-items:flex-end;gap:10px;height:160px;padding:10px 4px;}
.yq-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;}
.yq-bar{width:60%;background:linear-gradient(180deg,var(--yq-primary),var(--yq-secondary));border-radius:6px 6px 0 0;min-height:6px;display:flex;align-items:flex-start;justify-content:center;padding-top:4px;}
.yq-bar span{color:#fff;font-size:11px;font-weight:600;}
.yq-bar-label{font-size:12px;color:#999;margin-top:6px;}
.yq-todo-list{display:flex;flex-direction:column;gap:10px;}
.yq-todo{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:var(--yq-soft);border-radius:8px;}
.yq-steps{list-style:none;padding:0;margin:0;counter-reset:s;}
.yq-steps li{counter-increment:s;padding:10px 0 10px 36px;position:relative;font-size:14px;line-height:1.7;color:var(--yq-text);border-bottom:1px dashed var(--yq-border);}
.yq-steps li:last-child{border-bottom:none;}
.yq-steps li::before{content:counter(s);position:absolute;left:0;top:10px;width:24px;height:24px;border-radius:50%;background:var(--yq-primary);color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center;font-weight:600;}
.yq-form-card{padding:6px 0;}

/* Modal —— 弹窗挂在 body 上，需自带变量定义，否则 var() 失效导致暗色主题下白底浅字看不清 */
.yq-mask{--yq-primary:#165DFF;--yq-secondary:#0FC6C2;--yq-warning:#FF7D00;--yq-success:#00B42A;--yq-dark:#1D2129;--yq-soft:#F2F3F5;--yq-border:#E5E6EB;--yq-text:#4E5969;--yq-radius:12px;position:fixed;inset:0;background:rgba(29,33,41,.55);z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px;color:#1D2129;font-family:'Inter','PingFang SC','Microsoft YaHei',system-ui,sans-serif;font-size:14px;line-height:1.6;}
.yq-modal{background:#fff;color:#1D2129;border-radius:14px;padding:24px 26px;max-width:560px;width:100%;max-height:86vh;overflow-y:auto;position:relative;box-shadow:0 20px 60px rgba(0,0,0,.35);}
.yq-modal-close{position:absolute;top:12px;right:14px;background:none;border:none;font-size:26px;color:#86909c;cursor:pointer;line-height:1;}
.yq-modal-close:hover{color:#1D2129;}
.yq-modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;padding-right:30px;}
.yq-modal-head h3{font-size:18px;font-weight:700;color:#1D2129;margin:0;}
.yq-modal-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:20px;padding-top:16px;border-top:1px solid #E5E6EB;}
.yq-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;}
.yq-dt-row{display:flex;justify-content:space-between;align-items:center;background:#F2F3F5;border-radius:8px;padding:10px 14px;font-size:14px;}
.yq-dt-row span{color:#86909c;flex-shrink:0;margin-right:10px;}
.yq-dt-row b{color:#1D2129;font-weight:600;text-align:right;}
.yq-dt-block{margin-top:14px;}
.yq-dt-label{font-size:13px;color:#86909c;margin-bottom:8px;font-weight:600;}
.yq-dt-text{background:#F2F3F5;border-radius:8px;padding:12px 14px;font-size:14px;line-height:1.8;color:#1D2129;}
.yq-rating{display:flex;align-items:center;gap:8px;font-size:14px;color:#1D2129;}
.yq-rate-sel,.yq-quote-input{width:auto;min-width:120px;padding:8px 10px;border:1px solid #E5E6EB;border-radius:6px;font-size:14px;color:#1D2129;background:#fff;}

.yq-qr-box{text-align:center;margin-top:16px;}
.yq-qr-box .yq-dt-label{margin-bottom:12px;}
.yq-qr{width:184px;height:184px;background:#fff;border:2px solid #E5E6EB;border-radius:10px;margin:0 auto;position:relative;box-shadow:0 4px 14px rgba(22,93,255,.08);padding:6px;}
.yq-qr i{position:absolute;background:#1D2129;border-radius:1px;}
.yq-qr-code{margin-top:14px;font-family:monospace;font-size:14px;color:#1D2129;background:#F2F3F5;padding:6px 14px;border-radius:6px;display:inline-block;font-weight:600;letter-spacing:.5px;}

.yq-receipt{background:linear-gradient(135deg,#fff,#f0f5ff);border:1px dashed #C9CDD4;border-radius:10px;padding:24px;margin-top:8px;}
.yq-rc-title{text-align:center;font-size:19px;font-weight:700;color:#1D2129;}
.yq-rc-sub{text-align:center;font-size:13px;color:#86909c;margin-bottom:16px;}
.yq-rc-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:15px;border-bottom:1px dashed #E5E6EB;}
.yq-rc-row span{color:#86909c;}
.yq-rc-row b{color:#1D2129;font-weight:600;}
.yq-rc-big{font-size:19px;}
.yq-rc-big b{color:#165DFF;font-size:24px;font-weight:700;}
.yq-rc-stamp{text-align:center;margin-top:18px;font-size:16px;font-weight:700;color:#00B42A;border:2px solid #00B42A;border-radius:50%;width:96px;height:96px;line-height:92px;margin-left:auto;margin-right:auto;}

@media (max-width:768px){
  .yq-banner{grid-template-columns:1fr;padding:28px 20px;}
  .yq-banner-h{font-size:24px;}
  .yq-banner-card{display:none;}
  .yq-topbar{flex-wrap:wrap;}
  .yq-nav{order:3;width:100%;overflow-x:auto;}
}


/* ============ tn 体能健身平台 ============ */
.tn-app{--tn-primary:#2563eb;--tn-success:#10b981;--tn-warning:#f59e0b;--tn-danger:#ef4444;--tn-info:#0ea5e9;--tn-bg:#f3f4f6;--tn-card:#fff;--tn-text:#1f2937;--tn-soft:#6b7280;--tn-border:#e5e7eb;--tn-shadow:0 2px 8px rgba(0,0,0,0.06);background:var(--tn-bg);color:var(--tn-text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;min-height:100%;padding:0;border-radius:8px;overflow:hidden;}
.tn-app *{box-sizing:border-box;}
.tn-app button{font-family:inherit;cursor:pointer;border:none;outline:none;}
.tn-app input,.tn-app select,.tn-app textarea{font-family:inherit;font-size:14px;color:var(--tn-text);background:#fff;border:1px solid var(--tn-border);border-radius:6px;padding:8px 10px;outline:none;}
.tn-app input:focus,.tn-app select:focus,.tn-app textarea:focus{border-color:var(--tn-primary);box-shadow:0 0 0 2px rgba(37,99,235,0.12);}
.tn-login-wrap{max-width:920px;margin:0 auto;padding:24px 16px;}
.tn-login-hero{text-align:center;margin:18px 0 22px;}
.tn-login-hero h1{font-size:clamp(1.5rem,3vw,2rem);font-weight:700;color:#111827;margin:0 0 6px;}
.tn-login-hero p{color:var(--tn-soft);font-size:14px;margin:0;}
.tn-login-card{background:var(--tn-card);border-radius:12px;box-shadow:var(--tn-shadow);padding:18px 18px 22px;max-width:420px;margin:0 auto;}
.tn-login-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--tn-border);}
.tn-lt-btn{flex:1;padding:10px;background:transparent;color:var(--tn-soft);font-size:15px;font-weight:600;border-radius:0;border-bottom:2px solid transparent;}
.tn-lt-btn.active{color:var(--tn-primary);border-bottom-color:var(--tn-primary);}
.tn-form .tn-form-row{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.tn-form .tn-form-row label{font-size:13px;color:var(--tn-soft);}
.tn-form .tn-form-row input,.tn-form .tn-form-row select,.tn-form .tn-form-row textarea{width:100%;}
.tn-form-inline{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;}
.tn-form-inline .tn-form-row{flex:1;min-width:150px;margin-bottom:8px;}
.tn-role-pick{display:flex;gap:8px;flex-wrap:wrap;}
.tn-role-btn{flex:1;min-width:90px;padding:10px 8px;background:#f9fafb;border:1px solid var(--tn-border);border-radius:8px;color:var(--tn-soft);font-size:13px;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all .15s;}
.tn-role-btn i{font-size:18px;}
.tn-role-btn.active{background:#eff6ff;border-color:var(--tn-primary);color:var(--tn-primary);}
.tn-btn-primary{background:var(--tn-primary);color:#fff;padding:10px 18px;border-radius:8px;font-size:14px;font-weight:600;width:100%;margin-top:4px;}
.tn-btn-primary:active{transform:scale(0.98);}
.tn-btn-sm{background:var(--tn-primary);color:#fff;padding:6px 12px;border-radius:6px;font-size:13px;}
.tn-btn-sm:active{transform:scale(0.96);}
.tn-btn-success{background:var(--tn-success);color:#fff;}
.tn-btn-warn{background:var(--tn-warning);color:#fff;}
.tn-btn-danger{background:var(--tn-danger);color:#fff;}
.tn-form-sub{margin-top:14px;font-size:13px;color:var(--tn-soft);text-align:center;}
.tn-form-sub a{color:var(--tn-primary);cursor:pointer;text-decoration:none;}
.tn-form-tip{min-height:18px;font-size:12px;margin:6px 0;color:var(--tn-soft);}
.tn-form-tip.err{color:var(--tn-danger);}
.tn-form-tip.ok{color:var(--tn-success);}
.tn-header{background:var(--tn-card);padding:10px 16px;display:flex;justify-content:space-between;align-items:center;box-shadow:var(--tn-shadow);}
.tn-brand{font-weight:700;font-size:16px;color:var(--tn-primary);}
.tn-role-name{font-size:13px;color:var(--tn-soft);font-weight:400;margin-left:6px;}
.tn-logout{background:transparent;color:var(--tn-soft);font-size:13px;padding:6px 10px;border-radius:6px;}
.tn-logout:hover{color:var(--tn-danger);}
.tn-nav{display:flex;gap:6px;padding:10px 12px;flex-wrap:wrap;border-bottom:1px solid var(--tn-border);background:#fff;}
.tn-nav-btn{background:#f3f4f6;color:var(--tn-soft);padding:8px 14px;border-radius:18px;font-size:13px;}
.tn-nav-btn.active{background:var(--tn-primary);color:#fff;}
.tn-body{padding:5px 16px 20px;}
.tn-card{background:var(--tn-card);border-radius:10px;padding:14px 16px;box-shadow:var(--tn-shadow);margin-bottom:12px;}
.tn-card-title{font-size:15px;font-weight:700;color:var(--tn-text);margin:0 0 10px;padding-bottom:8px;border-bottom:1px solid var(--tn-border);}
.tn-card-desc{font-size:13px;color:var(--tn-soft);margin:0 0 10px;}
.tn-card-sub{font-size:13px;font-weight:600;color:var(--tn-soft);margin:8px 0 6px;}
.tn-item-card{border:1px solid var(--tn-border);border-radius:8px;padding:10px 12px;margin-bottom:8px;}
.tn-item-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;}
.tn-item-title{font-weight:600;font-size:14px;color:var(--tn-text);}
.tn-item-meta{font-size:12px;color:var(--tn-soft);margin-top:3px;}
.tn-item-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap;}
.tn-mini{font-size:12px;color:var(--tn-soft);}
.tn-price{font-weight:700;color:var(--tn-warning);font-size:16px;}
.tn-price-sm{font-weight:700;color:var(--tn-warning);font-size:13px;}
.tn-empty{text-align:center;color:#9ca3af;font-size:13px;padding:20px 0;}
.tn-tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;line-height:1.6;}
.tn-tag-green{background:#d1fae5;color:#065f46;}
.tn-tag-orange{background:#ffedd5;color:#9a3412;}
.tn-tag-red{background:#fee2e2;color:#991b1b;}
.tn-tag-gray{background:#e5e7eb;color:#374151;}
.tn-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;}
.tn-stat-card{border-radius:10px;padding:14px 10px;text-align:center;}
.tn-stat-val{font-size:22px;font-weight:700;color:#fff;}
.tn-stat-label{font-size:12px;color:#fff;opacity:.92;margin-top:4px;}
.tn-stat-primary{background:linear-gradient(135deg,#3b82f6,#2563eb);}
.tn-stat-orange{background:linear-gradient(135deg,#f59e0b,#d97706);}
.tn-stat-warning{background:linear-gradient(135deg,#fbbf24,#f59e0b);}
.tn-stat-success{background:linear-gradient(135deg,#34d399,#10b981);}
.tn-stat-info{background:linear-gradient(135deg,#38bdf8,#0ea5e9);}
.tn-stat-danger{background:linear-gradient(135deg,#f87171,#ef4444);}
.tn-bars{display:flex;align-items:flex-end;gap:8px;height:140px;padding:10px 4px 0;background:#f9fafb;border-radius:8px;margin-top:6px;}
.tn-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;}
.tn-bar-val{font-size:11px;color:var(--tn-soft);margin-bottom:2px;}
.tn-bar{width:60%;min-width:18px;background:linear-gradient(180deg,#3b82f6,#2563eb);border-radius:4px 4px 0 0;}
.tn-bar-label{font-size:10px;color:var(--tn-soft);margin-top:4px;}
.tn-verify-row{display:flex;gap:8px;margin-bottom:12px;}
.tn-verify-row input{flex:1;}
.tn-row-line{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px dashed var(--tn-border);}
.tn-row-line:last-child{border-bottom:none;}
.tn-select{min-width:120px;}
.tn-qr-box{display:flex;justify-content:center;margin:8px 0;}
.tn-qr-grid{display:grid;gap:2px;width:120px;height:120px;padding:6px;background:#fff;border:1px solid var(--tn-border);border-radius:6px;}
.tn-qr-cell{background:#f3f4f6;border-radius:1px;}
.tn-qr-cell.on{background:#1f2937;}
.tn-sign-code{text-align:center;font-size:20px;font-weight:700;color:var(--tn-primary);letter-spacing:2px;margin:6px 0;}
.tn-pay-name{text-align:center;font-weight:700;font-size:16px;margin:6px 0;}
.tn-pay-meta{text-align:center;font-size:12px;color:var(--tn-soft);margin-bottom:6px;}
.tn-pay-amount{text-align:center;font-size:24px;font-weight:700;color:var(--tn-warning);margin:4px 0 10px;}
.tn-pay-qr{display:flex;justify-content:center;margin:6px 0;}
.tn-pay-tip{text-align:center;font-size:12px;color:var(--tn-soft);margin:6px 0;}
.tn-pay-countdown{text-align:center;font-size:15px;font-weight:700;color:var(--tn-danger);margin-top:4px;}
/* 弹窗：挂 body，自带变量+深色文字+字体，避免驾驶舱暗色主题污染 */
.tn-mask{--tn-primary:#2563eb;--tn-success:#10b981;--tn-warning:#f59e0b;--tn-danger:#ef4444;--tn-card:#fff;--tn-text:#1f2937;--tn-soft:#6b7280;--tn-border:#e5e7eb;position:fixed;inset:0;background:rgba(15,23,42,0.55);display:flex;align-items:center;justify-content:center;z-index:99999;color:var(--tn-text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;}
.tn-modal{background:var(--tn-card);border-radius:12px;width:min(92vw,420px);max-height:90vh;overflow:auto;box-shadow:0 12px 40px rgba(0,0,0,0.25);}
.tn-modal-head{padding:14px 18px;font-size:15px;font-weight:700;color:var(--tn-text);border-bottom:1px solid var(--tn-border);}
.tn-modal-body{padding:16px 18px;}
.tn-modal-foot{padding:12px 18px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--tn-border);}
.tn-modal-foot button{font-family:inherit;}
@media (prefers-reduced-motion:reduce){.tn-app *,.tn-mask *{transition:none!important;animation:none!important;}}
@media (max-width:768px){.tn-login-wrap{padding:12px 8px;}.tn-body{padding:5px 10px 16px;}.tn-stat-grid{grid-template-columns:repeat(2,1fr);}.tn-bars{height:110px;}.tn-item-head{flex-direction:column;}.tn-form-inline{flex-direction:column;}}


/* ============ xz 闲置流转平台样式（右侧槽位 14 显示 15）============ */
.xz-app{--xz-primary:#2563eb;--xz-success:#10b981;--xz-warning:#f59e0b;--xz-danger:#ef4444;--xz-text:#1D2129;--xz-text-sub:#86909c;--xz-text-light:#a0a8b0;--xz-bg:#f5f7fa;--xz-card-bg:#ffffff;--xz-border:#e5e7eb;--xz-bg-soft:#f3f4f6;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--xz-text);background:var(--xz-bg);min-height:100%;padding:0;margin:0;box-sizing:border-box;font-size:14px;line-height:1.5;}
.xz-app *{box-sizing:border-box;}
.xz-app a{cursor:pointer;color:var(--xz-primary);text-decoration:none;}
.xz-app label{display:block;font-size:13px;color:var(--xz-text-sub);margin-bottom:4px;}
.xz-app input,.xz-app select,.xz-app textarea{width:100%;font-size:14px;padding:8px 10px;border:1px solid var(--xz-border);border-radius:6px;background:#fff;color:var(--xz-text);outline:none;font-family:inherit;}
.xz-app input:focus,.xz-app select:focus,.xz-app textarea:focus{border-color:var(--xz-primary);box-shadow:0 0 0 3px rgba(37,99,235,0.12);}
.xz-app textarea{resize:vertical;line-height:1.5;}
.xz-app button{cursor:pointer;font-family:inherit;border:none;background:none;color:inherit;}
.xz-app select{appearance:auto;}
.xz-btn-primary,.xz-btn-success,.xz-btn-danger,.xz-btn-ghost{display:inline-block;padding:8px 18px;border-radius:6px;font-size:14px;font-weight:600;transition:all .15s;border:1px solid transparent;line-height:1.2;}
.xz-btn-primary{background:var(--xz-primary);color:#fff;}
.xz-btn-primary:hover{filter:brightness(1.08);}
.xz-btn-success{background:var(--xz-success);color:#fff;}
.xz-btn-success:hover{filter:brightness(1.08);}
.xz-btn-danger{background:var(--xz-danger);color:#fff;}
.xz-btn-danger:hover{filter:brightness(1.08);}
.xz-btn-ghost{background:#fff;color:var(--xz-text-sub);border:1px solid var(--xz-border);}
.xz-btn-ghost:hover{border-color:var(--xz-primary);color:var(--xz-primary);}
.xz-app .xz-btn-primary:active,.xz-app .xz-btn-success:active,.xz-app .xz-btn-danger:active,.xz-app .xz-btn-ghost:active{transform:scale(0.97);}
.xz-login-wrap{max-width:920px;margin:0 auto;padding:24px 16px;display:flex;gap:28px;flex-wrap:wrap;align-items:stretch;}
.xz-login-hero{flex:1 1 360px;background:linear-gradient(135deg,#2563eb 0%,#10b981 100%);color:#fff;border-radius:16px;padding:40px 32px;display:flex;flex-direction:column;justify-content:center;}
.xz-login-hero h1{font-size:30px;font-weight:700;margin:0 0 12px;line-height:1.3;}
.xz-login-hero p{font-size:15px;opacity:.92;margin:0;line-height:1.7;}
.xz-login-card{flex:1 1 360px;background:#fff;border-radius:16px;padding:28px 24px;box-shadow:0 4px 20px rgba(0,0,0,0.06);}
.xz-login-tabs{display:flex;gap:8px;border-bottom:1px solid var(--xz-border);margin-bottom:20px;}
.xz-lt-btn{flex:1;padding:10px;font-size:15px;font-weight:600;color:var(--xz-text-sub);border-bottom:2px solid transparent;}
.xz-lt-btn.active{color:var(--xz-primary);border-bottom-color:var(--xz-primary);}
.xz-form{display:flex;flex-direction:column;gap:14px;}
.xz-form-row{display:flex;flex-direction:column;}
.xz-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;}
.xz-field{display:flex;flex-direction:column;}
.xz-field-full{grid-column:1 / -1;}
.xz-role-pick{display:flex;gap:8px;flex-wrap:wrap;}
.xz-role-btn{flex:1;min-width:90px;padding:10px 8px;border:1px solid var(--xz-border);border-radius:8px;background:#fff;color:var(--xz-text-sub);font-size:13px;font-weight:600;display:flex;flex-direction:column;align-items:center;gap:4px;}
.xz-role-btn.active{border-color:var(--xz-primary);color:var(--xz-primary);background:#eff6ff;}
.xz-role-btn i{font-size:20px;}
.xz-form-tip{font-size:13px;color:var(--xz-text-sub);min-height:18px;}
.xz-form-tip-warn{background:#fef3c7;color:#92400e;padding:8px 12px;border-radius:6px;font-size:13px;border:1px solid #fde68a;}
.xz-tip-err{color:var(--xz-danger);}
.xz-form-sub{font-size:13px;color:var(--xz-text-sub);text-align:center;margin-top:4px;}
.xz-form .xz-btn-primary{margin-top:6px;padding:11px;font-size:15px;width:100%;}
.xz-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#fff;border-bottom:1px solid var(--xz-border);position:sticky;top:0;z-index:10;}
.xz-brand{font-size:17px;font-weight:700;color:var(--xz-primary);}
.xz-role-name{font-size:13px;color:var(--xz-text-sub);font-weight:400;margin-left:8px;}
.xz-logout{font-size:13px;color:var(--xz-text-sub);padding:6px 12px;border-radius:6px;}
.xz-logout:hover{color:var(--xz-danger);background:#fee2e2;}
.xz-nav{display:flex;gap:6px;flex-wrap:wrap;padding:12px 16px;background:#fff;border-bottom:1px solid var(--xz-border);}
.xz-nav-btn{padding:7px 14px;border-radius:6px;font-size:13px;font-weight:600;color:var(--xz-text-sub);background:transparent;border:1px solid transparent;}
.xz-nav-btn.active{background:var(--xz-primary);color:#fff;}
.xz-nav-btn:not(.active):hover{background:var(--xz-bg-soft);color:var(--xz-primary);}
.xz-body{padding:14px 16px 40px;max-width:1280px;margin:0 auto;}
.xz-card{background:#fff;border-radius:12px;padding:16px 18px;box-shadow:0 2px 10px rgba(0,0,0,0.04);margin-bottom:14px;}
.xz-card-title{font-size:16px;font-weight:700;margin:0 0 14px;color:var(--xz-text);padding-bottom:10px;border-bottom:1px solid var(--xz-border);}
.xz-app .xz-card .xz-form-grid{margin-bottom:14px;}
.xz-app .xz-card .xz-btn-primary{margin-top:4px;}
.xz-list{display:flex;flex-direction:column;gap:10px;}
.xz-row{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--xz-border);border-radius:8px;background:#fff;}
.xz-row-main{flex:1;min-width:0;}
.xz-row-title{font-size:15px;font-weight:600;color:var(--xz-text);}
.xz-row-sub{font-size:13px;color:var(--xz-text-sub);margin-top:3px;word-break:break-all;}
.xz-row-desc{font-size:13px;color:var(--xz-text-sub);margin-top:4px;padding:6px 8px;background:var(--xz-bg-soft);border-radius:4px;line-height:1.5;}
.xz-row-side{flex-shrink:0;}
.xz-row-op{flex-shrink:0;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;}
.xz-row-op button{padding:5px 12px;font-size:12px;}
.xz-empty{padding:32px 16px;text-align:center;color:var(--xz-text-light);font-size:14px;}
.xz-warn-text{color:var(--xz-danger)!important;}
.xz-filter-bar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;align-items:center;}
.xz-filter-bar select,.xz-filter-bar input{width:auto;min-width:120px;padding:7px 10px;font-size:13px;}
.xz-filter-bar input{flex:1;min-width:180px;}
.xz-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;}
.xz-card-item{border:1px solid var(--xz-border);border-radius:10px;padding:14px;background:#fff;display:flex;flex-direction:column;gap:6px;transition:all .15s;}
.xz-card-item:hover{box-shadow:0 4px 14px rgba(37,99,235,0.10);border-color:#bfdbfe;}
.xz-card-item-name{font-size:16px;font-weight:700;color:var(--xz-text);}
.xz-card-item-sub{font-size:13px;color:var(--xz-text-sub);}
.xz-card-item-desc{font-size:13px;color:var(--xz-text-sub);padding:6px 8px;background:var(--xz-bg-soft);border-radius:4px;line-height:1.5;}
.xz-card-item-price{font-size:18px;font-weight:700;color:var(--xz-warning);}
.xz-card-item-pub{font-size:12px;color:var(--xz-text-light);}
.xz-card-item-btns{display:flex;gap:6px;margin-top:8px;}
.xz-card-item-btns button{flex:1;padding:7px 10px;font-size:13px;}
.xz-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:18px;}
.xz-stat-card{padding:16px 12px;border-radius:10px;text-align:center;background:var(--xz-bg-soft);}
.xz-stat-num{font-size:24px;font-weight:700;color:var(--xz-text);line-height:1.2;}
.xz-stat-label{font-size:13px;color:var(--xz-text-sub);margin-top:4px;}
.xz-stat-blue{background:#dbeafe;}.xz-stat-blue .xz-stat-num{color:#1e40af;}
.xz-stat-green{background:#d1fae5;}.xz-stat-green .xz-stat-num{color:#065f46;}
.xz-stat-orange{background:#ffedd5;}.xz-stat-orange .xz-stat-num{color:#9a3412;}
.xz-stat-red{background:#fee2e2;}.xz-stat-red .xz-stat-num{color:#991b1b;}
.xz-stat-purple{background:#ede9fe;}.xz-stat-purple .xz-stat-num{color:#5b21b6;}
.xz-stat-cyan{background:#cffafe;}.xz-stat-cyan .xz-stat-num{color:#155e75;}
.xz-stat-pink{background:#fce7f3;}.xz-stat-pink .xz-stat-num{color:#9d174d;}
.xz-barchart{background:var(--xz-bg-soft);border-radius:10px;padding:14px;margin-bottom:18px;}
.xz-barchart h4{margin:0 0 12px;font-size:14px;color:var(--xz-text);font-weight:600;}
.xz-bar-wrap{display:flex;align-items:flex-end;gap:8px;height:140px;}
.xz-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;}
.xz-bar{width:70%;background:linear-gradient(180deg,#3b82f6,#2563eb);border-radius:4px 4px 0 0;color:#fff;font-size:12px;display:flex;align-items:flex-start;justify-content:center;padding-top:4px;min-height:8px;font-weight:600;}
.xz-bar-label{font-size:11px;color:var(--xz-text-sub);margin-top:6px;}
.xz-log-box{background:var(--xz-bg-soft);border-radius:10px;padding:14px;}
.xz-log-box h4{margin:0 0 10px;font-size:14px;color:var(--xz-text);font-weight:600;}
.xz-log-row{display:flex;gap:10px;font-size:12px;padding:6px 8px;border-bottom:1px dashed var(--xz-border);align-items:center;flex-wrap:wrap;}
.xz-log-row:last-child{border-bottom:none;}
.xz-log-time{color:var(--xz-text-light);min-width:120px;}
.xz-log-act{color:var(--xz-primary);font-weight:600;min-width:70px;}
.xz-log-detail{color:var(--xz-text-sub);flex:1;}
.xz-log-op{color:var(--xz-text-sub);}
.xz-tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600;line-height:1.5;}
.xz-tag-green{background:#d1fae5;color:#065f46;}
.xz-tag-orange{background:#ffedd5;color:#9a3412;}
.xz-tag-red{background:#fee2e2;color:#991b1b;}
.xz-tag-blue{background:#dbeafe;color:#1e40af;}
.xz-tag-gray{background:#f3f4f6;color:#6b7280;}
.xz-tag-purple{background:#ede9fe;color:#5b21b6;}
.xz-stars{color:var(--xz-warning);letter-spacing:2px;font-size:14px;}
.xz-rate-pick{display:flex;gap:4px;margin-top:6px;}
.xz-rate-star{font-size:26px;color:#d1d5db;cursor:pointer;line-height:1;}
.xz-rate-star.active{color:var(--xz-warning);}
.xz-mask{position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:10000;display:flex;align-items:center;justify-content:center;padding:20px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;}
.xz-mask *{box-sizing:border-box;}
.xz-modal{background:#fff;border-radius:14px;padding:22px 22px 18px;width:100%;max-width:440px;max-height:88vh;overflow-y:auto;color:#1D2129;font-size:14px;line-height:1.5;box-shadow:0 20px 50px rgba(0,0,0,0.25);}
.xz-modal-title{font-size:17px;font-weight:700;margin:0 0 14px;color:#1D2129;padding-bottom:10px;border-bottom:1px solid #e5e7eb;}
.xz-modal-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid #f3f4f6;font-size:14px;color:#1D2129;}
.xz-modal-row:last-of-type{border-bottom:none;}
.xz-modal-row span{color:#86909c;font-size:13px;}
.xz-modal-row b{color:#1D2129;font-weight:600;text-align:right;word-break:break-all;}
.xz-modal-label{display:block;width:100%;color:#1D2129;font-size:14px;}
.xz-modal-label input[type=checkbox]{width:auto;margin-right:6px;}
.xz-modal-label textarea{margin-top:6px;}
.xz-modal-btns{display:flex;gap:8px;justify-content:flex-end;margin-top:16px;padding-top:14px;border-top:1px solid #e5e7eb;}
.xz-modal-btns button{padding:8px 16px;font-size:14px;border-radius:6px;font-weight:600;}
.xz-price{color:#f59e0b!important;font-size:16px!important;}
.xz-qr-box{display:flex;justify-content:center;padding:14px 0;}
.xz-qr-grid{display:grid;grid-template-columns:repeat(8,1fr);width:180px;height:180px;gap:2px;padding:10px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.08);}
.xz-qr-grid span{border-radius:1px;}
.xz-qr-on{background:#1D2129;}
.xz-qr-off{background:#fff;}
.xz-pay-tip{text-align:center;font-size:13px;color:#86909c;margin:6px 0;}
.xz-pay-countdown{text-align:center;font-size:20px;font-weight:700;color:#2563eb;letter-spacing:1px;margin:6px 0 4px;}
@media (max-width:768px){
.xz-login-wrap{flex-direction:column;}
.xz-login-hero{flex:none;}
.xz-form-grid{grid-template-columns:1fr;}
.xz-grid{grid-template-columns:1fr;}
.xz-stat-grid{grid-template-columns:repeat(2,1fr);}
.xz-row{flex-direction:column;align-items:flex-start;}
.xz-row-side,.xz-row-op{align-self:stretch;justify-content:flex-start;}
}
@media (prefers-reduced-motion:reduce){.xz-app *{transition:none!important;animation:none!important;}}


/* ============ cw 车位出租平台样式 ============ */
.cw-app{--cw-primary:#2563eb;--cw-success:#10b981;--cw-warning:#f59e0b;--cw-danger:#ef4444;--cw-gray-soft:#f3f4f6;--cw-border:#e5e7eb;--cw-text:#1f2937;--cw-text-soft:#6b7280;--cw-bg:#f9fafb;--cw-card-bg:#ffffff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--cw-text);background:var(--cw-bg);min-height:100%;padding:0;}
.cw-app *{box-sizing:border-box;}
.cw-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,0.05);position:sticky;top:0;z-index:10;}
.cw-title{font-size:18px;font-weight:700;color:var(--cw-primary);}
.cw-role-tag{font-size:13px;color:var(--cw-text-soft);font-weight:400;margin-left:6px;}
.cw-logout{background:none;border:none;color:var(--cw-text-soft);cursor:pointer;font-size:14px;padding:6px 8px;border-radius:4px;}
.cw-logout:hover{color:var(--cw-danger);background:#fef2f2;}
.cw-nav{display:flex;flex-wrap:wrap;gap:8px;padding:12px 16px;background:#fff;border-bottom:1px solid var(--cw-border);}
.cw-nav-btn{padding:8px 16px;background:#fff;border:1px solid var(--cw-border);border-radius:6px;cursor:pointer;font-size:14px;color:var(--cw-text);transition:all .15s;}
.cw-nav-btn:hover{border-color:var(--cw-primary);color:var(--cw-primary);}
.cw-nav-btn.active{background:var(--cw-primary);color:#fff;border-color:var(--cw-primary);}
.cw-body{padding:16px;}
.cw-card{background:var(--cw-card-bg);border-radius:10px;padding:18px;box-shadow:0 2px 8px rgba(0,0,0,0.04);margin-bottom:16px;}
.cw-card-title{font-size:17px;font-weight:700;margin:0 0 14px 0;color:var(--cw-text);}
.cw-empty{padding:24px;text-align:center;color:var(--cw-text-soft);font-size:14px;background:var(--cw-gray-soft);border-radius:8px;}
.cw-hint{color:var(--cw-text-soft);font-size:13px;}
.cw-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 18px;border:none;border-radius:6px;cursor:pointer;font-size:14px;background:var(--cw-gray-soft);color:var(--cw-text);transition:all .15s;}
.cw-btn:hover{opacity:.88;}
.cw-btn.primary{background:var(--cw-primary);color:#fff;}
.cw-btn.success{background:var(--cw-success);color:#fff;}
.cw-btn.warning{background:var(--cw-warning);color:#fff;}
.cw-btn.danger{background:var(--cw-danger);color:#fff;}
.cw-btn.ghost{background:#fff;border:1px solid var(--cw-border);color:var(--cw-text);}
.cw-btn.small{padding:6px 12px;font-size:13px;}
.cw-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-bottom:14px;}
.cw-field{display:flex;flex-direction:column;gap:6px;}
.cw-field label{font-size:13px;color:var(--cw-text-soft);}
.cw-field input,.cw-field select,.cw-field textarea{padding:8px 10px;border:1px solid var(--cw-border);border-radius:6px;font-size:14px;background:#fff;color:var(--cw-text);outline:none;}
.cw-field input:focus,.cw-field select:focus,.cw-field textarea:focus{border-color:var(--cw-primary);}
.cw-col-2{grid-column:span 2;}
.cw-park-list,.cw-order-list{display:flex;flex-direction:column;gap:10px;}
.cw-park-item,.cw-order-item{border:1px solid var(--cw-border);border-radius:8px;padding:12px;background:#fff;}
.cw-park-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px;}
.cw-park-no{font-weight:700;color:var(--cw-text);}
.cw-park-loc{color:var(--cw-text-soft);font-size:14px;}
.cw-park-row{font-size:14px;color:var(--cw-text);margin-top:4px;}
.cw-park-op{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px;}
.cw-price{color:var(--cw-warning);font-weight:700;}
.cw-income{color:var(--cw-success);font-weight:700;}
.cw-tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500;}
.cw-tag-pending{background:#fef3c7;color:#92400e;}
.cw-tag-on{background:#d1fae5;color:#065f46;}
.cw-tag-off{background:#f3f4f6;color:#4b5563;}
.cw-tag-reject{background:#fee2e2;color:#991b1b;}
.cw-tag-paid{background:#dbeafe;color:#1e40af;}
.cw-tag-parked{background:#d1fae5;color:#065f46;}
.cw-tag-finished{background:#e0e7ff;color:#3730a3;}
.cw-tag-cancelled{background:#f3f4f6;color:#4b5563;}
.cw-tag-pass{background:#d1fae5;color:#065f46;}
.cw-verify-box{display:flex;align-items:center;gap:10px;margin-top:10px;padding:10px;border:1px dashed var(--cw-border);border-radius:6px;background:var(--cw-gray-soft);}
.cw-verify-label{font-size:13px;color:var(--cw-text-soft);}
.cw-verify-code{font-size:20px;font-weight:700;letter-spacing:2px;color:var(--cw-primary);font-family:monospace;}

/* 模拟地图 */
.cw-map-mock{position:relative;height:200px;background:linear-gradient(135deg,#e0e7ff 0%,#f3f4f6 100%);border-radius:10px;margin-bottom:14px;overflow:hidden;border:1px solid var(--cw-border);}
.cw-map-pin{position:absolute;width:14px;height:14px;background:var(--cw-danger);border:3px solid #fff;border-radius:50%;box-shadow:0 0 0 2px rgba(239,68,68,0.3);transform:translate(-50%,-50%);}
.cw-map-label{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);font-size:13px;color:var(--cw-text-soft);background:rgba(255,255,255,0.8);padding:4px 10px;border-radius:4px;}
.cw-map-filter{margin-bottom:12px;}
.cw-map-filter input{width:100%;padding:8px 12px;border:1px solid var(--cw-border);border-radius:6px;font-size:14px;}

/* 统计卡 */
.cw-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin-bottom:14px;}
.cw-stat-card{padding:14px;border-radius:8px;text-align:center;background:var(--cw-gray-soft);}
.cw-stat-card.primary{background:#dbeafe;}
.cw-stat-card.success{background:#d1fae5;}
.cw-stat-card.warning{background:#fef3c7;}
.cw-stat-card.danger{background:#fee2e2;}
.cw-stat-card.gray{background:#f3f4f6;}
.cw-stat-num{font-size:22px;font-weight:700;color:var(--cw-text);}
.cw-stat-label{font-size:13px;color:var(--cw-text-soft);margin-top:4px;}
.cw-stat-total{padding:10px 14px;background:#eff6ff;border-radius:8px;font-size:15px;font-weight:600;color:var(--cw-primary);}
.cw-stat-mini{padding:10px 14px;background:#eff6ff;border-radius:8px;font-size:14px;color:var(--cw-text);margin-bottom:12px;}

/* 落地页 */
.cw-app-landing{min-height:100%;padding:20px;}
.cw-landing-wrap{max-width:900px;margin:0 auto;padding:24px 16px;}
.cw-landing-title{font-size:clamp(1.6rem,3vw,2.4rem);font-weight:700;color:var(--cw-text);text-align:center;margin-bottom:8px;}
.cw-landing-sub{font-size:14px;color:var(--cw-text-soft);text-align:center;margin-bottom:32px;}
.cw-roles{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;}
.cw-role-card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 2px 10px rgba(0,0,0,0.05);cursor:pointer;transition:all .2s;border:1px solid var(--cw-border);}
.cw-role-card:hover{transform:translateY(-3px);box-shadow:0 6px 16px rgba(37,99,235,0.15);border-color:var(--cw-primary);}
.cw-role-icon{font-size:36px;color:var(--cw-primary);margin-bottom:12px;}
.cw-role-icon.driver{color:var(--cw-success);}
.cw-role-icon.admin{color:var(--cw-danger);}
.cw-role-card h3{font-size:18px;font-weight:700;margin:0 0 6px 0;color:var(--cw-text);}
.cw-role-card p{font-size:13px;color:var(--cw-text-soft);margin:0;line-height:1.6;}
.cw-landing-tip{text-align:center;font-size:13px;color:var(--cw-text-soft);margin-top:24px;padding:10px;background:#fff;border-radius:6px;}

/* 表单页 */
.cw-app-form{min-height:100%;padding:20px;}
.cw-form-wrap{max-width:480px;margin:24px auto;background:#fff;border-radius:12px;padding:24px;box-shadow:0 2px 10px rgba(0,0,0,0.05);}
.cw-form-title{font-size:20px;font-weight:700;margin:0 0 18px 0;color:var(--cw-text);text-align:center;}
.cw-form-row{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;}
.cw-form-row label{font-size:13px;color:var(--cw-text-soft);}
.cw-form-row input,.cw-form-row select,.cw-form-row textarea{padding:10px 12px;border:1px solid var(--cw-border);border-radius:6px;font-size:14px;outline:none;background:#fff;color:var(--cw-text);}
.cw-form-row input:focus,.cw-form-row select:focus,.cw-form-row textarea:focus{border-color:var(--cw-primary);}
.cw-form-actions{display:flex;flex-direction:column;gap:10px;margin-top:18px;}

.cw-appeal-list-title{font-size:16px;font-weight:600;margin:18px 0 10px 0;color:var(--cw-text);}

/* 收银台弹窗 */
.cw-mask{position:fixed;inset:0;background:rgba(15,23,42,0.55);display:flex;align-items:center;justify-content:center;z-index:9999;--cw-primary:#2563eb;--cw-success:#10b981;--cw-warning:#f59e0b;--cw-danger:#ef4444;--cw-border:#e5e7eb;--cw-text:#1f2937;--cw-text-soft:#6b7280;--cw-gray-soft:#f3f4f6;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--cw-text);}
.cw-mask-card{background:#fff;border-radius:12px;padding:24px;width:340px;max-width:90vw;box-shadow:0 12px 40px rgba(0,0,0,0.2);}
.cw-mask-title{font-size:18px;font-weight:700;text-align:center;color:var(--cw-primary);margin:0 0 14px 0;}
.cw-mask-order{font-size:13px;color:var(--cw-text-soft);text-align:center;margin-bottom:4px;}
.cw-mask-park{font-size:15px;font-weight:600;text-align:center;margin-bottom:6px;color:var(--cw-text);}
.cw-mask-price{font-size:14px;text-align:center;color:var(--cw-warning);font-weight:700;margin-bottom:14px;}
.cw-qr{display:grid;grid-template-columns:repeat(8,1fr);width:180px;height:180px;margin:0 auto 14px;border:6px solid #fff;box-shadow:0 0 0 1px var(--cw-border);background:#fff;padding:4px;}
.cw-qr-cell{background:#fff;}
.cw-qr-cell.on{background:#1f2937;}
.cw-mask-tip{font-size:13px;color:var(--cw-text-soft);text-align:center;margin-bottom:10px;}
.cw-countdown{font-size:14px;text-align:center;color:var(--cw-danger);margin-bottom:14px;font-weight:600;}
.cw-mask-actions{display:flex;gap:10px;}
.cw-mask-actions .cw-btn{flex:1;}
@media (max-width:560px){
  .cw-form-grid{grid-template-columns:1fr;}
  .cw-col-2{grid-column:span 1;}
  .cw-stat-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));}
}
@media (prefers-reduced-motion:reduce){
  .cw-role-card,.cw-nav-btn,.cw-btn{transition:none;}
}


/* ===== ax 安心照顾平台 ===== */
.ax-app{--ax-primary:#2b7cbb;--ax-success:#10b981;--ax-warning:#f59e0b;--ax-danger:#ef4444;--ax-soft:#f8fafc;--ax-text:#1f2937;--ax-text-light:#6b7280;--ax-border:#e5e7eb;--ax-bg:#f3f4f6;--ax-card:#ffffff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--ax-text);background:var(--ax-bg);min-height:100%;padding:16px;box-sizing:border-box;font-size:14px;line-height:1.5;}
.ax-landing{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:calc(100vh - 100px);gap:24px;}
.ax-hero{text-align:center;}
.ax-hero-title{font-size:clamp(1.5rem,3vw,2.2rem);font-weight:700;color:#1f2937;}
.ax-hero-sub{margin-top:8px;color:var(--ax-text-light);font-size:14px;}
.ax-role-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;max-width:1000px;width:100%;}
.ax-role-card{background:var(--ax-card);border-radius:12px;padding:24px;box-shadow:0 2px 8px rgba(0,0,0,0.06);transition:transform 0.2s,box-shadow 0.2s;cursor:pointer;border:2px solid transparent;}
.ax-role-card:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(43,124,187,0.15);border-color:var(--ax-primary);}
.ax-role-card.ax-role-green:hover{border-color:var(--ax-success);box-shadow:0 4px 16px rgba(16,185,129,0.15);}
.ax-role-card.ax-role-orange:hover{border-color:var(--ax-warning);box-shadow:0 4px 16px rgba(245,158,11,0.15);}
.ax-role-icon{font-size:48px;margin-bottom:12px;}
.ax-role-card h3{font-size:18px;font-weight:700;margin:0 0 8px 0;}
.ax-role-card p{font-size:13px;color:var(--ax-text-light);margin:0;line-height:1.6;}
.ax-land-foot{margin-top:8px;}
.ax-land-tip{color:var(--ax-text-light);font-size:12px;}

.ax-btn{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border:none;border-radius:6px;font-size:14px;cursor:pointer;transition:opacity 0.2s;min-height:36px;font-family:inherit;}
.ax-btn:active{opacity:0.8;}
.ax-btn-primary{background:var(--ax-primary);color:#fff;}
.ax-btn-success{background:var(--ax-success);color:#fff;}
.ax-btn-warning{background:var(--ax-warning);color:#fff;}
.ax-btn-danger{background:var(--ax-danger);color:#fff;}
.ax-btn-ghost{background:transparent;border:1px solid var(--ax-border);color:var(--ax-text);}
.ax-btn-sm{padding:4px 10px;font-size:12px;min-height:28px;}

.ax-input{width:100%;padding:8px 10px;border:1px solid var(--ax-border);border-radius:6px;font-size:14px;font-family:inherit;box-sizing:border-box;background:#fff;color:var(--ax-text);}
.ax-input:focus{outline:none;border-color:var(--ax-primary);box-shadow:0 0 0 2px rgba(43,124,187,0.1);}
.ax-textarea{resize:vertical;}
.ax-form-row{margin-bottom:12px;}
.ax-form-row label{display:block;font-size:13px;color:var(--ax-text-light);margin-bottom:4px;}
.ax-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0 16px;}
.ax-col-2{grid-column:1/-1;}
.ax-form-actions{display:flex;gap:8px;margin-top:8px;}

.ax-reg-card{max-width:500px;margin:0 auto;background:var(--ax-card);border-radius:12px;padding:24px;box-shadow:0 2px 8px rgba(0,0,0,0.06);}
.ax-reg-title{font-size:20px;font-weight:700;margin-bottom:20px;text-align:center;}
.ax-check-group{display:flex;flex-wrap:wrap;gap:12px;margin-top:4px;}
.ax-check-item{display:flex;align-items:center;gap:4px;font-size:13px;cursor:pointer;}
.ax-check-item input{cursor:pointer;}

.ax-home{display:flex;flex-direction:column;min-height:100%;}
.ax-header{display:flex;justify-content:space-between;align-items:center;background:var(--ax-card);padding:10px 16px;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,0.05);margin-bottom:12px;}
.ax-header-left{display:flex;align-items:center;gap:8px;}
.ax-header-logo{color:var(--ax-primary);font-size:18px;}
.ax-header-title{font-weight:700;font-size:16px;}
.ax-header-role{color:var(--ax-text-light);font-size:13px;}
.ax-header-right{display:flex;align-items:center;gap:8px;}
.ax-header-user{color:var(--ax-text);font-size:14px;font-weight:500;}
.ax-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:12px;}
.ax-tab{padding:8px 14px;border:1px solid var(--ax-border);background:var(--ax-card);border-radius:6px;cursor:pointer;font-size:13px;color:var(--ax-text);transition:all 0.2s;font-family:inherit;}
.ax-tab:active{opacity:0.85;}
.ax-tab-active{background:var(--ax-primary);color:#fff;border-color:var(--ax-primary);}
.ax-body{flex:1;}

.ax-card{background:var(--ax-card);border-radius:10px;padding:16px;box-shadow:0 1px 4px rgba(0,0,0,0.05);margin-bottom:12px;}
.ax-card-title{font-size:16px;font-weight:700;margin-bottom:12px;color:var(--ax-text);}

.ax-svc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;}
.ax-svc-card{border:1px solid var(--ax-border);border-radius:8px;padding:14px;text-align:center;}
.ax-svc-icon{font-size:32px;margin-bottom:6px;}
.ax-svc-name{font-weight:600;font-size:15px;}
.ax-svc-price{color:var(--ax-warning);font-weight:700;font-size:18px;margin:4px 0;}
.ax-svc-desc{font-size:12px;color:var(--ax-text-light);margin-bottom:8px;line-height:1.4;}

.ax-empty{text-align:center;color:var(--ax-text-light);padding:24px 0;font-size:14px;}

.ax-tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:500;}
.ax-tag-blue{background:#dbeafe;color:#1e40af;}
.ax-tag-green{background:#d1fae5;color:#065f46;}
.ax-tag-orange{background:#fed7aa;color:#9a3412;}
.ax-tag-red{background:#fecaca;color:#991b1b;}
.ax-tag-gray{background:#e5e7eb;color:#4b5563;}

.ax-order-list,.ax-eval-list,.ax-help-list,.ax-mer-list,.ax-archive-list{display:flex;flex-direction:column;gap:8px;}
.ax-order-item,.ax-eval-item,.ax-help-item,.ax-mer-item,.ax-archive-item{border:1px solid var(--ax-border);border-radius:8px;padding:12px;}
.ax-order-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;}
.ax-order-no{font-weight:600;font-size:14px;}
.ax-order-row{font-size:13px;color:var(--ax-text);margin:2px 0;}
.ax-label{color:var(--ax-text-light);}
.ax-order-ops{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;}

.ax-eval-item .ax-eval-svc{font-weight:600;margin-bottom:4px;}
.ax-eval-stars{color:var(--ax-warning);font-size:14px;margin-bottom:4px;}
.ax-eval-content{font-size:13px;color:var(--ax-text);margin-bottom:4px;}
.ax-eval-time{font-size:12px;color:var(--ax-text-light);}

.ax-archive-imgs{display:flex;gap:8px;margin-top:8px;}
.ax-archive-img{flex:1;border:1px solid var(--ax-border);border-radius:6px;padding:8px;text-align:center;}
.ax-archive-label{font-size:12px;color:var(--ax-text-light);margin-bottom:4px;}
.ax-archive-placeholder{font-size:13px;color:var(--ax-text);}

.ax-help-tip{background:#fef2f2;border:1px solid #fecaca;color:#991b1b;padding:10px;border-radius:6px;font-size:13px;margin-bottom:12px;line-height:1.5;}
.ax-help-item .ax-help-row{font-size:14px;margin-bottom:4px;}
.ax-help-meta{font-size:12px;color:var(--ax-text-light);}
.ax-help-reply{margin-top:4px;font-size:13px;color:var(--ax-primary);background:#eff6ff;padding:6px 8px;border-radius:4px;}

.ax-mer-info{display:flex;flex-direction:column;gap:4px;}
.ax-info-row{font-size:13px;}
.ax-info-label{color:var(--ax-text-light);display:inline-block;min-width:80px;}

.ax-bill-summary{background:#ecfdf5;border:1px solid #a7f3d0;padding:12px;border-radius:6px;margin-bottom:12px;}
.ax-bill-total{font-size:18px;font-weight:700;color:#065f46;}

.ax-sub-tabs{display:flex;gap:4px;margin-bottom:12px;}
.ax-sub-tab{padding:6px 12px;border:1px solid var(--ax-border);background:var(--ax-card);border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit;color:var(--ax-text);}
.ax-sub-tab:active{opacity:0.85;}
.ax-sub-tab-active{background:var(--ax-primary);color:#fff;border-color:var(--ax-primary);}

.ax-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;margin-bottom:16px;}
.ax-stat-card{border-radius:8px;padding:14px;text-align:center;color:#fff;}
.ax-stat-blue{background:#3b82f6;}
.ax-stat-green{background:#10b981;}
.ax-stat-cyan{background:#06b6d4;}
.ax-stat-orange{background:#f59e0b;}
.ax-stat-purple{background:#8b5cf6;}
.ax-stat-pink{background:#ec4899;}
.ax-stat-teal{background:#14b8a6;}
.ax-stat-red{background:#ef4444;}
.ax-stat-num{font-size:24px;font-weight:700;}
.ax-stat-label{font-size:12px;margin-top:2px;opacity:0.9;}

.ax-chart-box{margin-top:12px;}
.ax-chart-title{font-size:14px;font-weight:600;margin-bottom:8px;}
.ax-bar-chart{display:flex;align-items:flex-end;gap:6px;height:120px;border-bottom:1px solid var(--ax-border);padding-bottom:0;}
.ax-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;}
.ax-bar-fill{width:100%;max-width:36px;background:var(--ax-primary);border-radius:4px 4px 0 0;min-height:4px;}
.ax-bar-val{font-size:11px;color:var(--ax-text);margin-top:2px;}
.ax-bar-label{font-size:10px;color:var(--ax-text-light);margin-top:2px;}

/* mask 弹窗 - 自带CSS变量（挂body不继承.ax-app） */
.ax-mask{position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:9999;display:flex;align-items:center;justify-content:center;--ax-primary:#2b7cbb;--ax-success:#10b981;--ax-warning:#f59e0b;--ax-danger:#ef4444;--ax-text:#1f2937;--ax-text-light:#6b7280;--ax-border:#e5e7eb;--ax-card:#ffffff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--ax-text);font-size:14px;line-height:1.5;}
.ax-mask-inner{background:var(--ax-card);border-radius:12px;padding:24px;max-width:400px;width:90%;max-height:80vh;overflow-y:auto;}
.ax-cashier{text-align:center;}
.ax-cashier-title{font-size:18px;font-weight:700;margin-bottom:16px;color:var(--ax-text);}
.ax-cashier-order{font-size:13px;color:var(--ax-text-light);margin-bottom:4px;}
.ax-cashier-svc{font-size:15px;font-weight:600;margin-bottom:8px;}
.ax-cashier-amount{font-size:24px;font-weight:700;color:var(--ax-warning);margin-bottom:12px;}
.ax-qr-box{display:flex;justify-content:center;margin:12px 0;}
.ax-qr-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:1px;width:160px;height:160px;border:6px solid var(--ax-text);padding:4px;background:#fff;border-radius:4px;}
.ax-qr-cell{background:#fff;}
.ax-qr-cell.ax-qr-black{background:#000;}
.ax-cashier-timer{font-size:16px;color:var(--ax-danger);font-weight:600;margin-bottom:12px;}
.ax-cashier-actions{display:flex;gap:8px;justify-content:center;}

.ax-eval-modal{text-align:center;}
.ax-eval-stars-pick{font-size:32px;margin-bottom:12px;display:flex;justify-content:center;gap:4px;}
.ax-star-pick{color:#d1d5db;cursor:pointer;transition:color 0.15s;}
.ax-star-pick:active{transform:scale(0.9);}
.ax-star-pick.ax-star-on{color:var(--ax-warning);}

.ax-archive-modal .ax-form-row label{display:block;font-size:13px;color:var(--ax-text-light);margin-bottom:4px;}

/* toast */
.ax-toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(0.9);background:rgba(0,0,0,0.8);color:#fff;padding:10px 20px;border-radius:8px;font-size:14px;z-index:10000;opacity:0;transition:opacity 0.3s,transform 0.3s;pointer-events:none;}
.ax-toast.ax-toast-show{opacity:1;transform:translate(-50%,-50%) scale(1);}

@media (max-width:768px){
.ax-form-grid{grid-template-columns:1fr;}
.ax-svc-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));}
.ax-stat-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));}
.ax-archive-imgs{flex-direction:column;}
}
@media (prefers-reduced-motion:reduce){
.ax-role-card,.ax-btn,.ax-tab,.ax-sub-tab,.ax-star-pick,.ax-toast{transition:none !important;}
}

/* ============== 衣物护理 yw- 模块样式（亮色） ============== */
.yw-app {
  --yw-bg: #ffffff;
  --yw-card: #ffffff;
  --yw-card2: #f5f7fa;
  --yw-border: #d1d5db;
  --yw-text: #1f2937;
  --yw-text2: #6b7280;
  --yw-text3: #9ca3af;
  --yw-primary: #2563eb;
  --yw-primary-d: #1d4ed8;
  --yw-success: #00b42a;
  --yw-warning: #ff7d00;
  --yw-danger: #f53f3f;
  --yw-purple: #722ed1;
  --yw-cyan: #14c9c9;
  --yw-radius: 12px;
  --yw-radius2: 8px;
  --yw-shadow: 0 1px 3px rgba(0,0,0,0.06);
  background: var(--yw-bg);
  color: var(--yw-text);
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  font-size: 14px;
  min-height: 100%;
  padding: 5px 14px 24px;
  box-sizing: border-box;
}
.yw-app * { box-sizing: border-box; }
.yw-app a { color: var(--yw-primary); cursor: pointer; text-decoration: none; }
.yw-app input, .yw-app textarea, .yw-app select {
  background: #ffffff;
  color: var(--yw-text);
  border: 1px solid var(--yw-border);
  border-radius: var(--yw-radius2);
  padding: 9px 12px;
  font-size: 16px;
  font-family: inherit;
  outline: none;
  width: 100%;
}
.yw-app input:focus, .yw-app textarea:focus, .yw-app select:focus { border-color: var(--yw-primary); }
.yw-app label { display: block; color: var(--yw-text2); margin-bottom: 6px; font-size: 13px; }
.yw-app button { cursor: pointer; font-family: inherit; border: none; border-radius: var(--yw-radius2); font-size: 14px; }
.yw-btn-primary { background: var(--yw-primary); color: #ffffff; padding: 10px 20px; }
.yw-btn-primary:hover { background: var(--yw-primary-d); }
.yw-btn-default { background: var(--yw-card2); color: var(--yw-text); border: 1px solid var(--yw-border); padding: 10px 20px; }
.yw-btn-danger { background: var(--yw-danger); color: #ffffff; padding: 10px 20px; }
.yw-btn-sm { padding: 5px 10px; font-size: 12px; border-radius: 6px; }
.yw-link { color: var(--yw-primary); cursor: pointer; margin-right: 8px; }
.yw-link:hover { text-decoration: underline; }
.yw-link-danger { color: var(--yw-danger); cursor: pointer; }
.yw-card {
  background: var(--yw-card);
  border-radius: var(--yw-radius);
  padding: 16px 18px;
  box-shadow: var(--yw-shadow);
  margin-bottom: 12px;
}
.yw-card-title { font-size: 16px; font-weight: 600; color: var(--yw-text); margin-bottom: 14px; }
.yw-empty { color: var(--yw-text3); text-align: center; padding: 24px 0; font-size: 13px; }

/* 顶部栏 */
.yw-topbar {
  display: flex; justify-content: space-between; align-items: center;
  background: var(--yw-card);
  border-radius: var(--yw-radius);
  padding: 12px 18px;
  margin-bottom: 14px;
  box-shadow: var(--yw-shadow);
}
.yw-topbar-title { font-size: 16px; font-weight: 600; }
.yw-topbar-right { display: flex; align-items: center; gap: 16px; font-size: 13px; color: var(--yw-text2); }
.yw-topbar-right a { color: var(--yw-text2); }
.yw-topbar-right a:hover { color: var(--yw-primary); }

/* 落地页 */
.yw-landing { max-width: 1180px; margin: 0 auto; }
.yw-landing-hero {
  text-align: center;
  padding: 40px 0 30px;
  background: linear-gradient(135deg, #dbeafe, #eff6ff);
  border-radius: var(--yw-radius);
  margin-bottom: 22px;
}
.yw-landing-title { font-size: 28px; font-weight: 700; color: var(--yw-text); }
.yw-landing-sub { font-size: 15px; color: var(--yw-text2); margin-top: 8px; }
.yw-landing-hotline { font-size: 13px; color: var(--yw-primary); margin-top: 14px; }
.yw-role-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 22px; }
.yw-role-card {
  background: var(--yw-card);
  border: 1px solid var(--yw-border);
  border-radius: var(--yw-radius);
  padding: 22px;
  text-align: center;
  cursor: pointer;
  transition: 0.2s;
}
.yw-role-card:hover { border-color: var(--yw-primary); transform: translateY(-2px); }
.yw-role-ico {
  width: 56px; height: 56px; line-height: 56px; border-radius: 50%;
  background: var(--yw-primary); color: #ffffff; font-size: 22px; font-weight: 700;
  margin: 0 auto 12px;
}
.yw-role-name { font-size: 16px; font-weight: 600; color: var(--yw-text); }
.yw-role-desc { font-size: 13px; color: var(--yw-text2); margin-top: 6px; }
.yw-cate-show { background: var(--yw-card); border-radius: var(--yw-radius); padding: 18px; margin-bottom: 22px; }
.yw-cate-show-title { font-size: 15px; font-weight: 600; margin-bottom: 14px; }
.yw-cate-show-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.yw-cate-cell { background: var(--yw-card2); border: 1px solid var(--yw-border); border-radius: var(--yw-radius2); padding: 14px 10px; text-align: center; font-size: 13px; }
.yw-cate-price { color: var(--yw-primary); margin-top: 6px; font-weight: 600; }
.yw-flow-strip { background: var(--yw-card); border-radius: var(--yw-radius); padding: 18px; }
.yw-flow-title { font-size: 15px; font-weight: 600; margin-bottom: 16px; }
.yw-flow-bar { display: flex; align-items: center; }
.yw-flow-dot { width: 28px; height: 28px; line-height: 28px; border-radius: 50%; background: var(--yw-primary); color: #ffffff; text-align: center; font-size: 13px; flex-shrink: 0; }
.yw-flow-line { height: 2px; flex: 1; background: var(--yw-primary); }
.yw-flow-labels { display: flex; justify-content: space-between; margin-top: 8px; font-size: 12px; color: var(--yw-text2); }

/* 登录注册 */
.yw-auth { display: flex; justify-content: center; padding: 30px 0; }
.yw-auth-card { background: var(--yw-card); border-radius: var(--yw-radius); padding: 28px; width: 100%; max-width: 420px; box-shadow: var(--yw-shadow); }
.yw-auth-title { font-size: 18px; font-weight: 600; text-align: center; margin-bottom: 22px; }
.yw-field { margin-bottom: 14px; }
.yw-field-row { margin-top: 16px; }
.yw-field-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.yw-field-full { grid-column: 1 / 3; }
.yw-auth-switch { text-align: center; margin-top: 14px; font-size: 13px; color: var(--yw-text2); }
.yw-auth-switch a { color: var(--yw-primary); }

/* 用户主页 */
.yw-user-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 16px; }
.yw-user-form { padding: 20px; }
.yw-cate-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.yw-cate-card {
  border: 1px solid var(--yw-border); border-radius: var(--yw-radius2);
  padding: 12px; cursor: pointer; background: var(--yw-card2); transition: 0.2s;
}
.yw-cate-card:hover { border-color: var(--yw-primary); }
.yw-cate-card.active { border-color: var(--yw-primary); background: rgba(22,119,255,0.12); }
.yw-cate-name { font-size: 14px; color: var(--yw-text); }
.yw-cate-price { color: var(--yw-primary); font-weight: 600; margin-top: 6px; font-size: 13px; }
.yw-photo-upload { padding: 18px; border: 1px dashed var(--yw-border); border-radius: var(--yw-radius2); text-align: center; cursor: pointer; background: var(--yw-card2); }
.yw-photo-tip { color: var(--yw-text3); font-size: 13px; margin-top: 6px; }
.yw-photo-preview { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.yw-photo-thumb { width: 72px; height: 72px; object-fit: cover; border-radius: 6px; border: 1px solid var(--yw-border); }
.yw-submit-bar { display: flex; justify-content: space-between; align-items: center; padding-top: 14px; margin-top: 14px; border-top: 1px solid var(--yw-border); }
.yw-submit-label { color: var(--yw-text2); font-size: 13px; }
.yw-submit-total { font-size: 22px; font-weight: 700; color: var(--yw-primary); }
.yw-user-side { display: flex; flex-direction: column; gap: 12px; }
.yw-func-item {
  display: flex; justify-content: space-between; align-items: center;
  padding: 12px 10px; border-radius: var(--yw-radius2); cursor: pointer; color: var(--yw-text);
}
.yw-func-item:hover { background: var(--yw-card2); }
.yw-arrow { color: var(--yw-text3); }

/* 步骤进度条 */
.yw-step-row { display: flex; align-items: center; }
.yw-step-dot {
  width: 28px; height: 28px; line-height: 28px; border-radius: 50%;
  background: var(--yw-card2); color: var(--yw-text3); text-align: center;
  font-size: 13px; flex-shrink: 0; border: 1px solid var(--yw-border);
}
.yw-step-dot.active { background: var(--yw-primary); color: #ffffff; border-color: var(--yw-primary); }
.yw-step-line { height: 2px; flex: 1; background: var(--yw-border); }
.yw-step-line.finish { background: var(--yw-primary); }
.yw-step-labels { display: flex; justify-content: space-between; margin-top: 8px; font-size: 12px; color: var(--yw-text2); }

/* 表格 */
.yw-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.yw-table th { text-align: left; color: var(--yw-text2); border-bottom: 1px solid var(--yw-border); padding: 8px 10px; font-weight: 600; }
.yw-table td { padding: 10px; border-bottom: 1px solid var(--yw-border); color: var(--yw-text); }
.yw-table tr:hover td { background: rgba(0,0,0,0.02); }
.yw-input-sm { padding: 5px 8px; font-size: 12px; }

/* 标签 */
.yw-tag { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 12px; }
.yw-tag-blue { background: rgba(22,119,255,0.15); color: #409eff; }
.yw-tag-cyan { background: rgba(20,201,201,0.15); color: #14c9c9; }
.yw-tag-orange { background: rgba(255,125,0,0.15); color: #ff9c2e; }
.yw-tag-purple { background: rgba(114,46,209,0.15); color: #a871ff; }
.yw-tag-green { background: rgba(0,180,42,0.15); color: #27c93f; }
.yw-tag-gray { background: rgba(125,125,125,0.15); color: #9aa0a8; }

/* 配送/申诉 */
.yw-delivery-item { background: var(--yw-card2); border-radius: var(--yw-radius2); padding: 14px; margin-bottom: 10px; }
.yw-appeal-form { padding: 4px 0; }

/* 照片档案 */
.yw-photo-block { margin-bottom: 14px; }
.yw-photo-block-title { color: var(--yw-text2); font-size: 13px; margin-bottom: 8px; }
.yw-photo-row { display: flex; flex-wrap: wrap; gap: 8px; }

/* 数据看板 */
.yw-dashboard-stats { display: grid; grid-template-columns: repeat(6, 1fr); gap: 12px; }
.yw-stat-card { background: var(--yw-card); border-radius: var(--yw-radius); padding: 18px 14px; text-align: center; }
.yw-stat-num { font-size: 22px; font-weight: 700; color: var(--yw-primary); }
.yw-stat-label { font-size: 13px; color: var(--yw-text2); margin-top: 6px; }
.yw-bar-chart { display: flex; align-items: flex-end; height: 160px; gap: 8px; padding-top: 10px; }
.yw-bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; height: 100%; }
.yw-bar-val { font-size: 12px; color: var(--yw-text2); margin-bottom: 4px; }
.yw-bar { width: 60%; background: linear-gradient(180deg, var(--yw-primary), var(--yw-primary-d)); border-radius: 4px 4px 0 0; min-height: 2px; }
.yw-bar-label { font-size: 12px; color: var(--yw-text2); margin-top: 6px; }
.yw-notice-text { color: var(--yw-text2); padding: 10px 0; }

/* 设置 */
.yw-settings-form { max-width: 600px; }

/* Toast */
.yw-toast {
  position: fixed; top: 24px; left: 50%; transform: translateX(-50%) translateY(-20px);
  background: #ffffff; color: #1f2937; padding: 10px 22px; border-radius: 8px;
  font-size: 14px; z-index: 100000; opacity: 0; transition: all 0.25s;
  border: 1px solid #d1d5db; box-shadow: 0 4px 16px rgba(0,0,0,0.1);
}
.yw-toast.yw-toast-show { opacity: 1; transform: translateX(-50%) translateY(0); }
.yw-toast.yw-toast-warn { border-color: var(--yw-warning); color: #ff9c2e; }
.yw-toast.yw-toast-error, .yw-toast.yw-toast-danger { border-color: var(--yw-danger); color: #f76c6c; }

/* 弹窗（.yw-mask 必须自带全部变量+亮色硬编码，因挂 body 不在 .yw-app 内） */
.yw-mask {
  position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 99999;
  display: flex; align-items: center; justify-content: center; padding: 20px;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  color: #1f2937;
  --yw-bg: #ffffff;
  --yw-card: #ffffff;
  --yw-card2: #f5f7fa;
  --yw-border: #d1d5db;
  --yw-text: #1f2937;
  --yw-text2: #6b7280;
  --yw-text3: #9ca3af;
  --yw-primary: #2563eb;
  --yw-primary-d: #1d4ed8;
  --yw-success: #00b42a;
  --yw-warning: #ff7d00;
  --yw-danger: #f53f3f;
  --yw-radius: 12px;
  --yw-radius2: 8px;
  --yw-shadow: 0 1px 3px rgba(0,0,0,0.06);
}
.yw-mask-box {
  background: #ffffff; border-radius: 12px; padding: 24px;
  width: 100%; max-width: 460px; box-shadow: 0 8px 32px rgba(0,0,0,0.15);
  border: 1px solid #d1d5db;
}
.yw-mask-title { font-size: 18px; font-weight: 600; text-align: center; margin-bottom: 18px; color: #1f2937; }
.yw-pay-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #d1d5db; font-size: 14px; color: #1f2937; }
.yw-pay-row span:first-child { color: #6b7280; }
.yw-pay-total { border-bottom: none; padding-top: 12px; }
.yw-pay-amount { color: #2563eb; font-size: 20px; font-weight: 700; }
.yw-qr { display: flex; justify-content: center; margin: 16px 0; }
.yw-qr-grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: 1px; background: #fff; padding: 6px; border-radius: 6px; }
.yw-qr-cell { width: 18px; height: 18px; background: #fff; }
.yw-qr-cell.black { background: #000; }
.yw-pay-tip { text-align: center; color: #6b7280; font-size: 13px; margin-bottom: 6px; }
.yw-pay-countdown { text-align: center; color: #f53f3f; font-size: 18px; font-weight: 700; margin-bottom: 12px; }
.yw-pay-btns { display: flex; gap: 10px; justify-content: center; }

/* 电子票据 */
.yw-receipt { max-width: 420px; position: relative; }
.yw-receipt-title { text-align: center; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: #1f2937; }
.yw-receipt-seal {
  position: absolute; top: 16px; right: 16px;
  border: 2px solid #f53f3f; color: #f53f3f; border-radius: 50%;
  width: 60px; height: 60px; line-height: 56px; text-align: center;
  font-size: 13px; font-weight: 700; transform: rotate(-15deg); opacity: 0.7;
}
.yw-receipt-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px dashed #d1d5db; font-size: 14px; color: #1f2937; }
.yw-receipt-row span:first-child { color: #6b7280; }
.yw-receipt-total { border-bottom: 2px solid #d1d5db; padding-top: 12px; margin-top: 6px; }
.yw-receipt-total span:last-child { color: #f53f3f; font-size: 18px; font-weight: 700; }
.yw-receipt-qr { display: flex; justify-content: center; margin: 14px 0; }
.yw-receipt-tip { text-align: center; color: #6b7280; font-size: 12px; margin-bottom: 10px; }
.yw-receipt-btns { display: flex; justify-content: center; gap: 10px; }

/* 响应式 */
@media (max-width: 1280px) {
  .yw-user-grid { grid-template-columns: 1fr; }
}
@media (max-width: 1024px) {
  .yw-role-cards { grid-template-columns: 1fr; }
  .yw-cate-show-grid { grid-template-columns: repeat(3, 1fr); }
  .yw-dashboard-stats { grid-template-columns: repeat(3, 1fr); }
  .yw-field-row2 { grid-template-columns: 1fr; }
  .yw-field-full { grid-column: auto; }
}
@media (max-width: 768px) {
  .yw-cate-grid { grid-template-columns: repeat(2, 1fr); }
  .yw-cate-show-grid { grid-template-columns: repeat(2, 1fr); }
  .yw-dashboard-stats { grid-template-columns: repeat(2, 1fr); }
  .yw-topbar { flex-direction: column; gap: 8px; }
  .yw-topbar-right { flex-wrap: wrap; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .yw-app *, .yw-mask * { transition: none !important; animation: none !important; }
}

/* ============== wm- 唯美饰物 模块样式 ============== */
.wm-app {
  --wm-primary: #b8860b;
  --wm-gold: #d4af37;
  --wm-silver: #a8b2c0;
  --wm-bg: #f5f3ef;
  --wm-card: #ffffff;
  --wm-text: #1d2129;
  --wm-text-light: #86909c;
  --wm-border: #e5e6eb;
  --wm-success: #00b42a;
  --wm-warning: #ff7d00;
  --wm-danger: #f53f3f;
  --wm-blue: #165dff;
  --wm-radius: 12px;
  --wm-font-size: 14px;
  margin-top: 5px;
  padding: 0 16px 40px;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  font-size: var(--wm-font-size);
  color: var(--wm-text);
  min-height: calc(100vh - 120px);
}
.wm-mask {
  --wm-primary: #b8860b;
  --wm-gold: #d4af37;
  --wm-bg: #f5f3ef;
  --wm-card: #ffffff;
  --wm-text: #1d2129;
  --wm-text-light: #86909c;
  --wm-border: #e5e6eb;
  --wm-danger: #f53f3f;
  --wm-blue: #165dff;
  --wm-success: #00b42a;
  --wm-radius: 12px;
  --wm-font-size: 14px;
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.45);
  z-index: 10000;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; transition: opacity 0.2s;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  color: var(--wm-text);
}
.wm-mask-show { opacity: 1; }
.wm-mask-inner { max-width: 90vw; max-height: 90vh; overflow-y: auto; }
.wm-mask-card {
  background: var(--wm-card);
  border-radius: var(--wm-radius);
  box-shadow: 0 8px 32px rgba(0,0,0,0.2);
  overflow: hidden;
  display: flex; flex-direction: column;
}
.wm-mask-small { width: 400px; }
.wm-mask-medium { width: 520px; }
.wm-mask-large { width: 720px; }
.wm-mask-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 16px 20px; border-bottom: 1px solid var(--wm-border);
  background: linear-gradient(135deg, #b8860b, #d4af37);
  color: #1a1d23;
}
.wm-mask-header h3 { margin: 0; font-size: 16px; font-weight: 700; }
.wm-mask-close {
  background: none; border: none; color: #1a1d23; font-size: 18px;
  cursor: pointer; padding: 4px 8px; border-radius: 6px; min-width: 40px; min-height: 40px;
}
.wm-mask-close:hover { background: rgba(255,255,255,0.2); }
.wm-mask-body { padding: 20px; overflow-y: auto; max-height: 60vh; }
.wm-mask-footer {
  display: flex; gap: 12px; justify-content: flex-end;
  padding: 12px 20px; border-top: 1px solid var(--wm-border);
  background: #fafafa;
}

/* Buttons */
.wm-btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 8px 16px; border-radius: 8px; border: none;
  font-size: 14px; cursor: pointer; transition: all 0.15s;
  min-height: 40px; font-family: inherit;
}
.wm-btn:active { transform: scale(0.96); }
.wm-btn-primary { background: var(--wm-primary); color: #1a1d23; }
.wm-btn-primary:hover { background: #a07608; }
.wm-btn-gold { background: var(--wm-gold); color: #1a1d23; }
.wm-btn-danger { background: var(--wm-danger); color: #1a1d23; }
.wm-btn-default { background: #f2f3f5; color: var(--wm-text); }
.wm-btn-outline { background: transparent; border: 1px solid var(--wm-primary); color: var(--wm-primary); }
.wm-btn-link { background: none; color: var(--wm-primary); padding: 4px 8px; }
.wm-btn-block { width: 100%; }
.wm-btn-sm { padding: 6px 12px; min-height: 40px; font-size: 13px; }

/* Login */
.wm-login-wrap {
  display: flex; align-items: center; justify-content: center;
  min-height: calc(100vh - 160px);
  padding: 20px;
}
.wm-login-card {
  background: var(--wm-card); border-radius: 16px; padding: 40px;
  box-shadow: 0 4px 24px rgba(184,134,11,0.15);
  width: 100%; max-width: 420px;
  border: 1px solid #e5e6eb;
}
.wm-login-title { text-align: center; font-size: 22px; font-weight: 700; margin: 0 0 8px; color: var(--wm-primary); }
.wm-login-sub { text-align: center; font-size: 13px; color: var(--wm-text-light); margin: 0 0 28px; }
.wm-login-tip { text-align: center; font-size: 12px; color: var(--wm-text-light); margin: 12px 0 0; }

/* Form */
.wm-form-row { margin-bottom: 16px; }
.wm-form-row label { display: block; margin-bottom: 6px; font-size: 13px; color: var(--wm-text); font-weight: 500; }
.wm-form-row input, .wm-form-row textarea, .wm-form-row select,
.wm-input, .wm-select {
  width: 100%; padding: 8px 12px; border: 1px solid var(--wm-border);
  border-radius: 8px; font-size: 16px; outline: none; background: #fff;
  min-height: 40px; box-sizing: border-box; font-family: inherit;
}
.wm-form-row input:focus, .wm-form-row textarea:focus, .wm-form-row select:focus,
.wm-input:focus, .wm-select:focus { border-color: var(--wm-primary); }
.wm-form-row textarea { min-height: 60px; resize: vertical; }
.wm-full { grid-column: 1 / -1; }
.wm-form-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
}
@media (max-width: 600px) { .wm-form-grid { grid-template-columns: 1fr; } }

/* Header */
.wm-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 12px 0; margin-bottom: 12px;
  border-bottom: 1px solid var(--wm-border);
}
.wm-header-left { display: flex; align-items: center; gap: 8px; }
.wm-logo { font-size: 20px; color: var(--wm-gold); }
.wm-header-title { font-size: 16px; font-weight: 700; color: var(--wm-text); }
.wm-header-right { display: flex; align-items: center; gap: 12px; }
.wm-user-name { font-size: 13px; color: var(--wm-text-light); }

/* Tabs */
.wm-tabs {
  display: flex; gap: 4px; flex-wrap: wrap; margin-bottom: 16px;
  border-bottom: 1px solid var(--wm-border); padding-bottom: 0;
}
.wm-tab {
  padding: 8px 16px; border: none; background: none; cursor: pointer;
  font-size: 14px; color: var(--wm-text-light); border-bottom: 2px solid transparent;
  border-radius: 8px 8px 0 0; min-height: 40px; font-family: inherit;
  transition: all 0.15s;
}
.wm-tab:hover { color: var(--wm-primary); }
.wm-tab-active { color: var(--wm-primary); border-bottom-color: var(--wm-primary); font-weight: 600; }

/* Gallery */
.wm-filter-bar {
  display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
  padding: 16px; background: var(--wm-card); border-radius: var(--wm-radius);
  margin-bottom: 16px; border: 1px solid var(--wm-border);
}
.wm-filter-bar .wm-input, .wm-filter-bar .wm-select { flex: 1; min-width: 120px; max-width: 200px; }
.wm-gallery-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 16px;
}
.wm-gallery-card {
  background: var(--wm-card); border-radius: var(--wm-radius);
  overflow: hidden; border: 1px solid var(--wm-border);
  transition: box-shadow 0.2s, transform 0.2s;
}
.wm-gallery-card:hover { box-shadow: 0 4px 16px rgba(184,134,11,0.15); transform: translateY(-2px); }
.wm-card-img { width: 100%; height: 200px; overflow: hidden; background: #f5f3ef; display: flex; align-items: center; justify-content: center; }
.wm-card-img img { width: 100%; height: 100%; object-fit: cover; }
.wm-no-img { color: var(--wm-text-light); font-size: 14px; }
.wm-card-body { padding: 12px; }
.wm-card-title { margin: 0 0 4px; font-size: 15px; font-weight: 600; color: var(--wm-text); }
.wm-card-desc { margin: 0 0 6px; font-size: 12px; color: var(--wm-text-light); }
.wm-card-price { margin: 0 0 8px; font-size: 16px; font-weight: 700; color: var(--wm-gold); }
.wm-card-tags { margin-bottom: 8px; display: flex; gap: 4px; flex-wrap: wrap; }

/* Tags */
.wm-tag {
  display: inline-block; padding: 2px 8px; border-radius: 4px;
  font-size: 12px; font-weight: 500; line-height: 1.5;
}
.wm-tag-green { background: #e8ffea; color: var(--wm-success); }
.wm-tag-orange { background: #fff3e0; color: var(--wm-warning); }
.wm-tag-gray { background: #f2f3f5; color: var(--wm-text-light); }
.wm-tag-blue { background: #e8f0ff; color: var(--wm-blue); }
.wm-tag-red { background: #ffe8e8; color: var(--wm-danger); }

/* Detail */
.wm-detail-header { margin-bottom: 12px; }
.wm-detail-wrap { display: grid; grid-template-columns: 1fr 2fr; gap: 16px; }
@media (max-width: 768px) { .wm-detail-wrap { grid-template-columns: 1fr; } }
.wm-detail-gallery {
  background: var(--wm-card); border-radius: var(--wm-radius);
  padding: 16px; display: flex; flex-wrap: wrap; gap: 8px;
  border: 1px solid var(--wm-border);
}
.wm-detail-thumb { width: 100%; max-height: 300px; object-fit: cover; border-radius: 8px; }
.wm-no-img-big { width: 100%; height: 200px; display: flex; align-items: center; justify-content: center; color: var(--wm-text-light); background: #f5f3ef; border-radius: 8px; }
.wm-detail-info {
  background: var(--wm-card); border-radius: var(--wm-radius);
  padding: 20px; border: 1px solid var(--wm-border);
}
.wm-detail-title { margin: 0 0 8px; font-size: 20px; font-weight: 700; }
.wm-detail-price { font-size: 24px; font-weight: 700; color: var(--wm-gold); margin-bottom: 16px; }
.wm-info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; margin-bottom: 16px; }
@media (max-width: 500px) { .wm-info-grid { grid-template-columns: 1fr; } }
.wm-info-grid > div { display: flex; gap: 8px; font-size: 13px; }
.wm-info-label { color: var(--wm-text-light); min-width: 70px; }
.wm-detail-sec { margin-bottom: 12px; padding-top: 12px; border-top: 1px dashed var(--wm-border); }
.wm-detail-sec p { margin: 4px 0 0; font-size: 13px; line-height: 1.6; }
.wm-detail-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 16px; }

/* Reviews */
.wm-review-section { margin-top: 20px; background: var(--wm-card); border-radius: var(--wm-radius); padding: 16px; border: 1px solid var(--wm-border); }
.wm-section-title { margin: 0 0 12px; font-size: 16px; font-weight: 600; }
.wm-review-item { padding: 10px 0; border-bottom: 1px solid var(--wm-border); }
.wm-review-stars { color: var(--wm-gold); font-size: 14px; margin-right: 8px; }
.wm-review-name { font-size: 13px; color: var(--wm-text-light); }
.wm-review-item p { margin: 4px 0; font-size: 13px; line-height: 1.5; }
.wm-review-time { font-size: 12px; color: var(--wm-text-light); }

/* Table */
.wm-list-toolbar { margin-bottom: 12px; display: flex; justify-content: flex-end; }
.wm-table-wrap { background: var(--wm-card); border-radius: var(--wm-radius); overflow-x: auto; border: 1px solid var(--wm-border); }
.wm-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 700px; }
.wm-table th { padding: 10px 12px; text-align: left; color: var(--wm-text-light); border-bottom: 1px solid var(--wm-border); background: #fafafa; font-weight: 600; }
.wm-table td { padding: 10px 12px; border-bottom: 1px solid #f0f0f0; }
.wm-table tr:hover { background: #fffbe6; }
.wm-empty-row { text-align: center; color: var(--wm-text-light); padding: 24px; }

/* Orders */
.wm-order-list { display: flex; flex-direction: column; gap: 12px; }
.wm-order-card {
  display: flex; gap: 12px; align-items: center;
  background: var(--wm-card); border-radius: var(--wm-radius);
  padding: 12px; border: 1px solid var(--wm-border); flex-wrap: wrap;
}
.wm-order-thumb { width: 80px; height: 80px; border-radius: 8px; overflow: hidden; background: #f5f3ef; flex-shrink: 0; }
.wm-order-thumb img { width: 100%; height: 100%; object-fit: cover; }
.wm-order-info { flex: 1; min-width: 200px; }
.wm-order-sn { font-size: 12px; color: var(--wm-text-light); }
.wm-order-name { font-size: 15px; font-weight: 600; margin: 2px 0; }
.wm-order-meta { font-size: 13px; color: var(--wm-text-light); }
.wm-order-phone { font-size: 12px; color: var(--wm-text-light); margin-top: 2px; }
.wm-order-status { flex-shrink: 0; }
.wm-order-actions { display: flex; gap: 8px; flex-wrap: wrap; width: 100%; }

/* Pay dialog */
.wm-pay-body { text-align: center; }
.wm-pay-info { margin-bottom: 16px; }
.wm-pay-row { display: flex; justify-content: space-between; padding: 4px 0; font-size: 13px; }
.wm-pay-amount { font-size: 16px; font-weight: 700; color: var(--wm-danger); margin-top: 8px; }
.wm-pay-amount span { font-size: 20px; }
.wm-qr-box { display: flex; justify-content: center; margin: 16px 0; }
.wm-qr-grid { display: grid; grid-template-columns: repeat(8, 1fr); width: 192px; height: 192px; border: 2px solid var(--wm-primary); border-radius: 8px; overflow: hidden; padding: 4px; background: #fff; }
.wm-qr-cell { width: 23px; height: 23px; }
.wm-qr-on { background: #1d2129; }
.wm-pay-timer { font-size: 14px; color: var(--wm-warning); font-weight: 600; }

/* Order confirm */
.wm-order-confirm { background: #fafafa; border-radius: 8px; padding: 12px; margin-bottom: 16px; }
.wm-order-row { display: flex; justify-content: space-between; padding: 4px 0; font-size: 13px; }
.wm-price-text { color: var(--wm-gold); font-weight: 700; font-size: 16px; }

/* Rate */
.wm-rate-stars { display: flex; gap: 8px; justify-content: center; margin-bottom: 16px; }
.wm-rate-star { font-size: 32px; color: #ddd; cursor: pointer; user-select: none; }
.wm-rate-star-on { color: var(--wm-gold); }

/* Inquiries */
.wm-inquiry-list { display: flex; flex-direction: column; gap: 12px; }
.wm-inquiry-card { background: var(--wm-card); border-radius: var(--wm-radius); padding: 12px; border: 1px solid var(--wm-border); }
.wm-inquiry-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.wm-inquiry-art { font-weight: 600; font-size: 14px; }
.wm-inquiry-label { color: var(--wm-text-light); font-size: 13px; }
.wm-inquiry-q { padding: 8px; background: #f9f9f9; border-radius: 6px; margin-bottom: 4px; font-size: 13px; }
.wm-inquiry-a { padding: 8px; background: #fff8e8; border-radius: 6px; margin-top: 4px; font-size: 13px; }
.wm-inquiry-time { font-size: 12px; color: var(--wm-text-light); margin-top: 4px; }
.wm-inquiry-preview { background: #fafafa; border-radius: 8px; padding: 12px; margin-bottom: 16px; }
.wm-inquiry-preview p { margin: 4px 0 8px; font-size: 13px; }

/* Photo preview */
.wm-photo-preview { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.wm-photo-item { position: relative; width: 80px; height: 80px; }
.wm-photo-item img { width: 100%; height: 100%; object-fit: cover; border-radius: 6px; border: 1px solid var(--wm-border); }
.wm-photo-del { position: absolute; top: -6px; right: -6px; width: 20px; height: 20px; border-radius: 50%; background: var(--wm-danger); color: #1a1d23; border: none; cursor: pointer; font-size: 12px; line-height: 20px; padding: 0; }

/* Dashboard */
.wm-dashboard { display: flex; flex-direction: column; gap: 20px; }
.wm-stat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
.wm-stat-card { background: var(--wm-card); border-radius: var(--wm-radius); padding: 20px; text-align: center; border: 1px solid var(--wm-border); }
.wm-stat-num { font-size: 28px; font-weight: 700; color: var(--wm-primary); }
.wm-stat-label { font-size: 13px; color: var(--wm-text-light); margin-top: 4px; }
.wm-audit-section { background: var(--wm-card); border-radius: var(--wm-radius); padding: 16px; border: 1px solid var(--wm-border); }
.wm-audit-list { max-height: 300px; overflow-y: auto; }
.wm-audit-item { display: flex; gap: 12px; padding: 6px 0; border-bottom: 1px solid #f0f0f0; font-size: 13px; }
.wm-audit-time { color: var(--wm-text-light); min-width: 140px; }
.wm-audit-action { color: var(--wm-primary); font-weight: 500; min-width: 100px; }
.wm-audit-detail { color: var(--wm-text); flex: 1; }

/* Settings */
.wm-settings-card { background: var(--wm-card); border-radius: var(--wm-radius); padding: 20px; max-width: 500px; border: 1px solid var(--wm-border); }

/* Empty */
.wm-empty { text-align: center; color: var(--wm-text-light); padding: 40px; font-size: 14px; }

/* Toast */
.wm-toast {
  position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.8);
  background: rgba(29,33,41,0.9); color: #1a1d23; padding: 12px 24px;
  border-radius: 8px; font-size: 14px; z-index: 20000;
  opacity: 0; transition: all 0.25s; pointer-events: none;
  max-width: 300px; text-align: center;
}
.wm-toast-show { opacity: 1; transform: translate(-50%, -50%) scale(1); }
.wm-toast-error { background: rgba(245,63,63,0.92); }

/* Confirm text */
.wm-confirm-text { font-size: 15px; line-height: 1.6; text-align: center; padding: 20px 0; }


/* ============== hj- 花榭建设·花木盆栽租赁 SaaS 平台 ============== */
.hj-app{
  --hj-primary:#2E7D32;
  --hj-primary-d:#1B5E20;
  --hj-secondary:#81C784;
  --hj-earth:#5D4037;
  --hj-bg:#f4f7f4;
  --hj-card:#ffffff;
  --hj-text:#1f2937;
  --hj-text-light:#6b7280;
  --hj-border:#e5e7eb;
  --hj-success:#10b981;
  --hj-warning:#f59e0b;
  --hj-danger:#ef4444;
  --hj-blue:#2563eb;
  --hj-radius:10px;
  margin-top:5px;
  padding:0 16px 40px;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  font-size:14px;
  color:var(--hj-text);
  min-height:calc(100vh - 120px);
}
/* 弹窗挂 body：自带全部变量 + 字体 + 颜色 */
.hj-mask{
  --hj-primary:#2E7D32;
  --hj-primary-d:#1B5E20;
  --hj-bg:#f4f7f4;
  --hj-card:#ffffff;
  --hj-text:#1f2937;
  --hj-text-light:#6b7280;
  --hj-border:#e5e7eb;
  --hj-danger:#ef4444;
  --hj-blue:#2563eb;
  --hj-success:#10b981;
  --hj-warning:#f59e0b;
  --hj-radius:10px;
  position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:10000;
  display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .2s;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--hj-text);font-size:14px;line-height:1.5;
}
.hj-mask-show{opacity:1;}
.hj-mask-inner{max-width:92vw;max-height:90vh;overflow-y:auto;}

/* 弹窗卡片 */
.hj-modal-card{
  background:var(--hj-card);border-radius:12px;overflow:hidden;
  box-shadow:0 8px 32px rgba(0,0,0,0.2);width:420px;
  display:flex;flex-direction:column;
}
.hj-modal-mid{width:520px;}
.hj-modal-title{
  padding:14px 20px;font-size:16px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#2E7D32,#43a047);
}
.hj-modal-body{padding:20px;overflow-y:auto;max-height:62vh;}
.hj-modal-actions{
  display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;
  padding:12px 20px;border-top:1px solid var(--hj-border);background:#fafafa;
}

/* 按钮 */
.hj-btn{
  display:inline-flex;align-items:center;justify-content:center;
  padding:8px 16px;border:none;border-radius:8px;font-size:14px;
  cursor:pointer;transition:all .15s;min-height:40px;font-family:inherit;
}
.hj-btn:active{transform:scale(.96);}
.hj-btn-primary{background:var(--hj-primary);color:#fff;}
.hj-btn-primary:hover{background:var(--hj-primary-d);}
.hj-btn-danger{background:var(--hj-danger);color:#fff;}
.hj-btn-default{background:#f2f3f5;color:var(--hj-text);}
.hj-btn-gold{background:#d4af37;color:#fff;}
.hj-btn-link{background:none;color:var(--hj-primary);padding:4px 8px;}
.hj-btn-block{width:100%;}
.hj-btn-sm{padding:6px 12px;font-size:13px;}

/* 表单 */
.hj-form-row{margin-bottom:14px;}
.hj-form-row label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;}
.hj-form-row input,.hj-form-row select,.hj-form-row textarea,
.hj-input,.hj-select{
  width:100%;padding:9px 12px;border:1px solid var(--hj-border);
  border-radius:8px;font-size:16px;background:#fff;outline:none;
  min-height:40px;box-sizing:border-box;font-family:inherit;
}
.hj-form-row textarea{min-height:60px;resize:vertical;}
.hj-form-row input:focus,.hj-form-row select:focus,.hj-form-row textarea:focus,
.hj-input:focus,.hj-select:focus{border-color:var(--hj-primary);}

/* 登录/注册 */
.hj-auth-wrap{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 160px);padding:20px;}
.hj-auth-card{
  background:var(--hj-card);border-radius:16px;padding:36px 40px;
  box-shadow:0 4px 24px rgba(46,125,50,.15);
  width:100%;max-width:420px;border:1px solid var(--hj-border);
}
.hj-auth-title{text-align:center;font-size:21px;font-weight:700;margin:0 0 6px;color:var(--hj-primary);}
.hj-auth-sub{text-align:center;font-size:12px;color:var(--hj-text-light);margin:0 0 24px;}
.hj-auth-links{display:flex;justify-content:space-between;margin-top:10px;}
.hj-auth-tip{text-align:center;font-size:12px;color:var(--hj-text-light);margin:14px 0 0;}

/* 主框架 */
.hj-header{
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;
  padding:12px 0;margin-bottom:10px;border-bottom:1px solid var(--hj-border);
}
.hj-header-left{display:flex;align-items:center;gap:8px;}
.hj-logo{font-size:20px;color:var(--hj-primary);}
.hj-header-title{font-size:16px;font-weight:700;}
.hj-header-right{display:flex;align-items:center;gap:12px;}
.hj-user-name{font-size:13px;color:var(--hj-text-light);}
.hj-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:14px;border-bottom:1px solid var(--hj-border);}
.hj-tab{
  padding:8px 16px;border:none;background:none;cursor:pointer;font-size:14px;
  color:var(--hj-text-light);border-bottom:2px solid transparent;
  border-radius:8px 8px 0 0;min-height:40px;font-family:inherit;
}
.hj-tab:hover{color:var(--hj-primary);}
.hj-tab-active{color:var(--hj-primary);border-bottom-color:var(--hj-primary);font-weight:600;}

/* 页面标题/空态/工具条 */
.hj-page-title{margin:0 0 14px;font-size:16px;font-weight:600;}
.hj-empty{text-align:center;color:var(--hj-text-light);padding:40px;font-size:14px;}
.hj-list-toolbar{display:flex;justify-content:flex-end;margin-bottom:12px;}
.hj-confirm-text{font-size:15px;line-height:1.6;text-align:center;padding:14px 0;}

/* 卡片 */
.hj-card{
  background:var(--hj-card);border-radius:var(--hj-radius);
  padding:16px;border:1px solid var(--hj-border);
}
.hj-card-h{margin:0 0 12px;font-size:15px;font-weight:600;}
.hj-card-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;}
.hj-info-lines{display:flex;flex-direction:column;gap:6px;font-size:13px;}

/* 标签 */
.hj-tag{display:inline-block;padding:2px 9px;border-radius:4px;font-size:12px;font-weight:500;line-height:1.6;}
.hj-tag-green{background:#e6f7ea;color:#1b8a3a;}
.hj-tag-orange{background:#fff3e0;color:#e08600;}
.hj-tag-gray{background:#f2f3f5;color:var(--hj-text-light);}
.hj-tag-blue{background:#e8f0fe;color:var(--hj-blue);}
.hj-tag-red{background:#fdeaea;color:var(--hj-danger);}

/* 统计卡 */
.hj-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;}
.hj-stat-card{
  background:var(--hj-card);border-radius:var(--hj-radius);padding:20px;
  text-align:center;border:1px solid var(--hj-border);
}
.hj-stat-num{font-size:27px;font-weight:700;color:var(--hj-primary);word-break:break-all;}
.hj-stat-label{font-size:13px;color:var(--hj-text-light);margin-top:4px;}

/* 表格 */
.hj-table-wrap{background:var(--hj-card);border-radius:var(--hj-radius);overflow-x:auto;border:1px solid var(--hj-border);}
.hj-table{width:100%;border-collapse:collapse;font-size:13px;min-width:640px;}
.hj-table-mini{min-width:480px;}
.hj-table th{padding:10px 12px;text-align:left;color:var(--hj-text-light);border-bottom:1px solid var(--hj-border);background:#fafafa;font-weight:600;white-space:nowrap;}
.hj-table td{padding:10px 12px;border-bottom:1px solid #f0f0f0;}
.hj-table tr:hover{background:#f3faf4;}
.hj-empty-row{text-align:center;color:var(--hj-text-light);padding:24px;}
.hj-emoji-cell{font-size:20px;text-align:center;}

/* 筛选条 */
.hj-filter-bar{
  display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  padding:14px;background:var(--hj-card);border-radius:var(--hj-radius);
  margin-bottom:14px;border:1px solid var(--hj-border);
}
.hj-filter-bar .hj-input,.hj-filter-bar .hj-select{flex:1;min-width:130px;max-width:210px;}

/* 商城 */
.hj-mall-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;}
.hj-mall-card{
  background:var(--hj-card);border-radius:var(--hj-radius);overflow:hidden;
  border:1px solid var(--hj-border);transition:box-shadow .2s,transform .2s;
}
.hj-mall-card:hover{box-shadow:0 4px 16px rgba(46,125,50,.15);transform:translateY(-2px);}
.hj-mall-emoji{
  height:130px;display:flex;align-items:center;justify-content:center;
  font-size:58px;background:linear-gradient(135deg,#f0f7f0,#e6f2e6);
}
.hj-mall-body{padding:12px;}
.hj-mall-name{margin:0 0 4px;font-size:15px;font-weight:600;}
.hj-mall-mer{margin:0 0 2px;font-size:12px;color:var(--hj-text-light);}
.hj-mall-cat{margin:0 0 6px;font-size:12px;color:var(--hj-text-light);}
.hj-mall-rent{margin:0;font-size:18px;font-weight:700;color:var(--hj-primary);}
.hj-mall-rent small{font-size:12px;color:var(--hj-text-light);font-weight:400;}
.hj-mall-deposit{margin:2px 0 10px;font-size:12px;color:var(--hj-text-light);}

/* 订单卡 */
.hj-order-list{display:flex;flex-direction:column;gap:12px;}
.hj-order-card{
  display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;
  background:var(--hj-card);border-radius:var(--hj-radius);padding:14px;
  border:1px solid var(--hj-border);
}
.hj-order-emoji{
  width:60px;height:60px;flex-shrink:0;border-radius:10px;font-size:34px;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#f0f7f0,#e6f2e6);
}
.hj-order-info{flex:1;min-width:220px;display:flex;flex-direction:column;gap:3px;}
.hj-order-sn{font-size:12px;color:var(--hj-text-light);}
.hj-order-name{font-size:15px;font-weight:600;}
.hj-order-meta{font-size:13px;color:var(--hj-text-light);}
.hj-order-side{display:flex;flex-direction:column;gap:8px;align-items:flex-end;min-width:130px;}
.hj-order-btns{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;}
.hj-done-text{color:var(--hj-success);}

/* 工单 */
.hj-work-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;}
.hj-work-card{}
.hj-work-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-weight:600;font-size:14px;}
.hj-work-lines{display:flex;flex-direction:column;gap:5px;font-size:13px;}
.hj-work-record{margin-top:6px;padding:8px;background:#f0f7f0;border-radius:6px;color:var(--hj-primary-d);}

/* 报修 */
.hj-inquiry-list{display:flex;flex-direction:column;gap:12px;}
.hj-reply-box{margin-top:6px;padding:8px;background:#fff8e6;border-radius:6px;font-size:13px;}

/* Redis 状态盒 */
.hj-redis-box{
  margin-top:20px;background:var(--hj-card);border-radius:var(--hj-radius);
  padding:16px;border:1px solid var(--hj-border);
}
.hj-redis-box h4{margin:0 0 12px;font-size:15px;font-weight:600;}
.hj-redis-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-bottom:12px;}
.hj-redis-grid>div{display:flex;flex-direction:column;align-items:center;padding:12px;background:#f7f9f7;border-radius:8px;}
.hj-redis-num{font-size:22px;font-weight:700;color:var(--hj-earth);}
.hj-redis-label{font-size:12px;color:var(--hj-text-light);margin-top:2px;}

/* 设置/日志/双列 */
.hj-setting-card{max-width:560px;margin-bottom:16px;}
.hj-log-card{}
.hj-log-list{max-height:340px;overflow-y:auto;display:flex;flex-direction:column;}
.hj-log-row{display:flex;gap:12px;padding:6px 0;border-bottom:1px solid #f0f0f0;font-size:13px;flex-wrap:wrap;}
.hj-log-time{color:var(--hj-text-light);min-width:130px;}
.hj-log-action{color:var(--hj-primary);font-weight:500;min-width:100px;}
.hj-log-detail{color:var(--hj-text);flex:1;min-width:120px;}
.hj-dual-col{display:grid;grid-template-columns:1fr 1.4fr;gap:14px;align-items:start;}
@media (max-width:900px){.hj-dual-col{grid-template-columns:1fr;}}
.hj-cat-list{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;}
.hj-cat-row{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;background:#f7f9f7;border-radius:6px;font-size:13px;gap:8px;}
.hj-cat-add{display:flex;gap:8px;}
.hj-cat-add input{flex:1;}

/* 店铺信息 */
.hj-shop-info{margin-bottom:14px;}

/* emoji 选择器 */
.hj-emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:4px;}
.hj-emoji-pick{
  border:1px solid var(--hj-border);background:#fff;border-radius:6px;
  font-size:20px;padding:6px 0;cursor:pointer;min-height:40px;font-family:inherit;
}
.hj-emoji-pick:active{transform:scale(.94);}
.hj-emoji-sel{border-color:var(--hj-primary);background:#eef7ee;box-shadow:0 0 0 2px rgba(46,125,50,.2);}

/* 租赁确认 */
.hj-rent-info{display:flex;gap:12px;align-items:center;padding:12px;background:#f7f9f7;border-radius:8px;margin-bottom:14px;}
.hj-rent-emoji{font-size:40px;}
.hj-rent-info>div:last-child{display:flex;flex-direction:column;gap:3px;font-size:13px;}
.hj-rent-total{margin-top:10px;padding:12px;background:#f0f7f0;border-radius:8px;font-size:14px;line-height:1.8;}
.hj-price-big{font-size:22px;color:var(--hj-danger);font-weight:700;}

/* 收银台 */
.hj-pay-body{text-align:center;}
.hj-pay-row{display:flex;justify-content:space-between;padding:4px 0;font-size:13px;}
.hj-pay-amount{font-size:16px;font-weight:700;color:var(--hj-danger);margin-top:8px;}
.hj-pay-amount span{font-size:20px;}
.hj-qr-box{display:flex;justify-content:center;margin:14px 0;}
.hj-qr-grid{
  display:grid;grid-template-columns:repeat(8,1fr);width:192px;height:192px;
  border:2px solid var(--hj-primary);border-radius:8px;overflow:hidden;padding:4px;background:#fff;
}
.hj-qr-cell{width:23px;height:23px;}
.hj-qr-cell.on{background:#1f2937;}
.hj-pay-timer{font-size:14px;color:var(--hj-warning);font-weight:600;}

/* 评价星 */
.hj-rate-stars{display:flex;gap:8px;justify-content:center;margin-bottom:16px;}
.hj-rate-star{font-size:32px;color:#d5d8dc;cursor:pointer;user-select:none;}
.hj-rate-star.on{color:#f5b301;}

/* Toast */
.hj-toast{
  position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(.85);
  background:rgba(31,41,55,.92);color:#fff;padding:12px 24px;
  border-radius:8px;font-size:14px;z-index:20000;opacity:0;
  transition:all .25s;pointer-events:none;max-width:320px;text-align:center;
}
.hj-toast-show{opacity:1;transform:translate(-50%,-50%) scale(1);}
.hj-toast-error{background:rgba(239,68,68,.93);}

/* 响应式：小屏（全局适配层已覆盖触屏，此处兜底布局） */
@media (max-width:600px){
  .hj-mall-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));}
  .hj-emoji-grid{grid-template-columns:repeat(6,1fr);}
  .hj-order-side{width:100%;align-items:flex-start;}
  .hj-order-btns{justify-content:flex-start;}
}
@media (prefers-reduced-motion:reduce){
  .hj-app *,.hj-mask *{transition:none !important;animation:none !important;}
}

/* ============== wx- 智修联·设备售后维修 SaaS 平台 ============== */
.wx-app{
  --wx-primary:#0E63B8;
  --wx-primary-d:#0A4A8C;
  --wx-bg:#f3f6fa;
  --wx-card:#ffffff;
  --wx-text:#1f2937;
  --wx-text-light:#6b7280;
  --wx-border:#e5e7eb;
  --wx-success:#10b981;
  --wx-warning:#f59e0b;
  --wx-danger:#ef4444;
  --wx-blue:#2563eb;
  --wx-radius:10px;
  margin-top:5px;
  padding:0 16px 40px;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  font-size:14px;
  color:var(--wx-text);
  min-height:calc(100vh - 120px);
}
/* 弹窗挂 body：自带全部变量 + 字体 */
.wx-mask{
  --wx-primary:#0E63B8;
  --wx-primary-d:#0A4A8C;
  --wx-bg:#f3f6fa;
  --wx-card:#ffffff;
  --wx-text:#1f2937;
  --wx-text-light:#6b7280;
  --wx-border:#e5e7eb;
  --wx-success:#10b981;
  --wx-warning:#f59e0b;
  --wx-danger:#ef4444;
  --wx-blue:#2563eb;
  --wx-radius:10px;
  position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:10000;
  display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .2s;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--wx-text);font-size:14px;line-height:1.5;
}
.wx-mask-show{opacity:1;}
.wx-mask-inner{max-width:92vw;max-height:90vh;overflow-y:auto;}

/* 弹窗卡片 */
.wx-modal-card{
  background:var(--wx-card);border-radius:12px;overflow:hidden;
  box-shadow:0 8px 32px rgba(0,0,0,.2);width:420px;max-width:94vw;
  display:flex;flex-direction:column;
}
.wx-modal-mid{width:560px;}
.wx-modal-title{
  padding:14px 20px;font-size:16px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#0E63B8,#2185d0);
}
.wx-modal-body{padding:20px;overflow-y:auto;max-height:64vh;}
.wx-modal-actions{
  display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;
  padding:12px 20px;border-top:1px solid var(--wx-border);background:#fafbfc;
}

/* 按钮 */
.wx-btn{
  display:inline-flex;align-items:center;justify-content:center;
  padding:8px 16px;border:none;border-radius:8px;font-size:14px;
  cursor:pointer;transition:all .15s;min-height:40px;font-family:inherit;
}
.wx-btn:active{transform:scale(.96);}
.wx-btn-primary{background:var(--wx-primary);color:#fff;}
.wx-btn-primary:hover{background:var(--wx-primary-d);}
.wx-btn-danger{background:var(--wx-danger);color:#fff;}
.wx-btn-default{background:#eef1f5;color:var(--wx-text);}
.wx-btn-link{background:none;color:var(--wx-primary);padding:4px 8px;min-height:32px;}
.wx-btn-block{width:100%;}
.wx-btn-sm{padding:6px 12px;font-size:13px;gap:6px;}

/* 表单（弹窗挂 body，故 .wx-app / .wx-mask 双作用域） */
.wx-form-row{margin-bottom:14px;}
.wx-form-row>label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;}
.wx-app input:not([type="checkbox"]):not([type="radio"]),
.wx-app select,.wx-app textarea,
.wx-mask input:not([type="checkbox"]):not([type="radio"]),
.wx-mask select,.wx-mask textarea{
  width:100%;padding:9px 12px;border:1px solid var(--wx-border);
  border-radius:8px;font-size:16px;background:#fff;outline:none;
  min-height:40px;box-sizing:border-box;font-family:inherit;color:var(--wx-text);
}
.wx-form-row textarea,.wx-mask textarea{min-height:60px;resize:vertical;}
.wx-app input:focus,.wx-app select:focus,.wx-app textarea:focus,
.wx-mask input:focus,.wx-mask select:focus,.wx-mask textarea:focus{border-color:var(--wx-primary);}

/* 登录/注册/入驻 */
.wx-auth-wrap{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 160px);padding:20px;}
.wx-auth-card{
  background:var(--wx-card);border-radius:16px;padding:36px 40px;
  box-shadow:0 4px 24px rgba(14,99,184,.14);
  width:100%;max-width:440px;border:1px solid var(--wx-border);
}
.wx-auth-title{text-align:center;font-size:21px;font-weight:700;margin:0 0 6px;color:var(--wx-primary);}
.wx-auth-sub{text-align:center;font-size:12px;color:var(--wx-text-light);margin:0 0 24px;}
.wx-auth-links{display:flex;justify-content:space-between;margin-top:10px;}
.wx-auth-tip{text-align:center;font-size:12px;color:var(--wx-text-light);margin:14px 0 0;line-height:1.7;}

/* 主框架 */
.wx-header{
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;
  padding:12px 0;margin-bottom:10px;border-bottom:1px solid var(--wx-border);
}
.wx-header-left{display:flex;align-items:center;gap:8px;}
.wx-logo{font-size:20px;}
.wx-header-title{font-size:16px;font-weight:700;}
.wx-header-right{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.wx-user-name{font-size:13px;color:var(--wx-text-light);}
.wx-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:14px;border-bottom:1px solid var(--wx-border);}
.wx-tab{
  padding:8px 16px;border:none;background:none;cursor:pointer;font-size:14px;
  color:var(--wx-text-light);border-bottom:2px solid transparent;
  border-radius:8px 8px 0 0;min-height:40px;font-family:inherit;
}
.wx-tab:hover{color:var(--wx-primary);}
.wx-tab-active{color:var(--wx-primary);border-bottom-color:var(--wx-primary);font-weight:600;}

/* 页面 */
.wx-page-body{}
.wx-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px;}
.wx-toolbar .wx-filter{width:auto;min-width:160px;max-width:240px;flex-shrink:0;}
.wx-page-title{margin:0;font-size:16px;font-weight:600;}
.wx-page-title-gap{margin-top:26px;}
.wx-empty{text-align:center;color:var(--wx-text-light);padding:40px;font-size:14px;}
.wx-no-mer{color:var(--wx-warning);font-size:13px;padding:8px 0;}

/* 卡片 */
.wx-card{
  background:var(--wx-card);border-radius:var(--wx-radius);
  padding:16px;border:1px solid var(--wx-border);margin-bottom:12px;
}
.wx-card-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;}
.wx-info-lines{display:flex;flex-direction:column;gap:6px;font-size:13px;}
.wx-info-lines div span{display:inline-block;min-width:86px;color:var(--wx-text-light);}

/* 审核卡 / 工单卡 */
.wx-audit-card{max-width:760px;}
.wx-audit-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px;}
.wx-audit-name{font-size:15px;font-weight:700;}
.wx-work-card{max-width:860px;}

/* 状态标签（工单 11 态 + 商家 4 态） */
.wx-tag{display:inline-block;padding:2px 9px;border-radius:4px;font-size:12px;font-weight:500;line-height:1.7;white-space:nowrap;}
.wx-tag-pending{background:#fff3e0;color:#e08600;}
.wx-tag-rejected{background:#fdeaea;color:#c0392b;}
.wx-tag-quoting{background:#fef3c7;color:#b45309;}
.wx-tag-quoted{background:#e0f7fa;color:#0e7490;}
.wx-tag-paid{background:#ede9fe;color:#6d28d9;}
.wx-tag-assigned{background:#e6faf4;color:#0f766e;}
.wx-tag-arrived{background:#e0f2f1;color:#00695c;}
.wx-tag-repairing{background:#e3f2fd;color:#1565c0;}
.wx-tag-submitted{background:#fff8e1;color:#b45309;}
.wx-tag-completed{background:#e6f7ea;color:#1b8a3a;}
.wx-tag-cancelled{background:#f2f3f5;color:#6b7280;}
.wx-tag-pass{background:#e6f7ea;color:#1b8a3a;}
.wx-tag-disabled{background:#f2f3f5;color:#6b7280;}
.wx-tag-reject{background:#fdeaea;color:#c0392b;}

/* 紧急度 */
.wx-ug{display:inline-block;padding:2px 9px;border-radius:4px;font-size:12px;font-weight:600;line-height:1.7;white-space:nowrap;}
.wx-ug-normal{background:#eef2f7;color:#5b6b7f;}
.wx-urgent{background:#fff3e0;color:#e08600;}
.wx-ug-emergency{background:#fdeaea;color:#c0392b;}

/* 统计卡 */
.wx-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:14px;}
.wx-stat-card{
  background:var(--wx-card);border-radius:var(--wx-radius);padding:18px;
  text-align:center;border:1px solid var(--wx-border);
}
.wx-stat-num{font-size:26px;font-weight:700;color:var(--wx-primary);word-break:break-all;}
.wx-stat-label{font-size:13px;color:var(--wx-text-light);margin-top:4px;}
.wx-stat-ok .wx-stat-num{color:var(--wx-success);}
.wx-stat-warn .wx-stat-num{color:var(--wx-warning);}

/* 表格（无外层包裹，自身横向滚动） */
.wx-table{
  display:block;width:100%;overflow-x:auto;
  background:var(--wx-card);border:1px solid var(--wx-border);
  border-radius:var(--wx-radius);border-collapse:collapse;font-size:13px;
}
.wx-card .wx-table{border:none;border-radius:0;}
.wx-table th,.wx-table td{padding:10px 12px;border-bottom:1px solid #f0f0f0;white-space:nowrap;}
.wx-table th{text-align:left;color:var(--wx-text-light);background:#fafbfc;font-weight:600;}
.wx-table tbody tr:last-child td{border-bottom:none;}
.wx-table tr:hover td{background:#f4f9fe;}
.wx-table-empty{text-align:center !important;color:var(--wx-text-light);padding:26px;white-space:normal !important;}
.wx-op-cell{white-space:nowrap;text-align:left;}
.wx-row-warn td{background:#fff7ed;}
.wx-row-warn:hover td{background:#ffedd5;}

/* 复选/单选 */
.wx-chk-box{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;padding:10px;border:1px solid var(--wx-border);border-radius:8px;background:#fafbfc;}
.wx-chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:6px;min-height:40px;box-sizing:border-box;cursor:pointer;}
.wx-radio-row{display:flex;gap:18px;flex-wrap:wrap;}
.wx-radio-row label{display:inline-flex;align-items:center;gap:5px;font-size:14px;min-height:40px;cursor:pointer;}

/* 时间线 */
.wx-timeline{padding:4px 0;}
.wx-tl-row{position:relative;padding:5px 0 5px 20px;margin-left:6px;border-left:2px solid var(--wx-border);font-size:13px;color:var(--wx-text);}
.wx-tl-dot{position:absolute;left:-6px;top:11px;width:10px;height:10px;border-radius:50%;background:var(--wx-primary);border:2px solid #fff;box-sizing:border-box;}

/* Redis 状态盒 */
.wx-redis-card{margin-top:4px;}
.wx-redis-title{margin:0 0 12px;font-size:15px;font-weight:600;}
.wx-redis-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;margin-bottom:12px;}
.wx-redis-stats span{display:flex;flex-direction:column;align-items:center;gap:2px;padding:12px;background:#f5f8fc;border-radius:8px;font-size:12px;color:var(--wx-text-light);}
.wx-redis-stats b{font-size:21px;color:var(--wx-primary-d);}

/* 品类新增 */
.wx-cat-add{display:flex;gap:8px;margin-bottom:12px;}
.wx-cat-add input{flex:1;width:auto;}
.wx-cat-add .wx-btn{flex-shrink:0;}

/* 完工备件行 */
.wx-finish-row{display:flex;gap:8px;margin-bottom:8px;align-items:center;}
.wx-finish-part{flex:1;width:auto;}
.wx-finish-qty{flex-shrink:0;}

/* 工单详情内区块 */
.wx-view-head{font-weight:700;padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid var(--wx-border);}
.wx-view-head .wx-tag,.wx-view-head .wx-ug{margin-left:4px;}
.wx-view-quote{margin-top:12px;padding:12px;background:#f5f8fc;border:1px solid #e3edf7;border-radius:8px;}
.wx-view-total{text-align:right;font-weight:700;font-size:15px;color:var(--wx-danger);margin-top:8px;}
.wx-view-log{margin-top:12px;padding:10px 12px;background:#f5f8fc;border-radius:8px;font-size:13px;line-height:1.7;}
.wx-view-log b{display:block;margin-bottom:4px;}
.wx-view-review{margin-top:12px;padding:10px 12px;background:#fffbeb;border-radius:8px;font-size:13px;line-height:1.7;}
.wx-view-review b{display:block;margin-bottom:4px;}
.wx-view-stars{color:#f5b301;font-size:15px;letter-spacing:2px;}
.wx-view-reject{margin:8px 0;padding:8px 12px;background:#fef2f2;border-radius:8px;color:#c0392b;font-size:13px;}
.wx-view-settle{margin-top:12px;padding:10px 12px;background:#ecfdf5;border-radius:8px;font-size:13px;font-weight:600;color:#0f766e;}
.wx-accept-log{padding:10px 12px;background:#f5f8fc;border-radius:8px;font-size:13px;line-height:1.7;}

/* 报价表 */
.wx-quote-table{display:table;width:100%;margin:6px 0;font-size:13px;border:none;background:transparent;overflow:visible;}
.wx-quote-table td{border:none;padding:4px 6px;white-space:normal;}
.wx-quote-table tr:hover td{background:transparent;}
.wx-quote-total{font-weight:700;color:var(--wx-danger);text-align:right;margin-top:6px;}

/* 收银台 */
.wx-pay-body{text-align:center;}
.wx-pay-row{display:flex;justify-content:space-between;padding:4px 0;font-size:13px;}
.wx-pay-amount{font-size:16px;font-weight:700;color:var(--wx-danger);margin-top:8px;}
.wx-pay-amount span{font-size:21px;}
.wx-pay-count{margin:6px 0 2px;font-size:14px;color:var(--wx-warning);font-weight:600;}
.wx-pay-count b{font-size:16px;}
.wx-qr-box{display:flex;justify-content:center;margin:14px 0 8px;}
.wx-qr-grid{
  display:grid;grid-template-columns:repeat(8,1fr);width:192px;height:192px;
  border:2px solid var(--wx-primary);border-radius:8px;overflow:hidden;padding:4px;background:#fff;
}
.wx-qr-cell{width:23px;height:23px;}
.wx-qr-cell.on{background:#1f2937;}
.wx-qr-tip{font-size:12px;color:var(--wx-text-light);}

/* 评价星 */
.wx-rate-stars{display:flex;gap:8px;justify-content:center;margin-bottom:14px;}
.wx-rate-star{font-size:34px;color:#d5d8dc;cursor:pointer;user-select:none;line-height:1;}
.wx-rate-star.on{color:#f5b301;}

/* 平台设置表单 */
.wx-set-form{max-width:560px;}

/* Toast */
.wx-toast{
  position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(.85);
  background:rgba(31,41,55,.92);color:#fff;padding:12px 24px;
  border-radius:8px;font-size:14px;z-index:20000;opacity:0;
  transition:all .25s;pointer-events:none;max-width:320px;text-align:center;
}
.wx-toast-show{opacity:1;transform:translate(-50%,-50%) scale(1);}
.wx-toast-error{background:rgba(239,68,68,.93);}

/* 响应式兜底 */
@media (max-width:600px){
  .wx-toolbar{flex-direction:column;align-items:stretch;}
  .wx-toolbar .wx-filter{width:100%;max-width:none;}
  .wx-chk-box{grid-template-columns:1fr;}
  .wx-header-right{width:100%;justify-content:space-between;}
  .wx-finish-row{flex-wrap:wrap;}
  .wx-finish-part{flex-basis:100%;}
}
@media (prefers-reduced-motion:reduce){
  .wx-app *,.wx-mask *{transition:none !important;animation:none !important;}
}
/* =====================================================================
   家修联 · 家用维保 SaaS（右侧槽位「家用维保」jx- 前缀独立样式）
   双隔离：jx- 类名前缀 + 本块变量作用域（.jx-app / .jx-mask）
   ===================================================================== */
.jx-app, .jx-mask {
  --jx-primary: #2563eb; --jx-primary-d: #1d4ed8;
  --jx-bg: #eef2f7; --jx-card: #ffffff; --jx-line: #e4e9f1;
  --jx-tx: #1f2937; --jx-sub: #6b7280;
}
.jx-app * { box-sizing: border-box; }
.jx-app { color: var(--jx-tx); font-size: 14px; line-height: 1.5; }

/* ---------- 顶栏 / 页签 ---------- */
.jx-topbar {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; background: #fff;
  border-bottom: 1px solid var(--jx-line); padding: 10px 16px;
}
.jx-brand { font-size: 16px; font-weight: 700; color: var(--jx-primary); }
.jx-user-info { display: flex; align-items: center; gap: 10px; }
.jx-user-name { font-size: 13.5px; color: #4b5563; }
.jx-tabs {
  display: flex; gap: 4px; padding: 8px 12px 0;
  background: #fff; border-bottom: 1px solid var(--jx-line); overflow-x: auto;
}
.jx-tab {
  border: 1px solid transparent; border-bottom: none; background: transparent;
  color: #6b7280; font-size: 14px; padding: 8px 16px; min-height: 40px;
  border-radius: 8px 8px 0 0; cursor: pointer; white-space: nowrap; font-family: inherit;
}
.jx-tab:hover { color: var(--jx-primary); background: #f7f9fd; }
.jx-tab.active { color: var(--jx-primary); background: #f5f8ff; border-color: var(--jx-line); font-weight: 600; }
.jx-body { padding: 12px 16px 18px; background: var(--jx-bg); min-height: 60vh; }

/* ---------- 标题 ---------- */
.jx-h3 { margin: 2px 0 10px; font-size: 16px; font-weight: 700; color: #111827; }
.jx-h4 { margin: 14px 0 8px; font-size: 14px; font-weight: 600; color: #374151; }
.jx-mt { margin-top: 18px; }
.jx-strong { font-weight: 600; color: #111827; font-size: 15px; }
.jx-line-tip { color: #8a93a3; font-size: 12.5px; margin: 8px 0 12px; line-height: 1.6; }

/* ---------- 按钮（触摸目标 ≥40px，表格紧凑按钮 32px） ---------- */
.jx-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 40px; padding: 0 16px; border: 1px solid transparent; border-radius: 8px;
  font-size: 14px; font-weight: 500; font-family: inherit; cursor: pointer;
  background: #e8ecf2; color: #374151; white-space: nowrap; vertical-align: middle;
  transition: background .15s, border-color .15s, transform .1s;
}
.jx-btn:hover { background: #dce2ea; }
.jx-btn:active { transform: translateY(1px); }
.jx-btn-sm { min-height: 32px; padding: 0 10px; font-size: 13px; border-radius: 7px; }
.jx-btn-primary { background: var(--jx-primary); color: #1a1d23; }
.jx-btn-primary:hover { background: var(--jx-primary-d); }
.jx-btn-success { background: #16a34a; color: #1a1d23; }
.jx-btn-success:hover { background: #15803d; }
.jx-btn-danger { background: #dc2626; color: #1a1d23; }
.jx-btn-danger:hover { background: #b91c1c; }
.jx-btn-warn { background: #d97706; color: #1a1d23; }
.jx-btn-warn:hover { background: #b45309; }
.jx-btn-default { background: #f1f4f8; color: #374151; border-color: #d8dee8; }
.jx-btn-default:hover { background: #e7ecf2; }
.jx-btn-link { background: transparent; color: var(--jx-primary); min-height: 40px; padding: 0 6px; }
.jx-btn-link:hover { background: transparent; color: var(--jx-primary-d); text-decoration: underline; }
.jx-btn-block { width: 100%; }
.jx-btn.disabled, .jx-btn[disabled] { opacity: .5; pointer-events: none; }

/* ---------- 表单（触屏输入 16px 防 iOS 缩放） ---------- */
.jx-app input[type="text"], .jx-app input[type="password"], .jx-app input[type="number"],
.jx-app input[type="date"], .jx-app select, .jx-app textarea,
.jx-mask input[type="text"], .jx-mask input[type="password"], .jx-mask input[type="number"],
.jx-mask input[type="date"], .jx-mask select, .jx-mask textarea {
  width: 100%; min-height: 40px; padding: 8px 12px; border: 1px solid #d5dbe5;
  border-radius: 8px; font-size: 16px; color: #1f2937; background: #fff;
  outline: none; font-family: inherit;
}
.jx-app textarea, .jx-mask textarea { min-height: 84px; resize: vertical; line-height: 1.5; padding-top: 9px; }
.jx-app input:focus, .jx-app select:focus, .jx-app textarea:focus,
.jx-mask input:focus, .jx-mask select:focus, .jx-mask textarea:focus {
  border-color: var(--jx-primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, .15);
}
.jx-app select, .jx-mask select {
  appearance: none; -webkit-appearance: none; padding-right: 32px;
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236b7280' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
.jx-form-row { margin-bottom: 12px; }
.jx-form-row > label { display: block; margin-bottom: 5px; color: #4b5563; font-size: 13px; font-weight: 500; }
.jx-form-card { background: #fff; border: 1px solid var(--jx-line); border-radius: 10px; padding: 18px; max-width: 640px; }
.jx-form-actions { margin-top: 6px; display: flex; gap: 10px; flex-wrap: wrap; }

/* ---------- 复选 ---------- */
.jx-chk-box { display: flex; flex-wrap: wrap; gap: 8px 14px; padding: 6px 0; }
.jx-chk {
  display: inline-flex; align-items: center; gap: 7px; min-height: 40px;
  padding: 0 12px; border: 1px solid var(--jx-line); border-radius: 8px;
  background: #fafbfd; cursor: pointer; font-size: 13.5px;
}
.jx-chk:hover { border-color: #c3cedd; background: #f5f8fd; }
.jx-chk input[type="checkbox"] {
  width: 17px !important; height: 17px; min-height: 0 !important;
  padding: 0 !important; accent-color: var(--jx-primary); flex: none;
}

/* ---------- 认证页 ---------- */
.jx-auth-wrap {
  min-height: calc(100vh - 140px); display: flex; align-items: center;
  justify-content: center; padding: 24px;
  background: linear-gradient(160deg, #eaf0fa, #f8fafc);
}
.jx-auth-card {
  width: 100%; max-width: 420px; background: #fff; border-radius: 14px;
  padding: 30px 28px; box-shadow: 0 12px 40px rgba(31, 41, 55, .12);
}
.jx-auth-card-wide { max-width: 520px; }
.jx-auth-title { margin: 0; font-size: 22px; color: #111827; text-align: center; }
.jx-auth-sub { margin: 6px 0 18px; text-align: center; color: #6b7280; font-size: 13px; }
.jx-auth-links { display: flex; justify-content: space-between; gap: 10px; margin-top: 14px; }
.jx-auth-tip { margin: 14px 0 0; color: #9ca3af; font-size: 12px; text-align: center; line-height: 1.6; }
.jx-boot-tip { background: #fef3c7; color: #92400e; border-radius: 8px; padding: 9px 12px; font-size: 13px; margin-bottom: 14px; line-height: 1.5; }

/* ---------- 表格（外层 wrap 滚动，表格自身保持原生布局） ---------- */
.jx-table-wrap {
  width: 100%; overflow-x: auto; border: 1px solid var(--jx-line);
  border-radius: 10px; background: #fff; margin-bottom: 4px;
}
.jx-table { width: 100%; border-collapse: collapse; font-size: 13.5px; white-space: nowrap; }
.jx-table th {
  background: #f7f9fc; color: #4b5563; font-weight: 600; text-align: left;
  padding: 10px 12px; border-bottom: 1px solid var(--jx-line); font-size: 13px;
}
.jx-table td { padding: 10px 12px; border-bottom: 1px solid #eef1f5; color: #374151; }
.jx-table tbody tr:last-child td { border-bottom: none; }
.jx-table tbody tr:hover { background: #f8fafd; }
.jx-td-empty { text-align: center; color: #9ca3af; padding: 28px 12px !important; white-space: normal; }
.jx-row-warn { background: #fff8ed !important; }

/* ---------- 状态标签 ---------- */
.jx-tag {
  display: inline-block; padding: 3px 10px; border-radius: 999px;
  font-size: 12px; font-weight: 500; line-height: 1.6; white-space: nowrap;
}
.jx-tag-blue { background: #dbeafe; color: #1d4ed8; }
.jx-tag-orange { background: #ffedd5; color: #c2410c; }
.jx-tag-indigo { background: #e0e7ff; color: #4338ca; }
.jx-tag-cyan { background: #cffafe; color: #0e7490; }
.jx-tag-purple { background: #f3e8ff; color: #7e22ce; }
.jx-tag-green { background: #dcfce7; color: #15803d; }
.jx-tag-red { background: #fee2e2; color: #b91c1c; }
.jx-tag-gray { background: #f0f1f4; color: #6b7280; }

/* ---------- 统计卡 ---------- */
.jx-stat-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
  gap: 12px; margin-bottom: 10px;
}
.jx-stat-grid-4 { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.jx-stat-card { background: #fff; border: 1px solid var(--jx-line); border-radius: 10px; padding: 15px 16px; }
.jx-stat-label { color: #6b7280; font-size: 13px; margin-bottom: 6px; }
.jx-stat-value { font-size: 24px; font-weight: 700; color: #111827; line-height: 1.25; word-break: break-all; }

/* ---------- 通用卡片（审核卡等） ---------- */
.jx-card { background: #fff; border: 1px solid var(--jx-line); border-radius: 10px; padding: 16px; margin-bottom: 12px; }
.jx-card-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.jx-card-actions { display: flex; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
.jx-desc-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 16px; }
.jx-desc-grid > div { color: #374151; font-size: 13.5px; line-height: 1.5; min-width: 0; }
.jx-desc-grid span { display: block; color: #8a93a3; font-size: 12px; margin-bottom: 2px; }
.jx-span2 { grid-column: span 2; }

/* ---------- 工具条 / 筛选 ---------- */
.jx-toolbar { display: flex; gap: 10px; align-items: center; margin: 0 0 10px; flex-wrap: wrap; }
.jx-filter { margin: 0 0 10px; max-width: 240px; }
.jx-cat-add { display: flex; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.jx-cat-add input { flex: 1; min-width: 140px; }
.jx-cat-add .jx-cat-subs-input { flex: 2; }

/* ---------- 弹窗 ---------- */
.jx-mask {
  position: fixed; inset: 0; background: rgba(15, 23, 42, .5);
  z-index: 9998; overflow-y: auto; padding: 20px;
}
.jx-modal-card {
  background: #fff; border-radius: 12px; max-width: 560px;
  margin: 6vh auto; box-shadow: 0 20px 60px rgba(0, 0, 0, .25); overflow: hidden;
}
.jx-modal-wide { max-width: 880px; }
.jx-modal-title {
  padding: 15px 20px; font-size: 16px; font-weight: 600;
  border-bottom: 1px solid var(--jx-line); color: #111827;
}
.jx-modal-body { padding: 18px 20px; max-height: 68vh; overflow-y: auto; }
.jx-modal-actions {
  display: flex; justify-content: flex-end; gap: 10px; flex-wrap: wrap;
  padding: 13px 20px; border-top: 1px solid var(--jx-line); background: #fafbfd;
}

/* ---------- 时间线 ---------- */
.jx-timeline { padding: 4px 0; }
.jx-tl-item { position: relative; padding: 0 0 14px 20px; border-left: 2px solid #e3e8f0; margin-left: 6px; }
.jx-tl-item:last-child { padding-bottom: 0; }
.jx-tl-dot {
  position: absolute; left: -7px; top: 3px; width: 12px; height: 12px;
  border-radius: 50%; background: var(--jx-primary); border: 2px solid #fff;
  box-shadow: 0 0 0 2px #dce6fb;
}
.jx-tl-name { font-size: 13.5px; font-weight: 600; color: #374151; }
.jx-tl-time { font-size: 12px; color: #9ca3af; margin-top: 2px; }

/* ---------- Redis 状态盒 ---------- */
.jx-redis-box {
  display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
  background: #0f172a; color: #e2e8f0; border-radius: 10px; padding: 14px 18px;
}
.jx-redis-item { display: flex; flex-direction: column; gap: 3px; font-size: 12px; color: #94a3b8; }
.jx-redis-item strong { color: #1a1d23; font-size: 17px; }
.jx-redis-box .jx-btn { margin-left: auto; }

/* ---------- 技师工单卡 ---------- */
.jx-work-card { background: #fff; border: 1px solid var(--jx-line); border-radius: 10px; padding: 14px 16px; margin-bottom: 12px; }
.jx-work-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.jx-work-no { margin-left: auto; color: #9ca3af; font-size: 12.5px; }
.jx-work-desc { color: #4b5563; font-size: 13.5px; line-height: 1.7; }
.jx-work-desc span { color: #9ca3af; }
.jx-work-actions { display: flex; gap: 10px; margin-top: 10px; flex-wrap: wrap; }

/* ---------- 收银台 ---------- */
.jx-pay-body { display: flex; flex-direction: column; }
.jx-pay-row { display: flex; justify-content: space-between; gap: 16px; padding: 6px 0; font-size: 14px; }
.jx-pay-row > span:first-child { color: #6b7280; }
.jx-quote-box { background: #f8fafc; border: 1px solid var(--jx-line); border-radius: 8px; padding: 4px 12px; margin: 6px 0; }
.jx-quote-box .jx-pay-row { padding: 5px 0; }
.jx-qr-box { display: flex; flex-direction: column; align-items: center; margin: 12px 0 4px; }
.jx-qr-grid {
  display: grid; grid-template-columns: repeat(8, 1fr); gap: 2px;
  background: #fff; border: 1px solid var(--jx-line); padding: 10px; border-radius: 10px;
}
.jx-qr-cell { width: 22px; height: 22px; background: #f3f4f6; border-radius: 2px; }
.jx-qr-cell.on { background: #111827; }
.jx-qr-tip { font-size: 12.5px; color: #6b7280; margin-top: 8px; }
.jx-pay-amount { text-align: center; font-size: 15px; color: #374151; margin-top: 8px; }
.jx-pay-amount span { font-size: 24px; font-weight: 700; color: #dc2626; margin-left: 6px; }
.jx-pay-count { text-align: center; font-size: 14px; color: #374151; margin-top: 6px; }
.jx-pay-count b { color: #dc2626; font-size: 18px; margin-left: 4px; }
.jx-pay-timeout { display: none; text-align: center; color: #dc2626; font-size: 13px; margin-top: 8px; line-height: 1.5; }

/* ---------- 星级评价 ---------- */
.jx-mini-star { color: #d8dee8; font-size: 14px; }
.jx-mini-star.on { color: #f59e0b; }
.jx-rate-box { display: flex; gap: 4px; justify-content: center; padding: 10px 0 4px; }
.jx-rate-star {
  font-size: 32px; color: #d8dee8; cursor: pointer; padding: 6px;
  line-height: 1; min-width: 44px; text-align: center; user-select: none;
}
.jx-rate-star:hover { color: #fbbf24; }
.jx-rate-star.on { color: #f59e0b; }

/* ---------- 验收/报修/完工杂项 ---------- */
.jx-accept-log {
  background: #f8fafc; border: 1px solid var(--jx-line); border-radius: 8px;
  padding: 10px 12px; font-size: 13.5px; line-height: 1.6; color: #374151;
  white-space: pre-wrap; word-break: break-all;
}
.jx-repair-goods { background: #eff6ff; border: 1px solid #bfdbfe; color: #1e40af; border-radius: 8px; padding: 10px 12px; font-size: 13.5px; margin-bottom: 12px; }
.jx-fp-row { display: flex; gap: 10px; margin-bottom: 8px; }
.jx-fp-row select { flex: 1; }
.jx-fp-qty { width: 88px !important; flex: none; }

/* ---------- 空状态 / Toast ---------- */
.jx-empty {
  background: #fff; border: 1px dashed #d5dbe5; border-radius: 10px;
  color: #9ca3af; text-align: center; padding: 34px 16px; font-size: 14px;
}
.jx-toast {
  position: fixed; top: 18px; left: 50%;
  transform: translateX(-50%) translateY(-16px);
  background: #1f2937; color: #1a1d23; padding: 10px 20px; border-radius: 10px;
  font-size: 14px; z-index: 10001; opacity: 0; pointer-events: none;
  transition: opacity .25s, transform .25s; max-width: 86vw;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .2); line-height: 1.5;
}
.jx-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.jx-toast.error { background: #dc2626; }
.jx-toast.success { background: #16a34a; }

/* ---------- 响应式 ---------- */
@media (max-width: 900px) {
  .jx-desc-grid { grid-template-columns: 1fr; }
  .jx-span2 { grid-column: span 1; }
  .jx-modal-card { margin: 3vh auto; }
  .jx-mask { padding: 12px; }
  .jx-user-name { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .jx-app *, .jx-mask * { transition: none !important; animation: none !important; }
}

/* =====================================================================
   品牌时装 · 服装 SaaS 聚合平台（右侧槽位「品牌时装」brand- 前缀独立样式）
   双隔离：brand- 类名前缀 + 本块变量作用域（.brand-app / .brand-mask）
           + 独立命名空间 localStorage（brand_fashion_*）
   ===================================================================== */
.brand-app, .brand-mask {
  --brand-primary: #912222; --brand-primary-d: #6f1919;
  --brand-bg: #f6f5f7; --brand-card: #ffffff; --brand-line: #ece8ea;
  --brand-tx: #2a2326; --brand-sub: #8a8186;
}
.brand-app * { box-sizing: border-box; }
.brand-app { color: var(--brand-tx); font-size: 14px; line-height: 1.5; padding-top: 5px; }
/* 品牌时装宿主：覆盖 .content-inner 默认 24px 左右留白，与粮油/果蔬/帮丁一致为 3px */
.content-inner.brand-host { padding: 5px 3px 24px; scrollbar-width: none; }
.content-inner.brand-host::-webkit-scrollbar { display: none; }
/* 品牌/粮油/果蔬/帮丁：自包含全幅模块，不预留滚动条槽，保证左右留白一致 3px */
.content-inner.brand-host, .content-inner.go-host, .content-inner.fv-host, .content-inner.hp-host { scrollbar-gutter: auto; }

/* =====================================================================
   同款登录页统一（仅作用于与「调度系统 dd」同款者）：
   dd / jd / hx / hd / qc —— 内容区直接子元素为 xxx-app（带背景色），
   其内是居中 login-card（含 登录/注册 Tab + 测试账号提示 + 主按钮）。
   登录态下：内容区四周仅留 2px，登录背景铺满，登录面板水平+垂直居中。
   仅当登录卡片存在时生效(:has)，登录后进入业务界面自动还原，不影响原功能。
   注：其它登录样式（xxx-login-wrap / xxx-auth-card / 落地页 / 弹窗）不在其列，保持不动。
   ===================================================================== */
.content-inner:has(> .dd-app > .dd-login-card),
.content-inner:has(> .jd-app > .jd-login-card),
.content-inner:has(> .hx-app > .hx-login-card),
.content-inner:has(> .qc-app > .qc-login-card),
.content-inner:has(> .hd-app > .hd-auth-wrap) {
  padding: 2px;
  display: flex;
  scrollbar-gutter: auto;
}
.content-inner:has(> .dd-app > .dd-login-card) > .dd-app,
.content-inner:has(> .jd-app > .jd-login-card) > .jd-app,
.content-inner:has(> .hx-app > .hx-login-card) > .hx-app,
.content-inner:has(> .qc-app > .qc-login-card) > .qc-app,
.content-inner:has(> .hd-app > .hd-auth-wrap) > .hd-app {
  margin: 0;
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  align-items: safe center;
  justify-content: center;
}

/* =====================================================================
   第二批：以 今日帮丁(hp) / 果蔬供应(fv) / 粮油(go) 的「铺满窗口」为基准，
   把下列模块的登录背景统一铺满内容区、登录面板居中：
   数据管理 dm / 智能装修 zx / 房屋租赁 zl / 家有萌宠 mc —— 渐变底在 xxx-login-wrap
   体能健身 tn / 闲置流转 xz / 车位出租 cw / 家用维保 jx —— 整页浅底 / 落地页 / auth-wrap
   仅登录态（login-wrap / login-card / auth-card 存在）生效，登录后自动还原，不影响原功能。
   ===================================================================== */
.content-inner:has(> .dm-app > .dm-login-wrap),
.content-inner:has(> .zx-app > .zx-login-wrap),
.content-inner:has(> .zl-app > .zl-login-wrap),
.content-inner:has(> .mc-app > .mc-login-wrap),
.content-inner:has(> .tn-app > .tn-login-wrap),
.content-inner:has(> .xz-app > .xz-login-wrap),
.content-inner:has(> .cw-app > .cw-landing-wrap),
.content-inner:has(> .cw-app > .cw-form-wrap),
.content-inner:has(> .jx-app > .jx-auth-card) {
  padding: 3px;
  display: flex;
  scrollbar-gutter: auto;
}
/* 渐变底模块：app 撑满，login-wrap 撑满高度（渐变铺满窗口），卡片由 wrap 自身居中 */
.content-inner:has(> .dm-app > .dm-login-wrap) > .dm-app,
.content-inner:has(> .zx-app > .zx-login-wrap) > .zx-app,
.content-inner:has(> .zl-app > .zl-login-wrap) > .zl-app,
.content-inner:has(> .mc-app > .mc-login-wrap) > .mc-app {
  margin: 0;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
}
.content-inner:has(> .dm-app > .dm-login-wrap) > .dm-app > .dm-login-wrap,
.content-inner:has(> .zx-app > .zx-login-wrap) > .zx-app > .zx-login-wrap,
.content-inner:has(> .zl-app > .zl-login-wrap) > .zl-app > .zl-login-wrap,
.content-inner:has(> .mc-app > .mc-login-wrap) > .mc-app > .mc-login-wrap {
  flex: 1 1 auto;
  min-height: 0;
}
.content-inner:has(> .zx-app > .zx-login-wrap) > .zx-app > .zx-login-wrap { align-items: center; }
/* 整页浅底 / 落地页 / auth-wrap 模块：app 撑满并 flex 居中登录面板 */
.content-inner:has(> .tn-app > .tn-login-wrap) > .tn-app,
.content-inner:has(> .xz-app > .xz-login-wrap) > .xz-app,
.content-inner:has(> .cw-app > .cw-landing-wrap) > .cw-app,
.content-inner:has(> .cw-app > .cw-form-wrap) > .cw-app,
.content-inner:has(> .jx-app > .jx-auth-card) > .jx-app {
  margin: 0;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  align-items: center;
  align-items: safe center;
  justify-content: center;
}

/* =====================================================================
   第三批：右槽 14 露营平台(ly) / 15 家政平台(jz) / 16 安心照顾(ax)
   均为整页落地/业务站（.xxx-app 自带背景色 + min-height:100%，且为
   .content-inner 的直接子元素）。只需去掉 content-inner 默认 24px 左右
   留白，app 即以块级 min-height:100% 铺满内容列（不引入 flex 居中，
   避免把整页落地页当卡片居中、且避免 flex 高度不滚动的问题）。
   登录/落地态与登录后业务界面同样铺满，不影响原功能。
   ===================================================================== */
.content-inner:has(> .ly-app),
.content-inner:has(> .jz-app),
.content-inner:has(> .ax-app) {
  padding: 3px;
  scrollbar-gutter: auto;
}
.content-inner:has(> .ly-app) > .ly-app,
.content-inner:has(> .jz-app) > .jz-app,
.content-inner:has(> .ax-app) > .ax-app {
  margin: 0;
  min-width: 0;
}
.brand-topbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  background: linear-gradient(135deg, #912222, #5e1414); color: #1a1d23; border-radius: 10px; padding: 10px 16px; margin-bottom: 12px; }
.brand-brand { font-weight: 700; font-size: 16px; }
.brand-user-info { display: flex; align-items: center; gap: 10px; }
.brand-user-name { font-size: 13px; opacity: .92; }
.brand-tabs { display: flex; gap: 4px; padding: 8px 12px 0; background: #fff; border: 1px solid var(--brand-line); border-bottom: none; border-radius: 10px 10px 0 0; overflow-x: auto; }
.brand-tab { border: 1px solid transparent; border-bottom: none; background: transparent; color: var(--brand-sub); font-size: 14px; padding: 8px 16px; min-height: 40px; border-radius: 8px 8px 0 0; cursor: pointer; white-space: nowrap; font-family: inherit; }
.brand-tab:hover { color: var(--brand-primary); background: #faf4f4; }
.brand-tab.active { color: #1a1d23; background: var(--brand-primary); font-weight: 600; }
.brand-body { padding: 14px 16px 18px; background: #fff; border: 1px solid var(--brand-line); border-radius: 0 0 10px 10px; min-height: 60vh; }
.brand-h3 { margin: 2px 0 10px; font-size: 16px; font-weight: 700; color: #1c1719; }
.brand-h4 { margin: 14px 0 8px; font-size: 14px; font-weight: 600; color: #3a3135; }
.brand-sub { color: var(--brand-sub); font-size: 12.5px; margin: 0 0 8px; }
.brand-tip { color: var(--brand-sub); font-size: 12.5px; }
.brand-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 40px; padding: 0 16px; border: 1px solid transparent; border-radius: 8px; font-size: 14px; font-weight: 500; font-family: inherit; cursor: pointer; background: #ece8ea; color: #3a3135; white-space: nowrap; vertical-align: middle; transition: background .15s, transform .1s; }
.brand-btn:hover { background: #e0dade; }
.brand-btn:active { transform: translateY(1px); }
.brand-btn-sm { min-height: 32px; padding: 0 10px; font-size: 13px; border-radius: 7px; }
.brand-btn-block { width: 100%; }
.brand-btn-primary { background: var(--brand-primary); color: #1a1d23; }
.brand-btn-primary:hover { background: var(--brand-primary-d); }
.brand-btn-danger { background: #c0392b; color: #1a1d23; }
.brand-btn-danger:hover { background: #99301f; }
.brand-btn-warn { background: #d97706; color: #1a1d23; }
.brand-btn-default { background: #f4f1f2; color: #3a3135; border-color: #e2dcde; }
.brand-btn-default:hover { background: #ece7e9; }
.brand-btn.disabled, .brand-btn[disabled] { opacity: .5; pointer-events: none; }
.brand-form-row { margin-bottom: 12px; }
.brand-form-row > label { display: block; margin-bottom: 5px; color: #5a5155; font-size: 13px; font-weight: 500; }
.brand-app input[type="text"], .brand-app input[type="password"], .brand-app input[type="number"], .brand-app input[type="date"], .brand-app select, .brand-app textarea,
.brand-mask input[type="text"], .brand-mask input[type="password"], .brand-mask input[type="number"], .brand-mask input[type="date"], .brand-mask select, .brand-mask textarea,
.brand-app input:not([type]), .brand-mask input:not([type]) {
  width: 100%; min-height: 40px; padding: 8px 12px; border: 1px solid #dad3d6; border-radius: 8px; font-size: 16px; color: #2a2326; background: #fff; outline: none; font-family: inherit; }
.brand-app textarea, .brand-mask textarea { min-height: 84px; resize: vertical; }
.brand-app input:focus, .brand-app select:focus, .brand-app textarea:focus, .brand-mask input:focus, .brand-mask select:focus, .brand-mask textarea:focus { border-color: var(--brand-primary); box-shadow: 0 0 0 3px rgba(145,34,34,.15); }
.brand-app select, .brand-mask select { appearance: none; -webkit-appearance: none; padding-right: 32px; background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238a8186' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; }
.brand-form-card { background: #fff; border: 1px solid var(--brand-line); border-radius: 10px; padding: 18px; max-width: 560px; }
.brand-form-actions { margin-top: 6px; display: flex; gap: 10px; flex-wrap: wrap; }
.brand-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.brand-table-wrap { overflow-x: auto; border: 1px solid var(--brand-line); border-radius: 10px; }
.brand-table { width: 100%; border-collapse: collapse; font-size: 13.5px; background: #fff; }
.brand-table th, .brand-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--brand-line); }
.brand-table th { background: #faf6f6; color: #5a5155; font-weight: 600; white-space: nowrap; }
.brand-table tbody tr:hover { background: #fdf7f7; }
.brand-td-empty { text-align: center; color: var(--brand-sub); padding: 22px; }
.brand-warn { color: #c0392b; font-weight: 600; }
.brand-empty { color: var(--brand-sub); padding: 18px; text-align: center; }
.brand-subtabs { display: flex; gap: 6px; margin-bottom: 12px; }
.brand-subtab { border: 1px solid var(--brand-line); background: #fff; color: #5a5155; padding: 8px 16px; border-radius: 8px; cursor: pointer; font-family: inherit; font-size: 13.5px; }
.brand-subtab.active { background: var(--brand-primary); color: #1a1d23; border-color: var(--brand-primary); }
.brand-stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; margin-bottom: 16px; }
.brand-stat { background: #fff; border: 1px solid var(--brand-line); border-radius: 12px; padding: 16px 18px; }
.brand-stat-top { display: flex; justify-content: space-between; align-items: center; color: var(--brand-sub); font-size: 13px; }
.brand-stat-top i { font-size: 22px; }
.brand-stat-val { font-size: 26px; font-weight: 800; margin-top: 8px; color: #1c1719; }
.brand-c-sale i { color: #912222; } .brand-c-order i { color: #2563eb; } .brand-c-warn i { color: #d97706; } .brand-c-member i { color: #16a34a; }
.brand-card-box { margin-top: 8px; }
.brand-app-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 12px; }
.brand-app-card { text-align: left; border: 1px solid var(--brand-line); background: #fff; border-radius: 10px; padding: 16px; cursor: pointer; font-family: inherit; display: flex; flex-direction: column; gap: 8px; transition: border-color .15s, box-shadow .15s; }
.brand-app-card:hover { border-color: var(--brand-primary); box-shadow: 0 6px 18px rgba(145,34,34,.1); }
.brand-app-name { font-weight: 600; font-size: 15px; color: #1c1719; }
.brand-app-go { font-size: 13px; color: var(--brand-primary); }
.brand-pos { display: flex; gap: 16px; align-items: flex-start; }
.brand-pos-left { flex: 1 1 auto; min-width: 0; }
.brand-pos-right { width: 320px; flex: none; border: 1px solid var(--brand-line); border-radius: 10px; padding: 14px; background: #fcfafb; align-self: stretch; }
.brand-goods-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
.brand-goods-item { text-align: left; border: 1px solid var(--brand-line); background: #fff; border-radius: 10px; padding: 12px; cursor: pointer; font-family: inherit; transition: border-color .15s, transform .1s; }
.brand-goods-item:hover { border-color: var(--brand-primary); }
.brand-goods-item:active { transform: translateY(1px); }
.brand-gi-name { font-weight: 600; font-size: 14px; color: #1c1719; }
.brand-gi-cat { font-size: 12px; color: var(--brand-sub); margin: 2px 0; }
.brand-gi-price { color: var(--brand-primary); font-weight: 700; }
.brand-gi-stock { font-size: 12px; color: var(--brand-sub); }
.brand-cart { min-height: 60px; max-height: 320px; overflow-y: auto; margin-bottom: 10px; }
.brand-cart-item { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; border-bottom: 1px dashed var(--brand-line); }
.brand-ci-name { font-size: 13px; }
.brand-ci-ctrl { display: flex; align-items: center; gap: 8px; }
.brand-ci-btn { width: 28px; height: 28px; border: 1px solid var(--brand-line); background: #fff; border-radius: 6px; cursor: pointer; font-size: 16px; line-height: 1; }
.brand-ci-amt { min-width: 72px; text-align: right; color: var(--brand-primary); font-weight: 600; }
.brand-cart-foot { border-top: 1px solid var(--brand-line); padding-top: 10px; }
.brand-cart-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; font-size: 13px; }
.brand-cart-row select { width: 160px; }
.brand-cart-total { font-size: 15px; margin: 8px 0; }
.brand-cart-total b { color: var(--brand-primary); font-size: 18px; }
.brand-welcome { margin-bottom: 12px; }
.brand-mask { position: fixed; inset: 0; background: rgba(28,16,16,.55); display: flex; align-items: center; justify-content: center; z-index: 400; padding: 20px; animation: brandFade .18s; }
@keyframes brandFade { from { opacity: 0; } to { opacity: 1; } }
.brand-modal-card { background: #fff; border: 1px solid #e2dcde; border-radius: 14px; width: 100%; max-width: 460px; box-shadow: 0 20px 60px rgba(0,0,0,.4); overflow: hidden; }
.brand-modal-mid { max-width: 520px; }
.brand-modal-sm { max-width: 360px; }
.brand-modal-title { padding: 16px 18px; font-size: 16px; font-weight: 700; color: #1c1719; border-bottom: 1px solid var(--brand-line); }
.brand-modal-body { padding: 16px 18px; max-height: 64vh; overflow-y: auto; }
.brand-modal-actions { padding: 12px 18px; display: flex; justify-content: flex-end; gap: 10px; border-top: 1px solid var(--brand-line); }
.brand-auth-wrap { min-height: calc(100vh - 140px); display: flex; align-items: center; justify-content: center; padding: 24px; background: linear-gradient(135deg, #2a1212, #5e1414); }
.brand-auth-card { width: 100%; max-width: 420px; background: #fff; border-radius: 14px; padding: 30px 28px; box-shadow: 0 12px 40px rgba(0,0,0,.3); }
.brand-auth-title { margin: 0; font-size: 22px; color: #912222; text-align: center; }
.brand-auth-sub { margin: 6px 0 18px; text-align: center; color: var(--brand-sub); font-size: 13px; }
.brand-auth-tip { margin-top: 12px; font-size: 12px; color: var(--brand-sub); line-height: 1.6; }
.brand-auth-links { margin-top: 16px; text-align: center; }
.brand-auth-links .brand-btn-link { background: none; border: none; color: #912222; font-size: 14px; cursor: pointer; padding: 0; text-decoration: underline; }
.brand-auth-links .brand-btn-link:hover { color: #c0392b; }
.brand-toast { position: fixed; left: 50%; bottom: 40px; transform: translateX(-50%) translateY(20px); background: #2a2326; color: #1a1d23; padding: 10px 18px; border-radius: 10px; font-size: 14px; opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 500; max-width: 80vw; }
.brand-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.brand-toast.error { background: #c0392b; }
.brand-toast.success { background: #16a34a; }
@media (max-width: 720px) {
  .brand-pos { flex-direction: column; }
  .brand-pos-right { width: 100%; }
}

/* =====================================================================
   人才储备库 · SaaS 平台（右侧槽位「人才储备」rc- 前缀独立样式）
   双隔离：rc- 类名前缀 + 本块变量作用域（.rc-app / .rc-mask）
   ===================================================================== */
.rc-app, .rc-mask {
  --rc-primary: #2563eb; --rc-primary-d: #1d4ed8;
  --rc-bg: #eef2f7; --rc-card: #ffffff; --rc-line: #e4e9f1;
  --rc-tx: #1f2937; --rc-sub: #6b7280;
}
.rc-app * { box-sizing: border-box; }
.rc-app { color: var(--rc-tx); font-size: 14px; line-height: 1.5; }
.rc-app { padding-top: 5px; }

/* ---------- 顶栏 ---------- */
.rc-topbar {
  display: flex; align-items: center; justify-content: space-between;
  background: var(--rc-primary); color: #1a1d23;
  padding: 10px 18px; border-radius: 10px;
  margin-bottom: 12px;
}
.rc-top-name { font-weight: 600; font-size: 16px; }
.rc-top-user { display: flex; align-items: center; gap: 10px; }
.rc-role-tag {
  background: rgba(255, 255, 255, .22); padding: 3px 10px;
  border-radius: 6px; font-size: 12px;
}
.rc-user-name { font-size: 13px; opacity: .92; }
.rc-app .rc-btn.sm.default {
  background: rgba(255, 255, 255, .15); color: #1a1d23;
  border-color: rgba(255, 255, 255, .35);
}

/* ---------- 页签 ---------- */
.rc-tabs {
  display: flex; flex-wrap: wrap; gap: 6px;
  background: var(--rc-card); padding: 8px; border-radius: 10px;
  margin-bottom: 12px; box-shadow: 0 1px 3px rgba(0, 0, 0, .04);
}
.rc-tab {
  border: 1px solid var(--rc-line); background: #f8fafc;
  color: var(--rc-sub); padding: 8px 14px; border-radius: 8px;
  font-size: 13px; cursor: pointer; transition: all .18s;
}
.rc-tab:hover { background: #eef2ff; color: var(--rc-primary); }
.rc-tab.on {
  background: var(--rc-primary); color: #1a1d23; border-color: var(--rc-primary-d);
}

/* ---------- 卡片 ---------- */
.rc-card {
  background: var(--rc-card); border-radius: 10px;
  padding: 14px 16px; margin-bottom: 12px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .04);
}
.rc-card-h {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  font-weight: 600; font-size: 15px; margin-bottom: 10px;
  padding-bottom: 8px; border-bottom: 1px solid var(--rc-line);
}
.rc-card-h .rc-count {
  margin-left: auto; background: #eef2ff; color: var(--rc-primary);
  padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 500;
}
.rc-card-warn { border-left: 4px solid #f97316; }

/* ---------- 表格 ---------- */
.rc-table-wrap { overflow-x: auto; }
.rc-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.rc-table th, .rc-table td {
  border: 1px solid var(--rc-line); padding: 8px 10px; text-align: left;
  vertical-align: middle;
}
.rc-table th { background: #f1f5f9; font-weight: 600; color: var(--rc-sub); }
.rc-table tbody tr:hover { background: #f8fafc; }
.rc-ops { white-space: nowrap; display: flex; gap: 6px; }

/* ---------- 按钮 ---------- */
.rc-btn {
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--rc-line); background: #fff; color: var(--rc-tx);
  padding: 8px 14px; border-radius: 8px; font-size: 13px;
  cursor: pointer; transition: all .15s; min-height: 40px;
}
.rc-btn:hover { background: #f1f5f9; }
.rc-btn:active { transform: translateY(1px); }
.rc-btn.sm { padding: 5px 10px; font-size: 12px; min-height: 30px; }
.rc-btn.block { display: flex; width: 100%; }
.rc-btn.link { background: none; border: none; color: var(--rc-primary); padding: 6px 8px; min-height: auto; }
.rc-btn.link:hover { text-decoration: underline; background: none; }
.rc-btn.primary { background: var(--rc-primary); color: #1a1d23; border-color: var(--rc-primary-d); }
.rc-btn.primary:hover { background: var(--rc-primary-d); }
.rc-btn.success { background: #16a34a; color: #1a1d23; border-color: #15803d; }
.rc-btn.success:hover { background: #15803d; }
.rc-btn.danger { background: #dc2626; color: #1a1d23; border-color: #b91c1c; }
.rc-btn.danger:hover { background: #b91c1c; }
.rc-btn.warn { background: #f97316; color: #1a1d23; border-color: #c2410c; }
.rc-btn.warn:hover { background: #c2410c; }

/* ---------- 输入框/表单 ---------- */
.rc-app input[type="text"],
.rc-app input[type="password"],
.rc-app input[type="number"],
.rc-app select,
.rc-app textarea,
.rc-mask input[type="text"],
.rc-mask input[type="password"],
.rc-mask input[type="number"],
.rc-mask select,
.rc-mask textarea {
  width: 100%; border: 1px solid var(--rc-line); border-radius: 8px;
  padding: 9px 12px; font-size: 16px; background: #fff; color: var(--rc-tx);
  font-family: inherit;
}
.rc-app textarea, .rc-mask textarea { min-height: 70px; resize: vertical; }
.rc-app input:focus, .rc-app select:focus, .rc-app textarea:focus,
.rc-mask input:focus, .rc-mask select:focus, .rc-mask textarea:focus {
  outline: none; border-color: var(--rc-primary);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, .12);
}
.rc-input, .rc-select { width: 220px; min-width: 160px; }
.rc-form-row { margin-bottom: 8px; }
.rc-form-row label {
  display: block; margin-bottom: 3px; font-size: 13px;
  color: var(--rc-sub); font-weight: 500;
}
.rc-form-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
}
.rc-btn-row { display: flex; gap: 10px; align-items: center; margin-top: 6px; }
.rc-tip { font-size: 12px; color: var(--rc-sub); margin-top: 8px; line-height: 1.6; }

/* ---------- 登录页 ---------- */
.rc-login-wrap {
  max-width: 540px; margin: 16px auto;
  background: var(--rc-card); border-radius: 14px;
  padding: 20px 22px; box-shadow: 0 4px 16px rgba(0, 0, 0, .06);
}
.rc-login-title {
  font-size: 20px; font-weight: 700; color: var(--rc-primary);
  text-align: center; margin-bottom: 6px;
}
.rc-login-sub {
  text-align: center; color: var(--rc-sub); font-size: 12px;
  margin-bottom: 14px;
}
.rc-role-tabs {
  display: flex; gap: 6px; margin-bottom: 16px;
  background: #f1f5f9; padding: 4px; border-radius: 10px;
}
.rc-role-tab {
  flex: 1; border: none; background: transparent; color: var(--rc-sub);
  padding: 8px 6px; border-radius: 8px; cursor: pointer; font-size: 13px;
  min-height: 36px; transition: all .15s;
}
.rc-role-tab.on { background: #fff; color: var(--rc-primary); box-shadow: 0 1px 3px rgba(0, 0, 0, .08); font-weight: 500; }
.rc-login-foot {
  text-align: center; color: var(--rc-sub); font-size: 12px;
  margin-top: 18px; line-height: 1.6;
}

/* ---------- 统计卡 ---------- */
.rc-stat-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 10px;
}
.rc-stat {
  background: #f8fafc; border: 1px solid var(--rc-line);
  border-radius: 10px; padding: 14px; text-align: center;
}
.rc-stat-v {
  font-size: 22px; font-weight: 700; color: var(--rc-primary);
  line-height: 1.3;
}
.rc-stat-k { font-size: 12px; color: var(--rc-sub); margin-top: 4px; }

/* ---------- 详情网格 ---------- */
.rc-desc-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px;
}
.rc-desc-row {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 10px; background: #f8fafc;
  border-radius: 6px; font-size: 13px;
}
.rc-desc-row span { color: var(--rc-sub); min-width: 80px; }
.rc-desc-row b { color: var(--rc-tx); font-weight: 600; flex: 1; word-break: break-all; }

/* ---------- 状态标签 ---------- */
.rc-tag {
  display: inline-block; padding: 2px 10px; border-radius: 10px;
  font-size: 12px; font-weight: 500;
}
.rc-tag-green { background: #dcfce7; color: #15803d; }
.rc-tag-red { background: #fee2e2; color: #b91c1c; }
.rc-tag-orange { background: #ffedd5; color: #c2410c; }
.rc-tag-gray { background: #e5e7eb; color: #4b5563; }

/* ---------- 聊天 ---------- */
.rc-chat-log { display: flex; flex-direction: column; gap: 6px; max-height: 460px; overflow-y: auto; }
.rc-chat-line {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 8px 10px; background: #f8fafc; border-radius: 6px; font-size: 13px;
}
.rc-chat-time { color: var(--rc-sub); font-size: 12px; min-width: 130px; }
.rc-chat-from { color: var(--rc-primary); font-weight: 500; }
.rc-chat-arrow { color: var(--rc-sub); }
.rc-chat-to { color: #16a34a; font-weight: 500; }
.rc-chat-content { flex: 1; min-width: 0; color: var(--rc-tx); word-break: break-all; }

.rc-chat-box {
  height: 320px; overflow-y: auto; padding: 12px;
  background: #f8fafc; border: 1px solid var(--rc-line);
  border-radius: 10px; margin-bottom: 10px;
  display: flex; flex-direction: column; gap: 10px;
}
.rc-chat-msg { max-width: 70%; padding: 8px 12px; border-radius: 10px; font-size: 13px; }
.rc-chat-msg.right { align-self: flex-end; background: var(--rc-primary); color: #1a1d23; }
.rc-chat-msg.left { align-self: flex-start; background: #fff; border: 1px solid var(--rc-line); }
.rc-chat-sender { font-size: 11px; opacity: .8; margin-bottom: 3px; }
.rc-chat-text { word-break: break-all; }
.rc-chat-time { font-size: 11px; opacity: .7; margin-top: 4px; }
.rc-chat-input { display: flex; gap: 8px; }
.rc-chat-input input { flex: 1; }

/* ---------- 柱图 ---------- */
.rc-bar-chart {
  display: flex; align-items: flex-end; gap: 10px;
  height: 180px; padding: 12px 4px 4px;
  border-bottom: 1px solid var(--rc-line);
}
.rc-bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; height: 100%; justify-content: flex-end; }
.rc-bar { width: 60%; min-height: 4px; background: var(--rc-primary); border-radius: 4px 4px 0 0; transition: height .3s; }
.rc-bar-num { font-size: 12px; color: var(--rc-tx); margin-top: 4px; }
.rc-bar-label { font-size: 11px; color: var(--rc-sub); margin-top: 2px; }

/* =====================================================================
   第四批：右槽 05 车位出租(cw) / 06 闲置流转(xz) / 24 品牌时装(brand) /
   25 人才储备(rc) 登录页统一为 21 果蔬供应(fv) 布局模式：
   底色铺满内容区、登录窗居中、一屏展示（无竖滚动条），保留各自原底色。
   仅登录态（login-wrap / landing-wrap / form-wrap / auth-wrap 存在）生效，
   登录后 DOM 无对应包裹元素则规则自动失效，不影响业务界面。
   （30 灾害与防(dx) 的对应修改在 script.js 内联 DX_CSS/DX_HTML 中完成）
   ===================================================================== */

/* ---- 24 品牌时装：登录态 app 与 auth-wrap 为同一元素（复合类） ---- */
.content-inner:has(> .brand-app.brand-auth-wrap) {
  padding: 3px;
  display: flex;
  scrollbar-gutter: auto;
  overflow: hidden;
}
.content-inner:has(> .brand-app.brand-auth-wrap) > .brand-app {
  margin: 0;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
}

/* ---- 25 人才储备：--rc-bg 铺满，登录卡片 flex 居中 ---- */
.content-inner:has(> .rc-app > .rc-login-wrap) {
  padding: 3px;
  display: flex;
  scrollbar-gutter: auto;
  overflow: hidden;
}
.content-inner:has(> .rc-app > .rc-login-wrap) > .rc-app {
  margin: 0;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  align-items: safe center;
  justify-content: center;
  padding-top: 0;
  background: var(--rc-bg);
}
.content-inner:has(> .rc-app > .rc-login-wrap) > .rc-app > .rc-login-wrap {
  margin: 0;
}

/* ---- 06 闲置流转：第二批已 flex 居中，此处裁滚动 + 压缩留白保证一屏 ---- */
.content-inner:has(> .xz-app > .xz-login-wrap) {
  overflow: hidden;
}
.content-inner:has(> .xz-app > .xz-login-wrap) > .xz-app > .xz-login-wrap {
  padding: 8px 16px;
  gap: 16px;
}

/* ---- 05 车位出租：落地页 / 表单页两种登录态 ---- */
.content-inner:has(> .cw-app > .cw-landing-wrap),
.content-inner:has(> .cw-app > .cw-form-wrap) {
  overflow: hidden;
}
.content-inner:has(> .cw-app > .cw-landing-wrap) > .cw-app > .cw-landing-wrap {
  padding: 8px 16px;
}
.content-inner:has(> .cw-app > .cw-form-wrap) > .cw-app > .cw-form-wrap {
  margin: 0 auto;
  padding: 16px;
}

/* ---- 左25 精工加工(jg)：登录态统一铺满/居中/无竖滚动条（原底色=白） ----
   注意：登录后 #jg-login 仅加 hidden 不移除，选择器需排除隐藏态 */
.content-inner:has(> .jg-app > .jg-login-wrap:not([hidden])) {
  padding: 3px;
  display: flex;
  scrollbar-gutter: auto;
  overflow: hidden;
}
.content-inner:has(> .jg-app > .jg-login-wrap:not([hidden])) > .jg-app {
  margin: 0;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  align-items: safe center;
  justify-content: center;
}
.content-inner:has(> .jg-app > .jg-login-wrap:not([hidden])) > .jg-app > .jg-login-wrap {
  padding: 0;
  width: 100%;
}

/* ---------- 空状态 ---------- */
.rc-empty {
  text-align: center; color: var(--rc-sub); font-size: 13px;
  padding: 30px 16px; background: #f8fafc; border-radius: 8px;
  border: 1px dashed var(--rc-line);
}

/* ---------- 弹窗 ---------- */
.rc-mask {
  position: fixed; inset: 0; background: rgba(15, 23, 42, .55);
  z-index: 10000; display: flex; align-items: center; justify-content: center;
  padding: 20px; backdrop-filter: blur(2px);
}
.rc-modal-card {
  background: #fff; border-radius: 12px; width: 100%; max-width: 560px;
  max-height: 88vh; overflow-y: auto; padding: 18px 20px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .25);
}
.rc-mask-title {
  font-size: 16px; font-weight: 600; color: var(--rc-tx);
  margin-bottom: 14px; padding-bottom: 10px;
  border-bottom: 1px solid var(--rc-line);
}
.rc-mask-body { margin-bottom: 14px; }
.rc-mask-foot {
  display: flex; justify-content: flex-end; gap: 10px;
  padding-top: 10px; border-top: 1px solid var(--rc-line);
}

/* ---------- Toast ---------- */
.rc-toast {
  position: fixed; top: 18px; left: 50%;
  transform: translateX(-50%) translateY(-16px);
  background: #1f2937; color: #1a1d23; padding: 10px 20px; border-radius: 10px;
  font-size: 14px; z-index: 10001; opacity: 0; pointer-events: none;
  transition: opacity .25s, transform .25s; max-width: 86vw;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .2); line-height: 1.5;
}
.rc-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.rc-toast.error { background: #dc2626; }
.rc-toast.success { background: #16a34a; }

/* ---------- 响应式 ---------- */
@media (max-width: 900px) {
  .rc-desc-grid { grid-template-columns: 1fr; }
  .rc-form-grid { grid-template-columns: 1fr; }
  .rc-user-name { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .rc-app *, .rc-mask * { transition: none !important; animation: none !important; }
}

