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

[View on GitCafe](https://git.cafe/pingdotgg/t3code/commit/cb1cdfb635f862643d55f0b30ffd6147dbae3167)

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

Visibility: public

Requested revision: cb1cdfb635f862643d55f0b30ffd6147dbae3167

Requested commit: cb1cdfb635f862643d55f0b30ffd6147dbae3167

Commit: cb1cdfb635f862643d55f0b30ffd6147dbae3167

Tree: 35a535c5c242849490830b42f71b2d834c4301db

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

- [9916f9f87a9fc4c029464ee5b31c265a196fd808](https://git.cafe/pingdotgg/t3code/commit/9916f9f87a9fc4c029464ee5b31c265a196fd808?format=markdown)

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