Path: blob/main/src/vs/sessions/browser/media/style.css
13394 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45/* ---- Sidebar & Auxiliary Bar Card Appearance ---- */67.agent-sessions-workbench .part.sidebar {8background: var(--vscode-agents-background);9}1011.agent-sessions-workbench > .monaco-grid-view {12background-color: var(--vscode-agents-background);13}1415.agent-sessions-workbench.shell-gradient-background {16position: relative;17isolation: isolate;18background: var(--vscode-agents-background);19}2021.agent-sessions-workbench.shell-gradient-background::before {22content: '';23position: absolute;24inset: 0;25z-index: 0;26pointer-events: none;27background: var(--vscode-agents-background);28}2930@supports (background: color-mix(in srgb, black 0%, white)) {31.agent-sessions-workbench.shell-gradient-background::before {32background:33linear-gradient(34to bottom right,35transparent 0%,36color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 5%, transparent) 58%,37color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 7%, transparent) 82%,38color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 9%, transparent) 100%39),40var(--vscode-agents-background);41}4243.monaco-workbench.vs.agent-sessions-workbench.shell-gradient-background::before {44background:45linear-gradient(46to bottom right,47transparent 0%,48color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 1%, transparent) 45%,49color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 6%, transparent) 75%,50color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 12%, transparent) 100%51),52var(--vscode-agents-background);53}5455.monaco-workbench.vs-dark.agent-sessions-workbench.shell-gradient-background::before {56background: linear-gradient(57to bottom right,58var(--vscode-agents-background) 0%,59color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 7%, var(--vscode-agents-background)) 56%,60color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 10%, var(--vscode-agents-background)) 82%,61color-mix(in srgb, var(--vscode-agentsGradient-tintColor) 13%, var(--vscode-agents-background)) 100%62);63}64}6566.monaco-workbench.hc-black.agent-sessions-workbench.shell-gradient-background::before,67.monaco-workbench.hc-light.agent-sessions-workbench.shell-gradient-background::before {68display: none;69}7071.monaco-workbench.agent-sessions-workbench > .notifications-center {72right: 15px;73bottom: 15px;74}7576.monaco-workbench.agent-sessions-workbench > .notifications-toasts {77right: 15px;78bottom: 15px;79}8081.monaco-workbench.agent-sessions-workbench.nostatusbar > .notifications-center {82bottom: 15px;83}8485.monaco-workbench.agent-sessions-workbench.nostatusbar > .notifications-toasts {86bottom: 15px;87}8889.monaco-workbench.agent-sessions-workbench > .notifications-center.bottom-left {90right: auto;91left: 15px;92bottom: 15px;93}9495.monaco-workbench.agent-sessions-workbench > .notifications-toasts.bottom-left {96right: auto;97left: 15px;98bottom: 15px;99}100101.monaco-workbench.agent-sessions-workbench > .notifications-center.top-right {102top: 40px;103right: 15px;104bottom: auto;105}106107.agent-sessions-workbench.shell-gradient-background > .monaco-grid-view {108position: relative;109z-index: 1;110background: transparent;111}112113/**114* The auxiliary bar and panel use a card-like appearance with margins and border-radius115* applied directly on the .part element. The grid allocates full space; CSS margin shrinks116* the part within its split-view-view wrapper. Layout dimensions are reduced in code117* (AgenticAuxiliaryBarPart) to keep internal layout correct.118*119* No z-index or stacking-context changes - sashes render naturally on top.120*121* Margin values (must match the constants in the Part classes):122* Sidebar: no card (flush, spans full height)123* Auxiliary bar: top=16, bottom=18, right=16124* Panel: bottom=18, left=16, right=16125*/126127.agent-sessions-workbench.shell-gradient-background .part.titlebar,128.agent-sessions-workbench.shell-gradient-background .part.sidebar,129.agent-sessions-workbench.shell-gradient-background .part.titlebar > .content,130.agent-sessions-workbench.shell-gradient-background .part.titlebar > .titlebar-container,131.agent-sessions-workbench.shell-gradient-background .part.titlebar > .sessions-titlebar-container,132.agent-sessions-workbench.shell-gradient-background .part.sidebar > .composite.title,133.agent-sessions-workbench.shell-gradient-background .part.sidebar > .content,134.agent-sessions-workbench.shell-gradient-background .part.sidebar > .sidebar-footer {135background: transparent !important;136}137138.agent-sessions-workbench .part.sidebar.mobile-overlay-sidebar {139background: var(--vscode-agents-background) !important;140}141142.agent-sessions-workbench .part.chatbar {143margin: 0 10px 0px 10px;144background: var(--part-background);145border: 1px solid var(--part-border-color, transparent);146border-radius: 8px;147box-sizing: border-box;148}149150.agent-sessions-workbench .part.editor:not(.modal-editor-part) {151margin: 0 0 0 0;152background: var(--vscode-agentsPanel-background);153border: 1px solid var(--vscode-agentsPanel-border, transparent);154border-right-width: 0;155border-top-right-radius: 0;156border-bottom-right-radius: 0;157border-top-left-radius: 8px;158border-bottom-left-radius: 8px;159box-sizing: border-box;160overflow: hidden;161}162163.agent-sessions-workbench .part.editor:not(.modal-editor-part)::after {164box-shadow: none;165}166167.agent-sessions-workbench .part.editor .multiDiffEntry {168padding: 6px 8px 0;169box-sizing: border-box;170}171172.agent-sessions-workbench .part.editor .multiDiffEntry .header-content {173border-radius: 6px;174border: none;175background: var(--vscode-sideBarSectionHeader-background);176margin: 0;177align-items: center;178}179180.agent-sessions-workbench .part.editor .multiDiffEntry .header:not(.collapsed) .header-content {181border-bottom: none;182}183184.agent-sessions-workbench .part.editor .multiDiffEntry .header-content .file-path .title {185font-size: 13px;186line-height: 22px;187}188189.agent-sessions-workbench .part.editor .multiDiffEntry .header {190cursor: pointer;191}192193.agent-sessions-workbench .part.editor .multiDiffEntry .header:focus,194.agent-sessions-workbench .part.editor .multiDiffEntry .header:focus-visible {195outline: none;196}197198.agent-sessions-workbench .part.editor .multiDiffEntry .header:focus .header-content,199.agent-sessions-workbench .part.editor .multiDiffEntry .header:focus-visible .header-content {200box-shadow: inset 0 0 0 1px var(--vscode-focusBorder);201}202203.agent-sessions-workbench .part.editor .multiDiffEntry .header:hover .header-content {204background: color-mix(in srgb, var(--vscode-sideBarSectionHeader-background) 95%, var(--vscode-foreground));205}206207.agent-sessions-workbench .part.editor .multiDiffEntry .header-content .actions {208opacity: 0;209pointer-events: none;210padding: 0 0 0 8px;211}212213.agent-sessions-workbench .part.editor .multiDiffEntry .header:hover .header-content .actions,214.agent-sessions-workbench .part.editor .multiDiffEntry .header:focus-within .header-content .actions {215opacity: 1;216pointer-events: auto;217}218219.agent-sessions-workbench .part.editor .multiDiffEntry .collapse-button a {220border-radius: 4px;221}222223.agent-sessions-workbench .part.editor .multiDiffEntry .editorParent {224border-bottom: none;225}226227.agent-sessions-workbench .part.editor .diff-hidden-lines .center {228box-shadow: none;229}230231.agent-sessions-workbench .part.editor .multiDiffEntry .header-content .status {232display: inline-flex;233align-items: center;234justify-content: center;235width: 16px;236min-width: 16px;237font-size: 11px;238font-weight: 600;239opacity: 0.9;240}241242.agent-sessions-workbench .part.editor .multiDiffEntry .header-content .status.added {243color: var(--vscode-gitDecoration-addedResourceForeground);244}245246.agent-sessions-workbench .part.editor .multiDiffEntry .header-content .status.deleted {247color: var(--vscode-gitDecoration-deletedResourceForeground);248}249250.agent-sessions-workbench .part.editor .multiDiffEntry .header-content .status.renamed {251color: var(--vscode-gitDecoration-modifiedResourceForeground);252}253254.agent-sessions-workbench .part.editor .title.tabs {255background-color: transparent !important;256--editor-group-tab-height: 26px !important;257}258259/* Editor tabs: match chat composite bar tab style */260.agent-sessions-workbench .part.editor .tabs-container > .tab {261background-color: transparent !important;262border-right: none !important;263border-radius: 4px;264font-size: 12px;265font-weight: 500;266box-shadow: none !important;267padding: 0 0 0 4px !important;268--tab-border-top-color: transparent !important;269}270271/* Allow tabs to shrink in narrow viewports so the close button stays reachable.272* The default `sizing-fit` rule sets `min-width: fit-content; flex-shrink: 0;`273* which prevents the tab from shrinking below its label width and pushes the274* close button out of view. */275.agent-sessions-workbench .part.editor .tabs-container > .tab.sizing-fit {276min-width: 0 !important;277flex-shrink: 1 !important;278}279280.agent-sessions-workbench .part.editor .tabs-container > .tab.sizing-fit .monaco-icon-label,281.agent-sessions-workbench .part.editor .tabs-container > .tab.sizing-fit .monaco-icon-label > .monaco-icon-label-container {282overflow: hidden;283text-overflow: ellipsis;284min-width: 0;285}286287/* Keep the close button reserved within the tab so it remains accessible when288* the tab shrinks. Without this the action sits in an `overflow: hidden`289* container that only reveals on hover, which combined with the smaller tab290* makes the close target hard to hit. */291.agent-sessions-workbench .part.editor .tabs-container > .tab > .tab-actions {292flex: 0 0 auto;293overflow: visible;294}295296.agent-sessions-workbench .part.editor .tabs-and-actions-container {297--tabs-border-bottom-color: transparent !important;298align-items: center;299padding: 4px;300}301302.agent-sessions-workbench .part.editor .tabs-container > .tab.active {303background-color: color-mix(in srgb, var(--vscode-foreground) 5%, transparent) !important;304}305306.agent-sessions-workbench .part.editor .tabs-container > .tab .tab-border-top-container,307.agent-sessions-workbench .part.editor .tabs-container > .tab .tab-border-bottom-container {308display: none !important;309}310311.agent-sessions-workbench:not(.nosidebar) .part.chatbar {312margin-left: 0;313}314315.agent-sessions-workbench .part.auxiliarybar {316margin: 0 10px 0px 0;317background: var(--part-background);318border: 1px solid var(--part-border-color, transparent);319border-top-left-radius: 0;320border-bottom-left-radius: 0;321border-top-right-radius: 8px;322border-bottom-right-radius: 8px;323box-sizing: border-box;324}325326.agent-sessions-workbench.nomaineditorarea .part.auxiliarybar {327border-top-left-radius: 8px;328border-bottom-left-radius: 8px;329}330331.agent-sessions-workbench .part.auxiliarybar > .content .pane-body {332background-color: var(--vscode-agentsPanel-background);333}334335.agent-sessions-workbench .part.panel {336margin: 0 10px 10px 10px;337background: var(--part-background);338border: 1px solid var(--part-border-color, transparent);339border-radius: 8px;340box-sizing: border-box;341}342343.agent-sessions-workbench:not(.nosidebar) .part.panel {344margin-left: 0;345}346347.agent-sessions-workbench .monaco-sash:before {348border-radius: calc(var(--vscode-sash-hover-size) / 2);349}350351.agent-sessions-workbench .monaco-sash:not(.disabled) > .orthogonal-drag-handle {352border-radius: var(--vscode-sash-size);353}354355/* ---- Scrollbars ---- */356357/* Thinner, rounded scrollbar sliders scoped to the agents app.358* The scrollbar widget sets the slider's size inline to match the full359* track. We hide that default background and paint a narrower, rounded360* slider with an inset ::before pseudo-element so all four corners round361* consistently and the full hit area is preserved. */362.agent-sessions-workbench .monaco-scrollable-element > .scrollbar > .slider {363background: transparent !important;364}365366.agent-sessions-workbench .monaco-scrollable-element > .scrollbar.vertical > .slider::before,367.agent-sessions-workbench .monaco-scrollable-element > .scrollbar.horizontal > .slider::before {368content: '';369position: absolute;370inset: 1px;371border-radius: 999px;372background: var(--vscode-scrollbarSlider-background);373}374375.agent-sessions-workbench .monaco-scrollable-element > .scrollbar > .slider:hover::before {376background: var(--vscode-scrollbarSlider-hoverBackground);377}378379.agent-sessions-workbench .monaco-scrollable-element > .scrollbar > .slider.active::before {380background: var(--vscode-scrollbarSlider-activeBackground);381}382383.monaco-workbench.vs.agent-sessions-workbench .part.chatbar,384.monaco-workbench.vs.agent-sessions-workbench .part.auxiliarybar,385.monaco-workbench.vs.agent-sessions-workbench .part.panel {386border-color: var(--vscode-editorWidget-border, var(--vscode-widget-border, transparent));387}388389/* ---- Chat Layout ---- */390391/* Remove max-width from the session container so the scrollbar extends full width */392.agent-sessions-workbench .interactive-session {393max-width: none;394}395396.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows {397background: transparent !important;398}399400.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.request:hover,401.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.response:hover,402.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.focused.request,403.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.focused.response,404.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.selected.request,405.monaco-workbench.vs.agent-sessions-workbench .part.chatbar .interactive-list > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.selected.response {406background: transparent !important;407}408409/* Constrain content items to the same max-width, centered */410.agent-sessions-workbench .interactive-session .interactive-item-container {411max-width: 950px;412margin: 0 auto;413padding-left: 12px !important;414padding-right: 12px !important;415box-sizing: border-box;416}417418.agent-sessions-workbench .interactive-session > .chat-suggest-next-widget {419max-width: 950px;420margin: 0 auto;421padding-left: 12px !important;422padding-right: 12px !important;423box-sizing: border-box;424}425426/* ---- Chat Output ---- */427428/* Top fade overlay: dims content scrolled near the top edge of the chat bar card.429* Use the Monaco scroll shadow element, which is only shown when scrollTop > 0. */430.agent-sessions-workbench .part.chatbar .monaco-scrollable-element > .shadow.top {431height: 16px;432background: linear-gradient(to bottom, var(--part-background), transparent);433box-shadow: none;434}435436/* Same fade overlay for the chat renderer inside an editor (e.g. floating aux window). */437.agent-sessions-workbench .chat-editor-relative .interactive-list .monaco-scrollable-element > .shadow.top {438height: 16px;439background: linear-gradient(to bottom, var(--vscode-editor-background), transparent);440box-shadow: none;441}442443/* ---- Chat Input ---- */444445.agent-sessions-workbench .interactive-session .chat-input-container {446border-radius: var(--vscode-cornerRadius-large);447border-color: var(--vscode-agentsChatInput-border) !important;448background-color: var(--vscode-agentsChatInput-background);449color: var(--vscode-agentsChatInput-foreground);450}451452.agent-sessions-workbench .interactive-session .chat-input-container.focused {453border-color: var(--vscode-agentsChatInput-focusBorder, var(--vscode-focusBorder)) !important;454}455456/* While the developer-joy animated border is active, keep a faint457persistent ring so the input still has a visible boundary throughout458the comet animation (improves visuals + accessibility). The spinning459gradient ring overlays this. When focused, the regular focus border460is blended/dimmed during the animation to avoid competing visually. */461.agent-sessions-workbench .interactive-session .chat-input-container.working:not(.focused) {462border-color: var(--vscode-agentsChatInput-border) !important;463}464465/* Dim the focus border while the comet is animating so the bright focus466ring doesn't visually fight with the spinning gradient. */467.agent-sessions-workbench .interactive-session .chat-input-container.working.focused {468border-color: color-mix(in srgb, var(--vscode-agentsChatInput-focusBorder, var(--vscode-focusBorder)) 40%, transparent) !important;469}470471/* Make the Monaco editor inside the chat input transparent so it inherits the chatInput.background */472.agent-sessions-workbench .interactive-session .interactive-input-part .chat-editor-container .interactive-input-editor .monaco-editor,473.agent-sessions-workbench .interactive-session .interactive-input-part .chat-editor-container .interactive-input-editor .monaco-editor .monaco-editor-background {474background-color: transparent !important;475}476477.agent-sessions-workbench .interactive-session .interactive-input-part {478width: 100%;479max-width: 950px;480margin: 0 auto !important;481display: inherit !important;482/* Align with panel (terminal) card margin */483padding: 4px 10px !important;484box-sizing: border-box;485}486487/* Hide shared chat-session option-group pickers in the sessions app active chat UI.488* The sessions workbench provides its own new-session configuration controls and489* should not surface the shared workbench chat session pickers here. */490.agent-sessions-workbench .interactive-session .chat-input-toolbars .chat-sessionPicker-container {491display: none;492}493494/* ---- Sessions Action Widget Pickers ---- */495496.agent-sessions-workbench .action-widget {497background-color: var(--vscode-agentsPanel-background);498}499500.agent-sessions-workbench .action-widget .action-widget-action-bar,501.agent-sessions-workbench .action-widget .action-list-filter {502background-color: var(--vscode-agentsPanel-background);503}504505.agent-sessions-workbench .action-widget .action-list-filter-row {506padding-right: 0;507}508509.agent-sessions-workbench .action-widget .monaco-scrollable-element > .monaco-list-rows {510background-color: var(--vscode-agentsPanel-background) !important;511}512513/* ---- Sessions Quick Picks ---- */514515.agent-sessions-workbench .quick-input-widget,516.agent-sessions-workbench .quick-input-titlebar {517background-color: var(--vscode-agentsPanel-background) !important;518}519520.agent-sessions-workbench .quick-input-header,521.agent-sessions-workbench .quick-input-html-widget,522.agent-sessions-workbench .quick-input-list .monaco-scrollable-element > .monaco-list-rows,523.agent-sessions-workbench .quick-input-tree .monaco-scrollable-element > .monaco-list-rows {524background-color: var(--vscode-agentsPanel-background) !important;525}526527.agent-sessions-workbench .quick-input-header {528border-radius: var(--vscode-cornerRadius-xLarge);529}530531/* ---- Sessions Context Menus ---- */532533.agent-sessions-workbench .context-view.monaco-menu-container,534.agent-sessions-workbench .context-view.monaco-menu-container .monaco-menu,535.agent-sessions-workbench .context-view.monaco-menu-container .monaco-scrollable-element {536background-color: var(--vscode-agentsPanel-background) !important;537}538539/* Keep code block backgrounds stable across themes; add separation in older light themes via border only */540.agent-sessions-workbench .interactive-session .interactive-response .interactive-result-code-block {541border-color: var(--vscode-editorWidget-border, var(--vscode-widget-border));542}543/* ---- Modal Editor Block ---- */544545.agent-sessions-workbench .monaco-modal-editor-block {546background: rgba(0, 0, 0, 0.5);547}548549.agent-sessions-workbench .monaco-modal-editor-block .modal-editor-sidebar .monaco-tl-twistie.force-no-twistie {550width: 0 !important;551padding-left: 0 !important;552padding-right: 0 !important;553}554555556/* ---- Customization Empty State ---- */557558/* Icon + title side by side in a row, description underneath */559.agent-sessions-workbench .ai-customization-list-widget .list-empty-state .empty-state-header {560display: flex;561flex-direction: row;562align-items: center;563gap: 6px;564}565566.agent-sessions-workbench .ai-customization-list-widget .list-empty-state .empty-state-header > .empty-state-icon {567font-size: 16px;568margin-bottom: 0;569flex-shrink: 0;570}571572/* MCP / Plugin empty state: icon + title side by side */573.agent-sessions-workbench .mcp-empty-state .empty-state-header {574display: flex;575flex-direction: row;576align-items: center;577gap: 6px;578}579580.agent-sessions-workbench .mcp-empty-state .empty-state-header > .empty-icon {581font-size: 16px;582margin-bottom: 0;583flex-shrink: 0;584}585586/* ---- Part Appear Transitions ---- */587588/*589* Subtle appear animation when parts transition from display:none → visible590* (via split-view-view .visible class).591*592* Auxiliary bar, panel, and chat bar animate their container via opacity,593* margin, border-color, and background. The sidebar reveal animation applies594* only to `.part.sidebar > .content`, using opacity + transform so the595* sidebar container, header, and footer stay visually fixed.596*597* Opacity transiently creates a stacking context while it animates from 0 to 1598* over 250ms — once settled at opacity: 1, no additional stacking context is599* introduced by this animation. Margin and transform shifts are purely visual600* within the grid-allocated space.601*/602603.agent-sessions-workbench .part.auxiliarybar,604.agent-sessions-workbench .part.panel,605.agent-sessions-workbench .part.chatbar {606transition:607opacity 250ms ease-out,608margin-top 250ms ease-out,609margin-right 250ms ease-out,610margin-bottom 250ms ease-out;611}612613/* Auxiliary bar also transitions horizontal margin */614.agent-sessions-workbench .part.auxiliarybar {615transition:616opacity 250ms ease-out,617margin 250ms ease-out;618}619620.agent-sessions-workbench .part.sidebar > .content {621transition:622opacity 250ms ease-out,623transform 250ms ease-out;624}625626@starting-style {627/* Shared starting values */628.agent-sessions-workbench .part.auxiliarybar,629.agent-sessions-workbench .part.panel,630.agent-sessions-workbench .part.chatbar {631opacity: 0;632border-color: transparent;633}634635/* Card parts: blend from surrounding background */636.agent-sessions-workbench .part.auxiliarybar,637.agent-sessions-workbench .part.panel,638.agent-sessions-workbench .part.chatbar {639background: color-mix(in srgb, var(--part-background) 60%, var(--vscode-sideBar-background));640}641642.agent-sessions-workbench .part.sidebar > .content {643opacity: 0;644transform: translateX(-6px);645}646647/* Panel (bottom): slides down from 6px above → margin: 0 10px 10px 10px */648.agent-sessions-workbench .part.panel {649margin: 6px 16px 16px 16px;650}651652/* Auxiliary bar (right): slides in from 6px right → margin: 0 10px 0px 0 */653.agent-sessions-workbench .part.auxiliarybar {654margin: 0 16px 0px 6px;655}656657/* Chat bar (center-bottom): slides up from 6px below → margin: 0 10px 0px 10px */658.agent-sessions-workbench .part.chatbar {659margin: 6px 16px 0px 16px;660}661}662663@media (prefers-reduced-motion: reduce) {664.agent-sessions-workbench .part.auxiliarybar,665.agent-sessions-workbench .part.panel,666.agent-sessions-workbench .part.chatbar {667transition: none;668}669670.agent-sessions-workbench .part.sidebar > .content {671transition: none;672}673}674675/* ---- Widget Customizations ---- */676677/* Action Widget */678.agent-sessions-workbench .action-widget .monaco-list .monaco-list-row {679padding-right: 0;680}681682/* Badge */683.agent-sessions-workbench .badge > .badge-content {684border-radius: 4px !important;685}686687/* Phone-layout rules for parts, sashes, max-width constraints, and grid688background live in mobileChatShell.css — do not duplicate them here. */689690/*691* Phone layout (< 640px) styles. Currently the only mobile form factor692* supported by the sessions workbench; tablet/larger viewports fall back693* to the desktop layout.694*/695696/* ---- Phone Layout: Overscroll Containment ---- */697698/* Prevent body rubber-band on iOS and Chrome pull-to-refresh on Android */699.agent-sessions-workbench.phone-layout .monaco-scrollable-element > .scrollable-element {700overscroll-behavior: contain;701}702703.agent-sessions-workbench.phone-layout .interactive-session {704overscroll-behavior: contain;705}706707.agent-sessions-workbench.phone-layout .monaco-list {708overscroll-behavior: contain;709}710711/* ---- Phone Layout: Touch Target Sizing ---- */712713/* Ensure interactive elements meet 44px minimum touch target.714Excludes:715- Quick pick toolbars: 44x44 icons crowd the small popup header.716- Chat input toolbars: a dense row of picker buttons (Local, Auto,717agent, model, tools, send...). Enforcing 44px makes items 50px tall718and shows a huge hover/active background next to smaller adjacent719labels, making the bar feel unbalanced. */720.agent-sessions-workbench.phone-layout .action-item > .action-label {721min-height: 44px;722min-width: 44px;723}724725.agent-sessions-workbench.phone-layout .quick-input-widget .action-item > .action-label,726.agent-sessions-workbench.phone-layout .chat-input-toolbars .action-item > .action-label {727min-height: 0;728min-width: 0;729}730731/* Touch action for tap responsiveness */732.agent-sessions-workbench.phone-layout .action-item,733.agent-sessions-workbench.phone-layout button {734touch-action: manipulation;735}736737/* Disable text selection callout on interactive elements */738.agent-sessions-workbench.phone-layout .action-item,739.agent-sessions-workbench.phone-layout .monaco-toolbar,740.agent-sessions-workbench.phone-layout .sidebar-footer {741-webkit-touch-callout: none;742user-select: none;743-webkit-user-select: none;744}745746/* Titlebar safe-area inset lives in mobileChatShell.css */747748/* ---- Phone Layout: Mobile Quick Picks ---- */749750/* On phone, expand quick picks to use the viewport with safe-area gutters751rather than the desktop-default narrow popup near the trigger. Position752is left untouched so the picker stays anchored where the user invoked753it (avoids feeling modal/jumpy). */754.agent-sessions-workbench.phone-layout .quick-input-widget {755left: 8px !important;756right: 8px !important;757width: auto !important;758max-width: none !important;759}760761.agent-sessions-workbench.phone-layout .quick-input-widget .quick-input-list,762.agent-sessions-workbench.phone-layout .quick-input-widget .quick-input-tree {763max-height: 50vh;764}765766.agent-sessions-workbench.phone-layout .quick-input-widget .quick-input-list .monaco-list-row,767.agent-sessions-workbench.phone-layout .quick-input-widget .quick-input-tree .monaco-list-row {768min-height: 44px;769}770771/* ---- Phone Layout: Mobile Dialogs ---- */772773/* Make dialogs near-full-width with larger buttons on phone */774.agent-sessions-workbench.phone-layout .monaco-dialog-box {775width: calc(100% - 32px);776max-width: calc(100% - 32px);777}778779.agent-sessions-workbench.phone-layout .monaco-dialog-box .dialog-buttons-row .monaco-button {780min-height: 44px;781font-size: 16px;782}783784/* ---- Phone Layout: Mobile Notifications ---- */785786/* Full-width notification toasts at top of screen */787.agent-sessions-workbench.phone-layout .notifications-toasts {788left: 8px !important;789right: 8px !important;790bottom: auto !important;791top: calc(env(safe-area-inset-top) + 48px) !important;792width: auto !important;793}794795.agent-sessions-workbench.phone-layout .notifications-toasts .notification-toast {796width: 100%;797max-width: 100%;798}799800.agent-sessions-workbench.phone-layout .notifications-toasts .notification-toast .notification-toast-container {801border-radius: 12px;802}803804/* ---- Phone Layout: Hover Cards ---- */805806/* Disable delayed hover cards on touch devices — they never trigger */807.agent-sessions-workbench.phone-layout .monaco-hover {808display: none;809}810811/* Exception: keep hovers that are explicitly triggered (e.g., info buttons) */812.agent-sessions-workbench.phone-layout .monaco-hover.visible-on-mobile {813display: block;814}815816/* ---- Phone Layout: Mobile Editor Modal ---- */817818/* Full-screen editor modal on phone — no margins, covers entire viewport */819.agent-sessions-workbench.phone-layout .monaco-modal-editor-part {820top: 0 !important;821left: 0 !important;822right: 0 !important;823bottom: 0 !important;824width: 100% !important;825height: 100% !important;826border-radius: 0 !important;827margin: 0 !important;828animation: editor-slide-up 250ms ease-out;829}830831@keyframes editor-slide-up {832from {833transform: translateY(30%);834opacity: 0.5;835}836to {837transform: translateY(0);838opacity: 1;839}840}841842/* Make the modal backdrop fully cover the screen on phone */843.agent-sessions-workbench.phone-layout .monaco-modal-editor-block {844background: rgba(0, 0, 0, 0.7);845}846847/* Safe area padding for editor titlebar on phone */848.agent-sessions-workbench.phone-layout .monaco-modal-editor-part .title {849padding-top: env(safe-area-inset-top);850}851852/* ---- Phone Layout: Input Auto-Zoom Prevention ---- */853854/* iOS Safari zooms in on input focus when font-size < 16px.855Force minimum 16px on all input elements on phone. */856.agent-sessions-workbench.phone-layout input,857.agent-sessions-workbench.phone-layout textarea,858.agent-sessions-workbench.phone-layout .monaco-inputbox input,859.agent-sessions-workbench.phone-layout .chat-input-container textarea {860font-size: 16px;861}862863/* ---- Phone Layout: Native Scroll Preservation ---- */864865/* Ensure chat content uses momentum scrolling on phone.866The -webkit-overflow-scrolling property is needed for older iOS. */867.agent-sessions-workbench.phone-layout .interactive-session .monaco-scrollable-element {868-webkit-overflow-scrolling: touch;869}870871/* ---- Phone Layout: Bottom Sheet Panel ---- */872873/* Panel slides up from bottom as a sheet on phone */874.agent-sessions-workbench.phone-layout .split-view-view:has(> .part.panel) {875position: absolute !important;876bottom: 0 !important;877left: 0 !important;878right: 0 !important;879height: 60vh !important;880z-index: 200;881animation: panel-slide-up 250ms ease-out;882border-radius: 16px 16px 0 0;883overflow: hidden;884}885886@keyframes panel-slide-up {887from {888transform: translateY(100%);889opacity: 0.5;890}891to {892transform: translateY(0);893opacity: 1;894}895}896897/* Panel drag handle visual indicator */898.agent-sessions-workbench.phone-layout .part.panel::before {899content: '';900display: block;901width: 36px;902height: 5px;903background: var(--vscode-foreground);904opacity: 0.3;905border-radius: 3px;906margin: 8px auto 4px auto;907}908909/* ---- Phone Layout: Auxiliary Bar Overlay ---- */910911/* Auxiliary bar slides in from the right as a full-height overlay on phone */912.agent-sessions-workbench.phone-layout .split-view-view:has(> .part.auxiliarybar) {913position: absolute !important;914top: 0 !important;915right: 0 !important;916bottom: 0 !important;917width: 85vw !important;918max-width: 400px;919z-index: 200;920animation: auxbar-slide-in 250ms ease-out;921}922923@keyframes auxbar-slide-in {924from {925transform: translateX(100%);926opacity: 0;927}928to {929transform: translateX(0);930opacity: 1;931}932}933934935