feat: undo mistaken moves, numbered pagination, and quieter Kanban messages
All checks were successful
Build and deploy / Validate source (push) Successful in 6s
Build and deploy / Integration suite on a real stack (push) Successful in 2m33s
Build and deploy / Secret scan and release gate (push) Successful in 7s
Build and deploy / Publish images (push) Successful in 1m48s
All checks were successful
Build and deploy / Validate source (push) Successful in 6s
Build and deploy / Integration suite on a real stack (push) Successful in 2m33s
Build and deploy / Secret scan and release gate (push) Successful in 7s
Build and deploy / Publish images (push) Successful in 1m48s
Moves: an order can go back one stage (BACK in app/runtime.py) with an internal reason, flagged in the history as movements.back. The customer is not notified and approved finals stay; "production started" and "ready" are now enqueued once per order, so undoing and redoing a move sends nothing twice. Dragging only goes forward and highlights the allowed column. Move errors are in Portuguese. Lists: the send log, payments (open, resolved as history, all) and quotes are paged on the server with a total, 20 rows by default (10/20/50/100), first/previous/page/next/last. The send log filters by destination, status, event and order. Older finished orders load on demand. The board no longer carries the send log or payment rows, only the open-payment count. Kanban: Pagamentos and Integrações are separate tabs; messages are brief, bottom notifications that clear themselves; wording is shorter. Full CI integration sequence passes locally, with new checks for undo, paging and filters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -57,17 +57,20 @@ input[type=file]{font-size:13px;color:var(--muted);max-width:100%}
|
||||
.tinydot::before{content:"";width:8px;height:8px;border-radius:999px;background:var(--dot,#5B6168)}
|
||||
.tinydot:empty{display:none}
|
||||
.who{font-size:13px;color:var(--muted);white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}
|
||||
#status{margin:0;padding:8px 24px 0;min-height:28px;font-size:13px;color:var(--muted)}
|
||||
#status.error,#login-status.error{color:var(--bad)}
|
||||
#status{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:20;margin:0;max-width:min(640px,calc(100vw - 32px));padding:10px 16px;border-radius:10px;border:1px solid var(--line3);background:#1E2226;color:var(--tx);font-size:13px;box-shadow:0 10px 30px rgba(0,0,0,.45)}
|
||||
#status:empty,#login-status:empty{display:none}
|
||||
#status.error{border-color:var(--bad-line);color:var(--bad)}
|
||||
#login-status.error{color:var(--bad)}
|
||||
|
||||
/* Board */
|
||||
main{padding:0 24px 24px}
|
||||
.bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:8px 0 12px}
|
||||
.bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:18px 0 12px}
|
||||
.bar h1,.split h1,.page h1{margin:0;font-size:22px;font-weight:800;letter-spacing:-.02em}
|
||||
.chips{display:flex;gap:8px;flex-wrap:wrap}
|
||||
.bar .chips{margin-left:auto}
|
||||
.kan{display:grid;grid-template-columns:repeat(6,minmax(220px,1fr));gap:12px;overflow-x:auto;padding-bottom:8px;align-items:start}
|
||||
.col{display:flex;flex-direction:column;gap:10px;background:var(--col);border:1px solid #22262B;border-radius:12px;padding:12px;min-height:320px}
|
||||
.col.allowed{border-color:rgba(255,139,43,.45);background:#17140F}
|
||||
.col.target{border-color:var(--accent)}
|
||||
.col-head{display:flex;flex-direction:column;gap:6px;padding:2px 2px 8px;border-bottom:1px solid #22262B}
|
||||
.col-head div{display:flex;align-items:center;gap:8px}
|
||||
@@ -130,6 +133,7 @@ main{padding:0 24px 24px}
|
||||
.timeline small{display:block;color:var(--faint);font-size:12px}
|
||||
|
||||
/* Quotes */
|
||||
#tab-quotes{padding-top:18px}
|
||||
.split{display:flex;gap:0;border:1px solid var(--line);border-radius:12px;overflow:hidden;min-height:calc(100vh - 140px)}
|
||||
.split .list{width:460px;flex-shrink:0;border-right:1px solid var(--line);padding:16px;display:flex;flex-direction:column;gap:12px;background:#111316}
|
||||
.qitem{text-align:left;display:flex;justify-content:space-between;gap:12px;padding:14px;border-radius:10px;border:1px solid var(--line2);background:var(--card);width:100%}
|
||||
@@ -151,13 +155,30 @@ main{padding:0 24px 24px}
|
||||
.pane .note{padding:24px;color:var(--muted)}
|
||||
|
||||
/* Payments and integrations */
|
||||
.page{display:flex;flex-direction:column;gap:22px;padding-top:8px}
|
||||
.page{display:flex;flex-direction:column;gap:22px;padding-top:18px}
|
||||
.page h2{margin:0 0 10px;font-size:15px;font-weight:800}
|
||||
.issue{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:16px 18px;border-radius:12px;border:1px solid #4A3A1E;background:#1C1A15;margin-bottom:8px}
|
||||
.issue .text{flex:1;min-width:260px;display:flex;flex-direction:column;gap:4px}
|
||||
.issue .text b{font-size:14px}
|
||||
.issue .text span{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
|
||||
.issue form{display:flex;gap:8px;align-items:center}
|
||||
.issue.done{border-color:var(--line2);background:var(--card)}
|
||||
.pager{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:14px 4px;border-top:1px solid var(--line);margin-top:8px;font-size:13px;color:var(--muted)}
|
||||
.pager-size{display:flex;align-items:center;gap:8px}
|
||||
.pager-size select{height:34px;padding:0 8px;border-radius:8px;border:1px solid var(--line3);background:var(--bg);color:var(--tx)}
|
||||
.pager-range{margin-left:auto}
|
||||
.pager-nav{display:flex;align-items:center;gap:6px}
|
||||
.pager .pg{width:34px;height:34px;border-radius:8px;border:1px solid var(--line2);background:transparent;color:var(--tx);font-size:16px;line-height:1}
|
||||
.pager .pg:disabled{color:var(--faint);opacity:.45}
|
||||
.pager-page{display:flex;align-items:center;gap:6px;margin:0 4px}
|
||||
.pager-page input{width:56px;height:34px;text-align:center;padding:0 4px}
|
||||
.pager.compact{gap:10px;padding:12px 0 0}
|
||||
.pager.compact .pager-range{margin-left:0}
|
||||
.pager.compact .pager-nav{margin-left:auto}
|
||||
.filters{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:12px}
|
||||
.field{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:600;color:var(--muted)}
|
||||
.field select,.field input{height:38px;min-width:160px;padding:0 10px;border-radius:8px;border:1px solid var(--line3);background:var(--bg);color:var(--tx)}
|
||||
.field input{min-width:110px;width:110px}
|
||||
.issue input{width:320px}
|
||||
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
|
||||
.integration{display:flex;flex-direction:column;gap:10px;padding:16px;border-radius:12px;border:1px solid var(--line2);background:var(--card)}
|
||||
|
||||
Reference in New Issue
Block a user