feat: add daily manual price review workflow
This commit is contained in:
@@ -225,6 +225,7 @@ button { color: inherit; }
|
||||
.trace-live-state { color: var(--muted); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 10px; font-weight: 700; white-space: nowrap; }
|
||||
.trace-live-state.is-live, .trace-live-state.is-running { color: #175cd3; }
|
||||
.trace-live-state.is-complete, .trace-live-state.is-success { color: #087a55; }
|
||||
.trace-live-state.is-review { color: #9a4b0a; }
|
||||
.trace-live-state.is-error { color: #b42318; }
|
||||
.trace-refresh-button { min-height: 30px; padding: 0 9px; border: 1px solid var(--line-strong); border-radius: 4px; color: #344054; background: #fff; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 10px; font-weight: 700; cursor: pointer; }
|
||||
.trace-refresh-button:hover:not(:disabled) { border-color: #98a2b3; background: #f9fafb; }
|
||||
@@ -306,8 +307,86 @@ tbody tr:hover td { background: #fafcff; }
|
||||
.status-chip::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
|
||||
.status-chip.success { color: #087a55; background: #e9f8f2; }
|
||||
.status-chip.running { color: #175cd3; background: #eaf1ff; }
|
||||
.status-chip.review { color: #9a4b0a; background: #fff3e3; }
|
||||
.status-chip.failed { color: #b42318; background: #feeceb; }
|
||||
.status-chip.current { box-shadow: inset 0 0 0 1px #9de0c7; }
|
||||
.job-review-link { display: inline-flex; padding: 0; flex-direction: column; align-items: flex-start; gap: 5px; border: 0; color: #9a4b0a; background: transparent; text-align: left; cursor: pointer; }
|
||||
.job-review-progress { font-size: 9px; font-weight: 800; text-decoration: underline; text-decoration-color: #efcf8c; text-underline-offset: 3px; }
|
||||
.job-review-link:hover { color: #7a3b08; }
|
||||
.job-review-link:hover .job-review-progress { text-decoration-color: currentColor; }
|
||||
.job-review-link:hover .status-chip { box-shadow: inset 0 0 0 1px #e5ba63; }
|
||||
|
||||
.daily-price-review-panel { margin: 0 0 20px; overflow: hidden; scroll-margin-top: 18px; border: 1px solid #f1d49c; border-radius: 16px; background: #fff; box-shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 14px 32px rgba(146, 93, 13, .08); }
|
||||
.daily-price-review-panel:focus-visible { outline: 3px solid rgba(168, 90, 10, .2); outline-offset: 3px; }
|
||||
.daily-price-review-header { padding: 18px 20px 16px; display: flex; align-items: center; justify-content: space-between; gap: 24px; border-bottom: 1px solid #f5e4bf; background: linear-gradient(100deg, #fffaf0, #fff); }
|
||||
.daily-price-review-title-block { min-width: 0; flex: 1 1 auto; display: grid; gap: 5px; }
|
||||
.daily-price-review-title-block .step-label { color: #a85a0a; }
|
||||
.daily-price-review-title-block h2 { margin: 0; color: #3c280e; font-size: 18px; letter-spacing: -.025em; }
|
||||
.daily-price-review-title-block p { margin: 0; color: #7a5a2c; font-size: 11px; line-height: 1.5; }
|
||||
.daily-price-review-metrics { margin: 0; display: grid; grid-template-columns: repeat(2, minmax(78px, 1fr)); gap: 8px; }
|
||||
.daily-price-review-metrics > div { min-width: 78px; padding: 8px 10px; border: 1px solid #ead9b4; border-radius: 9px; background: rgba(255, 255, 255, .82); }
|
||||
.daily-price-review-metrics > div.is-review { border-color: #f0c970; background: #fff7e5; }
|
||||
.daily-price-review-metrics dt { color: #7a6340; font-size: 9px; font-weight: 750; }
|
||||
.daily-price-review-metrics dd { margin: 2px 0 0; color: #3c280e; font-size: 17px; font-weight: 800; font-variant-numeric: tabular-nums; }
|
||||
.daily-price-review-metrics .is-review dd { color: #a85a0a; }
|
||||
.daily-price-review-toolbar { min-height: 58px; padding: 10px 14px 10px 20px; display: flex; align-items: center; justify-content: space-between; gap: 16px; border-bottom: 1px solid var(--line); }
|
||||
.daily-price-review-message { min-width: 0; margin: 0; color: var(--muted); font-size: 10px; font-weight: 650; line-height: 1.45; }
|
||||
.daily-price-review-message.is-error { color: #b42318; }
|
||||
.daily-price-review-actions { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; }
|
||||
.daily-price-review-cancel, .daily-price-review-finalize { min-height: 34px; padding: 0 12px; border-radius: 8px; font-size: 10px; font-weight: 800; cursor: pointer; transition: border-color .16s ease, color .16s ease, background-color .16s ease, box-shadow .16s ease; }
|
||||
.daily-price-review-cancel { border: 1px solid #d7dfec; color: #475467; background: #fff; }
|
||||
.daily-price-review-cancel:hover:not(:disabled) { border-color: #a9b5c7; color: var(--ink); background: #f8fafc; }
|
||||
.daily-price-review-finalize { border: 1px solid #a85a0a; color: #fff; background: #a85a0a; box-shadow: 0 5px 14px rgba(168, 90, 10, .18); }
|
||||
.daily-price-review-finalize:hover:not(:disabled) { border-color: #854507; background: #854507; }
|
||||
.daily-price-review-cancel:disabled, .daily-price-review-finalize:disabled { border-color: #d7dde7; color: #667085; background: #e9edf3; box-shadow: none; cursor: not-allowed; }
|
||||
.daily-price-review-scroll { max-width: 100%; overflow: auto; }
|
||||
.daily-price-review-table { width: 100%; min-width: 1080px; border-collapse: collapse; }
|
||||
.daily-price-review-table th { padding: 10px 12px; color: #735d39; background: #fffaf0; font-size: 9px; font-weight: 800; letter-spacing: .04em; text-align: left; text-transform: uppercase; white-space: nowrap; }
|
||||
.daily-price-review-table td { padding: 10px 12px; border-top: 1px solid #f0f1f4; color: var(--ink); font-size: 10px; vertical-align: middle; }
|
||||
.daily-price-review-row:hover td { background: #fffdf8; }
|
||||
.daily-price-review-row.is-complete td { background: #fbfefc; }
|
||||
.daily-price-review-row.is-complete:hover td { background: #f5fcf8; }
|
||||
.daily-price-review-table code { color: #475467; font-size: 10px; font-weight: 750; }
|
||||
.daily-price-review-candidates { min-width: 180px; white-space: normal; }
|
||||
.daily-price-review-candidate { display: block; color: #475467; font-size: 9px; line-height: 1.45; white-space: nowrap; }
|
||||
.daily-price-review-none { color: var(--subtle); font-size: 9px; }
|
||||
.daily-price-review-input { width: 112px; min-height: 34px; padding: 0 9px; border: 1px solid #cfd7e3; border-radius: 8px; color: var(--ink); background: #fff; font-size: 11px; font-variant-numeric: tabular-nums; }
|
||||
.daily-price-review-input:focus-visible { border-color: #a85a0a; outline: 3px solid rgba(168, 90, 10, .16); outline-offset: 1px; }
|
||||
.daily-price-review-input:disabled { color: #667085; background: #f6f7f9; cursor: not-allowed; }
|
||||
.daily-price-review-row-actions { display: flex; align-items: center; gap: 7px; white-space: nowrap; }
|
||||
.daily-price-review-status { display: inline-flex; min-height: 24px; padding: 0 8px; align-items: center; border-radius: 99px; font-size: 9px; font-weight: 800; }
|
||||
.daily-price-review-status.is-pending { color: #9a4b0a; background: #fff1cf; }
|
||||
.daily-price-review-status.is-complete { color: #087a55; background: #e9f8f2; }
|
||||
.daily-price-review-save { min-height: 30px; padding: 0 9px; border: 1px solid #d7c39a; border-radius: 7px; color: #82500f; background: #fff; font-size: 9px; font-weight: 800; cursor: pointer; transition: border-color .16s ease, color .16s ease, background-color .16s ease; }
|
||||
.daily-price-review-save:hover:not(:disabled) { border-color: #c48628; color: #6c3d08; background: #fff9ec; }
|
||||
.daily-price-review-save:disabled { border-color: #d7dde7; color: #98a2b3; background: #f2f4f7; cursor: not-allowed; }
|
||||
.daily-price-review-empty { margin: 0; padding: 24px 18px; color: var(--muted); font-size: 11px; text-align: center; }
|
||||
.daily-price-review-pagination { min-height: 48px; padding: 8px 14px 8px 20px; display: flex; align-items: center; justify-content: space-between; gap: 14px; border-top: 1px solid var(--line); color: var(--muted); font-size: 9px; }
|
||||
.daily-price-review-pagination > div { display: flex; align-items: center; gap: 8px; }
|
||||
.daily-price-review-pagination button { min-height: 30px; padding: 0 9px; border: 1px solid #d7dfec; border-radius: 7px; color: #475467; background: #fff; font-size: 9px; font-weight: 750; cursor: pointer; }
|
||||
.daily-price-review-pagination button:hover:not(:disabled) { border-color: #a9b5c7; color: var(--ink); background: #f8fafc; }
|
||||
.daily-price-review-pagination button:disabled { color: #98a2b3; background: #f2f4f7; cursor: not-allowed; }
|
||||
.daily-price-review-pagination strong { min-width: 70px; color: #475467; text-align: center; }
|
||||
.daily-price-review-panel.is-busy { opacity: .74; }
|
||||
.daily-price-review-panel.is-retryable { border-color: #e5bf6d; }
|
||||
.daily-price-review-panel.is-processing { border-color: #c9dafa; }
|
||||
.daily-price-review-cancel:focus-visible, .daily-price-review-finalize:focus-visible, .daily-price-review-save:focus-visible, .daily-price-review-pagination button:focus-visible, .job-review-link:focus-visible { outline: 3px solid rgba(37, 99, 235, .2); outline-offset: 2px; }
|
||||
.daily-price-review-confirm-dialog { width: min(430px, calc(100% - 32px)); max-width: none; padding: 0; overflow: hidden; border: 1px solid #e0d2b8; border-radius: 14px; color: var(--ink); background: #fff; box-shadow: 0 28px 80px rgba(16, 24, 40, .3); }
|
||||
.daily-price-review-confirm-dialog::backdrop { background: rgba(15, 23, 42, .48); backdrop-filter: blur(3px); }
|
||||
.daily-price-review-confirm-dialog[open] { animation: panel-in .16s ease both; }
|
||||
.daily-price-review-confirm-copy { padding: 22px 22px 18px; }
|
||||
.daily-price-review-confirm-copy h2 { margin: 0; font-size: 18px; line-height: 1.3; letter-spacing: -.025em; }
|
||||
.daily-price-review-confirm-copy > p { margin: 10px 0 0; color: #344054; font-size: 13px; line-height: 1.6; }
|
||||
.daily-price-review-confirm-copy .daily-price-review-confirm-note { margin-top: 8px; color: var(--muted); font-size: 11px; }
|
||||
.daily-price-review-confirm-copy .daily-price-review-confirm-error { padding: 9px 10px; border-radius: 8px; color: #b42318; background: #feeceb; font-size: 11px; font-weight: 650; }
|
||||
.daily-price-review-confirm-actions { padding: 14px 18px; display: flex; justify-content: flex-end; gap: 9px; border-top: 1px solid var(--line); background: #fbfcfe; }
|
||||
.daily-price-review-confirm-actions button { min-height: 38px; padding: 0 15px; border-radius: 9px; font-size: 11px; font-weight: 800; cursor: pointer; }
|
||||
.daily-price-review-confirm-cancel { border: 1px solid #d3dae6; color: #344054; background: #fff; }
|
||||
.daily-price-review-confirm-cancel:hover:not(:disabled) { border-color: #98a2b3; background: #f8fafc; }
|
||||
.daily-price-review-confirm-submit { border: 1px solid #b54708; color: #fff; background: #b54708; box-shadow: 0 5px 14px rgba(181, 71, 8, .16); }
|
||||
.daily-price-review-confirm-submit:hover:not(:disabled) { border-color: #8f3a07; background: #8f3a07; }
|
||||
.daily-price-review-confirm-actions button:disabled { opacity: .58; cursor: wait; box-shadow: none; }
|
||||
.daily-price-review-confirm-actions button:focus-visible { outline: 3px solid rgba(37, 99, 235, .2); outline-offset: 2px; }
|
||||
|
||||
.split-heading { align-items: center; }
|
||||
.report-controls { display: flex; align-items: flex-end; gap: 10px; }
|
||||
@@ -689,6 +768,25 @@ input:focus, select:focus { border-color: var(--blue); box-shadow: 0 0 0 3px rgb
|
||||
.company-review-pagination { align-items: stretch; flex-direction: column; }
|
||||
.company-review-pagination > div { justify-content: space-between; }
|
||||
.company-review-confirm-dialog { width: calc(100% - 20px); }
|
||||
.daily-price-review-header { align-items: stretch; flex-direction: column; gap: 12px; }
|
||||
.daily-price-review-metrics { width: 100%; }
|
||||
.daily-price-review-toolbar { align-items: stretch; flex-direction: column; }
|
||||
.daily-price-review-actions { display: grid; grid-template-columns: 1fr 1fr; }
|
||||
.daily-price-review-scroll { overflow: visible; }
|
||||
.daily-price-review-table, .daily-price-review-table tbody { min-width: 0; display: block; }
|
||||
.daily-price-review-table thead { display: none; }
|
||||
.daily-price-review-table tbody { padding: 10px; display: grid; gap: 10px; }
|
||||
.daily-price-review-row { padding: 10px 12px; display: grid; border: 1px solid #ecd8ac; border-radius: 10px; background: #fff; }
|
||||
.daily-price-review-row.is-complete { border-color: #b6e1cd; }
|
||||
.daily-price-review-table .daily-price-review-row td { min-width: 0; padding: 7px 0; display: grid; grid-template-columns: 86px minmax(0, 1fr); align-items: center; gap: 10px; border: 0; border-bottom: 1px solid #edf0f4; background: transparent; white-space: normal; }
|
||||
.daily-price-review-table .daily-price-review-row td::before { content: attr(data-label); color: var(--muted); font-size: 9px; font-weight: 750; }
|
||||
.daily-price-review-table .daily-price-review-row td:last-child { border-bottom: 0; }
|
||||
.daily-price-review-candidates { min-width: 0; }
|
||||
.daily-price-review-input { width: 100%; }
|
||||
.daily-price-review-row-actions { justify-content: flex-end; }
|
||||
.daily-price-review-pagination { align-items: stretch; flex-direction: column; }
|
||||
.daily-price-review-pagination > div { justify-content: space-between; }
|
||||
.daily-price-review-confirm-dialog { width: calc(100% - 20px); }
|
||||
.company-setup-heading { align-items: center; }
|
||||
.company-month-field { width: min(180px, 52vw); }
|
||||
.company-report-card-row { grid-template-columns: 1fr; gap: 14px; padding-top: 16px; padding-bottom: 18px; }
|
||||
|
||||
Reference in New Issue
Block a user