feat move feedback to a button in the top action group

The 'How are you feeling?' section sat below the table, out of reach past a long log. Replace it with a primary-colour outline 'Record feedback' button beside 'View progress', which opens the same modal. The modal stays in the DOM; past reports list below the table under a heading; the post-workout nudge moves up beside the buttons. Drop the dead feedback-section and feedback-toggle CSS.

Commit
92ede4327c3b722e468cb9ee7f5151aee8d284a3
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/presenter/pages_logbook.ml
index 5fa6a7e7..9da4e32f 100644..100644
@@ -319,7 +319,9 @@
319 319 html_page ~viewer ~request ~active:"logbook" ~logging "Logbook"
320 320 ([
321 321 tag "h1" [] [ txt "Logbook" ];
322 Removed: (* Actions above the ledger. View progress opens the per-exercise chart. *)
322 Added: (* Actions above the ledger, so they are reachable without scrolling past
323 Added: a long table. View progress opens the per-exercise chart; Record
324 Added: feedback opens the subjective-feedback modal. *)
323 325 tag "div"
324 326 [ class_ "button-group logbook-actions-bar" ]
325 327 [
@@ -330,7 +332,19 @@
330 332 Dream_html.attr "data-hito-app-link";
331 333 ]
332 334 [ txt "View progress" ];
335 Added: tag "a"
336 Added: [
337 Added: class_ "button outline";
338 Added: Dream_html.string_attr "href" "/logbook?feedback=start";
339 Added: Dream_html.attr "data-hito-feedback-open";
340 Added: ]
341 Added: [ txt "Record feedback" ];
333 342 ];
343 Added: (if suggest_feedback then
344 Added: tag "p"
345 Added: [ class_ "eyebrow" ]
346 Added: [ txt "Workout saved — add feedback while it is fresh." ]
347 Added: else txt "");
334 348 ]
335 349 @ (match calendar with Some cal -> [ calendar_grid cal ] | None -> [])
336 350 @ [
@@ -412,33 +426,15 @@
412 426 records);
413 427 ];
414 428 ]));
415 Removed: tag "section"
416 Removed: [ class_ "feedback-section" ]
417 Removed: ([
418 Removed: tag "h2" [] [ txt "How are you feeling?" ];
419 Removed: (if suggest_feedback then
420 Removed: tag "p"
421 Removed: [ class_ "eyebrow" ]
422 Removed: [ txt "Workout saved — add feedback while it is fresh." ]
423 Removed: else txt "");
424 Removed: tag "p" []
425 Removed: [
426 Removed: txt
427 Removed: "Rate any factor against your usual. Leave the rest \
428 Removed: unselected.";
429 Removed: ];
430 Removed: tag "a"
431 Removed: [
432 Removed: class_ "feedback-toggle";
433 Removed: Dream_html.string_attr "href" "/logbook?feedback=start";
434 Removed: Dream_html.attr "data-hito-feedback-open";
435 Removed: ]
436 Removed: [ txt "Record feedback" ];
437 Removed: feedback_modal request ~open_:feedback_open;
438 Removed: ]
439 Removed: @ feedback_list feedback
440 Removed: @
441 Removed: match delete_record with
442 Removed: | Some record -> [ delete_record_dialog request record ]
443 Removed: | None -> []);
444 Removed: ])
429 Added: ]
430 Added: (* The subjective-feedback modal stays in the DOM so the Record feedback
431 Added: button opens it. Past reports, when any, list below; the delete-confirm
432 Added: dialog appears only when a row asked for it. *)
433 Added: @ [ feedback_modal request ~open_:feedback_open ]
434 Added: @ (match feedback_list feedback with
435 Added: | [] -> []
436 Added: | list -> tag "h2" [] [ txt "Recent feedback" ] :: list)
437 Added: @
438 Added: match delete_record with
439 Added: | Some record -> [ delete_record_dialog request record ]
440 Added: | None -> [])
lib/web/assets/hito.css
index ba55f05c..1a40180f 100644..100644
@@ -1121,37 +1121,6 @@
1121 1121 background: var(--oxblood-hover);
1122 1122 }
1123 1123
1124 Removed: /* The subjective feedback section on the Logbook. A bordered block separating
1125 Removed: the standalone feedback form from the workout list. Past reports read as a
1126 Removed: plain list. */
1127 Removed: .feedback-section {
1128 Removed: margin-top: 2rem;
1129 Removed: border-top: 1px solid var(--rule);
1130 Removed: padding-top: 1rem;
1131 Removed: }
1132 Removed: /* The feedback form is gated behind a disclosure. The summary reads as a
1133 Removed: secondary button so the reveal control matches the rest of the UI. */
1134 Removed: .feedback-toggle {
1135 Removed: display: inline-block;
1136 Removed: cursor: pointer;
1137 Removed: padding: 0.55rem 1.1rem;
1138 Removed: border: 1px solid var(--brass);
1139 Removed: border-radius: var(--radius);
1140 Removed: background: var(--brass-wash);
1141 Removed: color: var(--ink);
1142 Removed: font-weight: 600;
1143 Removed: list-style: none;
1144 Removed: }
1145 Removed: .feedback-toggle::-webkit-details-marker {
1146 Removed: display: none;
1147 Removed: }
1148 Removed: .feedback-toggle:hover {
1149 Removed: color: var(--on-brass);
1150 Removed: background: var(--brass);
1151 Removed: }
1152 Removed: .feedback-disclosure[open] .feedback-toggle {
1153 Removed: margin-bottom: 1rem;
1154 Removed: }
1155 1124 .feedback-list {
1156 1125 margin-top: 1rem;
1157 1126 list-style: disc;