The draft's last line is unreachable when a notice makes the header tall

FIX-RUDDER-PANEL-DRAFT-LAST-LINE-UNREACHABLE-WITH-TALL-HEADER.

.compact .compose carried min-height:120px, so the column refused to shrink and
whatever the header took was pushed past the panel's clip. The draft's own
scrollbar cannot help: the overflow is OUTSIDE the scrollable area, which is why
a wheel over it reaches the end of its content while the last line stays hidden.

Measured in the corner widget with the engine offline, header 237px:
  390x560 — panel leaves 99px, the floor forces 120, overflow 21px.
  375x450 — panel leaves 33px, overflow 87px.
Both reproduced independently, and both are exactly 120 minus the room available,
which is what makes the floor the mechanism rather than a coincidence.

Pre-existing: present on plain development as well as on my earlier branch, so
this is its own defect and not something a previous round introduced.

The floor is removed unconditionally. A viewport-height guard would not work —
what consumes the room is the HEADER, and a notice can make it 237px at any
viewport; an earlier version of this fix guarded above 520px and would have left
the 560px case still broken.

Cut clean onto development rather than carried on the branch it was written on:
that branch also held two hunks that were deliberately withdrawn after an A/B
showed they changed nothing measurable, and landing it would have quietly
reinstated them.
This commit is contained in:
Doxa Maps 2026-09-29 09:28:08 +00:00
parent 051a876768
commit e028682dd1

View file

@ -1129,7 +1129,16 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 1
.icon-btn svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
.icon-btn[aria-expanded='true'], .icon-btn:hover { color: var(--accent); border-color: var(--accent); }
.compact .controls .mic { display: none; }
.compact .compose { flex: 1 1 0; min-height: 120px; }
/* ★ NO FLOOR ON A SHORT PANEL. min-height:120px kept the compose column from shrinking, so when a
notice makes the header tall the draft is pushed past the panel's clip and its last line cannot be
reached — its own scrollbar is useless, because the overflow is OUTSIDE the scrollable area.
Measured in the corner widget with the engine offline (header 237px): at 390x560 the panel leaves
99px and the floor forces 120, overflowing by exactly 21px; at 375x450 it leaves 33px and overflows
by 87. Both numbers were reproduced independently.
The floor is unconditional and must stay so: a viewport-height guard would not help, because what
eats the room is the HEADER, and a notice can make that 237px at any viewport. The draft already
carries min-height:0 and overflow-y:auto, so a floor here buys nothing a flex basis does not. */
.compact .compose { flex: 1 1 0; min-height: 0; }
.compact.more .compose { flex: 0 0 auto; height: 200px; }
.compact .draft { flex: 1 1 0; min-height: 0; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
resize: none; padding: 10px 12px; font-size: 16px; line-height: 1.5; }