/* ========== Admin Listing Review Page Styling ========== */ .review-page { min-height: calc(100vh - 120px); padding-bottom: 80px; } .review-header { margin-bottom: 20px; align-items: center; } .refresh-stamp { display: inline-flex; align-items: center; gap: 6px; color: #64748b; font-size: 13px; font-weight: 500; margin-right: 8px; } /* ========== Top Summary Metric Cards ========== */ .review-summary { display: grid; grid-template-columns: repeat(4, minmax(180px, 1fr)); gap: 16px; margin-bottom: 20px; } .summary-card { position: relative; min-width: 0; border: 1px solid #e2e8f0; border-radius: 12px; background: #ffffff; padding: 16px 20px; box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05); text-align: left; cursor: pointer; transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } .summary-card-inner { display: flex; align-items: center; gap: 16px; } .summary-card-icon { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: 12px; font-size: 22px; flex-shrink: 0; transition: transform 0.25s ease; } .summary-card-text { min-width: 0; display: flex; flex-direction: column; } .summary-card-text span { color: #64748b; font-size: 13px; font-weight: 600; line-height: 1.2; } .summary-card-text strong { margin: 4px 0 2px; color: #0f172a; font-size: 26px; font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums; } .summary-card-text small { color: #94a3b8; font-size: 12px; font-weight: 500; } /* Thematic colors for cards */ .summary-card--all .summary-card-icon { background: #eff6ff; color: #2563eb; } .summary-card--external .summary-card-icon { background: #f5f3ff; color: #7c3aed; } .summary-card--warning .summary-card-icon { background: #fffbeb; color: #d97706; } .summary-card--danger .summary-card-icon { background: #fef2f2; color: #dc2626; } .summary-card:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08); } .summary-card:hover .summary-card-icon { transform: scale(1.08); } /* Active Filter States */ .summary-card--all.active { border-color: #2563eb; background: #f0f7ff; box-shadow: 0 0 0 1px #2563eb, 0 6px 20px rgba(37, 99, 235, 0.15); } .summary-card--external.active { border-color: #7c3aed; background: #faf5ff; box-shadow: 0 0 0 1px #7c3aed, 0 6px 20px rgba(124, 58, 237, 0.15); } .summary-card--warning.active { border-color: #d97706; background: #fffdf5; box-shadow: 0 0 0 1px #d97706, 0 6px 20px rgba(217, 119, 6, 0.15); } .summary-card--danger.active { border-color: #dc2626; background: #fff5f5; box-shadow: 0 0 0 1px #dc2626, 0 6px 20px rgba(220, 38, 38, 0.15); } /* ========== Review Workbench Split Layout ========== */ .review-workbench { display: grid; grid-template-columns: 380px minmax(0, 1fr); gap: 20px; align-items: start; } .review-queue, .review-detail, .review-panel, .review-hero-panel { min-width: 0; } /* ========== Left: Queue Sidebar ========== */ .review-queue { position: sticky; top: 16px; height: calc(100vh - 120px); display: flex; flex-direction: column; border: 1px solid #e2e8f0; border-radius: 12px; background: #ffffff; padding: 16px; box-shadow: 0 1px 4px rgba(15, 23, 42, 0.05); } .queue-toolbar { display: flex; flex-direction: column; gap: 10px; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #f1f5f9; } .queue-filter-row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } .queue-select { width: 100%; } .queue-count-strip { display: flex; align-items: center; justify-content: space-between; color: #64748b; font-size: 12px; font-weight: 600; } .shortcut-tip { color: #94a3b8; font-size: 11px; } .queue-list { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; padding-right: 4px; } /* Queue Card Item */ .queue-item { position: relative; width: 100%; min-height: 104px; flex-shrink: 0; display: flex; border: 1px solid #e2e8f0; border-radius: 10px; background: #ffffff; padding: 0; text-align: left; cursor: pointer; overflow: hidden; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); } .item-accent-bar { width: 4px; background: #94a3b8; flex-shrink: 0; transition: width 0.2s ease, background 0.2s ease; } .queue-item.has-default-shot .item-accent-bar { background: #f59e0b; } .queue-item.has-deposit-risk .item-accent-bar { background: #f97316; } .queue-item.has-ban .item-accent-bar { background: #ef4444; } .queue-card-content { flex: 1; min-width: 0; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; } .queue-top-line { display: flex; align-items: center; justify-content: space-between; } .queue-code { color: #64748b; font-size: 12px; font-weight: 700; font-family: monospace; } .queue-coin { display: inline-flex; align-items: center; gap: 4px; color: #b45309; background: #fef3c7; padding: 2px 7px; border-radius: 6px; font-size: 12px; font-weight: 800; } .queue-main-row { display: flex; align-items: flex-start; gap: 10px; } .queue-thumb { position: relative; width: 52px; height: 52px; border-radius: 8px; overflow: hidden; background: #f1f5f9; flex-shrink: 0; border: 1px solid #e2e8f0; } .queue-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; } .thumb-warning-badge { position: absolute; bottom: 0; left: 0; right: 0; background: rgba(217, 119, 6, 0.9); color: #ffffff; font-size: 9px; font-weight: 700; text-align: center; line-height: 13px; } .queue-main-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; } .queue-title { color: #0f172a; font-size: 13px; font-weight: 700; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .queue-specs { display: flex; flex-wrap: wrap; gap: 4px; } .spec-pill { padding: 1px 5px; border-radius: 4px; background: #f1f5f9; color: #475569; font-size: 11px; font-weight: 600; line-height: 16px; white-space: nowrap; } .queue-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-top: 6px; border-top: 1px solid #f8fafc; } .queue-price-block { display: flex; align-items: baseline; gap: 6px; } .queue-price { color: #2563eb; font-size: 14px; font-weight: 800; } .queue-deposit { color: #64748b; font-size: 11px; } .queue-tags { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 4px; } /* Hover & Active Queue Item */ .queue-item:hover { border-color: #93c5fd; background: #f8fafc; transform: translateX(2px); } .queue-item.active { border-color: #2563eb; background: #f0f7ff; box-shadow: 0 0 0 1px #2563eb, 0 4px 16px rgba(37, 99, 235, 0.12); } .queue-item.active .item-accent-bar { background: #2563eb; width: 6px; } .queue-item.active .queue-title { color: #1d4ed8; } /* ========== Right: Audit Workbench Main Area ========== */ .review-detail { display: flex; flex-direction: column; gap: 18px; } .review-hero-panel, .review-panel { border: 1px solid #e2e8f0; border-radius: 12px; background: #ffffff; padding: 20px 24px; box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04); } /* Hero Panel */ .hero-top-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; } .hero-meta-strip { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; } .hero-code-badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 6px; background: #f1f5f9; color: #334155; font-size: 13px; font-weight: 700; font-family: monospace; cursor: pointer; transition: all 0.2s; } .hero-code-badge:hover { background: #e2e8f0; color: #0f172a; } .copy-icon { font-size: 13px; } .hero-submit-time { display: inline-flex; align-items: center; gap: 5px; color: #64748b; font-size: 12px; } .hero-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .action-link { text-decoration: none; } .btn-approve { font-weight: 700; box-shadow: 0 2px 8px rgba(37, 99, 235, 0.25); } .hero-title { margin: 0 0 14px; color: #0f172a; font-size: 22px; font-weight: 800; line-height: 1.35; } .risk-tag-strip { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; } /* Panel Heading Component */ .panel-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid #f1f5f9; } .heading-left { display: flex; align-items: center; gap: 10px; } .heading-icon { font-size: 20px; color: #2563eb; } .heading-left h3 { margin: 0; color: #0f172a; font-size: 16px; font-weight: 800; line-height: 1.2; } .heading-left p { margin: 3px 0 0; color: #64748b; font-size: 12px; } /* ========== Interactive Pricing Pipeline ========== */ .pricing-pipeline { display: grid; grid-template-columns: 1fr auto 1fr auto 1.15fr 1fr; align-items: center; gap: 12px; } .pipeline-card { display: flex; flex-direction: column; gap: 6px; min-height: 130px; border: 1px solid #e2e8f0; border-radius: 10px; background: #f8fafc; padding: 14px 16px; } .pipeline-card .card-badge { display: inline-block; align-self: flex-start; padding: 2px 8px; border-radius: 4px; background: #e2e8f0; color: #475569; font-size: 11px; font-weight: 700; } .pipeline-card .card-value { color: #0f172a; font-size: 24px; font-weight: 800; line-height: 1.15; } .pipeline-card .card-meta { color: #475569; font-size: 12px; font-weight: 600; } .pipeline-card .card-breakdown { margin-top: auto; display: flex; align-items: center; justify-content: space-between; gap: 6px; color: #64748b; font-size: 11px; font-weight: 500; padding-top: 6px; border-top: 1px solid rgba(0, 0, 0, 0.05); } .pipeline-card--rule { border-color: #fed7aa; background: #fff7ed; } .pipeline-card--rule .card-badge { background: #ffedd5; color: #c2410c; } .pipeline-card--rule .markup-value { color: #ea580c; } .admin-reason { color: #ea580c; font-weight: 700; } .pipeline-card--buyer { border: 2px solid #2563eb; background: linear-gradient(135deg, #eff6ff 0%, #e0f2fe 100%); box-shadow: 0 4px 16px rgba(37, 99, 235, 0.12); } .pipeline-card--buyer .card-badge--highlight { background: #2563eb; color: #ffffff; } .pipeline-card--buyer .card-value--highlight { color: #1d4ed8; font-size: 26px; } .pipeline-card--deposit { border-color: #e0e7ff; background: #f5f7ff; } .pipeline-card--deposit .card-badge { background: #ede9fe; color: #6d28d9; } .pipeline-arrow { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; color: #94a3b8; font-size: 18px; } .arrow-label { font-size: 10px; font-weight: 700; color: #94a3b8; } .warning-text { color: #dc2626 !important; font-weight: 700; } /* ========== Dual Columns: Core Specs Grid ========== */ .review-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; } .spec-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .spec-item { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; border-radius: 8px; background: #f8fafc; border: 1px solid #f1f5f9; } .spec-item--full { grid-column: 1 / -1; } .spec-label { color: #64748b; font-size: 11px; font-weight: 700; } .spec-val { color: #0f172a; font-size: 13px; font-weight: 700; } .rank-badge { display: inline-block; align-self: flex-start; padding: 2px 8px; border-radius: 4px; background: #eff6ff; color: #2563eb; font-size: 12px; font-weight: 800; } .ban-val { display: flex; align-items: center; gap: 6px; font-weight: 700; } .safe-icon { color: #16a34a; font-size: 16px; } .ban-icon { color: #dc2626; font-size: 16px; } .spec-item.ban-warning { border-color: #fca5a5; background: #fef2f2; } .spec-item.ban-warning .spec-val { color: #b91c1c; } .copyable-val { display: flex; align-items: center; justify-content: space-between; } /* ========== Inventory & Consumables ========== */ .consumable-total-badge { display: flex; align-items: center; gap: 8px; padding: 4px 10px; border-radius: 6px; background: #f1f5f9; color: #475569; font-size: 12px; } .consumable-total-badge strong { color: #2563eb; font-size: 14px; font-weight: 800; } .heavy-gear-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; } .gear-card { display: flex; align-items: center; gap: 14px; padding: 14px; border-radius: 10px; border: 1px solid #e2e8f0; background: #f8fafc; } .gear-icon { font-size: 28px; } .gear-info { display: flex; flex-direction: column; } .gear-info span { color: #64748b; font-size: 12px; font-weight: 600; } .gear-info strong { color: #0f172a; font-size: 20px; font-weight: 900; } .gear-info em { color: #64748b; font-size: 12px; font-style: normal; font-weight: normal; } .resource-pill-grid { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; } .resource-chip { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 6px; background: #f1f5f9; font-size: 12px; } .res-name { color: #334155; font-weight: 600; } .res-qty { color: #2563eb; font-weight: 800; } .res-mode { color: #64748b; } .skins-section { padding-top: 12px; border-top: 1px solid #f1f5f9; } .skins-header { margin-bottom: 8px; color: #475569; font-size: 12px; font-weight: 700; } .skin-chips-wrapper { display: flex; flex-wrap: wrap; gap: 6px; } .skin-chip { display: inline-flex; padding: 4px 10px; border-radius: 6px; background: #ecfdf5; border: 1px solid #a7f3d0; color: #047857; font-size: 12px; font-weight: 600; } .empty-skins-tip { margin: 0; color: #94a3b8; font-size: 12px; } /* ========== Verification Checklist & Screenshot Gallery ========== */ .verification-checklist { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; } .check-item { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-radius: 8px; border: 1px solid #e2e8f0; background: #f8fafc; font-size: 12px; } .check-icon { font-size: 16px; flex-shrink: 0; } .check-label { flex: 1; min-width: 0; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .check-status-tag { font-size: 11px; font-weight: 600; } .check-item--provided { border-color: #bbf7d0; background: #f0fdf4; color: #15803d; } .check-item--provided .check-icon { color: #16a34a; } .check-item--default { border-color: #fde68a; background: #fffbeb; color: #b45309; } .check-item--default .check-icon { color: #d97706; } .check-item--missing { border-color: #e2e8f0; background: #f8fafc; color: #94a3b8; } .check-item--missing .check-icon { color: #cbd5e1; } .screenshot-gallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 14px; } .screenshot-card { position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; border-radius: 10px; overflow: hidden; border: 1px solid #e2e8f0; background: #f8fafc; cursor: pointer; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); } .screenshot-card:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12); border-color: #93c5fd; } .image-wrapper { position: relative; width: 100%; height: 100%; } .image-wrapper img { display: block; width: 100%; height: 100%; object-fit: cover; } .default-badge { position: absolute; top: 8px; left: 8px; display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: 4px; background: rgba(217, 119, 6, 0.95); backdrop-filter: blur(4px); color: #ffffff; font-size: 11px; font-weight: 700; z-index: 2; } .category-tag { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient( to top, rgba(15, 23, 42, 0.9) 0%, rgba(15, 23, 42, 0.4) 70%, transparent 100% ); color: #ffffff; font-size: 12px; font-weight: 700; text-align: center; padding: 14px 6px 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pointer-events: none; z-index: 2; } .image-overlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; padding: 8px; background: rgba(15, 23, 42, 0.65); backdrop-filter: blur(3px); opacity: 0; transition: opacity 0.2s ease; z-index: 3; } .screenshot-card:hover .image-overlay { opacity: 1; } .image-overlay .el-button { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); transition: transform 0.15s ease; } .image-overlay .el-button:hover { transform: scale(1.1); } .empty-warning { display: flex; align-items: center; gap: 10px; border-radius: 8px; background: #fff7ed; border: 1px solid #fed7aa; padding: 16px; color: #c2410c; font-weight: 700; font-size: 13px; } /* ========== Floating Sticky Action Dock ========== */ .floating-dock { position: fixed; bottom: 24px; right: 32px; z-index: 900; display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 10px 18px; border-radius: 14px; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(16px); border: 1px solid rgba(226, 232, 240, 0.9); box-shadow: 0 10px 30px rgba(15, 23, 42, 0.15), 0 2px 8px rgba(15, 23, 42, 0.08); animation: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1); } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .dock-info { display: flex; align-items: center; gap: 10px; } .dock-code { padding: 2px 6px; border-radius: 4px; background: #f1f5f9; color: #475569; font-size: 12px; font-weight: 700; font-family: monospace; } .dock-title { max-width: 220px; color: #0f172a; font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .dock-price { color: #2563eb; font-size: 14px; font-weight: 800; } .dock-risk-tag { color: #dc2626; background: #fee2e2; padding: 2px 6px; border-radius: 4px; font-size: 11px; font-weight: 700; } .dock-actions { display: flex; align-items: center; gap: 8px; } .btn-approve-dock { font-weight: 700; box-shadow: 0 2px 10px rgba(37, 99, 235, 0.3); } /* ========== Dialogs Styling ========== */ .dialog-item-header { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; padding-bottom: 10px; border-bottom: 1px solid #f1f5f9; } .dialog-code { padding: 2px 8px; border-radius: 4px; background: #f1f5f9; color: #475569; font-size: 12px; font-weight: 700; font-family: monospace; } .reject-quick-tags { margin-bottom: 14px; } .quick-tags-title { margin: 0 0 8px; color: #64748b; font-size: 12px; font-weight: 600; } .quick-tags-list { display: flex; flex-wrap: wrap; gap: 8px; } .quick-reason-pill { display: inline-flex; align-items: center; gap: 4px; border: 1px solid #cbd5e1; border-radius: 6px; background: #ffffff; padding: 5px 10px; color: #334155; font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; } .quick-reason-pill:hover { border-color: #2563eb; color: #2563eb; } .quick-reason-pill.selected { border-color: #2563eb; background: #eff6ff; color: #2563eb; } .reject-tip { display: flex; align-items: center; gap: 6px; margin-top: 10px; color: #64748b; font-size: 12px; } /* Price Adjust Modal */ .adjust-preview-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 16px; } .preview-box { display: flex; flex-direction: column; gap: 4px; padding: 12px; border-radius: 8px; background: #f8fafc; border: 1px solid #e2e8f0; } .preview-box--highlight { border-color: #93c5fd; background: #eff6ff; } .box-label { color: #64748b; font-size: 11px; font-weight: 700; } .box-val { color: #0f172a; font-size: 18px; font-weight: 800; } .highlight-val { color: #2563eb; } .preview-box small { color: #64748b; font-size: 11px; } .adjust-mode-section { margin-bottom: 14px; } .adjust-mode { width: 100%; } .adjust-mode :deep(.el-radio-button) { width: 50%; } .adjust-mode :deep(.el-radio-button__inner) { width: 100%; font-weight: 700; } .adjust-fields-box { display: flex; flex-direction: column; gap: 14px; } .adjust-field { display: flex; flex-direction: column; gap: 6px; } .field-title { color: #475569; font-size: 12px; font-weight: 700; } .adjust-field :deep(.el-input-number) { width: 100%; } /* Evidence Dialog */ .evidence-header-bar { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid #f1f5f9; } .evidence-item-info { display: flex; align-items: center; gap: 8px; } .evidence-code { padding: 2px 8px; border-radius: 4px; background: #f1f5f9; color: #475569; font-size: 12px; font-weight: 700; font-family: monospace; } .dialog-gallery { max-height: 560px; overflow-y: auto; padding-right: 4px; } /* Shortcuts Cheatsheet */ .shortcuts-guide-table { display: flex; flex-direction: column; gap: 10px; } .shortcut-row { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-radius: 8px; background: #f8fafc; font-size: 13px; } .key-badge { display: inline-block; padding: 2px 8px; border: 1px solid #cbd5e1; border-bottom-width: 2px; border-radius: 4px; background: #ffffff; color: #0f172a; font-family: monospace; font-size: 12px; font-weight: 700; } .key-desc { margin-left: auto; color: #475569; font-weight: 600; } /* Empty Workbench */ .empty-detail { min-height: 420px; display: grid; place-items: center; border-radius: 12px; background: #ffffff; } /* ========== Responsive Breakpoints ========== */ @media (max-width: 1360px) { .review-workbench { grid-template-columns: 340px minmax(0, 1fr); } .pricing-pipeline { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .pipeline-arrow { display: none; } } @media (max-width: 1100px) { .review-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); } .review-workbench { grid-template-columns: 1fr; } .review-queue { position: static; height: auto; max-height: 480px; } .floating-dock { right: 16px; left: 16px; justify-content: space-between; } .dock-title { max-width: 140px; } } @media (max-width: 768px) { .review-summary { grid-template-columns: 1fr; } .pricing-pipeline { grid-template-columns: 1fr; } .review-grid { grid-template-columns: 1fr; } .heavy-gear-grid { grid-template-columns: 1fr; } .verification-checklist { grid-template-columns: repeat(2, minmax(0, 1fr)); } .hero-top-row { flex-direction: column; } .hero-actions { width: 100%; justify-content: flex-start; } .floating-dock { display: none; } }