diff --git a/src/pages/nearle/dispatch/ProfitabilitySection.css b/src/pages/nearle/dispatch/ProfitabilitySection.css index d4b0da1..cf3f907 100644 --- a/src/pages/nearle/dispatch/ProfitabilitySection.css +++ b/src/pages/nearle/dispatch/ProfitabilitySection.css @@ -1,74 +1,111 @@ -/* ═══════════════════════════════════════════════════════════════ - ProfitabilitySection.css — Premium Rider Profitability Redesign - Aligned with NearlExpress Brand purple and Design Tokens - ═══════════════════════════════════════════════════════════════ */ +/* ╔════════════════════════════════════════════════════════════════════════════╗ + ║ PROFITABILITY DASHBOARD CSS — Enterprise SaaS Production Architecture ║ + ║ Inspired by: Linear, Stripe, Ramp, Notion, Uber Fleet, Vercel, Retool ║ + ║ ARCHITECTURE: Zero overflow, Zero clipping, Pixel-perfect responsive ║ + ╚════════════════════════════════════════════════════════════════════════════╝ */ -.profitability-dashboard { - /* Brand color tokens & design guidelines */ - --brand-primary: #662582; - --brand-light: #9255ab; - --brand-lighter: #e8d9ef; - --brand-dark: #4d1c61; - --brand-darker: #260e30; +/* ════════════════════════════════════════════════════════════════════════════ + GLOBAL RESET & NORMALIZATION + ════════════════════════════════════════════════════════════════════════════ */ - /* Semantic tokens */ - --profit-green: #10b981; - --profit-green-light: #ecfdf5; - --profit-green-border: #a7f3d0; - --loss-red: #ef4444; - --loss-red-light: #fef2f2; - --loss-red-border: #fca5a5; - - --surface-primary: #ffffff; - --surface-secondary: #f8fafc; - --surface-tertiary: #f1f5f9; - - --text-primary: #0f172a; - --text-secondary: #475569; - --text-muted: #94a3b8; - - --border-light: #e2e8f0; - --border-medium: #cbd5e1; - - --accent-purple: #662582; - --accent-purple-light: rgba(102, 37, 130, 0.08); - --accent-purple-ring: rgba(102, 37, 130, 0.25); - - --accent-blue: #0ea5e9; - --accent-blue-light: #f0f9ff; - --accent-amber: #f59e0b; - --accent-amber-light: #fffbeb; - - --radius-small: 8px; - --radius-medium: 12px; - --radius-large: 16px; - --radius-pill: 999px; - - --shadow-soft: 0 14px 40px rgba(15, 23, 42, 0.08); - --shadow-md: 0 8px 24px rgba(15, 23, 42, 0.06); - --shadow-pop: 0 18px 50px rgba(15, 23, 42, 0.15); - - --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1); - --transition-normal: 0.25s cubic-bezier(0.4, 0, 0.2, 1); +*, +*::before, +*::after { + box-sizing: border-box; } -/* ── Root Container ──────────────────────────────────────────── */ +html, +body { + margin: 0; + padding: 0; + overflow-x: hidden; + font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + background: #F6F8FC; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ════════════════════════════════════════════════════════════════════════════ + DESIGN TOKENS & CUSTOM PROPERTIES + ════════════════════════════════════════════════════════════════════════════ */ + +:root { + /* ─ Enterprise Color Palette ─ */ + --bg-base: #F6F8FC; + --bg-card: #FFFFFF; + --primary: #6C4CF1; + --primary-light: #F3F0FF; + --primary-dark: #5844D4; + --success: #12B76A; + --success-light: #ECFDF5; + --success-border: #ABEFC6; + --danger: #F04438; + --danger-light: #FEF3F2; + --danger-border: #FECDCA; + --warning: #F79009; + --warning-light: #FEF3C7; + --text-primary: #101828; + --text-secondary: #667085; + --text-tertiary: #98A2B3; + --border: #EAECF0; + --border-light: #F0F1F3; + + /* ─ Spacing System: 4px base scale ─ */ + --space-xs: 4px; + --space-sm: 8px; + --space-md: 12px; + --space-lg: 16px; + --space-xl: 20px; + --space-2xl: 24px; + --space-3xl: 32px; + --space-4xl: 40px; + + /* ─ Border Radius ─ */ + --radius-sm: 12px; + --radius-md: 14px; + --radius-lg: 18px; + --radius-pill: 9999px; + + /* ─ Enterprise Shadow System ─ */ + --shadow-xs: 0 1px 2px rgba(16, 24, 40, 0.04); + --shadow-sm: 0 1px 3px rgba(16, 24, 40, 0.1), 0 1px 2px rgba(16, 24, 40, 0.06); + --shadow-md: 0 4px 12px rgba(16, 24, 40, 0.06); + --shadow-lg: 0 8px 24px rgba(16, 24, 40, 0.08); + + /* ─ Transitions ─ */ + --duration-fast: 150ms; + --duration-base: 200ms; + --easing: cubic-bezier(0.4, 0, 0.2, 1); +} + +/* ════════════════════════════════════════════════════════════════════════════ + ROOT DASHBOARD CONTAINER + Fixed architecture: NO overflow, NO clipping, NO width:100vw + ════════════════════════════════════════════════════════════════════════════ */ + .profitability-dashboard { - flex: 1; - min-height: 0; + width: 100%; + max-width: 100%; + overflow-x: hidden; + overflow-y: auto; + display: flex; flex-direction: column; - gap: 16px; - overflow-y: auto; - overflow-x: hidden; - padding: 24px 32px; - background: var(--surface-secondary); - font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; - -webkit-font-smoothing: antialiased; + gap: var(--space-2xl); + + padding: var(--space-2xl); + + background: var(--bg-base); + font-size: 14px; + line-height: 1.5; + color: var(--text-primary); + + min-height: 100vh; } +/* Scrollbar styling */ .profitability-dashboard::-webkit-scrollbar { - width: 6px; + width: 8px; } .profitability-dashboard::-webkit-scrollbar-track { @@ -76,98 +113,168 @@ } .profitability-dashboard::-webkit-scrollbar-thumb { - background: rgba(102, 37, 130, 0.2); + background: var(--border); border-radius: var(--radius-pill); + transition: background var(--duration-base) var(--easing); } .profitability-dashboard::-webkit-scrollbar-thumb:hover { - background: var(--brand-light); + background: var(--text-tertiary); } -/* ── Dashboard Header ────────────────────────────────────────── */ +/* ════════════════════════════════════════════════════════════════════════════ + HEADER SECTION — Premium Top Header + ════════════════════════════════════════════════════════════════════════════ */ + .profitability-header { + width: 100%; + max-width: 100%; + display: flex; + flex-wrap: wrap; align-items: center; justify-content: space-between; - gap: 16px; - padding: 24px; - background: linear-gradient(135deg, rgba(102, 37, 130, 0.04) 0%, rgba(146, 85, 171, 0.04) 100%); - border: 1px solid rgba(102, 37, 130, 0.1); - border-radius: var(--radius-large); - box-shadow: var(--shadow-soft); - flex-wrap: wrap; + gap: var(--space-2xl); + + padding: var(--space-2xl); + + background: linear-gradient(135deg, rgba(108, 76, 241, 0.04) 0%, rgba(108, 76, 241, 0.01) 100%); + border: 1px solid var(--border-light); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-xs); + + min-width: 0; } .profitability-header-left { display: flex; align-items: center; - gap: 16px; + gap: var(--space-2xl); min-width: 0; + flex: 1 1 auto; } .profitability-header-icon { width: 48px; height: 48px; - border-radius: var(--radius-medium); - background: linear-gradient(135deg, var(--brand-primary), var(--brand-light)); + min-width: 48px; + + border-radius: var(--radius-md); + background: linear-gradient(135deg, var(--primary), #7C58E8); + display: flex; align-items: center; justify-content: center; - color: #fff; + + color: white; + font-size: 24px; + + box-shadow: var(--shadow-md); + flex-shrink: 0; - box-shadow: 0 4px 14px rgba(102, 37, 130, 0.3); +} + +.profitability-header-content { + display: flex; + flex-direction: column; + gap: var(--space-sm); + min-width: 0; +} + +.profitability-header-content h2 { + font-size: 24px; + font-weight: 700; + color: var(--text-primary); + margin: 0; + letter-spacing: -0.02em; + line-height: 1.2; } .profitability-header-title { - font-size: 18px; - font-weight: 800; + font-size: 24px; + font-weight: 700; color: var(--text-primary); - letter-spacing: -0.025em; - line-height: 1.2; margin: 0; + letter-spacing: -0.02em; + line-height: 1.2; } .profitability-header-subtitle { font-size: 13px; font-weight: 500; color: var(--text-secondary); - line-height: 1.4; - margin: 4px 0 0; display: flex; align-items: center; - gap: 0; + gap: var(--space-lg); flex-wrap: wrap; + margin: 0; +} + +.profitability-header-stat { + display: flex; + align-items: center; + gap: 4px; + white-space: nowrap; +} + +.profitability-header-stat-value { + font-weight: 600; + color: var(--text-primary); +} + +.profitability-header-stat-value.profit { + color: var(--success); +} + +.profitability-header-stat-value.loss { + color: var(--danger); +} + +.header-divider { + width: 1px; + height: 20px; + background: var(--border); } .profitability-header-dot { - display: inline-block; width: 4px; height: 4px; border-radius: 50%; - background: var(--border-medium); - margin: 0 8px; - flex-shrink: 0; + background: var(--text-tertiary); + display: inline-block; + margin: 0 6px; } -/* ── KPI Chips (Daily / Slot Profit) ─────────────────────────── */ .profitability-kpi-group { display: flex; - gap: 12px; + gap: var(--space-md); + flex-wrap: wrap; flex-shrink: 0; } .profitability-kpi-chip { - display: flex; + display: inline-flex; align-items: center; - gap: 10px; - padding: 10px 18px; - border-radius: var(--radius-medium); + gap: var(--space-md); + padding: var(--space-md) var(--space-lg); + border-radius: var(--radius-md); border: 1px solid; - font-size: 13px; - font-weight: 700; - line-height: 1.2; - transition: transform var(--transition-fast), box-shadow var(--transition-fast); - background: var(--surface-primary); + font-size: 12px; + font-weight: 600; + white-space: nowrap; + transition: all var(--duration-base) var(--easing); +} + +.profitability-kpi-chip--profit { + background: var(--success-light); + border-color: var(--success-border); + color: var(--success); +} + +.profitability-kpi-chip--loss { + background: var(--danger-light); + border-color: var(--danger-border); + color: var(--danger); } .profitability-kpi-chip:hover { @@ -175,22 +282,11 @@ box-shadow: var(--shadow-md); } -.profitability-kpi-chip--profit { - background: var(--profit-green-light); - border-color: var(--profit-green-border); - color: var(--profit-green); -} - -.profitability-kpi-chip--loss { - background: var(--loss-red-light); - border-color: var(--loss-red-border); - color: var(--loss-red); -} - .profitability-kpi-chip-icon { + font-size: 16px; display: flex; align-items: center; - font-size: 18px; + flex-shrink: 0; } .profitability-kpi-chip-content { @@ -213,364 +309,585 @@ letter-spacing: -0.01em; } -/* ── Interactive Controls Bar ────────────────────────────────── */ -.profitability-controls-bar { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 8px 4px; - flex-wrap: wrap; +/* ════════════════════════════════════════════════════════════════════════════ + KPI CARDS GRID — 4-column responsive, pixel-perfect + ════════════════════════════════════════════════════════════════════════════ */ + +.profitability-summary-row { + width: 100%; + max-width: 100%; + + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: var(--space-xl); + + margin-bottom: var(--space-lg); } -/* Search input container */ +/* ════════════════════════════════════════════════════════════════════════════ + INTERACTIVE ENHANCEMENTS — Premium micro-interactions + ════════════════════════════════════════════════════════════════════════════ */ + +/* Enhanced KPI card interactions */ +.profitability-summary-card { + position: relative; + min-width: 0; + max-width: 100%; + overflow: hidden; + + display: flex; + flex-direction: column; + gap: var(--space-md); + + padding: var(--space-2xl); + + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-xs); + + transition: all var(--duration-base) var(--easing); +} + +.profitability-summary-card::after { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(255, 255, 255, 0.4) 0%, transparent 100%); + opacity: 0; + pointer-events: none; + border-radius: var(--radius-lg); + transition: opacity var(--duration-base) var(--easing); +} + +.profitability-summary-card:hover::after { + opacity: 0.1; +} + +/* Enhanced rider card interactions */ +.rider-card-header { + display: flex; + align-items: center; + gap: var(--space-lg); + + padding: var(--space-lg); + + cursor: pointer; + user-select: none; + + transition: all var(--duration-fast) var(--easing); + position: relative; +} + +.rider-card-header::before { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(108, 76, 241, 0) 0%, rgba(108, 76, 241, 0.02) 100%); + opacity: 0; + pointer-events: none; + border-radius: var(--radius-lg); + transition: opacity var(--duration-fast) var(--easing); +} + +.rider-card-header:hover::before { + opacity: 1; +} + +.rider-card-header:hover { + background: linear-gradient(135deg, rgba(108, 76, 241, 0.02) 0%, transparent 100%); +} + +/* Smooth expand/collapse animation */ +@keyframes expandCardIn { + from { + opacity: 0; + transform: scaleY(0.95); + } + to { + opacity: 1; + transform: scaleY(1); + } +} + +.rider-detail-panel { + animation: expandCardIn 0.2s var(--easing); + transform-origin: top; +} + +.profitability-summary-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + background: var(--border); + transition: all var(--duration-base) var(--easing); +} + +.profitability-summary-card--primary::before { + background: linear-gradient(90deg, var(--primary), #7C58E8); +} + +.profitability-summary-card--success::before { + background: linear-gradient(90deg, var(--success), #13C296); + height: 4px; +} + +.profitability-summary-card--danger::before { + background: linear-gradient(90deg, var(--danger), #F66358); + height: 4px; +} + +.profitability-summary-card--loss::before { + background: linear-gradient(90deg, var(--warning), #F79009); + height: 4px; +} + +.profitability-summary-card--profit::before { + background: linear-gradient(90deg, var(--success), #13C296); + height: 4px; +} + +.profitability-summary-card--success { + border-top-color: var(--success-light); +} + +.profitability-summary-card--danger { + border-top-color: var(--danger-light); +} + +.profitability-summary-card--loss { + border-top-color: var(--warning-light); +} + +.profitability-summary-card--profit { + border-top-color: var(--success-light); +} + +.profitability-summary-card:hover { + border-color: var(--primary); + box-shadow: var(--shadow-lg); + transform: translateY(-2px); +} + +.profitability-summary-card--success:hover { + border-color: var(--success); + box-shadow: 0 8px 24px rgba(18, 183, 106, 0.1); +} + +.profitability-summary-card--danger:hover { + border-color: var(--danger); + box-shadow: 0 8px 24px rgba(240, 68, 56, 0.1); +} + +.profitability-summary-card.card-profit:hover { + border-color: var(--success); + box-shadow: 0 8px 24px rgba(18, 183, 106, 0.1); +} + +.profitability-summary-card.card-loss:hover { + border-color: var(--danger); + box-shadow: 0 8px 24px rgba(240, 68, 56, 0.1); +} + +.profitability-summary-card:hover::before { + height: 5px; +} + +.profitability-summary-label { + font-size: 11px; + font-weight: 700; + color: var(--text-tertiary); + text-transform: uppercase; + letter-spacing: 0.08em; + margin: 0; +} + +.profitability-summary-value { + font-size: clamp(28px, 3vw, 42px); + font-weight: 800; + color: var(--text-primary); + letter-spacing: -0.04em; + line-height: 1; + margin: 0; + overflow-wrap: break-word; +} + +.profitability-summary-value--success { + color: var(--success); + text-shadow: 0 0 12px rgba(18, 183, 106, 0.12); +} + +.profitability-summary-value--danger { + color: var(--danger); + text-shadow: 0 0 12px rgba(240, 68, 56, 0.10); +} + +.profitability-summary-detail { + font-size: 12px; + font-weight: 500; + color: var(--text-secondary); + margin: 0; + margin-top: var(--space-xs); +} + +.profitability-summary-detail.margin-positive { + color: var(--success) !important; + text-shadow: 0 0 12px rgba(18, 183, 106, 0.12); + font-weight: 600; +} + +.profitability-summary-detail.margin-negative { + color: var(--danger) !important; + text-shadow: 0 0 12px rgba(240, 68, 56, 0.1); + font-weight: 600; +} + +/* ════════════════════════════════════════════════════════════════════════════ + CONTROLS BAR — Search, Filter, Sort + ════════════════════════════════════════════════════════════════════════════ */ + +.profitability-controls-bar { + width: 100%; + max-width: 100%; + + display: flex; + align-items: center; + flex-wrap: wrap; + gap: var(--space-lg); + + padding: var(--space-lg); + + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-xs); + + min-width: 0; +} + +/* Search Input */ .profitability-search-wrapper { position: relative; - flex: 1; - min-width: 240px; - max-width: 380px; + flex: 1 1 280px; + min-width: 0; + max-width: 100%; } .profitability-search-icon { position: absolute; - left: 14px; + left: var(--space-md); top: 50%; transform: translateY(-50%); - color: var(--text-muted); - font-size: 18px; + color: var(--text-tertiary); + font-size: 16px; pointer-events: none; - transition: color var(--transition-fast); + transition: color var(--duration-fast) var(--easing); + flex-shrink: 0; } .profitability-search-input { width: 100%; - height: 42px; - padding: 8px 16px 8px 42px; - border-radius: var(--radius-pill); - border: 1.5px solid rgba(102, 37, 130, 0.15); - background: var(--surface-primary); + height: 40px; + + padding: 0 var(--space-md) 0 36px; + + border: 1px solid var(--border); + border-radius: var(--radius-md); + + background: var(--bg-card); color: var(--text-primary); - font-size: 13.5px; - font-weight: 500; - transition: border-color var(--transition-fast), box-shadow var(--transition-fast); + font-size: 13px; + font-family: inherit; + outline: none; + transition: all var(--duration-fast) var(--easing); + + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .profitability-search-input::placeholder { - color: var(--text-muted); + color: var(--text-tertiary); } .profitability-search-input:focus { - border-color: var(--brand-primary); - box-shadow: 0 0 0 3px var(--accent-purple-ring); + border-color: var(--primary); + box-shadow: 0 0 0 3px rgba(108, 76, 241, 0.1); } -.profitability-search-input:focus+.profitability-search-icon { - color: var(--brand-primary); +.profitability-search-input:focus ~ .profitability-search-icon { + color: var(--primary); } -/* Tabs filters wrapper */ +/* Filter Tabs */ .profitability-filter-tabs { display: flex; - flex-direction: row; - align-items: center; - gap: 4px; - background: var(--surface-primary); - padding: 4px; - border-radius: var(--radius-pill); + gap: var(--space-xs); + padding: var(--space-xs); + background: var(--bg-base); + border-radius: var(--radius-md); border: 1px solid var(--border-light); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02); - flex-wrap: nowrap; } .profitability-tab-btn { display: inline-flex; align-items: center; justify-content: center; - gap: 6px; - padding: 8px 16px; - border-radius: var(--radius-pill); + gap: var(--space-xs); + + padding: 6px 12px; + border: none; + border-radius: var(--radius-sm); + background: transparent; color: var(--text-secondary); - font-size: 12.5px; + font-size: 12px; font-weight: 600; + font-family: inherit; + cursor: pointer; - transition: background-color var(--transition-fast), color var(--transition-fast); + transition: all var(--duration-fast) var(--easing); white-space: nowrap; - flex-shrink: 0; } .profitability-tab-btn:hover { - color: var(--brand-primary); - background-color: var(--surface-tertiary); + background: var(--bg-card); + color: var(--primary); } .profitability-tab-btn.tab-active { - background-color: var(--brand-primary); - color: #fff; - box-shadow: 0 4px 10px rgba(102, 37, 130, 0.2); + background: var(--primary); + color: white; + box-shadow: var(--shadow-sm); } .profitability-tab-count { font-size: 11px; font-weight: 700; - padding: 1.5px 6px; + padding: 2px 6px; border-radius: var(--radius-pill); - background: rgba(0, 0, 0, 0.06); - color: var(--text-secondary); + background: rgba(0, 0, 0, 0.1); + opacity: 0.8; } .profitability-tab-btn.tab-active .profitability-tab-count { - background: rgba(255, 255, 255, 0.25); - color: #fff; + background: rgba(255, 255, 255, 0.3); } -/* Sort wrap */ +/* Sort Wrapper */ .profitability-sort-wrapper { display: flex; align-items: center; - gap: 8px; + gap: var(--space-md); + margin-left: auto; + flex-shrink: 0; } .profitability-sort-label { - font-size: 12.5px; + font-size: 12px; font-weight: 600; color: var(--text-secondary); + white-space: nowrap; + display: none; } .profitability-sort-select { - height: 42px; - padding: 8px 32px 8px 16px; - border-radius: var(--radius-pill); - border: 1.5px solid var(--border-light); - background: var(--surface-primary); + height: 40px; + padding: 0 32px 0 var(--space-md); + + border: 1px solid var(--border); + border-radius: var(--radius-md); + + background: var(--bg-card); color: var(--text-primary); font-size: 13px; font-weight: 600; + font-family: inherit; + cursor: pointer; outline: none; appearance: none; -webkit-appearance: none; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right 12px center; - background-size: 14px; - transition: border-color var(--transition-fast), box-shadow var(--transition-fast); -} -.profitability-sort-select:focus { - border-color: var(--brand-primary); - box-shadow: 0 0 0 3px var(--accent-purple-ring); + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 8px center; + background-size: 16px; + + transition: all var(--duration-fast) var(--easing); + padding-right: 32px; } .profitability-sort-select:hover { - border-color: var(--border-medium); + border-color: var(--primary); } -/* ── Summary Statistics Row ──────────────────────────────────── */ -.profitability-summary-row { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 16px; - margin-bottom: 8px; +.profitability-sort-select:focus { + border-color: var(--primary); + box-shadow: 0 0 0 3px rgba(108, 76, 241, 0.1); } -.profitability-summary-card { - display: flex; - flex-direction: column; - gap: 6px; - padding: 18px 20px; - background: var(--surface-primary); - border: 1px solid var(--border-light); - border-radius: var(--radius-large); - box-shadow: var(--shadow-md); - position: relative; - overflow: hidden; - transition: border-color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast); -} +/* ════════════════════════════════════════════════════════════════════════════ + RIDERS LIST SECTION + ════════════════════════════════════════════════════════════════════════════ */ -.profitability-summary-card::after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 3px; - background: var(--border-medium); -} - -.profitability-summary-card:hover { - transform: translateY(-2px); - border-color: rgba(102, 37, 130, 0.15); - box-shadow: var(--shadow-soft); -} - -/* KPI Custom Top Lines */ -.profitability-summary-card--primary::after { - background: linear-gradient(90deg, var(--brand-primary), var(--brand-light)); -} - -.profitability-summary-card--profit::after { - background: linear-gradient(90deg, #34d399, var(--profit-green)); -} - -.profitability-summary-card--loss::after { - background: linear-gradient(90deg, #f87171, var(--loss-red)); -} - -.profitability-summary-label { - font-size: 11px; - font-weight: 700; - color: var(--text-secondary); - text-transform: uppercase; - letter-spacing: 0.08em; -} - -.profitability-summary-value { - font-size: 24px; - font-weight: 800; - color: var(--text-primary); - letter-spacing: -0.03em; - line-height: 1.1; -} - -.profitability-summary-value--profit { - color: var(--profit-green); -} - -.profitability-summary-value--loss { - color: var(--loss-red); -} - -.profitability-summary-detail { - font-size: 11.5px; - font-weight: 500; - color: var(--text-muted); - margin-top: 2px; -} - -/* ── Rider Feed ──────────────────────────────────────────────── */ .rider-profitability-feed { + width: 100%; + max-width: 100%; + display: flex; flex-direction: column; - gap: 12px; + gap: var(--space-md); + flex: 1; + min-width: 0; } .rider-feed-heading { font-size: 11px; font-weight: 700; - color: var(--text-muted); + color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.08em; - padding: 4px 4px 0px; + padding: 0 var(--space-md); } -/* ── Empty State ─────────────────────────────────────────────── */ .profitability-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; - gap: 12px; - padding: 64px 24px; - color: var(--text-muted); + gap: var(--space-lg); + + padding: 60px var(--space-xl); + text-align: center; - background: var(--surface-primary); - border-radius: var(--radius-large); - border: 1px dashed var(--border-medium); - box-shadow: var(--shadow-md); + + background: var(--bg-card); + border: 1px dashed var(--border); + border-radius: var(--radius-lg); } .profitability-empty-state svg { - color: var(--brand-primary); - opacity: 0.5; + font-size: 48px; + color: var(--primary); + opacity: 0.3; } .profitability-empty-message { - font-size: 14.5px; + font-size: 14px; font-weight: 600; color: var(--text-secondary); margin: 0; } -/* ── Rider Card ──────────────────────────────────────────────── */ +/* ════════════════════════════════════════════════════════════════════════════ + RIDER CARD — Modern Enterprise SaaS Card + ════════════════════════════════════════════════════════════════════════════ */ + .rider-profitability-card { - background: var(--surface-primary); - border: 1px solid var(--border-light); - border-radius: var(--radius-large); - box-shadow: var(--shadow-md); + width: 100%; + max-width: 100%; + min-width: 0; + + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-xs); + overflow: hidden; - transition: border-color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast); + + transition: all var(--duration-base) var(--easing); } .rider-profitability-card:hover { - box-shadow: var(--shadow-soft); - transform: translateY(-1px); + border-color: var(--primary); + box-shadow: var(--shadow-md); } .rider-profitability-card--profitable { - border-left: 4px solid var(--profit-green); + border-left: 4px solid var(--success); + background: linear-gradient(135deg, rgba(18, 183, 106, 0.02) 0%, transparent 100%); } .rider-profitability-card--unprofitable { - border-left: 4px solid var(--loss-red); + border-left: 4px solid var(--danger); + background: linear-gradient(135deg, rgba(240, 68, 56, 0.02) 0%, transparent 100%); } .rider-profitability-card--selected { - border-color: var(--brand-primary); - box-shadow: 0 0 0 2px var(--accent-purple-ring), var(--shadow-soft); + border-color: var(--primary); + box-shadow: 0 0 0 2px var(--primary-light), var(--shadow-md); } -/* ── Rider Card Header (Clickable) ───────────────────────────── */ .rider-card-header { display: flex; align-items: center; - gap: 16px; - padding: 16px 24px; + gap: var(--space-lg); + + padding: var(--space-lg); + cursor: pointer; user-select: none; - transition: background var(--transition-fast); + + transition: all var(--duration-fast) var(--easing); + position: relative; +} + +.rider-card-header::before { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(108, 76, 241, 0) 0%, rgba(108, 76, 241, 0.02) 100%); + opacity: 0; + pointer-events: none; + border-radius: var(--radius-lg); + transition: opacity var(--duration-fast) var(--easing); +} + +.rider-card-header:hover::before { + opacity: 1; } .rider-card-header:hover { - background: var(--surface-secondary); + background: linear-gradient(135deg, rgba(108, 76, 241, 0.02) 0%, transparent 100%); } -.rider-card-header:focus-visible { - outline: 2px solid var(--brand-primary); - outline-offset: -2px; -} - -/* Rider avatar badge */ .rider-avatar { - width: 42px; - height: 42px; - border-radius: var(--radius-medium); - background: linear-gradient(135deg, var(--brand-lighter), rgba(146, 85, 171, 0.25)); - color: var(--brand-primary); + width: 40px; + height: 40px; + min-width: 40px; + + border-radius: var(--radius-md); + background: linear-gradient(135deg, var(--primary-light), rgba(108, 76, 241, 0.15)); + color: var(--primary); + display: flex; align-items: center; justify-content: center; + font-size: 14px; - font-weight: 800; + font-weight: 700; letter-spacing: 0.02em; + flex-shrink: 0; - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); } -/* Rider name + subtitle */ .rider-identity { display: flex; flex-direction: column; - gap: 3px; + gap: 2px; min-width: 0; flex: 1; } .rider-name { - font-size: 14.5px; + font-size: 14px; font-weight: 700; color: var(--text-primary); white-space: nowrap; @@ -582,6 +899,9 @@ font-size: 12px; font-weight: 500; color: var(--text-secondary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .rider-order-summary-separator { @@ -589,13 +909,12 @@ margin: 0 6px; } -/* ── Metrics Row (Revenue / Cost / Net) ──────────────────────── */ .rider-metrics-row { display: flex; align-items: center; - gap: 24px; + gap: var(--space-lg); + margin-right: var(--space-lg); flex-shrink: 0; - margin-right: 16px; } .rider-metric { @@ -603,14 +922,12 @@ flex-direction: column; align-items: flex-end; gap: 2px; - width: 80px; - flex-shrink: 0; } .rider-metric-label { - font-size: 9.5px; + font-size: 11px; font-weight: 700; - color: var(--text-muted); + color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.06em; } @@ -619,30 +936,42 @@ font-size: 14px; font-weight: 800; letter-spacing: -0.01em; -} - -.rider-metric-amount--revenue { color: var(--text-primary); } +.rider-metric-amount--success { + color: var(--success); + text-shadow: 0 0 8px rgba(18, 183, 106, 0.08); +} + +.rider-metric-amount--danger { + color: var(--danger); + text-shadow: 0 0 8px rgba(240, 68, 56, 0.08); +} + +.rider-metric-amount--revenue { + color: var(--success); +} + .rider-metric-amount--cost { - color: var(--text-secondary); + color: var(--warning); } .rider-metric-amount--net-profit { - color: var(--profit-green); + color: var(--success); + text-shadow: 0 0 8px rgba(18, 183, 106, 0.08); } .rider-metric-amount--net-loss { - color: var(--loss-red); + color: var(--danger); + text-shadow: 0 0 8px rgba(240, 68, 56, 0.08); } -/* Net profit column with margin bar */ .rider-net-profit-column { display: flex; flex-direction: column; align-items: flex-end; - gap: 4px; + gap: 6px; width: 100px; flex-shrink: 0; } @@ -650,63 +979,70 @@ .rider-margin-bar { width: 100%; height: 4px; - background: var(--surface-tertiary); + background: var(--bg-base); border-radius: var(--radius-pill); overflow: hidden; - align-self: stretch; } .rider-margin-bar-fill { height: 100%; border-radius: var(--radius-pill); - transition: width var(--transition-normal); + transition: width var(--duration-base) var(--easing); } .rider-margin-bar-fill--profit { - background: linear-gradient(90deg, #34d399, var(--profit-green)); + background: linear-gradient(90deg, var(--success), #13C296); + box-shadow: 0 0 8px rgba(18, 183, 106, 0.2); } -.rider-margin-bar-fill--loss { - background: linear-gradient(90deg, #fca5a5, var(--loss-red)); +.rider-margin-bar-fill--danger { + background: linear-gradient(90deg, var(--danger), #F66358); + box-shadow: 0 0 8px rgba(240, 68, 56, 0.2); } -/* Expand/Collapse toggle chevron */ .rider-expand-toggle { display: flex; align-items: center; justify-content: center; - width: 28px; - height: 28px; - border-radius: var(--radius-small); - color: var(--text-muted); - transition: transform var(--transition-normal), color var(--transition-fast), background var(--transition-fast); + width: 32px; + height: 32px; + + border-radius: var(--radius-sm); + + color: var(--text-tertiary); + font-size: 20px; + flex-shrink: 0; + + transition: all var(--duration-fast) var(--easing); } .rider-card-header:hover .rider-expand-toggle { - color: var(--brand-primary); - background: var(--accent-purple-light); + color: var(--primary); + background: var(--primary-light); } .rider-expand-toggle--open { transform: rotate(180deg); - color: var(--brand-primary) !important; - background: var(--accent-purple-light) !important; + color: var(--primary); + background: var(--primary-light); } -/* ── Rider Detail (Expanded Content) ─────────────────────────── */ +/* ════════════════════════════════════════════════════════════════════════════ + RIDER DETAIL PANEL — Expandable cost breakdown + ════════════════════════════════════════════════════════════════════════════ */ + .rider-detail-panel { - border-top: 1px solid var(--border-light); - background: var(--surface-secondary); - animation: rider-detail-slide-in 0.2s cubic-bezier(0.16, 1, 0.3, 1); + border-top: 1px solid var(--border); + background: var(--bg-base); + animation: slideDown 0.2s var(--easing); } -@keyframes rider-detail-slide-in { +@keyframes slideDown { from { opacity: 0; transform: translateY(-8px); } - to { opacity: 1; transform: translateY(0); @@ -714,62 +1050,68 @@ } .rider-detail-inner { - padding: 16px 20px; + padding: var(--space-lg); } -/* Cost Breakdown Tiles */ .cost-breakdown-grid { display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 12px; - margin-bottom: 16px; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: var(--space-lg); + margin-bottom: var(--space-xl); } .cost-tile { display: flex; - align-items: flex-start; - gap: 12px; - padding: 14px; - background: var(--surface-primary); - border: 1px solid var(--border-light); - border-radius: var(--radius-medium); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02); - transition: border-color var(--transition-fast), box-shadow var(--transition-fast); + gap: var(--space-md); + padding: var(--space-lg); + + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-md); + + transition: all var(--duration-base) var(--easing); } .cost-tile:hover { - border-color: rgba(102, 37, 130, 0.15); + border-color: var(--primary); box-shadow: var(--shadow-md); + background: linear-gradient(135deg, var(--primary-light), transparent); } .cost-tile-icon { - width: 32px; - height: 32px; - border-radius: var(--radius-small); + width: 40px; + height: 40px; + min-width: 40px; + + border-radius: var(--radius-md); + display: flex; align-items: center; justify-content: center; + + font-size: 18px; + flex-shrink: 0; } .cost-tile-icon--fixed { - background: var(--accent-blue-light); - color: var(--accent-blue); + background: #EEF2FF; + color: #5B6CF1; } .cost-tile-icon--variable { - background: var(--accent-amber-light); - color: var(--accent-amber); + background: #FEF3C7; + color: #D97706; } .cost-tile-icon--profit { - background: var(--profit-green-light); - color: var(--profit-green); + background: var(--success-light); + color: var(--success); } .cost-tile-icon--loss { - background: var(--loss-red-light); - color: var(--loss-red); + background: var(--danger-light); + color: var(--danger); } .cost-tile-content { @@ -780,41 +1122,51 @@ } .cost-tile-label { - font-size: 10px; + font-size: 11px; font-weight: 700; - color: var(--text-muted); + color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.06em; } .cost-tile-amount { - font-size: 15px; + font-size: 18px; font-weight: 800; color: var(--text-primary); - letter-spacing: -0.01em; + letter-spacing: -0.02em; + overflow-wrap: break-word; } .cost-tile-amount--profit { - color: var(--profit-green); + color: var(--success); + text-shadow: 0 0 12px rgba(18, 183, 106, 0.12); } .cost-tile-amount--loss { - color: var(--loss-red); + color: var(--danger); + text-shadow: 0 0 12px rgba(240, 68, 56, 0.10); } .cost-tile-footnote { - font-size: 11px; + font-size: 12px; font-weight: 500; color: var(--text-secondary); - margin-top: 1px; + margin-top: 4px; } -/* ── Revenue Breakdown Section ───────────────────────────────── */ +/* ════════════════════════════════════════════════════════════════════════════ + ORDERS TABLE — Revenue breakdown + ════════════════════════════════════════════════════════════════════════════ */ + .revenue-breakdown { - border: 1px solid var(--border-light); - border-radius: var(--radius-medium); - background: var(--surface-primary); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02); + width: 100%; + max-width: 100%; + + border: 1px solid var(--border); + border-radius: var(--radius-md); + + background: var(--bg-card); + overflow: hidden; } @@ -822,77 +1174,75 @@ display: flex; align-items: center; justify-content: space-between; - padding: 12px 16px; - background: var(--surface-secondary); - border-bottom: 1px solid var(--border-light); + + padding: var(--space-lg); + + background: var(--bg-base); + border-bottom: 1px solid var(--border); } .revenue-breakdown-title { display: flex; align-items: center; - gap: 8px; - font-size: 13px; + gap: var(--space-md); + + font-size: 14px; font-weight: 700; color: var(--text-primary); } -.revenue-breakdown-title svg { - color: var(--brand-primary); - font-size: 16px; -} - .revenue-breakdown-count { font-size: 11px; font-weight: 700; - color: var(--brand-primary); - background: var(--accent-purple-light); - padding: 3px 10px; + color: var(--primary); + background: var(--primary-light); + padding: 4px 10px; border-radius: var(--radius-pill); } -/* ── Orders Table ────────────────────────────────────────────── */ .orders-table-container { + width: 100%; + max-width: 100%; overflow-x: auto; } .orders-table { width: 100%; border-collapse: collapse; - font-size: 13px; } .orders-table thead th { - padding: 10px 14px; + padding: var(--space-md) var(--space-lg); text-align: left; - font-size: 10px; + font-size: 11px; font-weight: 700; - color: var(--text-muted); + color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.08em; - background: var(--surface-secondary); - border-bottom: 1px solid var(--border-light); + background: var(--bg-base); + border-bottom: 2px solid var(--border); white-space: nowrap; } .orders-table tbody tr { - transition: background var(--transition-fast); + transition: background var(--duration-fast) var(--easing); + border-bottom: 1px solid var(--border-light); } .orders-table tbody tr:hover { - background: rgba(102, 37, 130, 0.02); + background: var(--bg-base); } -.orders-table tbody td { - padding: 12px 14px; - border-bottom: 1px solid var(--divider); - vertical-align: middle; -} - -.orders-table tbody tr:last-child td { +.orders-table tbody tr:last-child { border-bottom: none; } -/* ── Customer Cell ───────────────────────────────────────────── */ +.orders-table tbody td { + padding: var(--space-md) var(--space-lg); + vertical-align: middle; + font-size: 13px; +} + .customer-name { font-size: 13px; font-weight: 700; @@ -900,11 +1250,11 @@ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - max-width: 180px; + max-width: 200px; } .customer-phone { - font-size: 11px; + font-size: 12px; font-weight: 500; color: var(--text-secondary); margin-top: 2px; @@ -916,26 +1266,20 @@ gap: 4px; font-size: 11px; font-weight: 500; - color: var(--brand-primary); + color: var(--primary); margin-top: 2px; } -.customer-location svg { - flex-shrink: 0; -} - -/* ── Status Pill ─────────────────────────────────────────────── */ .order-status-pill { display: inline-flex; align-items: center; - gap: 5px; + gap: 6px; padding: 4px 10px; - border-radius: var(--radius-pill); + border-radius: var(--radius-sm); border: 1px solid; font-size: 11px; font-weight: 700; letter-spacing: 0.02em; - line-height: 1; white-space: nowrap; } @@ -947,7 +1291,6 @@ flex-shrink: 0; } -/* ── Data Cells (Distance / Revenue) ─────────────────────────── */ .distance-value { font-size: 13px; font-weight: 700; @@ -957,115 +1300,295 @@ .distance-unit { font-size: 11px; font-weight: 500; - color: var(--text-muted); + color: var(--text-tertiary); margin-left: 2px; } .revenue-amount { - font-size: 13.5px; + font-size: 13px; font-weight: 700; - color: var(--profit-green); + color: var(--success); + text-shadow: 0 0 8px rgba(18, 183, 106, 0.08); } -/* ── Orders Empty State ──────────────────────────────────────── */ .orders-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; - gap: 8px; - padding: 32px 16px; - color: var(--text-muted); + gap: var(--space-md); + + padding: 40px var(--space-xl); + + color: var(--text-tertiary); } .orders-empty-state svg { - color: var(--brand-primary); - opacity: 0.4; + font-size: 32px; + color: var(--primary); + opacity: 0.3; } .orders-empty-message { font-size: 13px; font-weight: 600; color: var(--text-secondary); - margin: 0; } -/* ── Responsive tweaks ───────────────────────────────────────── */ -@media (max-width: 1024px) { - .profitability-summary-row { - grid-template-columns: repeat(2, 1fr); - gap: 12px; - } +/* ════════════════════════════════════════════════════════════════════════════ + PROFIT/LOSS COLOR STATES — Universal fintech UX pattern + Green = Profit, Red = Loss, Instant visual scanability + ════════════════════════════════════════════════════════════════════════════ */ + +.net-positive { + color: var(--success) !important; + text-shadow: 0 0 12px rgba(18, 183, 106, 0.12); } -@media (max-width: 768px) { - .profitability-header { - padding: 18px; - } - - .profitability-controls-bar { - flex-direction: column; - align-items: stretch; - gap: 12px; - } - - .profitability-search-wrapper { - max-width: none; - } - - .profitability-filter-tabs { - justify-content: space-between; - } - - .profitability-tab-btn { - flex: 1; - justify-content: center; - } - - .profitability-sort-wrapper { - justify-content: space-between; - } - - .profitability-sort-select { - flex: 1; - max-width: 220px; - } +.net-negative { + color: var(--danger) !important; + text-shadow: 0 0 12px rgba(240, 68, 56, 0.1); } -@media (max-width: 640px) { +.margin-positive { + color: var(--success) !important; + text-shadow: 0 0 12px rgba(18, 183, 106, 0.12); +} + +.margin-negative { + color: var(--danger) !important; + text-shadow: 0 0 12px rgba(240, 68, 56, 0.1); +} + +.card-profit { + border-top-color: var(--success) !important; +} + +.card-profit::before { + background: linear-gradient(90deg, var(--success), #13C296) !important; +} + +.card-loss { + border-top-color: var(--danger) !important; +} + +.card-loss::before { + background: linear-gradient(90deg, var(--danger), #F66358) !important; +} + +/* ════════════════════════════════════════════════════════════════════════════ + RESPONSIVE DESIGN — Mobile First + Breakpoints + ════════════════════════════════════════════════════════════════════════════ */ + +/* DESKTOP: 1440px - Full 4-column layout */ +@media (min-width: 1440px) { .profitability-dashboard { - padding: 12px; - gap: 12px; + padding: var(--space-2xl); + } +} + +/* LAPTOP: 1280px - 4-column still works */ +@media (max-width: 1440px) { + .profitability-summary-row { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +/* TABLET: 1024px - Transition to 2 columns */ +@media (max-width: 1200px) { + .profitability-summary-row { + grid-template-columns: repeat(2, minmax(0, 1fr)); } .profitability-header { flex-direction: column; - align-items: stretch; - gap: 16px; + align-items: flex-start; + } + + .profitability-kpi-group { + width: 100%; + } +} + +/* TABLET: 768px - Mobile optimized */ +@media (max-width: 768px) { + .profitability-dashboard { + padding: var(--space-lg); + gap: var(--space-lg); + } + + .profitability-header { + flex-direction: column; + gap: var(--space-lg); + align-items: flex-start; + } + + .profitability-header-left { + width: 100%; } .profitability-kpi-group { width: 100%; flex-direction: column; - gap: 8px; - } - - .profitability-kpi-chip { - flex: 1; - justify-content: flex-start; } .profitability-summary-row { grid-template-columns: 1fr; - gap: 8px; } - .cost-breakdown-grid { - grid-template-columns: 1fr; - gap: 8px; + .profitability-controls-bar { + flex-direction: column; + } + + .profitability-search-wrapper { + max-width: 100%; + width: 100%; + flex: 1 1 auto; + } + + .profitability-filter-tabs { + width: 100%; + justify-content: space-between; + } + + .profitability-sort-wrapper { + margin-left: 0; + width: 100%; } .rider-metrics-row { display: none; } -} \ No newline at end of file + + .cost-breakdown-grid { + grid-template-columns: 1fr; + } + + .orders-table { + font-size: 12px; + } + + .orders-table thead th, + .orders-table tbody td { + padding: var(--space-sm) var(--space-md); + } +} + +/* MOBILE: 640px - Stacked layout */ +@media (max-width: 640px) { + .profitability-dashboard { + padding: var(--space-lg); + gap: var(--space-lg); + } + + .profitability-header-icon { + width: 40px; + height: 40px; + font-size: 18px; + } + + .profitability-header-content h2 { + font-size: 20px; + } + + .profitability-header-subtitle { + font-size: 12px; + } + + .profitability-kpi-chip { + padding: var(--space-sm) var(--space-md); + font-size: 11px; + } + + .profitability-kpi-chip-amount { + font-size: 14px; + } + + .profitability-summary-card { + padding: var(--space-lg); + } + + .profitability-summary-value { + font-size: 24px; + } + + .profitability-controls-bar { + gap: var(--space-md); + padding: var(--space-md); + } + + .profitability-search-wrapper { + min-width: auto; + width: 100%; + flex: 1 1 auto; + } + + .profitability-search-input { + height: 36px; + font-size: 12px; + } + + .rider-card-header { + gap: var(--space-md); + padding: var(--space-md); + } + + .rider-metrics-row { + display: none; + } + + .cost-breakdown-grid { + grid-template-columns: 1fr; + gap: var(--space-md); + } + + .cost-tile { + padding: var(--space-md); + } +} + +/* EXTRA SMALL: 480px - Minimal layout */ +@media (max-width: 480px) { + .profitability-dashboard { + padding: var(--space-md); + gap: var(--space-md); + } + + .profitability-header { + padding: var(--space-md); + } + + .profitability-header-content h2 { + font-size: 18px; + } + + .profitability-kpi-group { + flex-direction: column; + gap: var(--space-sm); + } + + .profitability-kpi-chip { + width: 100%; + } + + .rider-identity { + flex: 1; + } + + .rider-expand-toggle { + width: 28px; + height: 28px; + } + + .profitability-summary-value { + font-size: 22px; + } + + .profitability-controls-bar { + padding: var(--space-md); + } + + .profitability-sort-label { + display: none; + } +} diff --git a/src/pages/nearle/dispatch/ProfitabilitySection.js b/src/pages/nearle/dispatch/ProfitabilitySection.js index a5a1ce5..ca80736 100644 --- a/src/pages/nearle/dispatch/ProfitabilitySection.js +++ b/src/pages/nearle/dispatch/ProfitabilitySection.js @@ -484,17 +484,15 @@ export default function ProfitabilitySection({ riders = [], totalDailyProfit = 0 {rupees(slotCost)} Fixed + variable -