/* static/css/vendor/vendor.css */ /* Vendor-specific styles */ /* Vendor Header */ .vendor-header { background: white; border-bottom: 1px solid var(--border-color); padding: 16px 24px; display: flex; justify-content: space-between; align-items: center; box-shadow: var(--shadow-sm); position: sticky; top: 0; z-index: 100; } .vendor-header h1 { font-size: var(--font-2xl); color: var(--text-primary); font-weight: 600; } .vendor-logo { display: flex; align-items: center; gap: var(--spacing-md); } .vendor-logo-img { width: 40px; height: 40px; border-radius: var(--radius-md); object-fit: cover; } .vendor-name { font-size: var(--font-xl); font-weight: 700; color: var(--primary-color); } /* Vendor Container */ .vendor-container { display: flex; min-height: calc(100vh - 64px); } /* Vendor Sidebar */ .vendor-sidebar { width: 260px; background: white; border-right: 1px solid var(--border-color); padding: var(--spacing-lg) 0; overflow-y: auto; } .vendor-sidebar-header { padding: 0 var(--spacing-lg) var(--spacing-lg); border-bottom: 1px solid var(--border-color); margin-bottom: var(--spacing-md); } .vendor-status { display: flex; gap: var(--spacing-sm); margin-top: var(--spacing-sm); } /* Vendor Content */ .vendor-content { flex: 1; padding: var(--spacing-lg); overflow-y: auto; background: var(--bg-secondary); } /* Vendor Dashboard Widgets */ .dashboard-widgets { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .widget { background: white; border-radius: var(--radius-lg); padding: var(--spacing-lg); box-shadow: var(--shadow-md); border: 1px solid var(--border-color); } .widget-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-md); } .widget-title { font-size: var(--font-lg); font-weight: 600; color: var(--text-primary); } .widget-icon { font-size: var(--font-2xl); color: var(--primary-color); } .widget-content { margin-bottom: var(--spacing-md); } .widget-footer { padding-top: var(--spacing-md); border-top: 1px solid var(--border-color); } .widget-stat { font-size: var(--font-4xl); font-weight: 700; color: var(--text-primary); line-height: 1; margin-bottom: var(--spacing-sm); } .widget-label { font-size: var(--font-sm); color: var(--text-muted); } /* Welcome Card */ .welcome-card { background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%); color: white; border-radius: var(--radius-lg); padding: var(--spacing-xl); box-shadow: var(--shadow-lg); margin-bottom: var(--spacing-xl); text-align: center; } .welcome-icon { font-size: 64px; margin-bottom: var(--spacing-lg); opacity: 0.9; } .welcome-card h2 { color: white; font-size: var(--font-3xl); margin-bottom: var(--spacing-md); } .welcome-card p { color: rgba(255, 255, 255, 0.9); font-size: var(--font-lg); margin-bottom: var(--spacing-sm); } /* Vendor Info Card */ .vendor-info-card { background: white; border-radius: var(--radius-lg); padding: var(--spacing-lg); margin-top: var(--spacing-lg); } .info-item { display: flex; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid var(--border-color); } .info-item:last-child { border-bottom: none; } .info-label { font-weight: 600; color: var(--text-secondary); font-size: var(--font-base); } .info-value { color: var(--text-primary); font-size: var(--font-base); text-align: right; } /* Coming Soon Badge */ .coming-soon { background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%); color: white; padding: 12px 24px; border-radius: var(--radius-lg); display: inline-block; font-weight: 600; margin-top: var(--spacing-lg); box-shadow: var(--shadow-md); } /* Product Grid */ .product-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .product-card { background: white; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-md); border: 1px solid var(--border-color); transition: all var(--transition-base); cursor: pointer; } .product-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .product-image { width: 100%; height: 200px; object-fit: cover; background: var(--gray-100); } .product-info { padding: var(--spacing-md); } .product-title { font-size: var(--font-lg); font-weight: 600; color: var(--text-primary); margin-bottom: var(--spacing-sm); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .product-price { font-size: var(--font-xl); font-weight: 700; color: var(--primary-color); margin-bottom: var(--spacing-sm); } .product-description { font-size: var(--font-sm); color: var(--text-muted); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .product-actions { padding: var(--spacing-md); border-top: 1px solid var(--border-color); display: flex; gap: var(--spacing-sm); } /* Order List */ .order-list { display: flex; flex-direction: column; gap: var(--spacing-md); } .order-card { background: white; border-radius: var(--radius-lg); padding: var(--spacing-lg); box-shadow: var(--shadow-md); border: 1px solid var(--border-color); transition: all var(--transition-base); } .order-card:hover { box-shadow: var(--shadow-lg); } .order-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-md); padding-bottom: var(--spacing-md); border-bottom: 1px solid var(--border-color); } .order-number { font-size: var(--font-lg); font-weight: 600; color: var(--text-primary); } .order-date { font-size: var(--font-sm); color: var(--text-muted); } .order-body { margin-bottom: var(--spacing-md); } .order-items { font-size: var(--font-sm); color: var(--text-secondary); } .order-footer { display: flex; justify-content: space-between; align-items: center; } .order-total { font-size: var(--font-xl); font-weight: 700; color: var(--text-primary); } /* Tabs */ .tabs { display: flex; gap: var(--spacing-sm); margin-bottom: var(--spacing-lg); border-bottom: 2px solid var(--border-color); } .tab { padding: 12px 24px; background: none; border: none; border-bottom: 2px solid transparent; cursor: pointer; font-size: var(--font-base); font-weight: 500; color: var(--text-secondary); transition: all var(--transition-base); margin-bottom: -2px; } .tab:hover { color: var(--primary-color); } .tab.active { color: var(--primary-color); border-bottom-color: var(--primary-color); } /* File Upload */ .upload-area { border: 2px dashed var(--border-color); border-radius: var(--radius-lg); padding: var(--spacing-xl); text-align: center; cursor: pointer; transition: all var(--transition-base); } .upload-area:hover, .upload-area.dragover { border-color: var(--primary-color); background: rgba(102, 126, 234, 0.05); } .upload-icon { font-size: 48px; color: var(--text-muted); margin-bottom: var(--spacing-md); } .upload-text { font-size: var(--font-base); color: var(--text-secondary); margin-bottom: var(--spacing-sm); } .upload-hint { font-size: var(--font-sm); color: var(--text-muted); } .file-list { margin-top: var(--spacing-md); } .file-item { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-md); background: var(--gray-50); border-radius: var(--radius-md); margin-bottom: var(--spacing-sm); } .file-name { font-size: var(--font-base); color: var(--text-primary); } .file-size { font-size: var(--font-sm); color: var(--text-muted); } .file-remove { background: none; border: none; color: var(--danger-color); cursor: pointer; font-size: var(--font-lg); padding: var(--spacing-sm); } /* Progress Bar */ .progress { width: 100%; height: 8px; background: var(--gray-200); border-radius: var(--radius-full); overflow: hidden; } .progress-bar { height: 100%; background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%); transition: width var(--transition-base); } .progress-text { text-align: center; font-size: var(--font-sm); color: var(--text-muted); margin-top: var(--spacing-sm); } /* Settings Form */ .settings-section { background: white; border-radius: var(--radius-lg); padding: var(--spacing-lg); box-shadow: var(--shadow-md); border: 1px solid var(--border-color); margin-bottom: var(--spacing-lg); } .settings-header { margin-bottom: var(--spacing-lg); padding-bottom: var(--spacing-md); border-bottom: 2px solid var(--border-color); } .settings-title { font-size: var(--font-xl); font-weight: 600; color: var(--text-primary); margin-bottom: var(--spacing-sm); } .settings-description { font-size: var(--font-sm); color: var(--text-muted); } .settings-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-lg); } /* Responsive Design */ @media (max-width: 1024px) { .vendor-sidebar { width: 220px; } .dashboard-widgets { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); } .product-grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } } @media (max-width: 768px) { .vendor-container { flex-direction: column; } .vendor-sidebar { width: 100%; border-right: none; border-bottom: 1px solid var(--border-color); padding: var(--spacing-md) 0; } .vendor-content { padding: var(--spacing-md); } .dashboard-widgets, .product-grid { grid-template-columns: 1fr; } .welcome-card { padding: var(--spacing-lg); } .welcome-icon { font-size: 48px; } .welcome-card h2 { font-size: var(--font-2xl); } .tabs { overflow-x: auto; -webkit-overflow-scrolling: touch; } .tab { white-space: nowrap; } .settings-row { grid-template-columns: 1fr; } } @media (max-width: 480px) { .vendor-header { padding: 12px 16px; } .vendor-header h1 { font-size: var(--font-lg); } .vendor-name { font-size: var(--font-lg); } .widget-stat { font-size: var(--font-3xl); } .settings-section { padding: var(--spacing-md); } .info-item { flex-direction: column; gap: var(--spacing-xs); } .info-value { text-align: left; } } /* Print Styles */ @media print { .vendor-sidebar, .vendor-header .header-right, .product-actions, .order-footer .btn { display: none; } .vendor-content { padding: 0; } .settings-section, .order-card, .product-card { box-shadow: none; border: 1px solid var(--border-color); break-inside: avoid; } }