.table-scroll-wrap{overflow-x:auto}.filter-bar{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(160px,auto));align-items:center;margin-bottom:12px}.page-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.filter-bar{display:flex;align-items:center;flex-wrap:wrap;gap:var(--gap-3);padding:var(--gap-4) var(--gap-5);margin-bottom:var(--gap-5);background:var(--el-fill-color-light);border-radius:var(--radius-md)}.filter-bar__item{display:inline-flex;align-items:center;gap:var(--gap-2)}.filter-bar__spacer{flex:1}.filter-bar__actions{display:inline-flex;gap:var(--gap-3)}@media (max-width: 768px){.filter-bar{padding:var(--gap-3);gap:var(--gap-2)}.filter-bar__item>.el-input,.filter-bar__item>.el-select{width:100%!important}}.el-dialog.is-sticky-footer .el-dialog__body{max-height:65vh;overflow-y:auto;padding-bottom:var(--gap-3, 12px)}.el-dialog.is-sticky-footer .el-dialog__footer{position:sticky;bottom:0;background:var(--el-bg-color, #fff);border-top:1px solid var(--el-border-color-lighter, #ebeef5);padding:var(--gap-3, 12px) var(--gap-5, 20px);margin:0 calc(-1 * var(--gap-5, 20px)) calc(-1 * var(--gap-3, 12px));z-index:1}:root{--motion-duration-fast: .12s;--motion-duration-base: .2s;--motion-duration-slow: .36s;--motion-ease: cubic-bezier(.4, 0, .2, 1)}@keyframes count-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.el-card.is-hoverable,.el-card:hover{transform:translateY(-2px);transition:transform var(--motion-duration-base) var(--motion-ease)}.el-card{transition:transform var(--motion-duration-base) var(--motion-ease)}.el-button:active{transform:scale(.97);transition:transform var(--motion-duration-fast)}.el-table__row{transition:background-color var(--motion-duration-fast)}.el-message{animation:count-up var(--motion-duration-base) var(--motion-ease)}.main-inner>*{animation:count-up var(--motion-duration-base) var(--motion-ease)}:root{--col-xs: 80px;--col-sm: 120px;--col-md: 160px;--col-lg: 220px;--col-actions: 160px;--col-actions-wide: 220px;--gap-2: 4px;--gap-3: 8px;--gap-4: 12px;--gap-5: 16px;--gap-6: 20px;--gap-7: 24px;--fs-title: 22px;--fs-subtitle: 16px;--fs-body: 14px;--fs-caption: 12px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--bp-md: 1024px;--bp-lg: 1280px;--bg: #FBFBFD;--bg-soft: #F5F5F7;--bg-row-hover: #F5F5F7;--surface: #FFFFFF;--border: #E5E5EA;--border-strong: #C7C7CC;--ink-1: #1F1F23;--ink-2: #424245;--ink-3: #6E6E73;--ink-4: #AEAEB2;--brand: #2A2A2E;--brand-soft: #F2F2F5;--brand-deep: #1D1D1F;--secondary: #3A3A3E;--tertiary: #ECECEC;--action: #0066CC;--action-soft: #E5F0FC;--success: #2E7D32;--success-deep: #1B5E20;--success-soft: #E8F5E9;--warning: #B45309;--warning-deep: #92400E;--warning-soft: #FFF3E0;--danger: #C62828;--danger-soft: #FFEBEE;--info: #1565C0;--info-soft: #E3F2FD;--font: -apple-system, "SF Pro Text", "SF Pro Display", "PingFang SC", "Helvetica Neue", system-ui, sans-serif;--mono: "SF Mono", "Menlo", "Monaco", "Consolas", monospace;--r-xs: 4px;--r-sm: 6px;--r: 10px;--r-md: 14px;--r-lg: 18px;--shadow-sm: 0 1px 2px rgba(0,0,0,.03);--shadow: 0 1px 3px rgba(0,0,0,.04);--shadow-md: 0 2px 8px rgba(0,0,0,.06);--sp-1: 4px;--sp-2: 6px;--sp-3: 10px;--sp-4: 14px;--sp-5: 18px;--sp-6: 22px;--sp-8: 28px;--sp-10: 36px;--sidebar-bg: #F5F5F7;--sidebar-text: #424245;--sidebar-text-active: #2A2A2E;--sidebar-active-bg: #FFFFFF;--sidebar-hover-bg: #EBEBED;--sidebar-divider: #E5E5EA}:root{--el-color-primary: #2A2A2E;--el-color-primary-light-3: #4A4A4E;--el-color-primary-light-5: #6E6E73;--el-color-primary-light-7: #AEAEB2;--el-color-primary-light-8: #C7C7CC;--el-color-primary-light-9: #E5E5EA;--el-color-primary-dark-2: #1D1D1F}.admin-table .el-table__cell,.kpi-value,.kpi-card__value,.kpi-grid .kpi-value{font-feature-settings:"tnum" on,"lnum" on;font-variant-numeric:tabular-nums lining-nums}.el-button--primary,.el-button--primary:focus,.el-button--primary:hover{--el-button-bg-color: var(--brand);--el-button-border-color: var(--brand);--el-button-hover-bg-color: var(--brand-deep);--el-button-hover-border-color: var(--brand-deep);--el-button-active-bg-color: var(--brand-deep);--el-button-active-border-color: var(--brand-deep);background-color:var(--brand);border-color:var(--brand)}.el-button--primary:hover,.el-button--primary:focus:hover{background-color:var(--brand-deep);border-color:var(--brand-deep)}.el-button--primary:active,.el-button--primary.is-active{background-color:var(--brand-deep)!important;border-color:var(--brand-deep)!important}.el-input__wrapper.is-focus,.el-textarea__inner:focus,.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--brand) inset!important}.el-link.el-link--primary{--el-link-text-color: var(--brand);--el-link-hover-text-color: var(--brand-deep)}.admin-page,.page-wrap{display:flex;flex-direction:column;gap:var(--gap-5)}.admin-card-header,.card-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.admin-card-title{display:flex;flex-direction:column;gap:4px;min-width:0}.admin-card-title__text{color:var(--el-text-color-primary);font-size:16px;font-weight:600}.admin-card-title__desc{color:var(--el-text-color-secondary);font-size:12px}.admin-actions{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.admin-filter-form,.filter-form,.filter-bar{margin-bottom:16px;padding:14px 16px 2px;border-radius:var(--r);background:var(--el-fill-color-light)}.admin-pagination,.pagination{display:flex;justify-content:flex-end;margin-top:16px}.admin-section-title{display:flex;align-items:center;justify-content:space-between;margin:4px 0 12px;color:var(--el-text-color-primary);font-size:15px;font-weight:600}.admin-table{width:100%}.admin-table.el-table{--el-table-border-color: var(--border);--el-table-header-bg-color: var(--bg-soft);--el-table-header-text-color: var(--ink-2);--el-table-row-hover-bg-color: var(--bg-row-hover);--el-table-text-color: var(--ink-1);font-size:13.5px;border-radius:var(--r);overflow:hidden}.admin-table.el-table th.el-table__cell{background:var(--bg-soft)!important;color:var(--ink-2)!important;font-weight:600;font-size:12.5px;padding:10px 14px;letter-spacing:.2px}.admin-table.el-table td.el-table__cell{padding:14px;color:var(--ink-1);border-bottom:1px solid var(--border);transition:box-shadow .15s ease}.admin-table.el-table tr:hover>td.el-table__cell{background:var(--bg-row-hover)!important;box-shadow:inset 4px 0 0 linear-gradient(to bottom,var(--action) 0%,var(--action) 60%,transparent 100%)}.admin-table.el-table tr:hover>td.el-table__cell:first-child{box-shadow:inset 4px 0 0 var(--action)}.admin-filter-form .el-button--default,.filter-form .el-button--default,.filter-bar .el-button--default,.admin-filter-form .el-button:not(.is-link):not(.el-button--primary):not(.el-button--text),.filter-form .el-button:not(.is-link):not(.el-button--primary):not(.el-button--text),.filter-bar .el-button:not(.is-link):not(.el-button--primary):not(.el-button--text){background:var(--surface);border-color:var(--border);color:var(--ink-1)}.admin-filter-form .el-button--default:hover,.filter-form .el-button--default:hover,.filter-bar .el-button--default:hover{border-color:var(--ink-3);color:var(--brand);background:var(--surface)}.admin-pagination.el-pagination,.pagination.el-pagination{--el-pagination-bg-color: var(--surface);--el-pagination-button-bg-color: var(--surface);--el-pagination-button-color: var(--ink-2);--el-pagination-button-disabled-bg-color: var(--bg-soft);--el-pagination-hover-color: var(--brand);font-size:13px;gap:4px;padding:8px 0}.admin-pagination.el-pagination .el-pager li,.pagination.el-pagination .el-pager li{background:var(--surface);color:var(--ink-2);border:1px solid var(--border);font-weight:500;margin:0 2px}.admin-pagination.el-pagination .el-pager li.is-active,.pagination.el-pagination .el-pager li.is-active{background:var(--brand);color:var(--surface);border-color:var(--brand)}.admin-pagination.el-pagination .btn-prev,.admin-pagination.el-pagination .btn-next,.pagination.el-pagination .btn-prev,.pagination.el-pagination .btn-next{background:var(--surface);color:var(--ink-2);border:1px solid var(--border)}.admin-table.el-table .el-tag{border-radius:var(--r-xs);font-weight:500;padding:0 8px;height:22px;line-height:20px}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);color:var(--ink-1);font-family:var(--font);font-size:14px;line-height:1.5;letter-spacing:-.01em;-webkit-font-smoothing:antialiased}body{min-height:100vh;overflow-x:auto;min-width:1338px}body.app-shell{display:flex}.sidebar{width:220px;background:var(--sidebar-bg);border-right:1px solid var(--sidebar-divider);display:flex;flex-direction:column;flex-shrink:0;position:sticky;top:0;height:100vh;overflow-y:auto;padding:6px 0}.sidebar-brand{padding:16px 16px 14px;display:flex;align-items:center;gap:8px}.sidebar-brand .mark{width:28px;height:28px;border-radius:var(--r-xs);background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600}.sidebar-brand .name{font-size:14px;font-weight:600;color:var(--ink-1);letter-spacing:-.2px}.sidebar-brand .ver{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);margin-left:auto}.nav{padding:8px;flex:1}.nav-group{margin-bottom:4px}.nav-group-label{font-size:11.5px;font-weight:600;color:var(--ink-3);letter-spacing:.7px;padding:14px 12px 6px;text-transform:uppercase}.nav-item{display:flex;align-items:center;gap:10px;padding:7px 10px 7px 13px;margin:1px 0;border-radius:var(--r-sm);font-size:14px;color:var(--sidebar-text);cursor:pointer;transition:background .1s;text-decoration:none;position:relative}.nav-item:hover{background:var(--sidebar-hover-bg)}.nav-item.active{background:var(--sidebar-active-bg);color:var(--sidebar-text-active);font-weight:600}.nav-item.active:before{content:"";position:absolute;left:4px;top:8px;bottom:8px;width:3px;background:var(--brand);border-radius:2px}.nav-item .icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:15px;color:currentColor;opacity:.85}.main{flex:1;min-width:760px;display:flex;flex-direction:column}.topbar{height:52px;background:#ffffffd9;backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:12px;position:sticky;top:0;z-index:5;overflow:visible;min-width:0;flex-wrap:nowrap}.topbar .menu-toggle{width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:var(--r-sm);cursor:pointer;color:var(--ink-2);font-size:17px}.topbar .menu-toggle:hover{background:var(--bg-soft)}.topbar .crumbs{display:flex;align-items:center;gap:5px;font-size:14px;color:var(--ink-3)}.topbar .crumbs b{color:var(--ink-1);font-weight:600}.topbar .crumbs .sep{color:var(--ink-3)}.topbar .spacer{flex:1}.topbar .search{display:flex;align-items:stretch;padding:0;height:32px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-sm);font-size:13.5px;color:var(--ink-1);min-width:200px;flex-shrink:0;transition:border-color .1s,box-shadow .1s;overflow:hidden}.topbar .search:focus-within{border-color:var(--ink-3);box-shadow:0 0 0 3px var(--bg-soft)}.topbar .search-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--ink-3);border-right:1px solid var(--ink-3);background:#ffffff80;flex-shrink:0}.topbar .search-text{flex:1;display:flex;align-items:center;padding:0 12px;font-size:13.5px;font-weight:500;color:var(--ink-2)}.topbar .quick-add{display:inline-flex;align-items:center;gap:5px;height:32px;padding:0 10px;font-size:13px;font-weight:500;border-radius:var(--r-sm);border:1px solid transparent;background:var(--secondary, #2C2C2E);color:#fff;cursor:pointer;font-family:var(--font);transition:background .1s;position:relative;flex-shrink:0;white-space:nowrap}.topbar .quick-add:hover{background:#1d1d1f}.topbar .quick-add .icon-plus{font-size:15px;line-height:1}.topbar .quick-add:after{content:attr(data-tip);position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--ink-1);color:#fff;font-size:11.5px;padding:4px 8px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:20}.topbar .quick-add:hover:after{opacity:1}.topbar .user-area{display:flex;align-items:center;gap:8px;padding:3px 10px 3px 3px;border-radius:999px;cursor:pointer;flex-shrink:0;white-space:nowrap}.topbar .user-area:hover{background:var(--bg-soft)}.topbar .user-area .avatar{width:26px;height:26px;border-radius:50%;background:linear-gradient(135deg,#8e8e93,#c7c7cc);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}.topbar .user-area .name{font-size:14px;color:var(--ink-1);font-weight:500}.content{padding:12px 20px 24px;flex:1;background:var(--bg)}.page-head{display:flex;align-items:center;gap:12px;margin-bottom:12px;padding:0 0 12px;border-bottom:1px solid var(--border)}.page-head h2{font-size:21px;font-weight:600;letter-spacing:-.3px}.page-head .subtitle{color:var(--ink-3);font-size:13.5px}.page-head .spacer{flex:1}.main:has(.quick-add) .page-head .btn-primary.duplicate-of-topbar{display:none}.btn{display:inline-flex;align-items:center;gap:5px;height:34px;padding:0 16px;font-size:13.5px;font-weight:500;border-radius:var(--r-sm);border:1px solid var(--border-strong);background:var(--surface);color:var(--ink-1);cursor:pointer;transition:all .1s ease;font-family:var(--font)}.btn:hover{background:var(--tertiary, #ECECEC);border-color:var(--ink-3)}.btn-primary{background:var(--brand);color:#fff;border-color:var(--brand)}.btn-primary:hover{background:var(--brand-deep);border-color:var(--brand-deep)}.btn-ghost{border-color:transparent;color:var(--action);background:transparent}.btn-ghost:hover{background:var(--action-soft);border-color:transparent}.btn-danger-text{color:var(--danger);border-color:transparent;background:transparent}.btn-danger-text:hover{background:var(--danger-soft)}.btn-sm{height:28px;padding:0 12px;font-size:12.5px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:18px 20px;margin-bottom:16px;overflow:hidden}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.table-scroll .tbl{min-width:100%}.kpi-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:18px 20px}.kpi .label{font-size:13px;color:var(--ink-3);margin-bottom:6px;font-weight:500;text-transform:uppercase;letter-spacing:.6px}.kpi .value{font-size:32px;font-weight:600;letter-spacing:-.8px;line-height:1.1}.kpi.success .value{color:var(--success-deep, #1B5E20)}.kpi.warning .value{color:var(--warning-deep, #92400E)}.kpi.muted .value{color:var(--ink-3)}.searchbar{display:flex;align-items:center;gap:8px;padding:6px 0 14px;flex-wrap:wrap}.searchbar .input,.searchbar select.input{height:34px;padding:0 32px 0 12px;border:1px solid var(--border-strong);border-radius:var(--r-sm);font-size:13.5px;color:var(--ink-1);background:var(--surface);font-family:var(--font);transition:border-color .1s;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat}.searchbar .input:focus,.searchbar select.input:focus{outline:none;border-color:var(--action)}.searchbar .input::placeholder{color:var(--ink-3)}.searchbar .label{font-size:13.5px;color:var(--ink-2);font-weight:500;margin-right:-4px;white-space:nowrap}table.tbl{width:100%;border-collapse:collapse;font-size:13.5px;table-layout:auto;min-width:720px}table.tbl thead th{text-align:left;padding:12px 14px;background:var(--bg-soft);color:var(--ink-2);font-weight:600;font-size:12.5px;border-bottom:1px solid var(--border);letter-spacing:.2px}table.tbl tbody td{padding:18px 14px;border-bottom:1px solid var(--border);color:var(--ink-1);vertical-align:middle;white-space:nowrap}table.tbl.compact tbody td{padding:16px 14px}table.tbl tbody td.wrap{white-space:normal}table.tbl tbody tr{transition:background .15s ease,box-shadow .15s ease;box-shadow:inset 4px 0 0 transparent}table.tbl tbody tr:hover{background:var(--bg-row-hover);box-shadow:inset 4px 0 0 linear-gradient(to bottom,var(--action) 0%,var(--action) 60%,transparent 100%)}table.tbl tbody tr:focus-within{background:var(--action-soft);box-shadow:inset 4px 0 0 var(--action)}table.tbl tbody tr:last-child td{border-bottom:none}table.tbl .mono{font-family:var(--mono);font-size:13px;color:var(--ink-1)}table.tbl .muted{color:var(--ink-2);font-size:12px}table.tbl .num{font-variant-numeric:tabular-nums}.avatar{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:13px;border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border)}.avatar.a{background:linear-gradient(135deg,#8e8e93,#c7c7cc)}.avatar.b{background:linear-gradient(135deg,#636366,#8e8e93)}.avatar.c{background:linear-gradient(135deg,#48484a,#636366)}.avatar.d{background:linear-gradient(135deg,#aeaeb2,#c7c7cc)}.dot{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:500;padding:3px 8px;border-radius:999px}.dot:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}.dot.success{color:var(--success);background:var(--success-soft)}.dot.warning{color:var(--warning);background:var(--warning-soft)}.dot.danger{color:var(--danger);background:var(--danger-soft)}.dot.muted{color:var(--ink-3);background:var(--bg-soft)}.op-dropdown{position:relative;display:inline-block}.op-trigger{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:13.5px;color:var(--ink-1);border:1px solid var(--border);background:var(--surface);border-radius:var(--r-sm);cursor:pointer;font-family:var(--font);transition:all .1s;position:relative}.op-trigger:hover{color:var(--ink-1);border-color:var(--ink-3);background:var(--bg-soft)}.op-trigger .dots{font-size:18px;line-height:1;letter-spacing:1px;color:var(--ink-2);margin-left:2px}.op-trigger:hover .dots{color:var(--ink-1)}.op-trigger:after{content:"点击展开操作";position:absolute;top:50%;right:calc(100% + 8px);transform:translateY(-50%);background:var(--ink-1);color:#fff;font-size:11.5px;padding:4px 8px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:20}.op-dropdown:hover .op-trigger:after{opacity:1}.op-menu{display:none;position:absolute;right:0;top:calc(100% + 6px);min-width:120px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);box-shadow:var(--shadow-md);z-index:10;padding:4px}table.tbl tr:last-child .op-menu{top:auto;bottom:calc(100% + 6px)}.op-dropdown:hover .op-menu{display:block}.op-menu a{display:block;padding:7px 12px;font-size:13px;color:var(--ink-1);text-decoration:none;border-radius:var(--r-xs)}.op-menu a:hover{background:var(--bg-soft)}.op-menu a.danger{color:var(--danger)}.pagination{display:flex;align-items:center;gap:8px;padding:20px 4px 0;font-size:13.5px;color:var(--ink-3)}.pagination .pages{display:flex;gap:3px;margin-left:auto}.pagination .pages button{min-width:30px;height:30px;padding:0 10px;border:1px solid var(--border);background:var(--surface);border-radius:var(--r-xs);color:var(--ink-2);font-size:13.5px;cursor:pointer;font-family:var(--font);transition:all .1s}.pagination .pages button:hover{border-color:var(--ink-3);color:var(--ink-1)}.pagination .pages button.active{background:var(--brand);color:#fff;border-color:var(--brand)}.pagination .pages button:disabled{color:var(--ink-4);cursor:not-allowed}.pagination .info{color:var(--ink-2)}.pagination .info .sep{margin:0 4px;color:var(--ink-4)}*{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
