diff --git a/frontend/dashboard.css b/frontend/dashboard.css index e8a60aa..a13d897 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -137,6 +137,20 @@ textarea { resize: vertical; min-height: 120px; } .plan-preview-actions button { min-height:44px; } .plan-today-actions { position:sticky; bottom:0; display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:16px -6px -6px; padding:12px 6px; padding-bottom:calc(12px + env(safe-area-inset-bottom)); background:rgba(11,21,38,.98); border-top:1px solid #2a496e; } .plan-today-actions button { min-height:44px; width:100%; } +.today-recap-sheet { position:fixed; inset:0; z-index:88; display:flex; align-items:flex-end; justify-content:center; background:rgba(5,12,21,.82); backdrop-filter:blur(4px); } +.today-recap-sheet[hidden] { display:none; } +.today-recap-panel { box-sizing:border-box; width:min(620px,100%); max-height:100%; overflow:auto; overflow-x:hidden; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); border:1px solid #2a496e; border-radius:18px 18px 0 0; background:#0b1526; } +.today-recap-header { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; } +.today-recap-header h2 { margin:.2rem 0; } +.today-recap-header button { min-height:44px; min-width:44px; } +.today-recap-items, .today-recap-history { display:grid; gap:8px; } +.today-recap-row, .today-recap-history-row { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:8px; padding:10px; border:1px solid #2a496e; border-radius:10px; } +.today-recap-row strong { overflow-wrap:anywhere; } +.today-recap-row input { width:6rem; min-height:44px; } +.today-recap-totals { margin:12px 0; padding:12px; border-radius:10px; background:#10233d; font-weight:700; } +.today-recap-actions { position:sticky; bottom:0; display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:16px -6px -6px; padding:12px 6px; padding-bottom:calc(12px + env(safe-area-inset-bottom)); background:rgba(11,21,38,.98); border-top:1px solid #2a496e; } +.today-recap-actions button { min-height:44px; width:100%; } +@media (max-width:420px) { .today-recap-actions { grid-template-columns:1fr; } } .today-readiness-sheet { position:fixed; inset:0; z-index:90; display:flex; align-items:flex-end; justify-content:center; background:rgba(5,12,21,.82); backdrop-filter:blur(4px); } .today-readiness-sheet[hidden] { display:none; } .today-readiness-panel { box-sizing:border-box; width:min(620px,100%); max-height:100%; overflow:auto; overflow-x:hidden; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); border:1px solid #b45309; border-radius:18px 18px 0 0; background:#0b1526; } diff --git a/frontend/dashboard.js b/frontend/dashboard.js index 58a336a..98bb394 100644 --- a/frontend/dashboard.js +++ b/frontend/dashboard.js @@ -931,10 +931,13 @@ }); const timerView = createTodayTimerView({ timer, - isActive: workSession.checkpointed, + isActive: () => workSession.checkpointed(), queryAll: s => document.querySelectorAll(s), formatEstimate: formatPlanMinutes, }); + const todayRecapView = setupTodayRecap( + timer, timerView, todayWork, api, qs, escapeHtml, closeOpenWorkSheets, updateWorkSessionActions + ); function updateDetailDeferLabels(active) { document.querySelectorAll('[data-detail-defer-preset=today]').forEach(button => { button.textContent = active ? 'Later today & next' : 'Later today'; @@ -977,17 +980,8 @@ button.hidden = !workSession.checkpointed(); }); }, - onFinish: () => { - timerView.finish(); - closeOpenWorkSheets(); - document.querySelectorAll('.work-session-nav').forEach(nav => { nav.hidden = true; }); - qs('#my-work-action-status').textContent = 'Work session complete.'; - updateWorkSessionActions(); - qs('#start-work-session').focus(); - }, + onFinish: () => todayRecapView.finish(selectedWorkFilter), }); - setInterval(timerView.render, 1000); - function selectTodayWork() { qs('[data-work-filter="today"]').click(); } @@ -5222,11 +5216,8 @@ else workSession.start(); }); qs('#resume-today-session').addEventListener('click', () => resumeTodaySession()); - qs('#end-today-session').addEventListener('click', () => { - workSession.end(); - qs('#my-work-action-status').textContent = 'Today session ended. Your plan is unchanged.'; - qs('#start-work-session').focus(); - }); + + qs('#end-today-session').addEventListener('click', () => endTodaySession(workSession, qs)); document.querySelectorAll('[data-work-session-previous]').forEach(button => button.addEventListener('click', () => workSession.previous()) ); diff --git a/frontend/index.html b/frontend/index.html index 2aa2c01..1f849c6 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -96,6 +96,7 @@
+ @@ -265,6 +266,27 @@
+ +