/* App-level additions that the static prototype did not need. tokens.css and
   components.css stay verbatim copies of design/assets. */

/* Owner avatars: the image covers the initials, which remain the fallback. */
.avatar { position: relative; overflow: hidden; }
.avatar > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }

/* htmx request indicators reuse the design's loading button state. */
.htmx-request.btn, .htmx-request .btn[type="submit"] { pointer-events: none; opacity: .7; }
[aria-busy="true"] { cursor: progress; }

/* EthicalAds text unit inside the design's sponsor shell. */
.sponsor .sponsor__text [data-ea-publisher], .sponsor [data-ea-publisher] { display: block; }

/* Server-rendered README: images never overflow the panel. */
.readme__body img { max-width: 100%; height: auto; }

/* Legal and confirmation pages. */
.doc-page { padding-block: var(--sp-8) var(--sp-16); }
.doc-page .prose { margin-top: var(--sp-6); max-width: 72ch; }

/* Explore trending strip: anchor the tiles' .sr-only text inside the scrolling
   strip; otherwise it is positioned against the page and widens it below 390px
   (the prototype has the same overflow). */
.trend-tile { position: relative; }
