[morethanwords/tweb/master](https://github.com/morethanwords/tweb/tree/master) • [512d07d](https://github.com/morethanwords/tweb/commit/512d07d775589ab314e081cea40138f19c7eb59a) • _1 files, +25/-2_
Fix stories hold-to-pause not resuming on release

SwipeHandler bound its global mouseup/touchend listeners to
this.element.ownerDocument at construction time. For a Solid JSX
element (cloned from a <template>), ownerDocument is the inert
about:blank template-contents document until the node is inserted
into the live DOM. The stories viewer constructs the SwipeHandler
before its <Portal> mounts the element, so the release listeners
were bound to a document that never receives real events: mousedown
(bound to the element directly) still paused on press, but mouseup
never reached reset()/onReset()/play(), so the story stayed paused.

Bind the gesture-end listener lazily in handleStart instead, when the
element is live and ownerDocument resolves to the real (main or
Document-PiP) document. Keeps the PiP fix from 9d58fe155 intact and
mirrors the lazy pattern already used in attachGrabListeners.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

[morethanwords/tweb/master](https://github.com/morethanwords/tweb/tree/master) • [bbd3782](https://github.com/morethanwords/tweb/commit/bbd3782f39baeb1ff8b228d259bb2dc191c34007) • _3 files, +87/-79_
Render topic profile avatar in the profile-avatars header

Forum and bot-forum topic profiles used a separate inline 'simple avatar'
(.profile-avatar.avatar-120 inside the MainSection, gated by has-simple-avatar).
Route them through the same PeerProfileAvatars header as regular chats with no
photo instead: PeerProfileAvatars.setPeer now takes a threadId, skips the photo
carousel/list-loader, and renders the topic icon as a single centered avatar-120
(no profile-avatars-avatar-fake duplicate, no scaled-down full photo).

- peerProfileAvatars: topic branch in setPeer; processItem renders avatar-120
  with a 120px custom-emoji size for topics.
- peerProfile: always use the carousel path, passing the topic id; drop the
  needSimpleAvatar concept and the in-section avatar.
- _profile.scss: .is-topic centers the fixed-size icon and keeps it unscaled
  when the header collapses; removed the dead .has-simple-avatar rule.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

[morethanwords/tweb/master](https://github.com/morethanwords/tweb/tree/master) • [1296446](https://github.com/morethanwords/tweb/commit/1296446c468453a5696d744ab473cdac44039a06) • _2 files, +23/-25_
Fix sponsored topbar plate not reserving chat padding-top

The sponsored/ad plate is the only floating plate with height: 'auto', so setFloating measures its offsetHeight. The measurement ran inside the count loop, before the wrapper's `hide` (display: none) class was toggled off — and a display:none ancestor zeroes descendants' offsetHeight. So exactly when the ad plate is the one flipping the visible-plate count 0 -> 1, it was measured at 0 and never reserved its padding-top, leaving it overlapping the chat. Compute the visible set and un-hide the wrapper before measuring.

Also clarify in updatePinnedFloatingHeight that a mid-scroll position is left anchored on purpose (matches iOS/Android: the plate slides over the content rather than shoving it down); behavior unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

[#webk](?q=%23webk)