/* ===================================== DY 数据平台 - 科技扁平化蓝色主题 ===================================== */ :root { --primary: #1890ff; --primary-dark: #096dd9; --primary-light: #40a9ff; --primary-bg: #e6f7ff; --success: #52c41a; --warning: #faad14; --danger: #ff4d4f; --text: #1f2937; --text-secondary: #6b7280; --text-light: #9ca3af; --bg: #f0f5ff; --bg-card: #ffffff; --border: #e8e8e8; --sidebar-bg: #001529; --sidebar-text: rgba(255,255,255,0.65); --sidebar-active: #1890ff; --shadow: 0 2px 8px rgba(0,0,0,0.06); --radius: 8px; } * { margin: 0; padding: 0; box-sizing: border-box; } /* 全局:隐藏数字输入框的上下箭头 */ input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } input[type=number] { -moz-appearance: textfield; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; font-size: 14px; } /* ============ 登录页 ============ */ .login-page { display: flex; align-items: center; justify-content: center; min-height: 100vh; background: linear-gradient(135deg, #001529 0%, #003a70 50%, #096dd9 100%); } .login-container { width: 100%; max-width: 400px; padding: 20px; } .login-card { background: rgba(255,255,255,0.98); border-radius: 16px; padding: 40px; box-shadow: 0 20px 60px rgba(0,0,0,0.3); backdrop-filter: blur(10px); } .login-header { text-align: center; margin-bottom: 32px; } .login-logo { margin-bottom: 16px; } .login-header h1 { font-size: 24px; font-weight: 700; color: var(--text); margin-bottom: 6px; } .login-subtitle { color: var(--text-light); font-size: 14px; } .login-form .form-group { margin-bottom: 20px; } .login-form label { display: block; margin-bottom: 6px; font-size: 13px; color: var(--text-secondary); font-weight: 500; } .form-error { color: var(--danger); font-size: 13px; margin-bottom: 12px; min-height: 20px; } .password-notice { margin-bottom: 20px; padding: 10px 12px; border-radius: 6px; color: #8a5a00; background: #fff7e6; font-size: 13px; line-height: 1.6; } .password-input-wrap { position: relative; } .password-input-wrap .form-input { padding-right: 42px; } .password-toggle { position: absolute; top: 50%; right: 9px; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0; border: 0; color: var(--text-light); background: transparent; cursor: pointer; transform: translateY(-50%); } .password-toggle:hover, .password-toggle:focus-visible { color: var(--primary); outline: none; } .password-toggle svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .password-toggle .eye-closed, .password-toggle.is-visible .eye-open { display: none; } .password-toggle.is-visible .eye-closed { display: block; } .password-prompt-overlay { position: fixed; inset: 0; z-index: 1000; align-items: center; justify-content: center; padding: 20px; background: rgba(0, 21, 41, 0.58); } .password-prompt-card { width: 100%; max-width: 380px; padding: 30px; border-radius: 14px; background: #fff; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.28); text-align: center; } .password-prompt-icon { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; margin: 0 auto 16px; border-radius: 50%; color: #ad6800; background: #fff1b8; font-size: 28px; font-weight: 700; } .password-prompt-card h2 { margin-bottom: 10px; color: var(--text); font-size: 20px; } .password-prompt-card p { margin-bottom: 24px; color: var(--text-secondary); font-size: 14px; line-height: 1.7; } .password-prompt-btn { width: 100%; height: 42px; } .login-btn { width: 100%; height: 44px; font-size: 16px; display: flex; align-items: center; justify-content: center; gap: 8px; } @keyframes spin { to { transform: rotate(360deg); } } .btn-loading svg { animation: spin 1s linear infinite; } /* ============ 表单组件 ============ */ .form-input { width: 100%; height: 38px; padding: 0 12px; border: 1px solid var(--border); border-radius: 6px; font-size: 14px; color: var(--text); background: #fff; transition: border-color 0.2s, box-shadow 0.2s; outline: none; } .form-input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(24,144,255,0.15); } .form-group label { display: block; margin-bottom: 6px; font-size: 13px; color: var(--text-secondary); font-weight: 500; } .form-group label small { font-weight: 400; color: var(--text-light); } .form-row { display: flex; gap: 16px; } .form-row .form-group { flex: 1; } /* ============ 按钮 ============ */ .btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 20px; border: 1px solid var(--border); border-radius: 6px; font-size: 14px; cursor: pointer; transition: all 0.2s; background: #fff; color: var(--text); outline: none; white-space: nowrap; } .btn:hover { border-color: var(--primary); color: var(--primary); } .btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; } .btn-primary:hover { background: var(--primary-dark); border-color: var(--primary-dark); color: #fff; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-sm { padding: 4px 12px; font-size: 12px; } .btn-outline { background: transparent; border-color: var(--border); } .btn-outline:hover { border-color: var(--primary); color: var(--primary); } .backup-audit-btn { min-width: 68px; border-color: transparent; color: #fff; font-weight: 600; } .backup-audit-btn.is-pending { background: #fa8c16; } .backup-audit-btn.is-pending:hover { background: #d46b08; border-color: #d46b08; color: #fff; } .backup-audit-btn.is-audited { background: #52c41a; cursor: default; } .backup-audit-btn.is-audited:hover { background: #52c41a; border-color: #52c41a; color: #fff; } .btn-outline-danger { background: transparent; border-color: var(--border); color: var(--danger); } .btn-outline-danger:hover { border-color: var(--danger); color: #fff; background: var(--danger); } .btn-outline-warning { background: transparent; border-color: var(--border); color: var(--warning); font-size:12px; padding:3px 8px; border-radius:4px; cursor:pointer; } .btn-outline-warning:hover { border-color: var(--warning); color: #fff; background: var(--warning); } /* ============ 侧边栏 ============ */ .sidebar { position: fixed; left: 0; top: 0; bottom: 0; width: 240px; background: var(--sidebar-bg); color: var(--sidebar-text); display: flex; flex-direction: column; z-index: 100; } .sidebar-nav { flex: 1; overflow-y: auto; overflow-x: hidden; } .sidebar-footer { flex-shrink: 0; border-top: 1px solid rgba(255,255,255,0.08); padding: 10px 12px; background: var(--sidebar-bg); } .sidebar-user { display: flex; align-items: center; gap: 8px; } .sidebar.collapsed { width: 56px; } .sidebar.collapsed .sidebar-title, .sidebar.collapsed .nav-text, .sidebar.collapsed .nav-arrow, .sidebar.collapsed .nav-submenu, .sidebar.collapsed .nav-group-header .nav-text, .sidebar.collapsed .sidebar-footer { display: none; } .sidebar.collapsed .nav-item { justify-content: center; padding: 12px 0; position: relative; } .sidebar.collapsed .nav-icon { margin: 0; } /* 鼠标悬停显示汉字提示 */ .sidebar.collapsed .nav-item:hover .nav-text { display: block; position: absolute; left: 60px; top: 50%; transform: translateY(-50%); background: #2c3e50; color: #fff; padding: 6px 14px; border-radius: 6px; font-size: 13px; white-space: nowrap; z-index: 9999; box-shadow: 0 2px 8px rgba(0,0,0,0.2); pointer-events: none; } .sidebar.collapsed .nav-item:hover .nav-text::before { content: ''; position: absolute; left: -6px; top: 50%; transform: translateY(-50%); border: 6px solid transparent; border-right-color: #2c3e50; } /* 子菜单项提示在 collapsed 时也显示 */ .sidebar.collapsed .nav-sub-item:hover span:not(.nav-sub-icon) { display: block; position: absolute; left: 60px; top: 50%; transform: translateY(-50%); background: #2c3e50; color: #fff; padding: 6px 14px; border-radius: 6px; font-size: 13px; white-space: nowrap; z-index: 9999; box-shadow: 0 2px 8px rgba(0,0,0,0.2); pointer-events: none; } .sidebar.collapsed .nav-sub-item { position: relative; } .sidebar.collapsed .sidebar-header { justify-content: center; padding: 14px 8px; } .sidebar.collapsed .sidebar-toggle { margin: 0; } .sidebar.collapsed .sidebar-toggle svg { transform: rotate(180deg); } .sidebar.collapsed .sidebar-logo { display: none; } .sidebar.collapsed ~ .main-content { margin-left: 56px; } @media (max-width: 768px) { .sidebar.collapsed { transform: translateX(-240px); width: 240px; } .sidebar.collapsed .sidebar-title, .sidebar.collapsed .nav-text, .sidebar.collapsed .nav-arrow, .sidebar.collapsed .nav-submenu, .sidebar.collapsed .nav-group-header .nav-text { display: revert; } .sidebar.collapsed .nav-item { justify-content: revert; padding: revert; } .sidebar.collapsed .sidebar-header { justify-content: revert; padding: revert; } .sidebar.collapsed .sidebar-toggle svg { transform: none; } .sidebar.collapsed ~ .main-content { margin-left: 0; } } .sidebar-toggle { background: none; border: none; color: rgba(255,255,255,0.65); cursor: pointer; padding: 4px 8px; border-radius: 4px; display: flex; align-items: center; transition: background 0.2s; flex-shrink: 0; } .sidebar-toggle:hover { background: rgba(255,255,255,0.1); color: #fff; } .sidebar-toggle:hover { background: rgba(0,0,0,0.06); } .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.3); z-index: 99; } @media (max-width: 768px) { .sidebar.collapsed { transform: translateX(-240px); } .sidebar:not(.collapsed) ~ .sidebar-overlay { display: block; } } .sidebar-header { display: flex; align-items: center; gap: 12px; padding: 20px; border-bottom: 1px solid rgba(255,255,255,0.08); } .sidebar-logo { flex-shrink: 0; } .sidebar-title { font-size: 14px; font-weight: 600; color: #fff; white-space: nowrap; } .sidebar-user { display: flex; align-items: center; gap: 12px; padding: 16px 20px; border-bottom: 1px solid rgba(255,255,255,0.06); } .user-avatar { width: 36px; height: 36px; border-radius: 8px; background: var(--primary); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 16px; font-weight: 600; flex-shrink: 0; } .user-info { min-width: 0; } .user-name { color: #fff; font-size: 14px; font-weight: 500; } .user-role { color: var(--sidebar-text); font-size: 11px; text-transform: uppercase; } .sidebar-nav { flex: 1; padding: 12px 0; } .nav-item { display: flex; align-items: center; gap: 12px; padding: 12px 20px; color: var(--sidebar-text); text-decoration: none; transition: all 0.2s; cursor: pointer; border-left: 3px solid transparent; font-size: 14px; } .nav-item:hover { color: #fff; background: rgba(255,255,255,0.04); } .nav-item.active { color: #fff; background: rgba(24,144,255,0.15); border-left-color: var(--sidebar-active); } .nav-icon { display: flex; align-items: center; flex-shrink: 0; } /* 一级菜单彩色图标:渐变圆角底,按菜单分配不同颜色 */ .nav-icon-accent { width: 28px; height: 28px; border-radius: 8px; color: #fff; justify-content: center; align-items: center; display: flex; box-shadow: 0 2px 6px rgba(0,0,0,0.2); } .nav-item.active .nav-icon-accent { box-shadow: 0 0 0 2px rgba(255,255,255,0.25), 0 2px 8px rgba(0,0,0,0.3); } /* 颜色分配 */ .nav-item[data-page="dashboard"] .nav-icon-accent { background: linear-gradient(135deg, #4facfe, #00f2fe); } .nav-item[data-page="collaboration"] .nav-icon-accent, .nav-group-header[data-group="collaboration"] .nav-icon-accent { background: linear-gradient(135deg, #43e97b, #38f9d7); } .nav-group-header[data-group="stagnant-inventory"] .nav-icon-accent { background: linear-gradient(135deg, #f7971e, #ff5f6d); } .nav-group-header[data-group="basic"] .nav-icon-accent { background: linear-gradient(135deg, #a18cd1, #fbc2eb); } .nav-group-header[data-group="inventory"] .nav-icon-accent { background: linear-gradient(135deg, #11998e, #38ef7d); } .nav-item[data-page="planning"] .nav-icon-accent { background: linear-gradient(135deg, #f7971e, #ffd200); } .nav-item[data-page="spot"] .nav-icon-accent, .nav-group-header[data-group="spot"] .nav-icon-accent { background: linear-gradient(135deg, #ff416c, #ff4b2b); } .nav-group-header[data-group="purchase"] .nav-icon-accent { background: linear-gradient(135deg, #396afc, #2948ff); } .nav-item[data-page="product_order"] .nav-icon-accent, .nav-group-header[data-group="product-order"] .nav-icon-accent { background: linear-gradient(135deg, #ff9a3d, #ff6b2c); } .nav-item[data-page="knowledge"] .nav-icon-accent { background: linear-gradient(135deg, #8e2de2, #4a00e0); } .nav-item[data-page="feedback"] .nav-icon-accent { background: linear-gradient(135deg, #eb3349, #f45c43); } .nav-item[data-page="ai_analysis"] .nav-icon-accent { background: linear-gradient(135deg, #00c6ff, #0072ff); } .nav-group-header[data-group="sysconfig"] .nav-icon-accent { background: linear-gradient(135deg, #606c88, #3f4c6b); } .sidebar-footer { padding: 8px 0; border-top: 1px solid rgba(255,255,255,0.06); } .logout:hover { color: var(--danger) !important; } /* ============ 主内容区 ============ */ .main-content { margin-left: 240px; padding: 24px 32px; min-height: 100vh; display: flex; flex-direction: column; } /* ============ 顶部用户栏 ============ */ .topbar { margin-left: 240px; display: flex; justify-content: flex-end; align-items: center; padding: 8px 32px; border-bottom: 1px solid var(--border); background: var(--bg); position: sticky; top: 0; z-index: 100; min-height: 52px; } .topbar-user { display: flex; align-items: center; gap: 12px; position: relative; cursor: pointer; padding: 4px 8px; border-radius: 8px; transition: background 0.2s; } .topbar-avatar { width: 32px; height: 32px; border-radius: 8px; overflow: hidden; background: var(--primary); flex-shrink: 0; } .user-avatar-img { width: 100%; height: 100%; object-fit: cover; } .topbar-user-info { text-align: right; line-height: 1.3; } .topbar-user-name { font-size: 13px; font-weight: 600; color: var(--text); } .topbar-user-role { font-size: 11px; color: var(--text-light); } .topbar-logout { display: inline-flex; align-items: center; gap: 4px; padding: 6px 14px; background: transparent; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; color: var(--text-secondary); cursor: pointer; white-space: nowrap; transition: all 0.2s; } .topbar-logout:hover { color: var(--danger); border-color: var(--danger); background: #fff2f0; } .topbar-logout svg { flex-shrink: 0; } .page-header { margin-bottom: 24px; display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; } .page-header h1 { font-size: 22px; font-weight: 700; color: var(--text); margin: 0; } .page-desc { color: var(--text-light); font-size: 14px; margin: 0; } /* ============ 卡片 ============ */ .card { background: var(--bg-card); border-radius: var(--radius); box-shadow: var(--shadow); border: 1px solid var(--border); } .card-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border); } .card-header h3 { font-size: 15px; font-weight: 600; } .card-body { padding: 20px; } /* ============ 统计卡片 ============ */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-bottom: 20px; } .stat-card { min-width: 0; overflow: hidden; background: var(--bg-card); border-radius: var(--radius); padding: 24px; box-shadow: var(--shadow); border: 1px solid var(--border); transition: transform 0.2s, box-shadow 0.2s; display: flex; align-items: center; gap: 14px; } .stat-card:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.1); } .stat-value { font-size: 30px; font-weight: 700; color: var(--primary); line-height: 1.2; } .stat-label { font-size: 16px; color: var(--text-light); white-space: nowrap; } .stat-info { display: flex; align-items: center; justify-content: flex-start; gap: 16px; min-width: 0; flex: 1; } .stat-card-cost .stat-info { align-items: stretch; min-width: 0; } .stat-card-cost .stat-value { font-size: 18px; min-width: 0; width: 100%; } .stat-card-cost { position: relative; overflow: visible; } .stat-card-cost:hover { z-index: 30; } .stat-cost-list { display: flex; flex-direction: column; gap: 6px; width: 100%; min-width: 0; align-items: stretch; } .stat-cost-row { display: flex; justify-content: space-between; align-items: center; gap: 10px; min-height: 24px; width: 100%; min-width: 0; } .stat-cost-row .stat-cost-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--text-light); font-size: 15px; white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; } .stat-cost-row strong { flex: 0 0 auto; min-width: 0; text-align: right; font-size: 18px; line-height: 1.25; white-space: nowrap; } .stat-cost-help { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; color: #8c8c8c; cursor: help; outline: none; flex: 0 0 auto; } .stat-cost-eye { font-size: 13px; line-height: 1; opacity: 0.8; transition: color 0.15s, opacity 0.15s, transform 0.15s; } .stat-cost-help:hover .stat-cost-eye, .stat-cost-help:focus .stat-cost-eye, .stat-cost-help:focus-visible .stat-cost-eye { color: var(--primary); opacity: 1; transform: scale(1.12); } /* 说明浮层统一挂到 body,脱离统计卡片的 flex/grid 布局,避免正文泄漏撑坏卡片。 */ .dashboard-cost-tooltip { position: fixed; z-index: 3000; box-sizing: border-box; max-width: calc(100vw - 36px); padding: 12px 14px; border-radius: 8px; border: 1px solid #d9e7ff; background: #fff; color: #434343; box-shadow: 0 8px 24px rgba(0,0,0,0.18); font-size: 12px; line-height: 1.65; white-space: normal; text-align: left; font-weight: 400; visibility: hidden; opacity: 0; pointer-events: none; transform: translateY(-4px); transition: opacity 0.15s, transform 0.15s, visibility 0.15s; } .dashboard-cost-tooltip.is-visible { visibility: visible; opacity: 1; pointer-events: auto; transform: translateY(0); } .dashboard-cost-tooltip-title { color: #1677ff; font-size: 14px; font-weight: 700; padding-bottom: 5px; margin-bottom: 5px; border-bottom: 1px solid #f0f0f0; } .dashboard-cost-tooltip b { color: #262626; } .dashboard-cost-tooltip-foot { margin-top: 6px; padding-top: 6px; border-top: 1px dashed #e8e8e8; color: #8c8c8c; } /* 库存文件缺列时,不将无法核算的在途金额伪装成0。 */ .dashboard-cost-data-warning { margin: -8px 0 16px; padding: 10px 14px; border: 1px solid #ffd591; border-radius: 6px; background: #fff7e6; color: #874d00; font-size: 13px; line-height: 1.6; } /* ============ 图表网格 ============ */ .chart-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .chart-grid .card-body { padding: 16px; height: 300px; position: relative; } /* ============ 表格 ============ */ .data-table { width: 100%; min-width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; } /* 数据表容器可双向滚动 */ .card-body:has(> .data-table) { overflow-x: auto !important; padding: 0; } /* 数据表容器可滚动,让 sticky 表头生效 */ .card-body:has(> .data-table) { overflow-y: auto; max-height: calc(100vh - 180px); padding: 0; } /* 小屏设备减少头部占用 */ @media (max-width: 768px) { .card-body:has(> .data-table) { max-height: calc(100vh - 140px); } } .data-table thead { background: #fafafa; } .data-table th { padding: 12px 16px; text-align: center; vertical-align: middle; font-weight: 600; color: #374151; font-size: 12px; line-height: 20px; text-transform: uppercase; letter-spacing: 0.5px; border-bottom: 1px solid #d1d5db; border-right: 1px solid #e5e7eb; white-space: nowrap; background: #eef2f6; } /* 表头内筛选图标与无图标标题保持同一条垂直基线。 */ .data-table th .order-filt-icon, .data-table th .bk-filt-icon, .data-table th .fn-filt-icon, .data-table th .plan-col-index > div { vertical-align: middle; line-height: 20px; } .data-table td { padding: 10px 16px; border-bottom: 1px solid #f0f0f0; border-right: 1px solid #f0f0f0; vertical-align: middle; white-space: nowrap; font-weight: 500; } .data-table td:last-child { border-right: none; } /* 三类订单所有可调列严格裁切在自身边界内。 */ #domesticOrdersTable th, #domesticOrdersTable td, #overseasOrdersTable th, #overseasOrdersTable td, #packagingOrdersTable th, #packagingOrdersTable td { overflow: hidden; text-overflow: ellipsis; contain: paint; box-sizing: border-box; } #domesticOrdersTable td > *, #overseasOrdersTable td > *, #packagingOrdersTable td > * { min-width: 0 !important; max-width: 100% !important; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } #domesticOrdersTable td > code, #overseasOrdersTable td > code, #packagingOrdersTable td > code { display: block; } #domesticOrdersTable td input, #domesticOrdersTable td select, #overseasOrdersTable td input, #overseasOrdersTable td select, #packagingOrdersTable td input, #packagingOrdersTable td select { width: 100% !important; min-width: 0 !important; max-width: 100% !important; } /* 计划预测操作列多一个按钮,沿用订单管理按钮尺寸并保留足够宽度。 */ .order-action-head.order-action-wide, .order-action-cell.order-action-wide { width: 200px !important; min-width: 200px !important; max-width: 200px !important; box-sizing: border-box; } /* 国内/海外/包材订单:紧凑且可折叠的右侧操作列 */ .order-action-head, .order-action-cell { width: 128px !important; min-width: 128px !important; max-width: 128px !important; box-sizing: border-box; } .order-action-head-inner, .order-action-buttons { display: flex; align-items: center; justify-content: center; gap: 3px; } .order-action-cell .order-action-btn { padding: 3px 6px; min-height: 24px; font-size: 11px; line-height: 16px; } .order-action-toggle { width: 22px; height: 22px; padding: 0; border: 0; border-radius: 4px; background: transparent; color: var(--text-light); cursor: pointer; font-size: 14px; line-height: 22px; } .order-action-toggle:hover { color: var(--primary); background: var(--primary-bg); } .order-actions-collapsed .order-action-head, .order-actions-collapsed .order-action-cell { width: 34px !important; min-width: 34px !important; max-width: 34px !important; padding-left: 5px !important; padding-right: 5px !important; } .order-actions-collapsed .order-action-title, .order-actions-collapsed .order-action-buttons { display: none; } .order-actions-collapsed .order-action-head, .order-actions-collapsed .order-action-cell { width: 34px !important; min-width: 34px !important; max-width: 34px !important; padding-left: 5px !important; padding-right: 5px !important; overflow: hidden; } .order-actions-collapsed .order-action-cell > *:not(.order-action-toggle) { display: none; } /* 订单货品名称随列宽裁切,避免文字覆盖右侧日期列 */ .order-product-name-cell { position: relative; min-width: 0; box-sizing: border-box; white-space: nowrap; } /* 独立裁切层以单元格实际边界为准,兼容国内订单 sticky 冻结列。 */ .order-product-name-text { position: absolute; inset: 0; display: flex; align-items: center; min-width: 0; padding: 0 16px; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .data-table tbody tr:hover { background: var(--primary-bg); } .data-table td.num { text-align: right; font-variant-numeric: tabular-nums; font-weight: 500; } .data-table td.time { font-size: 12px; color: var(--text-light); } .data-table code { background: #f5f5f5; padding: 2px 6px; border-radius: 4px; font-size: 12px; color: var(--primary-dark); } /* ============ 标签 ============ */ .tag { display: inline-block; padding: 2px 10px; border-radius: 10px; font-size: 11px; font-weight: 500; line-height: 20px; } .tag-blue { background: var(--primary-bg); color: var(--primary); } .tag-green { background: #f6ffed; color: var(--success); } .tag-red { background: #fff2f0; color: var(--danger); } .tag-gray { background: #f5f5f5; color: var(--text-light); } /* ============ 筛选栏 ============ */ .filter-bar { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; } .data-count { margin-left: auto; color: var(--text-light); font-size: 13px; } /* ============ 分页 ============ */ .pagination-controls { display:flex;align-items:center;justify-content:center;gap:8px; } .pagination-controls .btn { min-width:80px; } .pagination { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 20px; padding: 16px 0; } .pagination button { padding: 6px 14px; border: 1px solid var(--border); border-radius: 6px; background: #fff; cursor: pointer; font-size: 13px; transition: all 0.2s; } .pagination button:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); } .pagination button.active { background: var(--primary); color: #fff; border-color: var(--primary); } .pagination button:disabled { opacity: 0.4; cursor: not-allowed; } /* 当前页码高亮 */ .pagination-inner .btn-sm.btn-primary, .pagination button.btn-primary { background: var(--primary); color: #fff; border-color: var(--primary-dark); font-weight: 700; box-shadow: 0 0 0 2px rgba(24,144,255,0.25); transform: scale(1.05); } .pagination-inner .btn-sm.btn-primary:hover, .pagination button.btn-primary:hover { background: var(--primary-dark); color: #fff; } .page-info { margin-left: 12px; color: var(--text-light); font-size: 13px; } /* ============ 状态标记 ============ */ .status-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: #d9d9d9; margin-right: 6px; vertical-align: middle; } .status-dot.active { background: var(--success); } /* ============ 弹窗 ============ */ .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal { background: #fff; border-radius: 12px; width: 500px; max-width: 90vw; max-height: 85vh; overflow-y: auto; box-shadow: 0 20px 60px rgba(0,0,0,0.15); } .modal-header { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px 0; } .modal-header h3 { font-size: 16px; font-weight: 600; } .modal-close { font-size: 24px; color: var(--text-light); cursor: pointer; line-height: 1; } .modal-close:hover { color: var(--text); } .modal-body { padding: 20px 24px; } .modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 16px 24px; border-top: 1px solid var(--border); } /* ============ 加载动画 ============ */ .page-loading { display: flex; align-items: center; justify-content: center; min-height: 300px; } .loading-spinner { width: 32px; height: 32px; border: 3px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; } /* ============ 产品基础表 ============ */ .data-table th.sortable { cursor: pointer; user-select: none; transition: background 0.2s; } .data-table th.sortable:hover { background: var(--primary-bg); } .sort-arrow { display: inline-block; width: 0; height: 0; margin-left: 4px; vertical-align: middle; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid var(--text-light); opacity: 0.4; transition: opacity 0.2s; } th.sortable:hover .sort-arrow { opacity: 0.8; } .data-table th.sortable.active .sort-arrow { opacity: 1; border-top-color: var(--primary); } .tag-brand { background: #f0f5ff; color: #2f54eb; border: 1px solid #d6e4ff; padding: 2px 8px; border-radius: 4px; font-size: 12px; } .tag-cat { background: #fff7e6; color: #d46b08; border: 1px solid #ffd591; } /* 产品类型标签 */ .tag-prod { background:#e6f7ff; color:#1890ff; border:1px solid #91d5ff; padding:2px 10px; border-radius:10px; font-size:11px; } .tag-pack { background:#f0f0f0; color:#595959; border:1px solid #d9d9d9; padding:2px 10px; border-radius:10px; font-size:11px; } .tag-gift { background:#fff7e6; color:#fa8c16; border:1px solid #ffd591; padding:2px 10px; border-radius:10px; font-size:11px; } .tag-sample { background:#f6ffed; color:#52c41a; border:1px solid #b7eb8f; padding:2px 10px; border-radius:10px; font-size:11px; } .tag-supply { background:#f9f0ff; color:#722ed1; border:1px solid #d3adf7; padding:2px 10px; border-radius:10px; font-size:11px; } .tag-other { background:#f5f5f5; color:#8c8c8c; border:1px solid #d9d9d9; padding:2px 10px; border-radius:10px; font-size:11px; } padding: 2px 8px; border-radius: 4px; font-size: 12px; } .detail-table { width: 100%; border-collapse: collapse; } .detail-table tr { border-bottom: 1px solid var(--border); } .detail-table tr:last-child { border-bottom: none; } .detail-label { width: 120px; padding: 10px 12px; background: #fafafa; font-size: 13px; color: var(--text-secondary); font-weight: 500; vertical-align: top; } .detail-value { padding: 10px 12px; font-size: 14px; color: var(--text); } .detail-value strong { font-size: 15px; } /* 产品详情弹窗 */ #productDetailModal .modal { width: 800px; max-width: 95vw; max-height: 90vh; overflow-y: auto; } .detail-section { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; } .detail-loading { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 60px 40px; color: var(--text-secondary); font-size: 14px; } /* ============ 产品详情弹窗(出库/库存页面)- 极简商务风 ============ */ .pd-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 1000; animation: pdFadeIn 0.2s ease; } @keyframes pdFadeIn { from { opacity: 0; } to { opacity: 1; } } .pd-modal { background: #fff; border-radius: 12px; width: 880px; max-width: 94vw; max-height: 88vh; overflow-y: auto; box-shadow: 0 12px 48px rgba(0,0,0,0.15); animation: pdSlideUp 0.25s ease-out; font-family: 'PingFang SC', 'Microsoft YaHei', 'Hiragino Sans GB', 'Noto Sans CJK SC', sans-serif; } @keyframes pdSlideUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } .pd-header { display: flex; align-items: center; gap: 10px; padding: 20px 28px 16px; border-bottom: 1px solid #e8ecf0; position: sticky; top: 0; background: #fff; z-index: 10; } .pd-title { font-size: 17px; font-weight: 700; color: #111827; letter-spacing: 0.5px; } .pd-code-badge { font-size: 12px; color: #1890ff; background: #e6f7ff; padding: 2px 10px; border-radius: 4px; font-family: 'SF Mono', 'Fira Code', Consolas, monospace; font-weight: 500; } .pd-close-btn { margin-left: auto; width: 32px; height: 32px; border: none; background: transparent; border-radius: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; color: #9ca3af; transition: all 0.2s; } .pd-close-btn:hover { background: #f5f5f5; color: #1f2937; } .pd-body { padding: 20px 28px 28px; display: flex; flex-direction: column; gap: 20px; } .pd-loading { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 60px 0; color: #9ca3af; font-size: 14px; } .pd-error { text-align: center; padding: 60px 0; color: #ff4d4f; font-size: 14px; } /* 卡片 */ .pd-card { background: #fff; border: 1px solid #e8ecf0; border-radius: 10px; overflow: hidden; transition: box-shadow 0.25s; box-shadow: 0 1px 3px rgba(0,0,0,0.04); } .pd-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.08); } .pd-card-header { display: flex; align-items: center; gap: 8px; padding: 14px 20px; font-size: 13px; font-weight: 600; color: #1f2937; border-bottom: 1px solid #eee; background: #f8fafc; letter-spacing: 0.3px; } .pd-card-body { padding: 2px 0; } .pd-card-body { padding: 2px 0; } /* 字段表格样式 */ .pd-fields { display: grid; grid-template-columns: 1fr 1fr 1fr; row-gap: 0; column-gap: 0; white-space: nowrap; } .pd-fields-4col { grid-template-columns: 1fr 1fr 1fr 1fr; } .pd-fields-4col .pd-row:nth-child(-n+4) { border-top: 1px solid #e5e7eb; } .pd-row-full { display: flex; align-items: baseline; gap: 4px; padding: 8px 20px; border-bottom: 1px solid #e5e7eb; min-height: 34px; } .pd-value-name { font-size: 14px; word-break: break-word; } .pd-row { display: flex; align-items: baseline; gap: 0; padding: 0; min-height: 36px; border-bottom: 1px solid #e5e7eb; transition: background 0.15s; } .pd-fields .pd-row:nth-child(-n+3) { border-top: 1px solid #e5e7eb; } .pd-row:hover .pd-value { background: #f8fafc; } .pd-row-highlight .pd-value { background: #f5f9ff; } .pd-label { width: 110px; flex-shrink: 0; font-size: 12px; color: #374151; letter-spacing: 0.2px; font-weight: 600; background: #e5e7eb; padding: 8px 12px; text-align: left; display: flex; align-items: center; border-right: 1px solid #d1d5db; } .pd-value { flex: 1; font-size: 13px; color: #111827; font-weight: 400; background: #fff; padding: 8px 12px; display: flex; align-items: center; word-break: break-all; } .pd-value strong { font-size: 14px; font-weight: 600; } .pd-value code { background: #f0f5ff; padding: 2px 8px; border-radius: 4px; font-size: 12px; color: #096dd9; font-weight: 500; } .pd-muted { color: #1f2937 !important; font-weight: 500 !important; } .pd-muted code { color: #096dd9 !important; background: #f0f5ff !important; } .pd-price { color: #1f2937; font-weight: 500; font-size: 14px; } /* BOM表格美化 */ .pd-card .data-table thead th { padding: 10px 8px; font-size: 11px; color: #6b7280; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; background: #f9fafb; border-bottom: 2px solid #e5e7eb; } .pd-card .data-table tbody td { padding: 8px; font-size: 12px; vertical-align: middle; } .pd-card .data-table tbody tr:hover { background: #f3f6fc; } .pd-card .data-table tfoot td { padding: 10px 8px; font-size: 12px; font-weight: 700; border-top: 2px solid #e5e7eb; background: #f3f6fc; } /* 两列排布顶部区 */ .pd-row-two-col { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eee; } .pd-row-col { display: flex; align-items: center; gap: 6px; padding: 12px 20px; white-space: nowrap; } .pd-row-col:first-child { border-right: 1px solid #eee; } .pd-row-col .pd-value { overflow: hidden; text-overflow: ellipsis; font-size: 14px; } .pd-no-data { text-align: center; padding: 30px 0; color: #9ca3af; font-size: 13px; } .pd-footer { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 0 4px; font-size: 12px; color: #bfbfbf; } .pd-footer-sep { opacity: 0.4; } /* 弹窗宽版 */ .pd-modal-wide { width: 1100px; max-width: 96vw; } /* 顶部展示区:货品编号 + 货品名称 两列等距 */ .pd-top-section { display: grid; grid-template-columns: 1fr auto 1fr; border: 1px solid #e8ecf0; border-radius: 10px; overflow: hidden; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,0.04); } .pd-top-col { display: flex; flex-direction: row; align-items: center; justify-content: center; padding: 14px 20px; gap: 10px; min-height: 52px; } .pd-top-col .pd-top-key { font-size: 12px; color: #6b7280; font-weight: 600; flex-shrink: 0; } .pd-top-col .pd-top-key::after { content: ':'; } .pd-top-col .pd-top-val { font-weight: 600; font-size: 14px; color: #1f2937; } .pd-top-col .pd-top-name { font-weight: 600; font-size: 14px; color: #1f2937; } .pd-top-divider { width: 1px; background: #e8ecf0; align-self: stretch; } /* 顶部编号+名称两列 */ .pd-row-two-col { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #f0f0f0; } .pd-row-col { display: flex; align-items: center; gap: 6px; padding: 10px 20px; white-space: nowrap; } .pd-row-col:first-child { border-right: 1px solid #f0f0f0; } .pd-row-col .pd-value { overflow: hidden; text-overflow: ellipsis; } /* BOM表格 缺口颜色 */ .pd-ok { color: #52c41a; font-weight: 600; } .pd-warn { color: #ff4d4f; font-weight: 600; } .detail-error { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 60px 40px; color: var(--danger); font-size: 14px; } /* ============ 科技风格弹窗 ============ */ .modal-tech { background: #fff; border-radius: 16px; width: 720px; max-width: 92vw; max-height: 88vh; overflow-y: auto; box-shadow: 0 24px 80px rgba(0,0,0,0.2); animation: modalSlideUp 0.25s ease-out; } @keyframes modalSlideUp { from { opacity: 0; transform: translateY(20px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } } .product-detail-modal { width: 760px; } #planColModal .modal { width: 660px; } .modal-tech-header { display: flex; align-items: center; justify-content: space-between; padding: 20px 28px; border-bottom: 1px solid #f0f0f0; background: linear-gradient(135deg, #fafbff 0%, #f0f5ff 100%); border-radius: 16px 16px 0 0; position: sticky; top: 0; z-index: 10; } .modal-tech-title { display: flex; align-items: center; gap: 10px; font-size: 16px; font-weight: 600; color: var(--text); } .modal-tech-title svg { color: var(--primary); } .modal-tech-id { font-size: 12px; color: var(--text-light); font-weight: 400; font-family: 'SF Mono', 'Fira Code', monospace; background: rgba(24,144,255,0.08); padding: 2px 8px; border-radius: 4px; } .modal-tech-close { width: 32px; height: 32px; border-radius: 8px; border: none; background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--text-light); transition: all 0.2s; } .modal-tech-close:hover { background: rgba(0,0,0,0.04); color: var(--text); } .modal-tech-body { padding: 24px 28px; } /* 产品详情 - 英雄区 */ .detail-hero { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: 20px; margin-bottom: 20px; border-bottom: 1px solid #f0f0f0; } .detail-hero-name { font-size: 18px; font-weight: 700; color: var(--text); margin-bottom: 8px; line-height: 1.3; } .detail-hero-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; } .tag-brand-sm { display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 4px; font-size: 11px; font-weight: 500; background: #f0f5ff; color: #2f54eb; border: 1px solid #d6e4ff; } .tag-spec { display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 4px; font-size: 11px; font-weight: 500; background: #f5f5f5; color: #595959; border: 1px solid #d9d9d9; } .detail-hero-code { display: flex; align-items: center; gap: 8px; } .detail-code-label { font-size: 12px; color: var(--text-light); } .detail-code-value { background: #f5f5f5; padding: 3px 10px; border-radius: 4px; font-size: 13px; color: var(--primary-dark); font-family: 'SF Mono', 'Fira Code', Consolas, monospace; } .detail-price-badge { text-align: right; background: linear-gradient(135deg, #fff7e6 0%, #fffbe6 100%); border: 1px solid #ffe58f; border-radius: 12px; padding: 12px 20px; min-width: 120px; } .price-label { display: block; font-size: 11px; color: #d48806; margin-bottom: 2px; text-transform: uppercase; letter-spacing: 0.5px; } .price-value { display: block; font-size: 24px; font-weight: 700; color: #d48806; line-height: 1.2; } /* 产品详情 - 信息网格 */ .detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .detail-section-card { background: linear-gradient(135deg, #fafbff 0%, #f8f9fc 100%); border: 1px solid #f0f0f0; border-radius: 12px; overflow: hidden; transition: box-shadow 0.2s; } .detail-section-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.04); } .detail-section-title { display: flex; align-items: center; gap: 8px; padding: 12px 16px; font-size: 13px; font-weight: 600; color: var(--text); border-bottom: 1px solid #f0f0f0; background: rgba(255,255,255,0.7); } .detail-section-body { padding: 4px 0; } .detail-field { display: flex; padding: 8px 16px; border-bottom: 1px solid #f8f8f8; } .detail-field:last-child { border-bottom: none; } .field-label { width: 80px; flex-shrink: 0; font-size: 12px; color: var(--text-light); } .field-value { font-size: 13px; color: var(--text); font-weight: 500; } .field-value code { background: #f0f5ff; padding: 1px 6px; border-radius: 3px; font-size: 12px; color: var(--primary-dark); } /* 产品详情 - 底部时间 */ .detail-footer { display: flex; align-items: center; gap: 6px; margin-top: 20px; padding-top: 16px; border-top: 1px solid #f0f0f0; font-size: 12px; color: var(--text-light); } .detail-footer svg { opacity: 0.5; } .detail-footer-sep { margin: 0 8px; opacity: 0.3; } /* ============ 子菜单 ============ */ .nav-group { position: relative; } .nav-group-header { display: flex !important; align-items: center; justify-content: flex-start; } .nav-arrow { margin-left: auto; font-size: 10px; transition: transform 0.2s ease; opacity: 0.6; } .nav-arrow.rotated { transform: rotate(180deg); } .nav-submenu { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; background: rgba(0,0,0,0.15); } .nav-submenu.open { max-height: 500px; } .nav-sub-item { display: flex; align-items: center; padding: 8px 16px 8px 44px; color: rgba(255,255,255,0.65); text-decoration: none; font-size: 13px; transition: all 0.2s; gap: 8px; } .nav-sub-item:hover { color: #fff; background: rgba(255,255,255,0.08); } .nav-sub-item.active { color: var(--sidebar-active); background: rgba(24,144,255,0.1); border-right: 3px solid var(--sidebar-active); } .nav-sub-icon { font-size: 6px; opacity: 0.5; } /* ============ 标签 ============ */ .tag { display: inline-block; padding: 2px 10px; border-radius: 4px; font-size: 12px; font-weight: 500; } .tag-blue { background: #e6f7ff; color: #1890ff; border: 1px solid #91d5ff; } .tag-green { background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; } .tag-orange { background: #fff7e6; color: #fa8c16; border: 1px solid #ffd591; } .tag-purple { background: #f9f0ff; color: #722ed1; border: 1px solid #d3adf7; } .tag-red { background: #fff2f0; color: #f5222d; border: 1px solid #ffccc7; } .tag-grey { background: #f5f5f5; color: #8c8c8c; border: 1px solid #d9d9d9; } /* ============ SKU 链接样式 ============ */ a.sku-link, .sku-link { color: var(--primary); text-decoration: none; cursor: pointer; border-bottom: 1px dashed var(--primary-light); } a.sku-link:hover { color: var(--primary-dark); border-bottom: 1px solid var(--primary-dark); } a.sku-link code { color: inherit; background: transparent; } /* ============ 库存页 ============ */ .qty-zero { color: var(--danger) !important; } .qty-low { color: var(--warning) !important; } .data-table td.qty-zero, .data-table td.qty-low { font-weight: 600; } .checkbox-label input[type="checkbox"] { width: 15px; height: 15px; cursor: pointer; } /* ============ 显隐字段下拉 ============ */ .col-toggle-dropdown { position: relative; display: inline-block; } .col-toggle-menu { display: none; position: absolute; top: 100%; left: 0; background: #fff; border: 1px solid var(--border); border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,0.12); padding: 8px 0; min-width: 160px; max-height: 400px; overflow-y: auto; z-index: 1000; } .col-toggle-dropdown.open .col-toggle-menu { display: block; } .col-toggle-menu label { display: flex; align-items: center; gap: 6px; padding: 5px 14px; font-size: 13px; color: var(--text); cursor: pointer; white-space: nowrap; } .col-toggle-all { padding: 4px 14px 2px; } .col-toggle-all .cb-all { padding: 4px 0; font-size: 13px; color: var(--primary); } .col-toggle-divider { height: 1px; background: var(--border); margin: 2px 8px; } .col-toggle-footer { padding: 8px 14px 6px; border-top: 1px solid var(--border); text-align: center; } .col-toggle-footer .btn { width: 100%; justify-content: center; } .col-toggle-menu label:hover { background: var(--primary-bg); } .col-toggle-menu input[type="checkbox"] { width: 14px; height: 14px; cursor: pointer; accent-color: var(--primary); } /* ============ 序号列 ============ */ .col-index, .row-index, .plan-col-index { width: 60px; min-width: 60px; max-width: 60px; text-align: center !important; color: var(--text-light); font-size: 12px; font-variant-numeric: tabular-nums; } #planTable thead { position: sticky; top: 0; z-index: 10; } /* 类目管理表头固定 */ #catTable thead { position: sticky; top: 0; z-index: 10; } #planTable .plan-col-index { width: 50px; min-width: 50px; max-width: 50px; } /* ============ 页数选择器 ============ */ .page-size-select { padding: 3px 6px; border: 1px solid var(--border); border-radius: 4px; font-size: 12px; color: var(--text-secondary); background: white; cursor: pointer; outline: none; } .page-size-select:focus { border-color: var(--primary); } .page-size-label { font-size: 12px; color: var(--text-secondary); } .goto-input { width: 50px; padding: 3px 6px; border: 1px solid var(--border); border-radius: 4px; font-size: 12px; text-align: center; color: var(--text); background: white; outline: none; } .goto-input:focus { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(24,144,255,0.1); } .goto-input::-webkit-inner-spin-button { -webkit-appearance: none; } .goto-label { font-size: 12px; color: var(--text-secondary); margin: 0 3px; } .stat-card-cost .stat-icon { align-self: flex-start; margin-top: 2px; } .stat-card-cost .stat-cost-help { flex: 0 0 auto; } @media (max-width: 1100px) { .stats-grid[style*="repeat"] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } } @media (max-width: 620px) { .stats-grid[style*="repeat"] { grid-template-columns: 1fr !important; } .stat-card { padding: 16px; } .stat-cost-row .stat-cost-label { font-size: 13px; } .stat-cost-row strong { font-size: 16px; } } /* ============ 响应式 ============ */ @media (max-width: 768px) { .sidebar { width: 240px; } .main-content { margin-left: 0; padding: 12px; } .sidebar { transform: none; } .sidebar.collapsed { transform: translateX(-240px); } .sidebar-toggle { display: flex; } .chart-grid { grid-template-columns: 1fr; } .stats-grid { grid-template-columns: 1fr 1fr; } .filter-bar { flex-direction: column; align-items: stretch; } .filter-bar .form-input { width: 100% !important; } .data-count { margin-left: 0; } } /* ============ 滚动条 ============ */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #d9d9d9; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #bfbfbf; } /* 行内编辑 */ .inline-edit { cursor: pointer; padding: 2px 6px; border-radius: 3px; display: inline-block; min-width: 40px; } .inline-edit:hover { background: #e8f4fd; border: 1px dashed var(--primary); padding: 1px 5px; } /* 字段设置弹窗拖拽 */ #planColGrid label:hover { background: #f5f7fa; } #planColGrid label.dragging { opacity: 0.4; } #planColGrid label .drag-handle, #planColGrid label span:first-child { color: #bbb; font-size: 12px; cursor: grab; flex-shrink:0; } /* 计划预测表:居中 + 不换行 + 供应商名称左对齐 */ #planTable th { text-align: center; white-space: nowrap; position: sticky; top: 0; z-index: 10; } #planTable td { text-align: center; white-space: nowrap; } /* 四个同步列宽菜单:固定列轨道后,单元格及其内容不得撑开相邻列。 */ #planTable th, #planTable td, #pendingTable th, #pendingTable td, #orderTable th, #orderTable td, #backupTable th, #backupTable td, #finishedOrdersTable th, #finishedOrdersTable td { box-sizing: border-box; min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; } #planTable td:not(.plan-col-action) > *, #pendingTable td:not(.col-action) > *, #orderTable td:not(.col-action) > *, #backupTable td:not(.col-action) > *, #finishedOrdersTable td:not(:last-child) > * { display: inline-block; box-sizing: border-box; min-width: 0 !important; max-width: 100% !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; } #pendingTable td input, #pendingTable td select, #pendingTable td textarea, #orderTable td input, #orderTable td select, #orderTable td textarea, #backupTable td input, #backupTable td select, #backupTable td textarea { width: 100% !important; min-width: 0 !important; max-width: 100% !important; } /* 新品管理:列宽拖拽调整后,单元格及其内容不得撑开相邻列 */ #newTable th, #newTable td { box-sizing: border-box; min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; } #newTable td:not(.order-action-cell) > * { display: inline-block; box-sizing: border-box; min-width: 0 !important; max-width: 100% !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; } #finishedOrdersTable thead th { position: sticky; top: 0; z-index: 6; background: var(--bg, #f5f5f5); } #finishedOrdersTable thead th { position: sticky !important; top: 0 !important; z-index: 6 !important; background: var(--bg, #f5f5f5) !important; } #finishedOrdersTable thead th:first-child { left: 0 !important; top: 0 !important; z-index: 20 !important; background: var(--bg, #f5f5f5) !important; } #finishedOrdersTable tbody td:first-child { position: sticky !important; left: 0 !important; z-index: 10 !important; background: var(--card-bg, #fff) !important; } /* 订单类表格支持拖拽选择并 Ctrl+C 复制连续单元格 */ .copy-selectable-table tbody td:not(.order-action-cell):not(.backup-status-cell) { cursor: cell; user-select: none; } .copy-selectable-table tbody td.copy-table-selected, .copy-selectable-table tbody td.finished-copy-selected { background: rgba(24, 144, 255, 0.16) !important; box-shadow: inset 0 0 0 1px #1890ff; } #finishedOrdersTable td:nth-child(17), #finishedOrdersTable td:nth-child(18), #finishedOrdersTable td:nth-child(22) { white-space: nowrap; } /* ============ 页面弹性布局:表格自适应高度,分页始终可见 ============ */ .page-flex { display:flex; flex-direction:column; flex:1; min-height:0; height:100%; } .page-flex .card { display:flex; flex-direction:column; flex:1; min-height:0; } .page-flex .card-body.scroll-body { flex:1; overflow:auto; min-height:300px; padding:0; } .page-flex .card-footer.pagination-sticky, .page-flex > .pagination-sticky { flex-shrink:0; position:sticky; bottom:0; background:var(--bg-card,#fff); z-index:5; } /* ============ 表格滚动容器:保持分页始终可见 ============ */ .table-scroll { overflow-x: auto; overflow-y: auto; max-height: calc(100vh - 280px); } /* 进度悬浮提示 */ .progress-tip { position: relative; cursor: default; color: #1890ff; } .progress-tip:hover::after { content: attr(data-progress); position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); background: #333; color: #fff; padding: 6px 10px; border-radius: 6px; font-size: 13px; line-height: 1.5; white-space: pre-wrap; word-break: break-word; max-width: 320px; min-width: 60px; box-shadow: 0 4px 12px rgba(0,0,0,0.2); z-index: 9999; pointer-events: none; text-align: left; } /* 统一三个菜单操作按钮的容器,避免按钮在 sticky 单元格中被裁切。 */ .order-action-cell .order-action-buttons { display: flex; align-items: center; justify-content: center; gap: 3px; overflow: visible; } .order-action-cell .order-action-btn { flex: 0 0 auto; white-space: nowrap; } .order-actions-collapsed .order-action-cell .order-action-buttons { display: none !important; } /* ============ 权限配置:ERP 风格统一布局(P0/P1/P2) ============ */ .permissions-page-header { margin-bottom: 14px; } .permissions-page-header h1 { letter-spacing: .2px; } .permissions-content { display: flex; flex-direction: column; gap: 16px; min-width: 0; padding-bottom: 24px; } .perm-role-panel { padding: 16px; border: 1px solid #e5e8ee; border-radius: 10px; background: var(--bg-card, #fff); box-shadow: 0 1px 3px rgba(31, 35, 41, .04); } .perm-section-heading { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 34px; margin-bottom: 12px; } .perm-role-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 10px; } .perm-role-card { display: grid !important; grid-template-columns: 38px minmax(120px, 1fr) auto; align-items: center; gap: 11px; min-height: 72px; padding: 11px 12px; border: 1px solid #e5e8ee; border-radius: 8px; background: #fff; box-sizing: border-box; } .perm-role-card:hover { border-color: #b9d5ff; box-shadow: 0 3px 10px rgba(22, 119, 255, .08); } .perm-role-icon { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 9px; font-size: 16px; } .perm-role-meta, .perm-user-info { min-width: 0; } .perm-role-name { color: #1f2329; font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .perm-role-stats { margin-top: 4px; color: #8f959e; font-size: 11px; white-space: nowrap; } .perm-role-actions, .perm-user-actions { display: flex; align-items: center; justify-content: flex-end; gap: 5px; flex-wrap: nowrap; } .perm-role-actions .btn, .perm-user-actions .btn { min-width: 48px; height: 28px; padding: 3px 8px !important; margin: 0 !important; font-size: 11px !important; line-height: 20px; white-space: nowrap; } .perm-user-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 11px 12px; margin-bottom: 12px; border: 1px solid #e5e8ee; border-radius: 8px; background: #fafbfc; } .perm-user-toolbar .form-input, .perm-dialog-toolbar .form-input { height: 32px; box-sizing: border-box; } .perm-user-section-heading { display: flex; align-items: center; gap: 10px; min-height: 34px; padding: 6px 2px 10px; color: #2b2f36; font-size: 14px; font-weight: 600; } .perm-section-config-btn { height: 28px; padding: 3px 9px !important; border-color: #d9e6f7 !important; background: #f3f7fc !important; color: #3b5b82 !important; font-size: 11px !important; } .perm-user-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(390px, 1fr)); gap: 10px; } .perm-user-card { display: grid !important; grid-template-columns: 46px minmax(0, 1fr) auto 12px; align-items: center; gap: 12px !important; min-height: 84px; padding: 13px 14px !important; border: 1px solid #e5e8ee !important; border-radius: 8px !important; background: #fff !important; box-sizing: border-box; cursor: pointer; transition: border-color .18s ease, box-shadow .18s ease !important; } .perm-user-card:hover { border-color: #adc6ff !important; box-shadow: 0 3px 12px rgba(22, 119, 255, .08) !important; transform: none !important; } .perm-user-avatar { width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; border-radius: 50%; color: #fff; font-size: 17px; font-weight: 700; box-shadow: 0 2px 5px rgba(0, 0, 0, .10); } .perm-user-name-row { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; color: #1f2329; font-size: 14px; font-weight: 600; } /* 权限弹窗统一外框、工具栏和底部按钮 */ .perm-dialog { width: min(1240px, 94vw) !important; max-width: 1240px !important; max-height: 88vh !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; border-radius: 10px !important; background: #fff; box-shadow: 0 12px 36px rgba(0, 0, 0, .16) !important; } .perm-user-dialog { width: min(1180px, 94vw) !important; } .perm-dialog-header { min-height: 54px; display: flex !important; align-items: center !important; justify-content: space-between !important; flex: 0 0 auto; padding: 0 20px !important; border-bottom: 1px solid #e5e8ee !important; background: #fff; } .perm-dialog-header h3 { margin: 0 !important; color: #1f2329; font-size: 16px !important; } .perm-dialog-body { flex: 1 1 auto !important; min-height: 0; padding: 14px 18px !important; overflow: auto !important; background: #f7f8fa; } .perm-dialog-footer { min-height: 54px; display: flex !important; align-items: center !important; justify-content: flex-end !important; gap: 8px !important; flex: 0 0 auto; padding: 9px 18px !important; border-top: 1px solid #e5e8ee !important; background: #fff; } .perm-dialog-toolbar { position: sticky; top: -14px; z-index: 5; display: flex; align-items: center; flex-wrap: wrap; gap: 7px; min-height: 44px; margin: -2px 0 12px; padding: 7px 8px; border: 1px solid #e5e8ee; border-radius: 7px; background: rgba(255, 255, 255, .97); } .perm-config-group { margin-bottom: 10px !important; overflow: hidden; border: 1px solid #e1e5eb !important; border-radius: 8px !important; background: #fff; } .perm-config-group-title { min-height: 38px; display: flex; align-items: center; padding: 0 14px !important; border-bottom: 1px solid #e8ebef !important; background: #f3f5f8 !important; color: #30343b !important; font-size: 13px !important; font-weight: 600 !important; cursor: pointer; user-select: none; } .perm-config-item { display: grid !important; grid-template-columns: 170px minmax(0, 1fr); align-items: start !important; column-gap: 14px !important; row-gap: 8px !important; padding: 11px 14px !important; border-bottom: 1px solid #eef0f3 !important; box-sizing: border-box; } .perm-config-item:last-child { border-bottom: 0 !important; } .perm-config-page-name { min-height: 30px; display: flex; align-items: center; color: #2b2f36; font-size: 13px; font-weight: 600; line-height: 1.4; } .perm-operation-list { display: flex; align-items: flex-start; flex-wrap: wrap; gap: 6px; min-height: 30px; } .perm-operation-list > label { min-height: 28px; display: inline-flex !important; align-items: center !important; gap: 4px !important; margin: 0 !important; padding: 3px 7px !important; box-sizing: border-box; } .perm-operation-list select { height: 23px; max-width: 126px; outline: none; } .perm-field-section { grid-column: 1 / -1; width: 100%; margin-top: 2px !important; padding: 8px 10px !important; border: 1px solid #e8ebef; border-radius: 7px !important; background: #fafbfc !important; box-sizing: border-box; } .perm-field-section-title { display: flex; align-items: center; justify-content: space-between; min-height: 24px; color: #626872 !important; font-size: 11px !important; font-weight: 600; cursor: pointer; user-select: none; } .role-field-all-label { display: inline-flex; align-items: center; gap: 3px; margin-left: 8px; color: #1677ff; font-size: 11px; white-space: nowrap; cursor: pointer; } .role-field-all-label input { margin: 0; cursor: pointer; } .permission-field-table { width: 100% !important; min-width: 620px; table-layout: fixed !important; border-collapse: collapse !important; background: #fff; } .permission-field-table th, .permission-field-table td { height: 34px; padding: 5px 8px !important; border: 1px solid #e1e5eb !important; vertical-align: middle; box-sizing: border-box; } .permission-field-table th:first-child, .permission-field-table td:first-child { width: 54%; text-align: left; } .permission-field-table th:not(:first-child), .permission-field-table td:not(:first-child) { width: 23%; text-align: center; } .permission-field-table select { width: 112px; height: 26px; padding: 1px 5px !important; box-sizing: border-box; } [id^="roleScopeModal-"] .data-table, [id^="permissionVersionModal-"] .data-table, [id^="permissionAuditModal-"] .data-table { min-width: 840px; } [id^="roleScopeModal-"] .data-table th, [id^="roleScopeModal-"] .data-table td, [id^="permissionVersionModal-"] .data-table th, [id^="permissionVersionModal-"] .data-table td, [id^="permissionAuditModal-"] .data-table th, [id^="permissionAuditModal-"] .data-table td { height: 40px; padding: 7px 9px; vertical-align: middle; } @media (max-width: 900px) { .perm-section-heading { align-items: flex-start; flex-direction: column; } .perm-role-grid, .perm-user-grid { grid-template-columns: 1fr; } .perm-user-card { grid-template-columns: 44px minmax(0, 1fr); } .perm-user-actions { grid-column: 1 / -1; justify-content: flex-end; } .perm-user-card > span:last-child { display: none; } .perm-config-item { grid-template-columns: 1fr; } .perm-field-section { grid-column: 1; overflow-x: auto; } .perm-dialog-toolbar { position: static; } } /* ============ 权限版本详情:中文化与可视化 ============ */ .perm-version-detail-dialog, .perm-version-compare-dialog { width: min(1180px, 96vw); max-height: 90vh; display: flex; flex-direction: column; overflow: hidden; border-radius: 10px; background: #f6f8fb; box-shadow: 0 14px 40px rgba(0, 0, 0, .18); } .perm-version-compare-dialog { width: min(1080px, 96vw); background: #fff; } .perm-version-detail-header { min-height: 62px; display: flex; align-items: center; justify-content: space-between; gap: 16px; flex: 0 0 auto; padding: 0 20px; border-bottom: 1px solid #e3e7ed; background: #fff; } .perm-version-title { display: flex; align-items: center; gap: 9px; color: #1f2329; font-size: 16px; } .perm-version-number { display: inline-flex; align-items: center; justify-content: center; min-width: 38px; height: 25px; padding: 0 8px; border-radius: 13px; background: #e6f4ff; color: #1677ff; font-size: 12px; font-weight: 700; } .perm-version-subtitle { margin-top: 4px; color: #8f959e; font-size: 12px; } .perm-version-detail-body { flex: 1 1 auto; min-height: 0; padding: 16px 18px 22px; overflow: auto; } .perm-version-notice { margin-bottom: 12px; padding: 9px 12px; border: 1px solid #ffe58f; border-radius: 6px; background: #fffbe6; color: #8c6d1f; font-size: 12px; line-height: 1.6; } .perm-version-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 24px; margin-bottom: 12px; padding: 10px 12px; border: 1px solid #e5e8ee; border-radius: 7px; background: #fff; color: #626872; font-size: 12px; } .perm-version-meta b { color: #2b2f36; font-weight: 600; } .perm-version-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(130px, 1fr)); gap: 10px; margin-bottom: 14px; } .perm-version-stat { min-height: 72px; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 1px solid #e5e8ee; border-radius: 8px; background: #fff; } .perm-version-stat b { font-size: 23px; line-height: 1.1; } .perm-version-stat span { margin-top: 6px; color: #7c838d; font-size: 12px; } .perm-version-stat.is-blue b { color: #1677ff; } .perm-version-stat.is-red b { color: #cf1322; } .perm-version-stat.is-purple b { color: #722ed1; } .perm-version-stat.is-orange b { color: #d46b08; } .perm-version-section { margin-top: 12px; padding: 14px; border: 1px solid #e3e7ed; border-radius: 8px; background: #fff; } .perm-version-section h4 { margin: 0 0 11px; padding-left: 9px; border-left: 3px solid #1677ff; color: #25282d; font-size: 14px; line-height: 18px; } .perm-version-page-block { display: grid; grid-template-columns: 190px minmax(0, 1fr); align-items: start; gap: 14px; padding: 10px 0; border-bottom: 1px solid #edf0f3; } .perm-version-page-block:last-child { border-bottom: 0; } .perm-version-page-title { min-width: 0; color: #30343b; font-size: 13px; font-weight: 600; } .perm-version-page-title span { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .perm-version-page-title small, .perm-version-code { display: block; margin-top: 3px; color: #a0a6af; font-family: Consolas, Menlo, monospace; font-size: 10px; font-weight: 400; } .perm-version-operation-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 6px 8px; } .perm-version-operation-item { min-height: 32px; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 8px; border: 1px solid #e8ebef; border-radius: 6px; background: #fafbfc; color: #4f555e; font-size: 12px; box-sizing: border-box; } .perm-status-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 48px; min-height: 22px; padding: 1px 7px; border: 1px solid transparent; border-radius: 11px; font-size: 11px; font-weight: 600; white-space: nowrap; box-sizing: border-box; } .perm-status-badge.is-allow { border-color: #b7eb8f; background: #f6ffed; color: #389e0d; } .perm-status-badge.is-deny { border-color: #ffa39e; background: #fff1f0; color: #cf1322; } .perm-status-badge.is-empty { border-color: #d9d9d9; background: #fafafa; color: #8c8c8c; } .perm-version-table-wrap { max-width: 100%; overflow: auto; } .perm-version-table-wrap .data-table { min-width: 720px; font-size: 12px; } .perm-version-table-wrap .data-table th, .perm-version-table-wrap .data-table td { height: 40px; padding: 7px 9px; vertical-align: middle; } .perm-version-empty { padding: 24px !important; color: #9aa0a9; text-align: center; font-size: 12px; } .perm-compare-category { display: inline-block; min-width: 62px; padding: 3px 7px; border-radius: 4px; background: #f0f5ff; color: #1d39c4; text-align: center; font-size: 11px; } .perm-compare-scope { display: flex; flex-direction: column; gap: 3px; min-width: 180px; } .perm-compare-scope b { color: #30343b; font-size: 12px; } .perm-compare-scope span { color: #8f959e; font-size: 10px; line-height: 1.5; } @media (max-width: 820px) { .perm-version-summary-grid { grid-template-columns: repeat(2, minmax(120px, 1fr)); } .perm-version-page-block { grid-template-columns: 1fr; } } /* ============ 操作日志 P0 审计查询中心 ============ */ .log-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(140px,1fr));gap:10px;margin-bottom:14px}.log-summary-card{min-height:78px;border:1px solid #e5e8ee;border-radius:9px;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:default}.log-summary-card:is(button){cursor:pointer}.log-summary-card b{font-size:24px;line-height:1.1}.log-summary-card span{margin-top:6px;color:#7f8791;font-size:12px}.log-summary-card.is-blue b{color:#1677ff}.log-summary-card.is-cyan b{color:#08979c}.log-summary-card.is-red b{color:#cf1322}.log-summary-card.is-purple b{color:#722ed1}.log-filter-panel{padding:12px 14px!important}.log-filter-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px}.log-filter-row:last-child{margin-bottom:0}.log-filter-row .form-input{height:32px;min-width:120px;box-sizing:border-box}.log-list-header{display:flex;align-items:center;justify-content:space-between}.log-list-header>div{display:flex;align-items:center;gap:10px}.log-list-header select{width:75px;height:30px}.log-table{min-width:1450px}.log-table th{white-space:nowrap}.log-time{white-space:nowrap}.log-sub{font-size:10px;color:#999;margin-top:2px}.log-detail-summary{max-width:360px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.log-risk{display:inline-flex;min-width:48px;justify-content:center;padding:2px 7px;border-radius:10px;font-size:11px;font-weight:600}.log-risk.red{background:#fff1f0;color:#cf1322;border:1px solid #ffa39e}.log-risk.orange{background:#fff7e6;color:#d46b08;border:1px solid #ffd591}.log-risk.grey{background:#fafafa;color:#777;border:1px solid #d9d9d9}.log-empty{padding:50px!important;text-align:center;color:#999}.log-detail-modal{width:760px;max-width:94vw;max-height:88vh;display:flex;flex-direction:column}.log-detail-modal .modal-body{overflow:auto}.log-detail-grid{display:grid;grid-template-columns:110px minmax(0,1fr) 110px minmax(0,1fr);border:1px solid #e5e8ee;border-radius:7px;overflow:hidden}.log-detail-grid label,.log-detail-grid>div{padding:9px 10px;border-bottom:1px solid #e5e8ee}.log-detail-grid label{background:#f7f8fa;color:#626872;font-size:12px;font-weight:600}.log-detail-grid>div{color:#25282d;font-size:13px}.log-detail-content{min-height:100px;max-height:320px;margin:8px 0 0;padding:12px;border:1px solid #e5e8ee;border-radius:7px;background:#fafbfc;white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:13px;line-height:1.7;overflow:auto}@media(max-width:850px){.log-summary-grid{grid-template-columns:repeat(2,1fr)}.log-detail-grid{grid-template-columns:100px minmax(0,1fr)}} .log-summary-card.is-orange b{color:#d46b08}.log-risk.green{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f} .log-governance-modal{width:1000px;max-width:95vw;max-height:90vh;display:flex;flex-direction:column}.log-governance-modal .modal-body{overflow:auto}.log-governance-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.log-governance-cards>div{padding:14px;border:1px solid #e5e8ee;border-radius:8px;text-align:center}.log-governance-cards b{display:block;font-size:23px;color:#1677ff}.log-governance-cards span{font-size:12px;color:#888}.log-governance-actions{display:flex;gap:8px;margin:14px 0}.log-governance-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.log-governance-grid>div{padding:10px;background:#fafafa;border:1px solid #eee;border-radius:6px}.log-report-bars{display:grid;grid-template-columns:1fr 1fr;gap:6px 16px}.log-report-bars>div{display:flex;justify-content:space-between;padding:6px 9px;background:#fafafa;border-radius:4px}.log-retention-note{margin-top:14px;padding:10px;background:#fffbe6;border:1px solid #ffe58f;border-radius:6px;color:#8c6d1f;font-size:12px} .log-readable-content{padding:13px 14px;border:1px solid #b7d6ff;border-radius:7px;background:#f0f7ff;color:#24476b;font-size:14px;line-height:1.7}.log-technical-details{margin-top:10px;padding:9px 11px;border:1px solid #e5e8ee;border-radius:7px;background:#fafbfc;color:#666;font-size:12px}.log-technical-details summary{cursor:pointer;color:#59636f;font-weight:600}.log-technical-details>div{margin-top:8px} .spot-application-image-picker{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:9px;border:1px dashed #d9d9d9;border-radius:7px;background:#fafbfc}.spot-application-image-picker input{padding:0;border:0;background:transparent}.spot-application-image-picker img{object-fit:cover;border:1px solid #e5e8ee}