/* ==== Long lists (10-09 night, lists-perf-1009; Bonan: "依然觉得滚动很卡顿……一定不要损失我的性能……我这个项目里任何可能会很长的
   列表都这么搞"; eol_research/list-perf-2026-10-09/RESEARCH.md, PROFILE.md, MEASURE.md) ====
   The pages come as the end nears (public/app.js inboxPaging, the lobby's paging, Who is online's), so a list is only as long
   as it was scrolled. Nothing here changes how a row looks. */

/* Rows off the screen skipped by the browser's style, layout and paint (content-visibility: auto, web.dev/articles/
   content-visibility), each holding the room it last took (contain-intrinsic-size's auto: no scroll range, thumb or place
   changes as rows come and go) and, until drawn once, a usual row's height. The containment is on what the row draws inside
   itself: its line (a border), hover ground and focus ring are its own box's, never clipped. Not the inbox's rows: measured
   there it made a scroll's styling dearer, not cheaper (PROFILE.md 4). */
/* the posts of the lobby, the search page and a person's page (a title, up to five lines, maybe pictures, the author) */
.home-item { content-visibility: auto; contain-intrinsic-size: auto 180px; }
/* Who is online's rows (a face, the name and handle, the about line, Chat) */
[data-online-list] > li { content-visibility: auto; contain-intrinsic-size: auto 104px; }
/* A conversation's older messages, loaded as it is scrolled up to (public/app.js loadOlder), once each has been drawn
   (data-drawn, two frames after it came, so the room it holds is its own and nothing above the reader moves; the newest
   page is never skipped: it is what shows when the conversation opens). The clip that comes with the skipping is let out
   32px (a bubble's tail 26 beside it, the reactions' badge 16 over it: inbox-jank's measure), so nothing drawn changes. */
[data-older] .th-post { contain-intrinsic-block-size: auto 36px; }
[data-older] .th-post[data-drawn] { content-visibility: auto; overflow-clip-margin: 32px; }

/* While a list scrolls under a resting pointer its rows take no hover (public/app.js "Lists hold still while they scroll":
   .no-hover from the first scroll event to 150ms after the last, or scrollend): each row the list carried under the pointer
   was restyled and repainted for its hover tint, every frame (PROFILE.md 4: the main cost of the inbox's scroll). The rows
   only, never the scroller itself, which must still take the wheel. */
.ib-scroll.no-hover .ib-list, :root.no-hover :is(.home-list, [data-online-list]) { pointer-events: none; }
