# fix\(web\): adopt main's attached-composer surface contract so the glass survives shoulder tabs · stienswout/t3code

[View on GitCafe](https://git.cafe/stienswout/t3code/commit/af2f6833d4ef50a6269bd29b22dd7bf8ff42e0ba)

Repository: [stienswout/t3code](https://git.cafe/stienswout/t3code)

Visibility: public

Requested revision: af2f6833d4ef50a6269bd29b22dd7bf8ff42e0ba

Requested commit: af2f6833d4ef50a6269bd29b22dd7bf8ff42e0ba

Commit: af2f6833d4ef50a6269bd29b22dd7bf8ff42e0ba

Tree: 4c30af88528b9431bb99c25f8ab4a594e01f4ae1

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
fix(web): adopt main's attached-composer surface contract so the glass survives shoulder tabs

The composer went frameless exactly when the stash or tasks badge was
showing: main's #7150 css hides the classic shell chrome whenever the
shell :has() a shoulder tab or top drawer and repaints the glass on
[data-chat-composer-main-surface] instead — an element the branch's
composer body never rendered, since it predates the drawer system while
the badges and css came through the rebase in main's new form.

The branch composer's frame div now carries the main-surface attribute
(with main's relative z-10 stacking) so attached mode paints background,
outline, and backdrop on it and the tab connects to the surface, and
ChatView applies chat-composer-glass-shell-attached while banner items
render in the drawer slot, matching main's externalComposerDrawerAttached
wiring. Without a tab or banner the attribute is inert and the classic
shell chrome paints as before.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

```

## Parents

- [88b7b7b7db1b0f2f230788fb649e63015d2cd1fc](https://git.cafe/stienswout/t3code/commit/88b7b7b7db1b0f2f230788fb649e63015d2cd1fc?format=markdown)

[Source at this commit](https://git.cafe/stienswout/t3code/tree/af2f6833d4ef50a6269bd29b22dd7bf8ff42e0ba?format=markdown)
