@import "tailwindcss";
@import "@xterm/xterm/css/xterm.css";

/* 阻止跨 frame 的 compositor 级滚动链传播到父 frame */
html, body {
  overscroll-behavior: none;
}

/* ============================================
   Design System - 参考 ai-assistant 项目风格
   ============================================ */

:root {
  /* ---- Radix Teal 色阶 (品牌色) ---- */
  --teal-1: 180 50% 99.2%;
  --teal-2: 180 44% 97%;
  --teal-3: 180 43% 93.8%;
  --teal-4: 180 44% 89.7%;
  --teal-5: 180 42% 84.3%;
  --teal-6: 181 39% 76.8%;
  --teal-7: 181 35% 66.3%;
  --teal-8: 181 33% 52.5%;
  --teal-9: 179 35% 35%;
  --teal-10: 179 37% 31%;
  --teal-11: 180 50% 22%;
  --teal-12: 186 100% 7%;

  /* ---- Radix Slate 色阶 (UI 灰色) ---- */
  --slate-1: 240 20% 99%;
  --slate-2: 240 17% 97%;
  --slate-3: 240 14% 94.5%;
  --slate-4: 240 13% 92%;
  --slate-5: 240 12% 89.5%;
  --slate-6: 237 11% 86%;
  --slate-7: 235 9% 81%;
  --slate-8: 233 8% 70%;
  --slate-9: 230 7% 55%;
  --slate-10: 228 6% 50%;
  --slate-11: 225 6% 40%;
  --slate-12: 210 14% 13%;

  /* ---- Radix Red 色阶 (错误状态) ---- */
  --red-9: 358 75% 59%;
  --red-10: 358 69% 55%;
  --red-11: 358 65% 49%;

  /* ---- Radix Green 色阶 (成功状态) ---- */
  --green-9: 151 55% 42%;
  --green-10: 152 57% 39%;
  --green-11: 153 67% 28%;

  /* ---- Radix Amber 色阶 (警告状态) ---- */
  --amber-9: 39 100% 57%;
  --amber-10: 36 100% 50%;
  --amber-11: 24 100% 37%;

  /* ---- Radix Orange 色阶 (运行状态) ---- */
  --orange-9: 24 94% 50%;
  --orange-10: 21 90% 45%;
  --orange-11: 16 80% 35%;

  /* ---- Radix Violet 色阶 (符号: function/method 图标) ---- */
  --violet-9: 252 56% 57%;
  --violet-10: 251 48% 53%;
  --violet-11: 250 43% 48%;

  /* ---- Radix Blue 色阶 (符号: interface 图标) ---- */
  --blue-9: 206 100% 50%;
  --blue-10: 207 96% 43%;
  --blue-11: 208 88% 43%;

  /* ---- 语义颜色 (shadcn 风格) ---- */
  --background: 0 0% 98%;
  --foreground: var(--slate-12);
  --card: 0 0% 100%;
  --card-foreground: var(--slate-12);
  --popover: 0 0% 100%;
  --popover-foreground: var(--slate-12);
  --primary: var(--slate-12);
  --primary-foreground: 0 0% 100%;
  --secondary: var(--slate-3);
  --secondary-foreground: var(--slate-12);
  --muted: var(--slate-3);
  --muted-foreground: var(--slate-11);
  --accent: var(--slate-3);
  --accent-foreground: var(--slate-12);
  --destructive: var(--red-9);
  --destructive-foreground: 0 0% 100%;
  --border: var(--slate-5);
  --input: var(--slate-5);
  --ring: var(--teal-9);
  --brand: var(--teal-9);
  --brand-foreground: var(--teal-11);

  /* ---- 圆角 ---- */
  --radius: 0.5rem;
}

/* ---- 暗色主题 ---- */
.dark {
  /* Radix Teal Dark */
  --teal-1: 183 30% 7%;
  --teal-2: 183 35% 9%;
  --teal-3: 183 38% 12%;
  --teal-4: 182 40% 15%;
  --teal-5: 182 40% 18%;
  --teal-6: 182 38% 23%;
  --teal-7: 181 35% 30%;
  --teal-8: 180 34% 40%;
  --teal-9: 179 42% 50%;
  --teal-10: 179 48% 56%;
  --teal-11: 179 55% 65%;
  --teal-12: 180 50% 85%;

  /* Radix Slate Dark */
  --slate-1: 240 6% 7%;
  --slate-2: 240 5% 10%;
  --slate-3: 240 5% 13%;
  --slate-4: 240 4% 16%;
  --slate-5: 240 4% 19%;
  --slate-6: 238 4% 23%;
  --slate-7: 235 4% 30%;
  --slate-8: 233 4% 40%;
  --slate-9: 230 5% 52%;
  --slate-10: 228 5% 58%;
  --slate-11: 220 9% 70%;
  --slate-12: 220 9% 80%;

  /* Radix Red Dark */
  --red-9: 358 75% 59%;
  --red-10: 357 74% 64%;
  --red-11: 355 78% 75%;

  /* Radix Green Dark */
  --green-9: 151 55% 42%;
  --green-10: 150 52% 48%;
  --green-11: 148 58% 60%;

  /* Radix Amber Dark */
  --amber-9: 39 100% 57%;
  --amber-10: 43 100% 64%;
  --amber-11: 46 100% 74%;

  /* Radix Orange Dark */
  --orange-9: 24 94% 50%;
  --orange-10: 27 96% 58%;
  --orange-11: 30 100% 68%;

  /* Radix Violet Dark — function/method symbol icons. Brighter at -11
     so the glyph reads at small sizes (12-14px) on dark surfaces. */
  --violet-9: 252 56% 57%;
  --violet-10: 251 63% 63%;
  --violet-11: 252 87% 76%;

  /* Radix Blue Dark — interface symbol icons. */
  --blue-9: 206 100% 50%;
  --blue-10: 209 100% 60%;
  --blue-11: 210 100% 72%;

  /* 语义颜色 Dark */
  --background: var(--slate-1);
  --foreground: var(--slate-12);
  --card: 0 0% 12%;
  --card-foreground: var(--slate-12);
  --popover: 0 0% 12%;
  --popover-foreground: var(--slate-12);
  --primary: var(--slate-12);
  --primary-foreground: var(--slate-1);
  --secondary: var(--slate-3);
  --secondary-foreground: var(--slate-12);
  --muted: var(--slate-3);
  --muted-foreground: var(--slate-11);
  --accent: var(--slate-4);
  --accent-foreground: var(--slate-12);
  --destructive: var(--red-9);
  --destructive-foreground: 0 0% 100%;
  --border: var(--slate-6);
  --input: var(--slate-6);
  --ring: var(--teal-9);
  --brand: var(--teal-9);
  --brand-foreground: var(--teal-11);
}

/* ---- Tailwind v4 主题注册 ---- */
@theme inline {
  /* 字体 */
  --font-sans: var(--font-inter), "PingFang SC", "Microsoft YaHei", sans-serif;
  --font-serif: var(--font-lora), "PingFang SC", "Microsoft YaHei", serif;
  /*
   * 等宽字体：优先使用 Maple Mono CN（中英文 2:1 完美对齐）
   * 安装方式：brew install --cask font-maple-mono-nf-cn
   * 备选：Sarasa Mono SC (brew install --cask font-sarasa-gothic)
   */
  --font-mono: "Maple Mono CN", "Maple Mono NF CN", "Sarasa Mono SC", var(--font-jetbrains-mono), "Menlo", "Consolas", monospace;

  /* 颜色 */
  --color-background: hsl(var(--background));
  --color-foreground: hsl(var(--foreground));
  --color-card: hsl(var(--card));
  --color-card-foreground: hsl(var(--card-foreground));
  --color-popover: hsl(var(--popover));
  --color-popover-foreground: hsl(var(--popover-foreground));
  --color-primary: hsl(var(--primary));
  --color-primary-foreground: hsl(var(--primary-foreground));
  --color-secondary: hsl(var(--secondary));
  --color-secondary-foreground: hsl(var(--secondary-foreground));
  --color-muted: hsl(var(--muted));
  --color-muted-foreground: hsl(var(--muted-foreground));
  --color-accent: hsl(var(--accent));
  --color-accent-foreground: hsl(var(--accent-foreground));
  --color-destructive: hsl(var(--destructive));
  --color-destructive-foreground: hsl(var(--destructive-foreground));
  --color-border: hsl(var(--border));
  --color-input: hsl(var(--input));
  --color-ring: hsl(var(--ring));
  --color-brand: hsl(var(--brand));
  --color-brand-foreground: hsl(var(--brand-foreground));

  /* Teal 色阶 */
  --color-teal-1: hsl(var(--teal-1));
  --color-teal-2: hsl(var(--teal-2));
  --color-teal-3: hsl(var(--teal-3));
  --color-teal-4: hsl(var(--teal-4));
  --color-teal-5: hsl(var(--teal-5));
  --color-teal-6: hsl(var(--teal-6));
  --color-teal-7: hsl(var(--teal-7));
  --color-teal-8: hsl(var(--teal-8));
  --color-teal-9: hsl(var(--teal-9));
  --color-teal-10: hsl(var(--teal-10));
  --color-teal-11: hsl(var(--teal-11));
  --color-teal-12: hsl(var(--teal-12));

  /* Slate 色阶 */
  --color-slate-1: hsl(var(--slate-1));
  --color-slate-2: hsl(var(--slate-2));
  --color-slate-3: hsl(var(--slate-3));
  --color-slate-4: hsl(var(--slate-4));
  --color-slate-5: hsl(var(--slate-5));
  --color-slate-6: hsl(var(--slate-6));
  --color-slate-7: hsl(var(--slate-7));
  --color-slate-8: hsl(var(--slate-8));
  --color-slate-9: hsl(var(--slate-9));
  --color-slate-10: hsl(var(--slate-10));
  --color-slate-11: hsl(var(--slate-11));
  --color-slate-12: hsl(var(--slate-12));

  /* 状态色 */
  --color-red-9: hsl(var(--red-9));
  --color-red-10: hsl(var(--red-10));
  --color-red-11: hsl(var(--red-11));
  --color-green-9: hsl(var(--green-9));
  --color-green-10: hsl(var(--green-10));
  --color-green-11: hsl(var(--green-11));
  --color-amber-9: hsl(var(--amber-9));
  --color-amber-10: hsl(var(--amber-10));
  --color-amber-11: hsl(var(--amber-11));
  --color-orange-9: hsl(var(--orange-9));
  --color-orange-10: hsl(var(--orange-10));
  --color-orange-11: hsl(var(--orange-11));
  --color-violet-9: hsl(var(--violet-9));
  --color-violet-10: hsl(var(--violet-10));
  --color-violet-11: hsl(var(--violet-11));
  --color-blue-9: hsl(var(--blue-9));
  --color-blue-10: hsl(var(--blue-10));
  --color-blue-11: hsl(var(--blue-11));

  /* 圆角 */
  --radius-sm: calc(var(--radius) - 4px);
  --radius-md: calc(var(--radius) - 2px);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) + 4px);
}

/* ---- 基础样式 ---- */
html {
  font-size: 14px; /* 基础字体大小调小 */
}

body {
  background: hsl(var(--background));
  color: hsl(var(--foreground));
  /* 直接使用 --font-inter 变量（由 Next.js font 在 body 上定义）*/
  font-family: var(--font-inter), "PingFang SC", "Microsoft YaHei", sans-serif;
  /* 禁用浏览器默认的双指滑动前进后退 */
  overscroll-behavior-x: none;
}

/* ---- 滚动条样式 ---- */
* {
  scrollbar-width: thin;
  scrollbar-color: hsl(var(--slate-6)) transparent;
}

*::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

*::-webkit-scrollbar-track {
  background: transparent;
}

*::-webkit-scrollbar-thumb {
  background-color: hsl(var(--slate-6));
  border-radius: 4px;
}

.dark *::-webkit-scrollbar-thumb {
  background-color: hsl(var(--slate-7));
}

/* 隐藏滚动条的工具类 */
.scrollbar-hide {
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.scrollbar-hide::-webkit-scrollbar {
  display: none;
}

/* Toast 动画 */
@keyframes slideIn {
  from {
    transform: translateY(-100%);
    opacity: 0;
  }
  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes slideOut {
  from {
    transform: translateY(0);
    opacity: 1;
  }
  to {
    transform: translateY(-100%);
    opacity: 0;
  }
}

/* Session 完成通知动画（左下角） */
@keyframes slideInLeft {
  from {
    transform: translateX(-100%);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

/* ---- Confirm Dialog 动画 ---- */
@keyframes confirmFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes confirmFadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}
@keyframes confirmScaleIn {
  from { transform: scale(0.95); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}

/* ---- BlockViewer: pin-click flash on a function block's title bar ----
 * Triggered when the user navigates to a block via an input/output pin
 * or the function-history drawer. Three-cycle amber pulse over ~1.5s
 * draws the eye to the destination so the jump doesn't feel abrupt.
 */
@keyframes block-flash {
  0%, 100% { background-color: hsl(var(--secondary) / 0.4); }
  20%, 60% { background-color: hsl(var(--amber-9) / 0.45); }
}
.block-flash {
  animation: block-flash 1.5s ease-in-out;
}

/* ---- BlockViewer: per-line flash for diff-overview ruler clicks ----
 * Triggered when the user clicks a tick on the chip-diff overview
 * ruler — we scroll the specific changed line into view and pulse it
 * amber for 1.5s. Trade-off: during the animation the line's natural
 * `bg-green-9/15` (added-line tint) is replaced by the keyframe's
 * background-color; once the animation ends and the class is
 * removed, the green class re-applies. Acceptable visual blip given
 * the precise navigation it enables.
 */
@keyframes line-flash {
  0%, 100% { background-color: hsl(var(--amber-9) / 0); }
  30%, 70% { background-color: hsl(var(--amber-9) / 0.5); }
}
.line-flash {
  animation: line-flash 1.5s ease-in-out;
}

/* ---- Shiki 代码高亮样式 ---- */
.shiki-wrapper pre {
  margin: 0;
  padding: 1rem;
  overflow-x: auto;
  border-radius: 0.5rem;
}

.shiki-wrapper code {
  /* 使用 flexbox 避免换行符文本节点造成的额外间距 */
  display: flex;
  flex-direction: column;
}

.shiki-wrapper .line {
  /* flexbox 子项自动占满一行，不需要 display: block */
  line-height: 1.5;
  white-space: pre; /* 行内保留空白 */
}

.shiki-wrapper .line-number {
  display: inline-block;
  min-width: 4ch;
  margin-right: 1em;
  padding-right: 0.5em;
  text-align: right;
  color: #6b7280;
  border-right: 1px solid #e5e7eb;
  user-select: none;
  font-variant-numeric: tabular-nums;
}

.dark .shiki-wrapper .line-number {
  color: #9ca3af;
  border-right-color: #374151;
}

/* ---- Prism (react-syntax-highlighter) token 隔离 ----
 *
 * Prism 的 markdown grammar 把 token 类型直接当 className 使用
 * （e.g. <span class="token table table-header-row">），其中 `table`
 * 与 Tailwind 的 display utility `.table { display: table }` 同名，
 * 会让表格行里每个 token 都被强制成 block-level table 元素，
 * 视觉上变成每个 `|`、每个单元格独占一行。
 *
 * 同名风险的 token 还包括 `code`、`url`、`list`、`title` 等——
 * 这里用一条 selector 把 Prism 高亮里所有 token 的 display 复位成
 * inline，从源头隔绝 Prism 命名空间与 Tailwind utility 命名空间的冲突。
 *
 * 作用域限制：只命中 react-syntax-highlighter 渲染出的
 * `<code class="language-xxx">` 内部，不影响其他地方的 .table / .code
 * 等 Tailwind 工具类。
 */
code[class*="language-"] .token {
  display: inline;
}

/* ============================================
   Tiptap Editor Styles
   ============================================ */

.tiptap-editor {
  outline: none;
  font-size: 0.9375rem;
  line-height: 1.7;
  color: hsl(var(--foreground));
}

.tiptap-editor p.is-editor-empty:first-child::before {
  content: attr(data-placeholder);
  float: left;
  color: hsl(var(--slate-8));
  pointer-events: none;
  height: 0;
}

.tiptap-editor h1 {
  font-size: 1.5rem;
  font-weight: 700;
  line-height: 1.3;
  margin-top: 1.5rem;
  margin-bottom: 0.5rem;
}

.tiptap-editor h2 {
  font-size: 1.25rem;
  font-weight: 600;
  line-height: 1.3;
  margin-top: 1.25rem;
  margin-bottom: 0.5rem;
}

.tiptap-editor h3 {
  font-size: 1.1rem;
  font-weight: 600;
  line-height: 1.3;
  margin-top: 1rem;
  margin-bottom: 0.5rem;
}

.tiptap-editor p {
  margin-bottom: 0.5rem;
}

.tiptap-editor ul,
.tiptap-editor ol {
  padding-left: 1.5rem;
  margin-bottom: 0.5rem;
}

.tiptap-editor ul {
  list-style-type: disc;
}

.tiptap-editor ol {
  list-style-type: decimal;
}

.tiptap-editor li {
  margin-bottom: 0.25rem;
}

.tiptap-editor li p {
  margin-bottom: 0;
}

.tiptap-editor blockquote {
  border-left: 3px solid hsl(var(--border));
  padding-left: 1rem;
  margin-left: 0;
  margin-bottom: 0.5rem;
  color: hsl(var(--muted-foreground));
}

.tiptap-editor code {
  background: hsl(var(--muted));
  padding: 0.15rem 0.35rem;
  border-radius: 0.25rem;
  font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
  font-size: 0.875em;
}

.tiptap-editor pre {
  background: hsl(var(--muted));
  padding: 0.75rem 1rem;
  border-radius: 0.5rem;
  margin-bottom: 0.5rem;
  overflow-x: auto;
}

.tiptap-editor pre code {
  background: none;
  padding: 0;
  border-radius: 0;
  font-size: 0.875rem;
}

.tiptap-editor hr {
  border: none;
  border-top: 1px solid hsl(var(--border));
  margin: 1rem 0;
}

.tiptap-editor strong {
  font-weight: 600;
}

.tiptap-editor a,
.tiptap-editor a.tiptap-link {
  color: hsl(var(--brand));
  text-decoration: underline;
  cursor: pointer;
  transition: opacity 0.15s;
}

.tiptap-editor a:hover,
.tiptap-editor a.tiptap-link:hover {
  opacity: 0.8;
}

/* ---- Table ---- */
.tiptap-editor table {
  border-collapse: collapse;
  width: 100%;
  margin-bottom: 0.75rem;
  overflow: hidden;
}

.tiptap-editor th,
.tiptap-editor td {
  border: 1px solid hsl(var(--border));
  padding: 0.4rem 0.6rem;
  text-align: left;
  vertical-align: top;
  position: relative;
  min-width: 80px;
}

.tiptap-editor th {
  background: hsl(var(--muted));
  font-weight: 600;
  font-size: 0.875rem;
}

.tiptap-editor td > *,
.tiptap-editor th > * {
  margin-bottom: 0;
}

.tiptap-editor .selectedCell::after {
  content: '';
  position: absolute;
  inset: 0;
  background: hsl(var(--brand) / 0.1);
  pointer-events: none;
}

/* ---- Task List ---- */
.tiptap-editor ul[data-type='taskList'] {
  list-style: none;
  padding-left: 0;
}

.tiptap-editor ul[data-type='taskList'] li {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  margin-bottom: 0.25rem;
}

.tiptap-editor ul[data-type='taskList'] li > label {
  flex-shrink: 0;
  margin-top: 0.2rem;
  cursor: pointer;
}

.tiptap-editor ul[data-type='taskList'] li > label input[type='checkbox'] {
  width: 1rem;
  height: 1rem;
  accent-color: hsl(var(--brand));
  cursor: pointer;
}

.tiptap-editor ul[data-type='taskList'] li > div {
  flex: 1;
}

.tiptap-editor ul[data-type='taskList'] li[data-checked='true'] > div {
  text-decoration: line-through;
  color: hsl(var(--muted-foreground));
}

/* ---- Code search highlight classes (short names to reduce HTML size) ---- */
.hl-cur { background: rgba(217, 119, 6, 0.5); }   /* current match */
.hl-m { background: rgba(217, 119, 6, 0.3); }     /* other matches */

.hl-kw { background: rgba(217, 119, 6, 0.4); border-radius: 2px; padding: 0 2px; } /* keyword */

/* ---- LSP Cmd+Click visual feedback ---- */
.cmd-held-container {
  cursor: pointer;
}
.cmd-held-container span[style]:hover {
  text-decoration: underline;
}

/* ---- LSP jump flash highlight (0.5s fade out) ---- */
.flash-line {
  animation: flash-fade 0.5s ease-out forwards !important;
}

@keyframes flash-fade {
  0%   { background-color: hsl(var(--brand) / 0.4); }
  30%  { background-color: hsl(var(--brand) / 0.25); }
  65%  { background-color: hsl(var(--brand) / 0.1); }
  100% { background-color: transparent; }
}

/* ---- Vi mode cursor line ---- */
.vi-cursor-line {
  background-color: hsl(var(--brand) / 0.22) !important;
  box-shadow: inset 2px 0 0 0 hsl(var(--brand));
}

/* ---- Vi mode character cursor (inline block cursor with blink) ---- */
.vi-char-cursor {
  animation: vi-cursor-blink 1s step-end infinite;
  background-color: hsl(var(--brand) / 0.65);
}

@keyframes vi-cursor-blink {
  0%, 100% { background-color: hsl(var(--brand) / 0.65); }
  50% { background-color: transparent; }
}

/* ---- Chat search highlight ---- */
mark.chat-search-match { background: rgba(217, 119, 6, 0.3); color: inherit; border-radius: 2px; }
mark.chat-search-current { background: rgba(217, 119, 6, 0.6); color: inherit; border-radius: 2px; }

/* Review highlight styles are rendered as inline styles in HighlightOverlayLayer.tsx */

/* ============================================
   ANSI Terminal Color Classes (ansi_up)
   ============================================ */

/* Styles */
.ansi-bold { font-weight: bold; }
.ansi-dim { opacity: 0.7; }
.ansi-italic { font-style: italic; }
.ansi-underline { text-decoration: underline; }
.ansi-strikethrough { text-decoration: line-through; }

/* Standard foreground colors */
.ansi-black-fg { color: #3c3c3c; }
.ansi-red-fg { color: #e55561; }
.ansi-green-fg { color: #8cc265; }
.ansi-yellow-fg { color: #d18f52; }
.ansi-blue-fg { color: #4aa5f0; }
.ansi-magenta-fg { color: #c162de; }
.ansi-cyan-fg { color: #42b3c2; }
.ansi-white-fg { color: #d0d0d0; }

/* Bright foreground colors */
.ansi-bright-black-fg { color: #666666; }
.ansi-bright-red-fg { color: #ef8080; }
.ansi-bright-green-fg { color: #a5e075; }
.ansi-bright-yellow-fg { color: #e5c07b; }
.ansi-bright-blue-fg { color: #61afef; }
.ansi-bright-magenta-fg { color: #d68fd6; }
.ansi-bright-cyan-fg { color: #56d4dd; }
.ansi-bright-white-fg { color: #ffffff; }

/* Standard background colors */
.ansi-black-bg { background-color: #1e1e1e; }
.ansi-red-bg { background-color: #e55561; }
.ansi-green-bg { background-color: #8cc265; }
.ansi-yellow-bg { background-color: #d18f52; }
.ansi-blue-bg { background-color: #4aa5f0; }
.ansi-magenta-bg { background-color: #c162de; }
.ansi-cyan-bg { background-color: #42b3c2; }
.ansi-white-bg { background-color: #d0d0d0; }

/* Bright background colors */
.ansi-bright-black-bg { background-color: #666666; }
.ansi-bright-red-bg { background-color: #ef8080; }
.ansi-bright-green-bg { background-color: #a5e075; }
.ansi-bright-yellow-bg { background-color: #e5c07b; }
.ansi-bright-blue-bg { background-color: #61afef; }
.ansi-bright-magenta-bg { background-color: #d68fd6; }
.ansi-bright-cyan-bg { background-color: #56d4dd; }
.ansi-bright-white-bg { background-color: #ffffff; }

/* Light theme overrides */
:root .ansi-black-fg { color: #1e1e1e; }
:root .ansi-white-fg { color: #6b7280; }
:root .ansi-bright-black-fg { color: #4b5563; }
:root .ansi-bright-white-fg { color: #374151; }

/* xterm.js 嵌入气泡样式 */
.xterm-renderer .xterm {
  padding: 0;
}
.xterm-renderer .xterm-viewport {
  background-color: transparent !important;
  overflow-y: auto !important;
  /* Stop terminal scroll from chaining to the outer bubble list at top/bottom */
  overscroll-behavior: contain;
}

/* Keep inner bubble scroll areas from chaining to the outer bubble list at edges */
.console-scroll-root [class~="overflow-auto"],
.console-scroll-root [class~="overflow-y-auto"],
.console-scroll-root [class~="overflow-x-auto"] {
  overscroll-behavior: contain;
}
.xterm-renderer .xterm-screen {
  background-color: transparent !important;
}
