.editorShell { position: relative; container-type: inline-size; margin: 0 0 14px; } .editorShellDropdownOpen { z-index: 7; } .container { position: relative; container-type: inline-size; border-radius: 12px; margin: 0; cursor: text; --chat-editor-min-height: 140px; --chat-editor-max-height: min(350px, 40vh); --chat-editor-input-min-height: 44px; --chat-editor-input-max-height: 300px; --chat-editor-attachments-max-height: 136px; --dac-glow-on: 0; --dac-glow-pulse: 0; --dac-g1: #6a78ff; --dac-g2: #8a7bff; --chat-send-button-disabled-foreground: var(--secondary-foreground); --chat-send-button-foreground: #fafafa; } .content { position: relative; z-index: 2; display: flex; box-sizing: border-box; min-height: var(--chat-editor-min-height, 140px); max-height: var(--chat-editor-max-height, min(350px, 40vh)); flex-direction: column; overflow: visible; border: 1.5px solid var(--agent-gray-200); border-radius: inherit; background: var(--chat-editor-bg-primary); opacity: 1; padding: 12px; } .dacAura, .dacHalo { pointer-events: none; } .dacAura { position: absolute; inset: -50px; z-index: 0; opacity: calc(var(--dac-glow-on) * (0.66 + var(--dac-glow-pulse) * 0.34)); -webkit-mask: radial-gradient( ellipse 56% 64% at center, transparent 28%, #000 48%, transparent 94% ); mask: radial-gradient( ellipse 56% 64% at center, transparent 28%, #000 48%, transparent 94% ); will-change: opacity; } .dacAura::before, .dacAura::after { position: absolute; inset: 0; content: ''; will-change: opacity; } .dacAura::before { background: color-mix(in srgb, var(--dac-g1) 58%, transparent); -webkit-mask: repeating-linear-gradient(90deg, #000 0 1px, transparent 1px 5px), repeating-linear-gradient(0deg, #000 0 1px, transparent 1px 5px); -webkit-mask-composite: source-in; mask: repeating-linear-gradient(90deg, #000 0 1px, transparent 1px 5px), repeating-linear-gradient(0deg, #000 0 1px, transparent 1px 5px); mask-composite: intersect; opacity: 1; transition: opacity 0.2s ease; } .dacAura::after { background: color-mix(in srgb, var(--dac-g1) 66%, transparent); -webkit-mask: repeating-linear-gradient(90deg, #000 0 1px, transparent 1px 5px), repeating-linear-gradient(0deg, #000 0 1px, transparent 1px 5px), repeating-linear-gradient( 90deg, #000 0, rgba(0, 0, 0, 0.08) 28px, #000 56px ); -webkit-mask-composite: source-in, source-in; mask: repeating-linear-gradient(90deg, #000 0 1px, transparent 1px 5px), repeating-linear-gradient(0deg, #000 0 1px, transparent 1px 5px), repeating-linear-gradient( 90deg, #000 0, rgba(0, 0, 0, 0.08) 28px, #000 56px ); mask-composite: intersect, intersect; opacity: 0; animation: dac-aura-cols 2.4s linear infinite paused; transition: opacity 0.2s ease; } .container[data-dac-typing] .dacAura::before { opacity: 0; } .container[data-dac-typing] .dacAura::after { opacity: 1; animation-play-state: running; } .dacHalo { position: absolute; inset: 0; z-index: 1; border-radius: inherit; opacity: var(--dac-glow-on); box-shadow: 0 0 0 1px color-mix(in srgb, var(--dac-g2) 36%, transparent), 0 1px 5px color-mix(in srgb, var(--dac-g1) 18%, transparent), 0 6px 30px color-mix(in srgb, var(--dac-g1) 22%, transparent); will-change: opacity; } .dacHalo::after { position: absolute; inset: 0; border-radius: inherit; box-shadow: 0 6px 40px color-mix(in srgb, var(--dac-g1) 14%, transparent); content: ''; opacity: calc(var(--dac-glow-on) * var(--dac-glow-pulse)); will-change: opacity; } @keyframes dac-aura-cols { from { -webkit-mask-position: 0 0, 0 0, 0 0; mask-position: 0 0, 0 0, 0 0; } to { -webkit-mask-position: 0 0, 0 0, 56px 0; mask-position: 0 0, 0 0, 56px 0; } } @media (prefers-reduced-motion: reduce) { .dacAura::after, .container[data-dac-typing] .dacAura::after { opacity: 0; animation: none; } .container[data-dac-typing] .dacAura::before { opacity: 1; } } .atPortalLayer { display: contents; } :global([data-web-shell-slash-menu]) { width: 620px; max-width: min( calc(var(--radix-popover-trigger-width) - 32px), var(--radix-popover-content-available-width), calc(100vw - 24px) ); max-height: var(--radix-popover-content-available-height); overflow: hidden; } :global([data-web-shell-slash-detail]) { z-index: calc(var(--web-shell-popover-z-index, 1000) + 1); width: min(320px, calc(100vw - 24px)); max-height: min(200px, var(--radix-popover-content-available-height)); overflow: hidden; } :global([data-web-shell-toolbar-popover]) { width: min(18rem, var(--radix-popover-content-available-width)); max-height: var(--radix-popover-content-available-height); overflow: hidden; } .slashPanel { max-height: min( 460px, calc(var(--radix-popover-content-available-height) - 20px) ); overflow: hidden; cursor: default; } .slashPanelBody { max-height: inherit; overflow: hidden; } .slashList { display: flex; width: 100%; max-height: inherit; flex-direction: column; gap: 2px; overflow-x: hidden; overflow-y: auto; scroll-padding-bottom: 12px; scrollbar-color: var(--chat-editor-border-color) transparent; scrollbar-width: thin; } .slashList::-webkit-scrollbar { width: 6px; height: 6px; } .slashList::-webkit-scrollbar-track { background: transparent; } .slashList::-webkit-scrollbar-thumb { border-radius: 3px; background: var(--chat-editor-border-color); } .slashEntry { display: flex; min-width: 0; flex-direction: column; } .slashSection { height: 1px; margin: 5px 8px; background: var(--chat-editor-border-color); } .slashSectionHeader { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; padding: 4px 8px 2px; color: var(--muted-foreground); font-size: 11px; font-weight: 500; letter-spacing: 0.02em; user-select: none; } .slashSectionCount { flex: 0 0 auto; color: var(--muted-foreground); font-weight: 400; font-variant-numeric: tabular-nums; opacity: 0.7; } .slashItem { position: relative; display: grid; width: 100%; min-width: 0; grid-template-columns: minmax(0, 220px) minmax(0, 1fr); column-gap: 8px; align-items: baseline; padding: 5px 8px; border: 0; border-radius: 6px; background: transparent; color: var(--foreground); font: inherit; text-align: left; cursor: pointer; } .slashItem:not([data-has-description]) { grid-template-columns: minmax(0, 1fr); column-gap: 0; } .slashItem:hover, .slashItemActive { background: var(--accent); } .slashItem:hover .slashCommand, .slashItemActive .slashCommand { color: var(--foreground); } .slashDetail { min-height: 0; max-height: min( 180px, max(0px, calc(var(--radix-popover-content-available-height) - 20px)) ); overflow: auto; overflow-wrap: anywhere; } .slashDetailCommand { margin-bottom: 5px; color: var(--foreground); font-family: var(--font-sans, system-ui, sans-serif); font-size: 14px; font-weight: 400; line-height: 22px; white-space: nowrap; } .slashDetailText { color: var(--muted-foreground); font-size: 12px; font-weight: 400; line-height: 20px; white-space: pre-wrap; } .slashCommand { min-width: 0; overflow: hidden; color: var(--foreground); font-family: var(--font-sans, system-ui, sans-serif); font-size: 14px; font-weight: 400; line-height: 22px; text-overflow: ellipsis; white-space: nowrap; } .slashDescription { min-width: 0; overflow: hidden; color: var(--muted-foreground); font-size: 12px; font-weight: 400; line-height: 20px; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .atPanel { position: fixed; z-index: var(--web-shell-popover-z-index, 1000); --at-anchor-width: 620px; display: flex; width: min(360px, calc(var(--at-anchor-width) - 32px), calc(100vw - 24px)); max-height: min(var(--at-panel-max-height, 300px), 42vh); box-sizing: border-box; flex-direction: column; padding: 6px; overflow: hidden; border: 1px solid var(--chat-editor-border-color); border-radius: 8px; background: var(--background); box-shadow: 0 2px 4px -2px rgba(0, 0, 0, 0.1), 0 4px 6px -1px rgba(0, 0, 0, 0.1); color: var(--chat-editor-text-primary); cursor: default; font-family: var(--font-sans, system-ui, sans-serif); font-size: 13px; line-height: 1.35; } .atPanelHeaderWrap { flex: 0 0 auto; padding: 3px 4px 7px; margin-bottom: 4px; border-bottom: 1px solid var(--chat-editor-border-color); } .atPanelHeader { display: flex; min-width: 0; align-items: center; gap: 6px; margin-bottom: 6px; } .atBackButton { display: inline-flex; width: 22px; height: 22px; align-items: center; justify-content: center; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--muted-foreground); cursor: pointer; font: inherit; font-size: 18px; line-height: 1; } .atBackButton:hover { background: var(--accent); color: var(--foreground); } .atPanelTitle { min-width: 0; overflow: hidden; color: var(--foreground); font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .atTabsWrap { display: grid; min-width: 0; grid-template-columns: 22px minmax(0, 1fr) 22px; align-items: center; gap: 4px; margin-top: 4px; margin-bottom: 0; } .atTabs { display: flex; min-width: 0; gap: 4px; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; } .atTabs::-webkit-scrollbar { display: none; } .atTab, .atTabScrollButton { display: inline-flex; min-width: 0; height: 22px; align-items: center; justify-content: center; padding: 0 8px; border: 0; border-radius: 5px; background: transparent; color: var(--muted-foreground); cursor: pointer; font: inherit; font-size: 12px; line-height: 18px; white-space: nowrap; } .atTab { flex: 0 0 auto; max-width: 120px; overflow: hidden; text-overflow: ellipsis; } .atTabScrollButton { width: 22px; padding: 0; font-size: 16px; } .atTab:hover, .atTabActive, .atTabScrollButton:hover { background: var(--accent); color: var(--foreground); } .atTab:disabled { opacity: 0.45; cursor: default; } .atSearchInput { width: 100%; min-width: 0; box-sizing: border-box; padding: 5px 7px; border: 1px solid var(--chat-editor-border-color); border-radius: 6px; outline: none; background: transparent; color: var(--foreground); font: inherit; font-size: 12px; line-height: 18px; } .atSearchInput::placeholder { color: var(--muted-foreground); } .atList { display: flex; min-height: 0; flex: 1 1 auto; flex-direction: column; gap: 2px; overflow-x: hidden; overflow-y: auto; border-radius: 6px; scroll-padding-bottom: 6px; scrollbar-color: var(--chat-editor-border-color) transparent; scrollbar-width: thin; } .atList::-webkit-scrollbar { width: 6px; height: 6px; } .atList::-webkit-scrollbar-track { background: transparent; } .atList::-webkit-scrollbar-thumb { border-radius: 3px; background: var(--chat-editor-border-color); } .atItem { display: grid; width: 100%; min-width: 0; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: 'label trailing' 'description trailing'; column-gap: 8px; row-gap: 1px; align-items: center; padding: 6px 8px; border: 0; border-radius: 6px; background: transparent; color: var(--foreground); font: inherit; text-align: left; cursor: pointer; } .atItem:hover, .atItemActive { background: var(--accent); } .atItemSingleLine { grid-template-areas: 'label trailing'; padding-top: 5px; padding-bottom: 5px; } .atItemMain { grid-area: label; display: grid; width: 100%; min-width: 0; grid-template-columns: var(--at-item-main-template, minmax(0, 1fr)); column-gap: 8px; align-items: end; justify-self: stretch; } .atItemLeading { display: grid; width: 100%; min-width: 0; grid-template-columns: auto minmax(0, 1fr); align-items: end; gap: 6px; overflow: hidden; } .atItemIcon { display: inline-block; width: 16px; height: 16px; flex: 0 0 auto; background: currentColor; color: var(--muted-foreground); mask: var(--at-item-icon-url) center / contain no-repeat; -webkit-mask: var(--at-item-icon-url) center / contain no-repeat; } .atItemImageIcon { display: block; width: 16px; height: 16px; flex: 0 0 auto; object-fit: contain; } .atItemIconSpin { animation: at-item-icon-spin 1.2s linear infinite; } .atItemLabel, .atItemSubtitle { min-width: 0; overflow: hidden; font-size: 13px; line-height: 18px; text-overflow: ellipsis; white-space: nowrap; } .atItemLabel { display: block; width: 100%; color: var(--foreground); } .atItemSubtitle { color: var(--muted-foreground); justify-self: end; text-align: right; } @keyframes at-item-icon-spin { to { transform: rotate(360deg); } } .atItemDescription { grid-area: description; min-width: 0; overflow: hidden; color: var(--muted-foreground); font-size: 12px; line-height: 16px; text-overflow: ellipsis; white-space: nowrap; } .atItemTrailing { grid-area: trailing; color: var(--muted-foreground); font-size: 16px; line-height: 1; } .atEmpty { padding: 10px 8px; color: var(--muted-foreground); font-size: 12px; } .attachments { display: flex; min-height: 0; max-height: var(--chat-editor-attachments-max-height, 136px); flex: 0 1 auto; flex-direction: column; overflow-y: auto; overscroll-behavior: contain; } .tags { display: flex; flex: 0 0 auto; flex-wrap: wrap; gap: 6px; padding: 0 0 8px; } .tag { position: relative; display: inline-flex; align-items: center; max-width: 100%; min-height: 22px; border: 1px solid var(--chat-editor-border-color); border-radius: 4px; background: var(--chat-editor-bg-tertiary); color: var(--chat-editor-text-primary); font-family: var(--font-mono); font-size: 12px; line-height: 1.2; } .tagContent { display: inline-flex; min-width: 0; max-width: 100%; flex: 1 1 auto; align-items: center; } .tagTooltip { z-index: calc(var(--web-shell-tooltip-z-index, 1000) + 1); box-sizing: border-box; min-width: 160px; max-width: min(320px, 80vw); max-height: min( calc(100vh - 16px), var(--radix-tooltip-content-available-height, calc(100vh - 16px)) ); padding: 8px 10px; border: 1px solid var(--chat-editor-border-color); border-radius: 6px; background: var(--background); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18); color: var(--foreground); font-family: var(--font-sans, system-ui, sans-serif); font-size: 12px; line-height: 1.5; overflow-y: auto; overscroll-behavior: contain; pointer-events: auto; white-space: normal; } .tagLabel, .tagValue { color: var(--chat-editor-text-primary); } .tagIcon { display: block; width: 12px; height: 12px; flex: 0 0 auto; margin-left: 7px; background: currentColor; mask: var(--composer-tag-icon-url) center / contain no-repeat; -webkit-mask: var(--composer-tag-icon-url) center / contain no-repeat; } .tagLabel, .tagValue { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .tagLabel { padding: 3px 0 3px 7px; color: var(--chat-editor-accent-color); } .tagIcon + .tagLabel { padding-left: 0.5ch; } .tagValue { max-width: 32ch; padding: 3px 0 3px 0.5ch; color: var(--foreground, #e4e4e4); opacity: 1; } .tagRemove { flex: 0 0 auto; width: 22px; height: 22px; padding: 0; border: 0; background: transparent; color: var(--chat-editor-text-dimmed); font: inherit; line-height: 22px; cursor: pointer; border-radius: 0 4px 4px 0; } .tagRemove:hover, .tagRemove:focus-visible { color: var(--error-color); outline: none; } .editorArea { display: flex; flex: 1 1 auto; align-items: stretch; gap: 6px; min-height: var(--chat-editor-input-min-height, 44px); padding: 4px 0; overflow: clip; } .editorArea > :last-child { display: grid; min-width: 0; min-height: var(--chat-editor-input-min-height, 44px); flex: 1; overflow: clip; } .editorArea :global(.cm-editor) { height: 100%; min-height: 0; } .editorArea :global(.cm-scroller) { height: 100%; min-height: 0; } .shellPrefix { flex: 0 0 auto; align-self: flex-start; padding-top: 1px; color: var(--chat-editor-accent-color); font-family: var(--font-mono); font-size: 14px; font-weight: 600; line-height: 1.6; user-select: none; pointer-events: none; } .editorArea .cm-content { color: var(--foreground); font-family: var(--font-sans, system-ui, sans-serif); font-size: 14px; line-height: 1.6; } /* Touch-device textarea backend (#5958). Mirrors the CodeMirror look; the 16px font size is mandatory: iOS Safari auto-zooms the page when focusing any input with a smaller font. */ .mobileTextarea { field-sizing: content; width: 100%; min-height: var(--chat-editor-input-min-height, 44px); max-height: var(--chat-editor-input-max-height, 300px); padding: 0; border: none; outline: none; background: transparent; resize: none; color: var(--chat-editor-text-primary, #e0e0e0); caret-color: var(--chat-editor-accent-color, #4a9eff); font-family: var(--font-sans, system-ui, sans-serif); font-size: 16px; line-height: 1.6; } .mobileTextarea::placeholder { color: var(--chat-editor-text-dimmed, #666); } /* As .editorArea's last child the textarea would inherit `overflow: clip` from the rule above, pinning scrollTop to 0 — content beyond the height cap would become unreachable. The extra `textarea` type wins that specificity. */ .editorArea > textarea.mobileTextarea { overflow-y: auto; } .editorArea .cm-scroller { scrollbar-color: var(--chat-editor-border-color) transparent; scrollbar-width: thin; } .editorArea .cm-scroller::-webkit-scrollbar { width: 6px; } .editorArea .cm-scroller::-webkit-scrollbar-track { background: transparent; } .editorArea .cm-scroller::-webkit-scrollbar-thumb { border-radius: 3px; background: var(--chat-editor-border-color); } .toolbar { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; min-width: 0; padding: 4px 0 0; gap: 8px; } .toolbarLeading, .toolbarStart, .toolbarEnd, .toolbarLeft, .toolbarRight { display: flex; align-items: center; gap: 4px; } .toolbarLeading { margin-left: -5px; min-width: 0; } .toolbar[data-mobile-voice-active='true'] .toolbarLeading, .toolbar[data-mobile-voice-active='true'] [data-hide-during-mobile-voice] { display: none; } .toolbar[data-mobile-voice-active='true'] .toolbarRight { margin-left: auto; } .toolbarStart { min-width: 0; } .toolbarEnd { min-width: 0; } .toolbarLeft { min-width: 0; flex-wrap: nowrap; } .gitBranchChip { display: inline-flex; min-width: 0; max-width: 180px; height: 28px; padding: 0 8px; align-items: center; gap: 5px; border-radius: 6px; color: var(--agent-gray-500); font-family: var(--font-sans, system-ui, sans-serif); font-size: 13px; line-height: 1; } /* When the chip opens the Changes dialog it renders as a