# 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/685d1a0e06d8b0e37fdb9abd08a0fa52ce163400)

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

Visibility: public

Requested revision: 685d1a0e06d8b0e37fdb9abd08a0fa52ce163400

Requested commit: 685d1a0e06d8b0e37fdb9abd08a0fa52ce163400

Commit: 685d1a0e06d8b0e37fdb9abd08a0fa52ce163400

Tree: 37c549a6ae8bb66636ec123c9c91f64e535eaa2c

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

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

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