styles.css

   1/* CSS Reset and Base Styles */
   2* {
   3  box-sizing: border-box;
   4}
   5
   6html {
   7  height: 100%;
   8  height: 100dvh;
   9  overflow: hidden;
  10}
  11
  12body {
  13  margin: 0;
  14  height: 100%;
  15  overflow: hidden;
  16  font-family:
  17    "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace;
  18  line-height: 1.6;
  19  -webkit-font-smoothing: antialiased;
  20  letter-spacing: -0.01em;
  21  color: var(--text-primary);
  22  background: var(--bg-secondary);
  23}
  24
  25/* CSS Variables */
  26:root {
  27  --font-mono:
  28    "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace;
  29  --primary: #2563eb;
  30  --primary-dark: #1d4ed8;
  31  --bg-base: #ffffff;
  32  --bg-secondary: #f9fafb;
  33  --bg-tertiary: #f3f4f6;
  34  --border: #e5e7eb;
  35  --text-primary: #111827;
  36  --text-secondary: #6b7280;
  37  --text-tertiary: #9ca3af;
  38  --success-bg: #f0fdf4;
  39  --success-border: #bbf7d0;
  40  --success-text: #166534;
  41  --error-bg: #fef2f2;
  42  --error-border: #fecaca;
  43  --error-text: #991b1b;
  44  --warning-bg: #fffbeb;
  45  --warning-border: #fcd34d;
  46  --warning-text: #92400e;
  47  --blue-bg: #eff6ff;
  48  --blue-border: #bfdbfe;
  49  --blue-text: #1e40af;
  50  --user-message-text: #2563eb;
  51  --link-color: #2563eb;
  52  --green-600: #16a34a;
  53  --green-700: #15803d;
  54  --gray-50: #f9fafb;
  55  --gray-100: #f3f4f6;
  56  --gray-200: #e5e7eb;
  57  --gray-300: #d1d5db;
  58  --gray-400: #9ca3af;
  59  --gray-500: #6b7280;
  60  --gray-600: #4b5563;
  61  --gray-700: #374151;
  62  --gray-800: #1f2937;
  63  --gray-900: #111827;
  64}
  65
  66.dark {
  67  --bg-base: #1f2937;
  68  --bg-secondary: #111827;
  69  --bg-tertiary: #374151;
  70  --border: #374151;
  71  --text-primary: #f9fafb;
  72  --text-secondary: #9ca3af;
  73  --text-tertiary: #6b7280;
  74  --success-bg: rgba(34, 197, 94, 0.1);
  75  --success-border: rgba(34, 197, 94, 0.3);
  76  --success-text: #86efac;
  77  --error-bg: rgba(239, 68, 68, 0.1);
  78  --error-border: rgba(239, 68, 68, 0.3);
  79  --error-text: #fca5a5;
  80  --warning-bg: rgba(251, 191, 36, 0.15);
  81  --warning-border: #fbbf24;
  82  --warning-text: #fcd34d;
  83  --blue-bg: rgba(59, 130, 246, 0.1);
  84  --blue-border: rgba(59, 130, 246, 0.3);
  85  --blue-text: #93c5fd;
  86  --user-message-text: #60a5fa;
  87  --link-color: #60a5fa;
  88}
  89
  90/* Layout */
  91.app-container {
  92  display: flex;
  93  height: 100vh; /* Fallback for older browsers */
  94  height: 100dvh; /* Dynamic viewport height - adjusts when mobile browser chrome appears/hides */
  95  background: var(--bg-secondary);
  96  position: relative;
  97  overflow: hidden;
  98}
  99
 100.main-content {
 101  flex: 1;
 102  display: flex;
 103  flex-direction: column;
 104  min-width: 0;
 105}
 106
 107.screen-height {
 108  height: 100vh; /* Fallback for older browsers */
 109  height: 100dvh;
 110}
 111
 112.full-height {
 113  height: 100%;
 114}
 115
 116/* Flexbox utilities */
 117.flex {
 118  display: flex;
 119}
 120
 121.flex-col {
 122  flex-direction: column;
 123}
 124
 125.flex-1 {
 126  flex: 1;
 127}
 128
 129.items-center {
 130  align-items: center;
 131}
 132
 133.justify-center {
 134  justify-content: center;
 135}
 136
 137.justify-between {
 138  justify-content: space-between;
 139}
 140
 141.space-x-2 > * + * {
 142  margin-left: 0.5rem;
 143}
 144
 145.space-x-3 > * + * {
 146  margin-left: 0.75rem;
 147}
 148
 149.space-y-2 > * + * {
 150  margin-top: 0.5rem;
 151}
 152
 153.space-y-3 > * + * {
 154  margin-top: 0.75rem;
 155}
 156
 157.space-y-4 > * + * {
 158  margin-top: 1rem;
 159}
 160
 161/* Text */
 162.text-center {
 163  text-align: center;
 164}
 165
 166.text-sm {
 167  font-size: 0.875rem;
 168  line-height: 1.5;
 169}
 170
 171.text-xs {
 172  font-size: 0.75rem;
 173  line-height: 1.4;
 174}
 175
 176.text-lg {
 177  font-size: 1.125rem;
 178  line-height: 1.6;
 179}
 180
 181.font-medium {
 182  font-weight: 500;
 183}
 184
 185.font-semibold {
 186  font-weight: 600;
 187}
 188
 189.italic {
 190  font-style: italic;
 191}
 192
 193.truncate {
 194  overflow: hidden;
 195  text-overflow: ellipsis;
 196  white-space: nowrap;
 197}
 198
 199.break-words {
 200  word-break: break-word;
 201}
 202
 203.break-all {
 204  word-break: break-all;
 205}
 206
 207.whitespace-pre-wrap {
 208  white-space: pre-wrap;
 209}
 210
 211/* Colors */
 212.text-primary {
 213  color: var(--text-primary);
 214}
 215
 216.text-secondary {
 217  color: var(--text-secondary);
 218}
 219
 220.text-tertiary {
 221  color: var(--text-tertiary);
 222}
 223
 224.text-white {
 225  color: white;
 226}
 227
 228.text-error {
 229  color: var(--error-text);
 230}
 231
 232.text-success {
 233  color: var(--success-text);
 234}
 235
 236.text-blue {
 237  color: var(--blue-text);
 238}
 239
 240.bg-primary {
 241  background: var(--primary);
 242}
 243
 244.bg-base {
 245  background: var(--bg-base);
 246}
 247
 248.bg-secondary {
 249  background: var(--bg-secondary);
 250}
 251
 252/* Buttons */
 253button {
 254  font-family: inherit;
 255  cursor: pointer;
 256  border: none;
 257  background: none;
 258  padding: 0;
 259  color: inherit;
 260}
 261
 262.btn {
 263  padding: 0.5rem 0.75rem;
 264  border-radius: 0.25rem;
 265  transition: background-color 0.2s;
 266}
 267
 268.btn:hover {
 269  background: var(--bg-tertiary);
 270}
 271
 272.btn:disabled {
 273  opacity: 0.5;
 274  cursor: not-allowed;
 275}
 276
 277.btn-primary {
 278  padding: 0.5rem 1rem;
 279  background: var(--primary);
 280  color: white;
 281  border-radius: 0.25rem;
 282  font-weight: 500;
 283  transition: background-color 0.2s;
 284  letter-spacing: -0.01em;
 285}
 286
 287.btn-primary:hover:not(:disabled) {
 288  background: var(--primary-dark);
 289}
 290
 291.btn-primary:disabled {
 292  background: var(--gray-300);
 293  cursor: not-allowed;
 294}
 295
 296.dark .btn-primary:disabled {
 297  background: var(--gray-600);
 298}
 299
 300.btn-secondary {
 301  padding: 0.5rem 1rem;
 302  background: var(--bg-secondary);
 303  color: var(--text-primary);
 304  border: 1px solid var(--border);
 305  border-radius: 0.25rem;
 306  font-weight: 500;
 307  transition: background-color 0.2s;
 308  letter-spacing: -0.01em;
 309}
 310
 311.btn-secondary:hover {
 312  background: var(--bg-tertiary);
 313}
 314
 315.btn-sm {
 316  padding: 0.375rem 0.75rem;
 317  font-size: 0.8125rem;
 318}
 319
 320.btn-icon {
 321  padding: 0.5rem;
 322  border-radius: 0.375rem;
 323  display: flex;
 324  align-items: center;
 325  justify-content: center;
 326  transition: background-color 0.2s;
 327}
 328
 329.btn-icon:hover {
 330  background: var(--bg-tertiary);
 331}
 332
 333.btn-icon-sm {
 334  padding: 0.25rem;
 335  border-radius: 0.25rem;
 336  display: flex;
 337  align-items: center;
 338  justify-content: center;
 339  transition:
 340    background-color 0.2s,
 341    opacity 0.2s;
 342  opacity: 0.4;
 343  color: var(--text-secondary);
 344}
 345
 346.btn-icon-sm:hover {
 347  background: var(--gray-200);
 348  opacity: 1;
 349}
 350
 351.dark .btn-icon-sm:hover {
 352  background: var(--gray-600);
 353}
 354
 355.conversation-item:hover .btn-icon-sm {
 356  opacity: 0.7;
 357}
 358
 359.conversation-item.active .btn-icon-sm {
 360  color: rgba(255, 255, 255, 0.8);
 361  opacity: 0.7;
 362}
 363
 364.conversation-item.active .btn-icon-sm:hover {
 365  background: rgba(255, 255, 255, 0.2);
 366  color: white;
 367  opacity: 1;
 368}
 369
 370.btn-icon-sm.btn-danger:hover {
 371  background: var(--red-600);
 372  color: white;
 373  opacity: 1;
 374}
 375
 376.btn-new {
 377  width: 2rem;
 378  height: 2rem;
 379  background: var(--text-primary);
 380  color: var(--bg-base);
 381  border-radius: 50%;
 382  display: flex;
 383  align-items: center;
 384  justify-content: center;
 385  transition: background-color 0.2s;
 386}
 387
 388.btn-new:hover {
 389  background: var(--text-secondary);
 390}
 391
 392/* Header */
 393.header {
 394  flex: 0 0 auto;
 395  background: var(--bg-base);
 396  border-bottom: 1px solid var(--border);
 397  padding: 0.5rem 1rem;
 398  padding-top: calc(0.5rem + env(safe-area-inset-top, 0px));
 399  padding-left: max(1rem, env(safe-area-inset-left));
 400  padding-right: max(1rem, env(safe-area-inset-right));
 401  display: flex;
 402  align-items: center;
 403  justify-content: space-between;
 404  gap: 0.5rem;
 405}
 406
 407.header-left {
 408  display: flex;
 409  align-items: center;
 410  gap: 0.75rem;
 411  min-width: 0; /* Allow shrinking below content size */
 412  flex: 1 1 auto;
 413  overflow: hidden;
 414}
 415
 416.header-title {
 417  font-size: 1rem;
 418  font-weight: 600;
 419  overflow: hidden;
 420  text-overflow: ellipsis;
 421  white-space: nowrap;
 422  letter-spacing: -0.02em;
 423  min-width: 0; /* Allow shrinking */
 424}
 425
 426.header-actions {
 427  display: flex;
 428  align-items: center;
 429  gap: 0.5rem;
 430  flex-shrink: 0; /* Never shrink the actions */
 431}
 432
 433/* Drawer/Sidebar */
 434.drawer {
 435  position: fixed;
 436  inset: 0 auto 0 0;
 437  z-index: 50;
 438  width: 20rem;
 439  max-width: calc(100vw - 3rem); /* Ensure drawer doesn't fill entire screen on mobile */
 440  background: var(--bg-base);
 441  border-right: 1px solid var(--border);
 442  color: var(--text-primary);
 443  display: flex;
 444  flex-direction: column;
 445  height: 100%;
 446  height: 100dvh;
 447  transform: translateX(-100%);
 448  transition: transform 0.3s ease;
 449  padding-top: env(safe-area-inset-top);
 450  padding-left: env(safe-area-inset-left);
 451  padding-bottom: env(safe-area-inset-bottom);
 452}
 453
 454.drawer.open {
 455  transform: translateX(0);
 456}
 457
 458.drawer-header {
 459  display: flex;
 460  align-items: center;
 461  justify-content: space-between;
 462  padding: 1rem;
 463}
 464
 465.drawer-header-actions {
 466  display: flex;
 467  align-items: center;
 468  gap: 0.25rem;
 469}
 470
 471.drawer-title {
 472  font-size: 1.125rem;
 473  font-weight: 600;
 474}
 475
 476.drawer-body {
 477  flex: 1;
 478  overflow-y: auto;
 479  min-height: 0;
 480}
 481
 482.drawer-section {
 483  padding: 1rem;
 484  border-bottom: 1px solid var(--border);
 485}
 486
 487.drawer-footer {
 488  padding: 1rem;
 489}
 490
 491/* Backdrop */
 492.backdrop {
 493  position: fixed;
 494  inset: 0;
 495  background: rgba(0, 0, 0, 0.5);
 496  z-index: 40;
 497}
 498
 499/* Conversation List */
 500.conversation-list {
 501  padding: 0.5rem;
 502}
 503
 504.conversation-item {
 505  width: 100%;
 506  text-align: left;
 507  padding: 0.75rem;
 508  border-radius: 0.5rem;
 509  margin-bottom: 0.25rem;
 510  transition: background-color 0.2s;
 511  display: flex;
 512  flex-direction: row;
 513  align-items: center;
 514  gap: 0.25rem;
 515}
 516
 517.conversation-item:hover {
 518  background: var(--bg-tertiary);
 519}
 520
 521.conversation-item.active {
 522  background: var(--primary);
 523  color: white;
 524}
 525
 526.conversation-item .conversation-title {
 527  font-weight: 500;
 528  font-size: 0.875rem;
 529  word-break: break-all;
 530}
 531
 532.conversation-item .conversation-meta {
 533  display: flex;
 534  align-items: center;
 535  gap: 0.5rem;
 536  font-size: 0.75rem;
 537  color: var(--text-tertiary);
 538  min-width: 0;
 539}
 540
 541.conversation-item .conversation-date {
 542  flex-shrink: 0;
 543}
 544
 545.conversation-item.active .conversation-meta {
 546  color: rgba(255, 255, 255, 0.8);
 547}
 548
 549.conversation-item .conversation-cwd {
 550  font-family: var(--font-mono);
 551  font-size: 0.7rem;
 552  opacity: 0.8;
 553  overflow: hidden;
 554  text-overflow: ellipsis;
 555  white-space: nowrap;
 556  text-align: left;
 557  min-width: 0;
 558}
 559
 560/* Messages */
 561.messages-container {
 562  flex: 1 1 auto;
 563  overflow-y: auto;
 564  overflow-x: hidden;
 565  -webkit-overflow-scrolling: touch;
 566  overscroll-behavior: contain;
 567  padding: 1rem;
 568  padding-left: max(1rem, env(safe-area-inset-left));
 569  padding-right: max(1rem, env(safe-area-inset-right));
 570}
 571
 572.messages-list {
 573  display: flex;
 574  flex-direction: column;
 575  gap: 0.5rem;
 576}
 577
 578.message {
 579  display: flex;
 580  flex-direction: column;
 581}
 582
 583.message-content {
 584  padding: 1rem;
 585  border-radius: 0.5rem;
 586  overflow-wrap: break-word;
 587  word-wrap: break-word;
 588  min-width: 0;
 589}
 590
 591.message-user .message-content {
 592  margin-left: auto;
 593  max-width: 80%;
 594  color: var(--user-message-text);
 595}
 596
 597.message-agent .message-content,
 598.message-tool .message-content {
 599  margin-right: auto;
 600  max-width: 100%;
 601  color: var(--text-primary);
 602}
 603
 604.thinking-indicator {
 605  display: inline-flex;
 606  align-items: center;
 607  gap: 0.25rem;
 608  color: var(--text-secondary);
 609  font-size: 0.875rem;
 610  margin: 0.25rem 0 0.75rem 0;
 611  padding-left: 0.5rem;
 612}
 613
 614.thinking-dots {
 615  display: inline-flex;
 616  gap: 0.2rem;
 617  font-size: 1.25rem;
 618  letter-spacing: 0.15rem;
 619  color: var(--blue-text);
 620}
 621
 622.thinking-dots span {
 623  animation: thinking-dot 1.2s infinite ease-in-out;
 624  opacity: 0.25;
 625}
 626
 627.thinking-dots span:nth-child(2) {
 628  animation-delay: 0.2s;
 629}
 630
 631.thinking-dots span:nth-child(3) {
 632  animation-delay: 0.4s;
 633}
 634
 635@keyframes thinking-dot {
 636  0%,
 637  80%,
 638  100% {
 639    opacity: 0.25;
 640    transform: translateY(0);
 641  }
 642  40% {
 643    opacity: 1;
 644    transform: translateY(-0.2rem);
 645  }
 646}
 647
 648.message-error .message-content {
 649  margin-right: auto;
 650  max-width: 100%;
 651  background: var(--error-bg);
 652  border: 2px solid var(--error-border);
 653  color: var(--error-text);
 654}
 655
 656/* Tool Display */
 657.tool-use {
 658  background: var(--blue-bg);
 659  border: 1px solid var(--blue-border);
 660  border-radius: 0.5rem;
 661  padding: 0.75rem;
 662  margin: 0.5rem 0;
 663}
 664
 665.tool-header {
 666  display: flex;
 667  align-items: center;
 668  gap: 0.5rem;
 669  margin-bottom: 0.5rem;
 670}
 671
 672.tool-name {
 673  font-weight: 500;
 674  color: var(--blue-text);
 675}
 676
 677.tool-input {
 678  font-size: 0.875rem;
 679  font-family: monospace;
 680  background: var(--gray-100);
 681  border-radius: 0.25rem;
 682  padding: 0.5rem;
 683  overflow-wrap: break-word;
 684  word-break: break-all;
 685  white-space: pre-wrap;
 686}
 687
 688.dark .tool-input {
 689  background: var(--gray-800);
 690}
 691
 692.tool-result-details {
 693  border: 1px solid var(--border);
 694  border-radius: 0.5rem;
 695  margin: 0.5rem 0;
 696}
 697
 698.tool-result-details.error {
 699  border-color: var(--error-border);
 700}
 701
 702.tool-result-summary {
 703  cursor: pointer;
 704  padding: 0.5rem 0.75rem;
 705  border-radius: 0.5rem;
 706  transition: background-color 0.2s;
 707  background: var(--bg-tertiary);
 708}
 709
 710.tool-result-summary:hover {
 711  background: var(--bg-secondary);
 712}
 713
 714.tool-result-details.error .tool-result-summary {
 715  background: var(--error-bg);
 716  color: var(--error-text);
 717}
 718
 719.tool-result-content {
 720  padding: 0.75rem;
 721  padding-top: 0;
 722}
 723
 724.tool-result-section {
 725  background: var(--blue-bg);
 726  border: 1px solid var(--blue-border);
 727  border-radius: 0.25rem;
 728  padding: 0.5rem;
 729  margin-top: 0.75rem;
 730}
 731
 732.tool-result-section.output {
 733  background: var(--success-bg);
 734  border-color: var(--success-border);
 735}
 736
 737.tool-result-section.error.output {
 738  background: var(--error-bg);
 739  border-color: var(--error-border);
 740}
 741
 742.tool-result-label {
 743  font-size: 0.75rem;
 744  font-weight: 500;
 745  margin-bottom: 0.25rem;
 746  color: var(--blue-text);
 747}
 748
 749.tool-result-section.output .tool-result-label {
 750  color: var(--success-text);
 751}
 752
 753.tool-result-section.error.output .tool-result-label {
 754  color: var(--error-text);
 755}
 756
 757.tool-result-data {
 758  font-size: 0.875rem;
 759  font-family: monospace;
 760  overflow-wrap: break-word;
 761  word-break: break-all;
 762  white-space: pre-wrap;
 763}
 764
 765.tool-result-meta {
 766  display: flex;
 767  align-items: center;
 768  justify-content: space-between;
 769}
 770
 771.tool-result-status {
 772  font-size: 0.75rem;
 773}
 774
 775.tool-result-status.success {
 776  color: var(--success-text);
 777}
 778
 779.tool-result-status.error {
 780  color: var(--error-text);
 781}
 782
 783.tool-result-time {
 784  font-size: 0.75rem;
 785  color: var(--text-tertiary);
 786}
 787
 788/* Tool running state */
 789.tool-running {
 790  background: var(--blue-bg);
 791  border: 1px solid var(--blue-border);
 792  border-radius: 0.5rem;
 793  padding: 0.75rem;
 794  margin: 0.5rem 0;
 795}
 796
 797.tool-running-header {
 798  display: flex;
 799  align-items: center;
 800  gap: 0.5rem;
 801  margin-bottom: 0.5rem;
 802}
 803
 804.tool-status-running {
 805  font-size: 0.875rem;
 806  color: var(--text-secondary);
 807  font-style: italic;
 808  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
 809}
 810
 811@keyframes pulse {
 812  0%,
 813  100% {
 814    opacity: 1;
 815  }
 816  50% {
 817    opacity: 0.5;
 818  }
 819}
 820
 821/* Tool Component (shared styles for all tools) */
 822.tool {
 823  background: var(--gray-100);
 824  border-radius: 0.5rem;
 825  margin: 0.5rem 0;
 826  width: 100%;
 827}
 828
 829.dark .tool {
 830  background: var(--gray-800);
 831}
 832
 833.tool-header {
 834  display: flex;
 835  align-items: center;
 836  justify-content: space-between;
 837  padding: 0.75rem 1rem;
 838  cursor: pointer;
 839  user-select: none;
 840}
 841
 842.tool-header:hover {
 843  background: rgba(0, 0, 0, 0.02);
 844  border-radius: 0.5rem;
 845}
 846
 847.dark .tool-header:hover {
 848  background: rgba(255, 255, 255, 0.02);
 849}
 850
 851.tool-summary {
 852  display: flex;
 853  align-items: center;
 854  gap: 0.5rem;
 855  flex: 1;
 856  min-width: 0;
 857}
 858
 859.tool-emoji {
 860  font-size: 1rem;
 861  flex-shrink: 0;
 862}
 863
 864.tool-emoji.running {
 865}
 866
 867.tool-command {
 868  font-family: var(--font-mono);
 869  font-size: 0.875rem;
 870  color: var(--text-primary);
 871  overflow: hidden;
 872  text-overflow: ellipsis;
 873  white-space: nowrap;
 874}
 875
 876.tool-running {
 877  font-size: 0.75rem;
 878  color: var(--text-secondary);
 879  font-style: italic;
 880  flex-shrink: 0;
 881  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
 882}
 883
 884.tool-success {
 885  color: var(--success-text);
 886  font-size: 0.875rem;
 887  flex-shrink: 0;
 888}
 889
 890.tool-error {
 891  color: var(--error-text);
 892  font-size: 0.875rem;
 893  flex-shrink: 0;
 894}
 895
 896.tool-toggle {
 897  background: none;
 898  border: none;
 899  cursor: pointer;
 900  padding: 0.25rem;
 901  display: flex;
 902  align-items: center;
 903  justify-content: center;
 904  color: var(--text-secondary);
 905  flex-shrink: 0;
 906}
 907
 908.tool-toggle:hover {
 909  color: var(--text-primary);
 910}
 911
 912.tool-details {
 913  padding: 0 1rem 0.75rem 1rem;
 914  display: flex;
 915  flex-direction: column;
 916  gap: 0.75rem;
 917}
 918
 919.tool-section {
 920  display: flex;
 921  flex-direction: column;
 922  gap: 0.5rem;
 923}
 924
 925.tool-label {
 926  font-size: 0.75rem;
 927  font-weight: 500;
 928  color: var(--text-secondary);
 929  display: flex;
 930  align-items: center;
 931  gap: 0.5rem;
 932}
 933
 934.tool-time {
 935  font-size: 0.75rem;
 936  color: var(--text-tertiary);
 937  font-weight: normal;
 938}
 939
 940.tool-code {
 941  font-family: var(--font-mono);
 942  font-size: 0.875rem;
 943  background: var(--bg-base);
 944  border: 1px solid var(--border);
 945  border-radius: 0.25rem;
 946  padding: 0.75rem;
 947  margin: 0;
 948  overflow-x: auto;
 949  white-space: pre-wrap;
 950  word-break: break-word;
 951  color: var(--text-primary);
 952}
 953
 954.tool-code.error {
 955  background: var(--error-bg);
 956  border-color: var(--error-border);
 957  color: var(--error-text);
 958}
 959
 960/* Bash Tool Component - uses shared tool styles */
 961.bash-tool {
 962  /* Alias for backwards compatibility */
 963  background: var(--gray-100);
 964  border-radius: 0.5rem;
 965  margin: 0.5rem 0;
 966  width: 100%;
 967}
 968
 969.dark .bash-tool {
 970  background: var(--gray-800);
 971}
 972
 973.bash-tool-header {
 974  display: flex;
 975  align-items: center;
 976  justify-content: space-between;
 977  padding: 0.75rem 1rem;
 978  cursor: pointer;
 979  user-select: none;
 980}
 981
 982.bash-tool-header:hover {
 983  background: rgba(0, 0, 0, 0.02);
 984  border-radius: 0.5rem;
 985}
 986
 987.dark .bash-tool-header:hover {
 988  background: rgba(255, 255, 255, 0.02);
 989}
 990
 991.bash-tool-summary {
 992  display: flex;
 993  align-items: center;
 994  gap: 0.5rem;
 995  flex: 1;
 996  min-width: 0;
 997}
 998
 999.bash-tool-emoji {
1000  font-size: 1rem;
1001  flex-shrink: 0;
1002}
1003
1004.bash-tool-emoji.running {
1005}
1006
1007.bash-tool-command {
1008  font-family: var(--font-mono);
1009  font-size: 0.875rem;
1010  color: var(--text-primary);
1011  overflow: hidden;
1012  text-overflow: ellipsis;
1013  white-space: nowrap;
1014  flex-shrink: 1;
1015  min-width: 0;
1016}
1017
1018.bash-tool-cwd {
1019  font-family: var(--font-mono);
1020  font-size: 0.75rem;
1021  color: var(--text-tertiary);
1022  white-space: nowrap;
1023  overflow: hidden;
1024  text-overflow: ellipsis;
1025  flex-shrink: 0;
1026  max-width: 30%;
1027}
1028
1029.bash-tool-running {
1030  font-size: 0.75rem;
1031  color: var(--text-secondary);
1032  font-style: italic;
1033  flex-shrink: 0;
1034  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1035}
1036
1037.bash-tool-success {
1038  color: var(--success-text);
1039  font-size: 0.875rem;
1040  flex-shrink: 0;
1041}
1042
1043.bash-tool-error {
1044  color: var(--error-text);
1045  font-size: 0.875rem;
1046  flex-shrink: 0;
1047}
1048
1049.bash-tool-cancelled {
1050  color: var(--error-text);
1051  font-size: 0.875rem;
1052  flex-shrink: 0;
1053}
1054
1055.bash-tool-toggle {
1056  background: none;
1057  border: none;
1058  cursor: pointer;
1059  padding: 0.25rem;
1060  display: flex;
1061  align-items: center;
1062  justify-content: center;
1063  color: var(--text-secondary);
1064  flex-shrink: 0;
1065}
1066
1067.bash-tool-toggle:hover {
1068  color: var(--text-primary);
1069}
1070
1071.bash-tool-details {
1072  padding: 0 1rem 0.75rem 1rem;
1073  display: flex;
1074  flex-direction: column;
1075  gap: 0.75rem;
1076}
1077
1078.bash-tool-section {
1079  display: flex;
1080  flex-direction: column;
1081  gap: 0.5rem;
1082}
1083
1084.bash-tool-label {
1085  font-size: 0.75rem;
1086  font-weight: 500;
1087  color: var(--text-secondary);
1088  display: flex;
1089  align-items: center;
1090  gap: 0.5rem;
1091}
1092
1093.bash-tool-time {
1094  font-size: 0.75rem;
1095  color: var(--text-tertiary);
1096  font-weight: normal;
1097}
1098
1099.bash-tool-code {
1100  font-family: var(--font-mono);
1101  font-size: 0.875rem;
1102  background: var(--bg-base);
1103  border: 1px solid var(--border);
1104  border-radius: 0.25rem;
1105  padding: 0.75rem;
1106  margin: 0;
1107  overflow-x: auto;
1108  white-space: pre-wrap;
1109  word-break: break-word;
1110  color: var(--text-primary);
1111}
1112
1113.bash-tool-code.error {
1114  background: var(--error-bg);
1115  border-color: var(--error-border);
1116  color: var(--error-text);
1117}
1118
1119/* Patch Tool */
1120.patch-tool {
1121  background: var(--gray-100);
1122  border-radius: 0.5rem;
1123  margin: 0.5rem 0;
1124  width: 100%;
1125  /* Performance: isolate layout/paint for each patch tool */
1126  contain: layout style;
1127}
1128
1129.dark .patch-tool {
1130  background: var(--gray-800);
1131}
1132
1133.patch-tool-header {
1134  display: flex;
1135  align-items: center;
1136  justify-content: space-between;
1137  padding: 0.75rem 1rem;
1138  cursor: pointer;
1139  user-select: none;
1140}
1141
1142.patch-tool-header:hover {
1143  background: rgba(0, 0, 0, 0.02);
1144  border-radius: 0.5rem;
1145}
1146
1147.dark .patch-tool-header:hover {
1148  background: rgba(255, 255, 255, 0.02);
1149}
1150
1151.patch-tool-summary {
1152  display: flex;
1153  align-items: center;
1154  gap: 0.5rem;
1155  flex: 1;
1156  min-width: 0;
1157}
1158
1159.patch-tool-emoji {
1160  font-size: 1rem;
1161  flex-shrink: 0;
1162}
1163
1164.patch-tool-emoji.running {
1165}
1166
1167.patch-tool-filename {
1168  font-family: var(--font-mono);
1169  font-size: 0.875rem;
1170  color: var(--text-primary);
1171  overflow: hidden;
1172  text-overflow: ellipsis;
1173  white-space: nowrap;
1174  font-weight: 500;
1175}
1176
1177.patch-tool-running {
1178  font-size: 0.75rem;
1179  color: var(--text-secondary);
1180  font-style: italic;
1181  flex-shrink: 0;
1182  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1183}
1184
1185.patch-tool-success {
1186  color: var(--success-text);
1187  font-size: 0.875rem;
1188  flex-shrink: 0;
1189}
1190
1191.patch-tool-error {
1192  color: var(--text-secondary);
1193  font-size: 0.875rem;
1194  flex-shrink: 0;
1195}
1196
1197.patch-tool-header-controls {
1198  display: flex;
1199  align-items: center;
1200  gap: 0.25rem;
1201  flex-shrink: 0;
1202}
1203
1204.patch-tool-toggle {
1205  background: none;
1206  border: none;
1207  cursor: pointer;
1208  padding: 0.25rem;
1209  display: flex;
1210  align-items: center;
1211  justify-content: center;
1212  color: var(--text-secondary);
1213  flex-shrink: 0;
1214}
1215
1216.patch-tool-toggle:hover {
1217  color: var(--text-primary);
1218}
1219
1220.patch-tool-diff-mode-toggle {
1221  background: none;
1222  border: 1px solid var(--border);
1223  border-radius: 0.25rem;
1224  cursor: pointer;
1225  padding: 0.25rem;
1226  display: flex;
1227  align-items: center;
1228  justify-content: center;
1229  color: var(--text-secondary);
1230  flex-shrink: 0;
1231  transition: all 0.15s ease;
1232}
1233
1234.patch-tool-diff-mode-toggle:hover {
1235  color: var(--text-primary);
1236  background: var(--bg-secondary);
1237  border-color: var(--text-tertiary);
1238}
1239
1240.patch-tool-details {
1241  padding: 0 1rem 0.75rem 1rem;
1242  display: flex;
1243  flex-direction: column;
1244  gap: 0.75rem;
1245}
1246
1247.patch-tool-section {
1248  display: flex;
1249  flex-direction: column;
1250  gap: 0.5rem;
1251}
1252
1253.patch-tool-label {
1254  font-size: 0.75rem;
1255  font-weight: 500;
1256  color: var(--text-secondary);
1257  display: flex;
1258  align-items: center;
1259  justify-content: space-between;
1260}
1261
1262.patch-tool-time {
1263  font-size: 0.75rem;
1264  color: var(--text-tertiary);
1265  font-weight: normal;
1266}
1267
1268.patch-tool-error-message {
1269  font-family: var(--font-mono);
1270  font-size: 0.875rem;
1271  background: var(--bg-tertiary);
1272  border: 1px solid var(--border);
1273  border-radius: 0.25rem;
1274  padding: 0.75rem;
1275  margin: 0;
1276  overflow-x: auto;
1277  white-space: pre-wrap;
1278  word-break: break-word;
1279  color: var(--text-secondary);
1280}
1281
1282/* Patch Tool Simple Diff View */
1283.patch-tool-diff {
1284  font-family: var(--font-mono);
1285  font-size: 0.875rem;
1286  background: var(--bg-base);
1287  border: 1px solid var(--border);
1288  border-radius: 0.25rem;
1289  padding: 0.75rem;
1290  margin: 0;
1291  overflow-x: auto;
1292  line-height: 1.4;
1293}
1294
1295.patch-diff-line {
1296  white-space: pre;
1297  display: block;
1298}
1299
1300.patch-diff-addition {
1301  background: rgba(34, 197, 94, 0.1);
1302  color: #16a34a;
1303}
1304
1305.dark .patch-diff-addition {
1306  background: rgba(34, 197, 94, 0.15);
1307  color: #86efac;
1308}
1309
1310.patch-diff-deletion {
1311  background: rgba(239, 68, 68, 0.1);
1312  color: #dc2626;
1313}
1314
1315.dark .patch-diff-deletion {
1316  background: rgba(239, 68, 68, 0.15);
1317  color: #fca5a5;
1318}
1319
1320.patch-diff-hunk {
1321  color: var(--text-secondary);
1322  background: var(--bg-tertiary);
1323  font-weight: 500;
1324}
1325
1326.patch-diff-header {
1327  color: var(--text-tertiary);
1328  font-style: italic;
1329}
1330
1331/* Patch Tool Diffs Container */
1332.patch-tool-diffs-container {
1333  border-radius: 0.25rem;
1334  overflow: hidden;
1335  font-size: 0.8125rem;
1336  /* Performance: allow browser to skip rendering off-screen diffs */
1337  content-visibility: auto;
1338  contain-intrinsic-size: auto 200px;
1339}
1340
1341/* Target the diffs-container custom element from @pierre/diffs */
1342.patch-tool-diffs-container diffs-container {
1343  display: block;
1344  contain: content;
1345}
1346
1347/* Screenshot Tool */
1348.screenshot-tool {
1349  background: var(--gray-100);
1350  border-radius: 0.5rem;
1351  margin: 0.5rem 0;
1352  width: 100%;
1353}
1354
1355.dark .screenshot-tool {
1356  background: var(--gray-800);
1357}
1358
1359.screenshot-tool-header {
1360  display: flex;
1361  align-items: center;
1362  justify-content: space-between;
1363  padding: 0.75rem 1rem;
1364  cursor: pointer;
1365  user-select: none;
1366}
1367
1368.screenshot-tool-header:hover {
1369  background: rgba(0, 0, 0, 0.02);
1370  border-radius: 0.5rem;
1371}
1372
1373.dark .screenshot-tool-header:hover {
1374  background: rgba(255, 255, 255, 0.02);
1375}
1376
1377.screenshot-tool-summary {
1378  display: flex;
1379  align-items: center;
1380  gap: 0.5rem;
1381  flex: 1;
1382  min-width: 0;
1383}
1384
1385.screenshot-tool-emoji {
1386  font-size: 1rem;
1387  flex-shrink: 0;
1388}
1389
1390.screenshot-tool-emoji.running {
1391}
1392
1393.screenshot-tool-filename {
1394  font-family: var(--font-mono);
1395  font-size: 0.875rem;
1396  color: var(--text-primary);
1397  overflow: hidden;
1398  text-overflow: ellipsis;
1399  white-space: nowrap;
1400  font-weight: 500;
1401}
1402
1403.screenshot-tool-running {
1404  font-size: 0.75rem;
1405  color: var(--text-secondary);
1406  font-style: italic;
1407  flex-shrink: 0;
1408  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1409}
1410
1411.screenshot-tool-success {
1412  color: var(--success-text);
1413  font-size: 0.875rem;
1414  flex-shrink: 0;
1415}
1416
1417.screenshot-tool-error {
1418  color: var(--error-text);
1419  font-size: 0.875rem;
1420  flex-shrink: 0;
1421}
1422
1423.screenshot-tool-toggle {
1424  background: none;
1425  border: none;
1426  cursor: pointer;
1427  padding: 0.25rem;
1428  display: flex;
1429  align-items: center;
1430  justify-content: center;
1431  color: var(--text-secondary);
1432  flex-shrink: 0;
1433}
1434
1435.screenshot-tool-toggle:hover {
1436  color: var(--text-primary);
1437}
1438
1439.screenshot-tool-details {
1440  padding: 0 1rem 0.75rem 1rem;
1441  display: flex;
1442  flex-direction: column;
1443  gap: 0.75rem;
1444}
1445
1446.screenshot-tool-section {
1447  display: flex;
1448  flex-direction: column;
1449  gap: 0.5rem;
1450}
1451
1452.screenshot-tool-label {
1453  font-size: 0.75rem;
1454  font-weight: 500;
1455  color: var(--text-secondary);
1456  display: flex;
1457  align-items: center;
1458  justify-content: space-between;
1459}
1460
1461.screenshot-tool-time {
1462  font-size: 0.75rem;
1463  color: var(--text-tertiary);
1464  font-weight: normal;
1465}
1466
1467.screenshot-tool-image-container {
1468  border: 1px solid var(--border);
1469  border-radius: 0.25rem;
1470  overflow: hidden;
1471  background: var(--bg-base);
1472  width: fit-content;
1473  max-width: 100%;
1474}
1475
1476.screenshot-tool-image-container a {
1477  display: block;
1478}
1479
1480.screenshot-tool-image-container img {
1481  display: block;
1482  border-radius: 0.25rem;
1483}
1484
1485.screenshot-tool-error-message {
1486  font-family: var(--font-mono);
1487  font-size: 0.875rem;
1488  background: var(--error-bg);
1489  border: 1px solid var(--error-border);
1490  border-radius: 0.25rem;
1491  padding: 0.75rem;
1492  margin: 0;
1493  overflow-x: auto;
1494  white-space: pre-wrap;
1495  word-break: break-word;
1496  color: var(--error-text);
1497}
1498
1499/* Output Iframe Tool */
1500.output-iframe-tool {
1501  background: var(--gray-100);
1502  border-radius: 0.5rem;
1503  margin: 0.5rem 0;
1504  width: 100%;
1505}
1506
1507.dark .output-iframe-tool {
1508  background: var(--gray-800);
1509}
1510
1511.output-iframe-tool-header {
1512  display: flex;
1513  align-items: center;
1514  justify-content: space-between;
1515  padding: 0.75rem 1rem;
1516  cursor: pointer;
1517  user-select: none;
1518}
1519
1520.output-iframe-tool-header:hover {
1521  background: rgba(0, 0, 0, 0.02);
1522  border-radius: 0.5rem;
1523}
1524
1525.dark .output-iframe-tool-header:hover {
1526  background: rgba(255, 255, 255, 0.02);
1527}
1528
1529.output-iframe-tool-summary {
1530  display: flex;
1531  align-items: center;
1532  gap: 0.5rem;
1533  flex: 1;
1534  min-width: 0;
1535}
1536
1537.output-iframe-tool-emoji {
1538  font-size: 1rem;
1539  flex-shrink: 0;
1540}
1541
1542.output-iframe-tool-emoji.running {
1543}
1544
1545.output-iframe-tool-title {
1546  font-family: var(--font-mono);
1547  font-size: 0.875rem;
1548  color: var(--text-primary);
1549  overflow: hidden;
1550  text-overflow: ellipsis;
1551  white-space: nowrap;
1552  font-weight: 500;
1553}
1554
1555.output-iframe-tool-success {
1556  color: var(--success-text);
1557  font-weight: 600;
1558  margin-left: 0.5rem;
1559}
1560
1561.output-iframe-tool-error {
1562  color: var(--error-text);
1563  font-weight: 600;
1564  margin-left: 0.5rem;
1565}
1566
1567.output-iframe-tool-actions {
1568  display: flex;
1569  align-items: center;
1570  gap: 0.25rem;
1571  flex-shrink: 0;
1572}
1573
1574.output-iframe-tool-open-btn,
1575.output-iframe-tool-download-btn {
1576  background: none;
1577  border: none;
1578  padding: 0.25rem;
1579  cursor: pointer;
1580  color: var(--text-secondary);
1581  display: flex;
1582  align-items: center;
1583  justify-content: center;
1584  border-radius: 4px;
1585}
1586
1587.output-iframe-tool-open-btn:hover,
1588.output-iframe-tool-download-btn:hover {
1589  color: var(--text-primary);
1590  background: var(--gray-200);
1591}
1592
1593.dark .output-iframe-tool-open-btn:hover,
1594.dark .output-iframe-tool-download-btn:hover {
1595  background: var(--gray-700);
1596}
1597
1598.output-iframe-tool-toggle {
1599  background: none;
1600  border: none;
1601  padding: 0.25rem;
1602  cursor: pointer;
1603  color: var(--text-secondary);
1604  display: flex;
1605  align-items: center;
1606  justify-content: center;
1607  flex-shrink: 0;
1608}
1609
1610.output-iframe-tool-toggle:hover {
1611  color: var(--text-primary);
1612}
1613
1614.output-iframe-tool-details {
1615  padding: 0 1rem 1rem 1rem;
1616}
1617
1618.output-iframe-tool-section {
1619  margin-top: 0.5rem;
1620}
1621
1622.output-iframe-tool-label {
1623  font-size: 0.75rem;
1624  font-weight: 500;
1625  color: var(--text-secondary);
1626  margin-bottom: 0.5rem;
1627  display: flex;
1628  justify-content: space-between;
1629  align-items: center;
1630}
1631
1632.output-iframe-tool-time {
1633  font-family: var(--font-mono);
1634  font-size: 0.75rem;
1635  color: var(--text-tertiary);
1636}
1637
1638.output-iframe-container {
1639  width: 100%;
1640  overflow: hidden;
1641  border-radius: 0.25rem;
1642}
1643
1644.output-iframe-container iframe {
1645  display: block;
1646}
1647
1648.output-iframe-tool-error-message {
1649  font-family: var(--font-mono);
1650  font-size: 0.875rem;
1651  background: var(--error-bg);
1652  border: 1px solid var(--error-border);
1653  border-radius: 0.25rem;
1654  padding: 0.75rem;
1655  margin: 0;
1656  overflow-x: auto;
1657  white-space: pre-wrap;
1658  word-break: break-word;
1659  color: var(--error-text);
1660}
1661
1662/* Message Input */
1663.message-input-container {
1664  flex: 0 0 auto;
1665  background: var(--bg-base);
1666  border-top: 1px solid var(--border);
1667  padding: 1rem;
1668  padding-bottom: calc(1rem + env(safe-area-inset-bottom, 0px));
1669  padding-left: max(1rem, env(safe-area-inset-left));
1670  padding-right: max(1rem, env(safe-area-inset-right));
1671}
1672
1673.message-input-form {
1674  display: flex;
1675  align-items: flex-end;
1676  gap: 0.5rem;
1677  max-width: 800px;
1678  margin: 0 auto;
1679}
1680
1681.message-textarea {
1682  flex: 1;
1683  min-height: 46px;
1684  max-height: 200px;
1685  padding: 0.625rem 1rem;
1686  border: 1.5px solid var(--border);
1687  border-radius: 4px;
1688  resize: none;
1689  background: var(--bg-base);
1690  color: var(--text-primary);
1691  font-family: inherit;
1692  font-size: 16px; /* Must be 16px+ to prevent iOS zoom on focus */
1693  line-height: 1.5;
1694  transition:
1695    border-color 0.2s,
1696    box-shadow 0.2s;
1697}
1698
1699.message-textarea:focus {
1700  outline: none;
1701  border-color: var(--primary);
1702  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.08);
1703}
1704
1705.message-textarea:disabled {
1706  opacity: 0.5;
1707  cursor: not-allowed;
1708}
1709
1710.message-send-btn svg {
1711  transform: rotate(-90deg);
1712}
1713
1714.message-textarea::placeholder {
1715  color: var(--text-tertiary);
1716}
1717
1718.message-send-btn {
1719  flex-shrink: 0;
1720  width: 36px;
1721  height: 36px;
1722  margin-bottom: 0.25rem;
1723  padding: 0;
1724  background: var(--primary);
1725  color: white;
1726  border: none;
1727  border-radius: 50%;
1728  display: flex;
1729  align-items: center;
1730  justify-content: center;
1731  transition:
1732    background-color 0.2s,
1733    transform 0.1s;
1734  cursor: pointer;
1735}
1736
1737.message-send-btn:hover:not(:disabled) {
1738  background: var(--primary-dark);
1739  transform: scale(1.05);
1740}
1741
1742.message-send-btn:active:not(:disabled) {
1743  transform: scale(0.95);
1744}
1745
1746.message-send-btn:disabled {
1747  background: var(--gray-300);
1748  cursor: not-allowed;
1749  opacity: 0.6;
1750}
1751
1752.dark .message-send-btn:disabled {
1753  background: var(--gray-600);
1754}
1755
1756/* Attach file button */
1757.message-attach-btn {
1758  flex-shrink: 0;
1759  width: 36px;
1760  height: 36px;
1761  margin-bottom: 0.25rem;
1762  padding: 0;
1763  background: transparent;
1764  color: var(--text-secondary);
1765  border: none;
1766  border-radius: 50%;
1767  display: flex;
1768  align-items: center;
1769  justify-content: center;
1770  transition:
1771    background-color 0.2s,
1772    color 0.2s,
1773    transform 0.1s;
1774  cursor: pointer;
1775}
1776
1777.message-attach-btn:hover:not(:disabled) {
1778  background: var(--gray-100);
1779  color: var(--text-primary);
1780}
1781
1782.dark .message-attach-btn:hover:not(:disabled) {
1783  background: var(--gray-700);
1784}
1785
1786.message-attach-btn:active:not(:disabled) {
1787  transform: scale(0.95);
1788}
1789
1790.message-attach-btn:disabled {
1791  cursor: not-allowed;
1792  opacity: 0.4;
1793}
1794
1795/* Voice input button */
1796.message-voice-btn {
1797  flex-shrink: 0;
1798  width: 36px;
1799  height: 36px;
1800  margin-bottom: 0.25rem;
1801  padding: 0;
1802  background: transparent;
1803  color: var(--text-secondary);
1804  border: none;
1805  border-radius: 50%;
1806  display: flex;
1807  align-items: center;
1808  justify-content: center;
1809  transition:
1810    background-color 0.2s,
1811    color 0.2s,
1812    transform 0.1s;
1813  cursor: pointer;
1814}
1815
1816.message-voice-btn:hover:not(:disabled):not(.listening) {
1817  background: var(--gray-100);
1818  color: var(--text-primary);
1819}
1820
1821.dark .message-voice-btn:hover:not(:disabled):not(.listening) {
1822  background: var(--gray-700);
1823}
1824
1825.message-voice-btn:active:not(:disabled):not(.listening) {
1826  transform: scale(0.95);
1827}
1828
1829.message-voice-btn:disabled {
1830  cursor: not-allowed;
1831  opacity: 0.4;
1832}
1833
1834.message-voice-btn.listening,
1835.message-voice-btn.listening:hover {
1836  background: #dc2626;
1837  color: white;
1838  animation: pulse-voice 1.5s ease-in-out infinite;
1839}
1840
1841.dark .message-voice-btn.listening,
1842.dark .message-voice-btn.listening:hover {
1843  background: #ef4444;
1844  color: white;
1845}
1846
1847@keyframes pulse-voice {
1848  0%,
1849  100% {
1850    transform: scale(1);
1851  }
1852  50% {
1853    transform: scale(1.1);
1854  }
1855}
1856
1857/* Drag and drop styles */
1858.message-input-container {
1859  position: relative;
1860}
1861
1862.message-input-container.drag-over {
1863  border-color: var(--primary);
1864}
1865
1866.message-input-container.shell-mode .message-input-form {
1867  border-color: var(--warning-border);
1868  background: var(--warning-bg);
1869}
1870
1871.message-input-container.shell-mode .message-textarea {
1872  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
1873  background: transparent;
1874  padding-left: 36px;
1875}
1876
1877.message-input-container.shell-mode .message-textarea::placeholder {
1878  font-family: inherit;
1879}
1880
1881.shell-mode-indicator {
1882  position: absolute;
1883  left: 12px;
1884  top: 50%;
1885  transform: translateY(-50%);
1886  display: flex;
1887  align-items: center;
1888  justify-content: center;
1889  color: var(--warning-text);
1890  pointer-events: none;
1891  z-index: 1;
1892}
1893
1894.drag-overlay {
1895  position: absolute;
1896  inset: 0;
1897  background: rgba(37, 99, 235, 0.1);
1898  border: 2px dashed var(--primary);
1899  border-radius: 4px;
1900  display: flex;
1901  align-items: center;
1902  justify-content: center;
1903  z-index: 10;
1904  pointer-events: none;
1905}
1906
1907.drag-overlay-content {
1908  background: var(--primary);
1909  color: white;
1910  padding: 0.5rem 1rem;
1911  border-radius: 4px;
1912  font-size: 0.875rem;
1913  font-weight: 500;
1914}
1915
1916/* Modal */
1917.modal-overlay {
1918  position: fixed;
1919  inset: 0;
1920  background: rgba(0, 0, 0, 0.5);
1921  z-index: 50;
1922  display: flex;
1923  align-items: center;
1924  justify-content: center;
1925  padding: 1rem;
1926}
1927
1928.modal {
1929  background: var(--bg-base);
1930  border-radius: 0.5rem;
1931  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
1932  max-width: 28rem;
1933  width: 100%;
1934  max-height: 80vh;
1935  overflow: hidden;
1936}
1937
1938.modal.modal-wide {
1939  max-width: 40rem;
1940}
1941
1942.modal-header {
1943  display: flex;
1944  align-items: center;
1945  justify-content: space-between;
1946  padding: 1rem;
1947  border-bottom: 1px solid var(--border);
1948}
1949
1950.modal-title {
1951  font-size: 1.125rem;
1952  font-weight: 600;
1953}
1954
1955.modal-title-right {
1956  margin-left: auto;
1957  margin-right: 1rem;
1958}
1959
1960.modal-body {
1961  padding: 1rem;
1962  overflow-y: auto;
1963  max-height: calc(80vh - 60px);
1964}
1965
1966/* Form Elements */
1967label {
1968  display: block;
1969  font-size: 0.875rem;
1970  font-weight: 500;
1971  margin-bottom: 0.5rem;
1972}
1973
1974select {
1975  width: 100%;
1976  background: var(--bg-tertiary);
1977  border: 1px solid var(--border);
1978  border-radius: 0.375rem;
1979  padding: 0.5rem 0.75rem;
1980  font-family: inherit;
1981  font-size: 1rem;
1982  color: var(--text-primary);
1983}
1984
1985select:focus {
1986  outline: none;
1987  border-color: var(--primary);
1988  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
1989}
1990
1991select:disabled {
1992  opacity: 0.5;
1993  cursor: not-allowed;
1994}
1995
1996/* Loading Spinner */
1997.spinner {
1998  width: 2rem;
1999  height: 2rem;
2000  border: 2px solid transparent;
2001  border-top-color: var(--primary);
2002  border-radius: 50%;
2003  animation: spin 0.8s linear infinite;
2004}
2005
2006.spinner-small {
2007  width: 1rem;
2008  height: 1rem;
2009  border-width: 2px;
2010  border-top-color: currentColor;
2011}
2012
2013@keyframes spin {
2014  to {
2015    transform: rotate(360deg);
2016  }
2017}
2018
2019/* Loading/Error States */
2020.loading-container,
2021.error-container {
2022  height: 100vh; /* Fallback for older browsers */
2023  height: 100dvh;
2024  display: flex;
2025  align-items: center;
2026  justify-content: center;
2027}
2028
2029.loading-content,
2030.error-content {
2031  text-align: center;
2032}
2033
2034/* Unified Status Bar */
2035.status-bar {
2036  flex: 0 0 auto;
2037  background: var(--bg-base);
2038  border-top: 1px solid var(--border);
2039  padding: 0.5rem 1rem;
2040  padding-left: max(1rem, env(safe-area-inset-left));
2041  padding-right: max(1rem, env(safe-area-inset-right));
2042  min-height: 2.5rem;
2043  display: flex;
2044  align-items: center;
2045}
2046
2047.status-bar-content {
2048  display: flex;
2049  align-items: center;
2050  justify-content: space-between;
2051  width: 100%;
2052  gap: 0.75rem;
2053}
2054
2055.status-message {
2056  color: var(--text-secondary);
2057  font-size: 0.875rem;
2058  flex: 1;
2059  min-width: 0;
2060}
2061
2062.status-message.status-ready {
2063  color: var(--text-tertiary);
2064}
2065
2066.status-message.status-warning {
2067  color: var(--blue-text);
2068  font-weight: 500;
2069}
2070
2071.status-message.status-error {
2072  color: var(--error-text);
2073  font-weight: 500;
2074}
2075
2076.status-message.status-reconnecting {
2077  color: var(--blue-text);
2078  font-weight: 500;
2079}
2080
2081.reconnecting-dots {
2082  display: inline-block;
2083  animation: reconnecting-pulse 1.5s ease-in-out infinite;
2084}
2085
2086@keyframes reconnecting-pulse {
2087  0%,
2088  100% {
2089    opacity: 0.3;
2090  }
2091  50% {
2092    opacity: 1;
2093  }
2094}
2095
2096.animated-working {
2097  display: inline;
2098}
2099
2100.animated-working .bold-letter {
2101  font-weight: 700;
2102}
2103
2104.status-button {
2105  padding: 0.375rem 0.875rem;
2106  border-radius: 0.375rem;
2107  font-size: 0.875rem;
2108  font-weight: 500;
2109  transition: all 0.2s;
2110  display: flex;
2111  align-items: center;
2112  gap: 0.375rem;
2113  white-space: nowrap;
2114  border: none;
2115  cursor: pointer;
2116}
2117
2118.status-button svg {
2119  width: 0.875rem;
2120  height: 0.875rem;
2121}
2122
2123.status-button-primary {
2124  background: var(--primary);
2125  color: white;
2126}
2127
2128.status-button-primary:hover {
2129  background: var(--primary-dark);
2130}
2131
2132.status-button-cancel {
2133  background: var(--error-bg);
2134  color: var(--error-text);
2135  border: 1px solid var(--error-border);
2136}
2137
2138.status-button-cancel:hover:not(:disabled) {
2139  background: var(--error-text);
2140  color: white;
2141}
2142
2143.status-button-cancel:disabled {
2144  opacity: 0.6;
2145  cursor: not-allowed;
2146}
2147
2148.status-button-text {
2149  background: transparent;
2150  color: var(--text-secondary);
2151  padding: 0.25rem;
2152}
2153
2154.status-button-text:hover {
2155  background: var(--bg-tertiary);
2156  color: var(--text-primary);
2157}
2158
2159/* Legacy disconnect/error banner classes (kept for compatibility but unused) */
2160.disconnect-banner {
2161  background: var(--gray-100);
2162  border-top: 1px solid var(--border);
2163  padding: 0.5rem 1rem;
2164}
2165
2166.dark .disconnect-banner {
2167  background: var(--gray-800);
2168}
2169
2170.disconnect-banner-content {
2171  display: flex;
2172  align-items: center;
2173  justify-content: center;
2174  gap: 0.75rem;
2175}
2176
2177.disconnect-message {
2178  color: var(--text-secondary);
2179  font-size: 0.875rem;
2180  margin: 0;
2181}
2182
2183.btn-reconnect {
2184  padding: 0.25rem 0.75rem;
2185  background: var(--primary);
2186  color: white;
2187  border-radius: 0.375rem;
2188  font-size: 0.875rem;
2189  font-weight: 500;
2190  transition: background-color 0.2s;
2191}
2192
2193.btn-reconnect:hover {
2194  background: var(--primary-dark);
2195}
2196
2197.error-banner {
2198  background: var(--error-bg);
2199  border-top: 1px solid var(--error-border);
2200  padding: 0.75rem 1rem;
2201}
2202
2203.error-banner-content {
2204  display: flex;
2205  align-items: center;
2206  justify-content: space-between;
2207}
2208
2209.error-message {
2210  color: var(--error-text);
2211  font-size: 0.875rem;
2212}
2213
2214/* Empty State */
2215.empty-state {
2216  display: flex;
2217  align-items: center;
2218  justify-content: center;
2219  height: 100%;
2220  color: var(--text-secondary);
2221}
2222
2223.empty-state-content {
2224  text-align: center;
2225}
2226
2227/* Scrollbar */
2228.scrollable {
2229  scrollbar-width: thin;
2230  scrollbar-color: rgba(156, 163, 175, 0.5) transparent;
2231}
2232
2233.scrollable::-webkit-scrollbar {
2234  width: 6px;
2235}
2236
2237.scrollable::-webkit-scrollbar-track {
2238  background: transparent;
2239}
2240
2241.scrollable::-webkit-scrollbar-thumb {
2242  background-color: rgba(156, 163, 175, 0.5);
2243  border-radius: 3px;
2244}
2245
2246.scrollable::-webkit-scrollbar-thumb:hover {
2247  background-color: rgba(156, 163, 175, 0.8);
2248}
2249
2250/* SVG Icons */
2251svg {
2252  width: 1.25rem;
2253  height: 1.25rem;
2254  display: block;
2255}
2256
2257.icon-sm svg {
2258  width: 1rem;
2259  height: 1rem;
2260}
2261
2262/* Utility Classes */
2263.relative {
2264  position: relative;
2265}
2266
2267.overflow-auto {
2268  overflow: auto;
2269}
2270
2271.overflow-hidden {
2272  overflow: hidden;
2273}
2274
2275.rounded {
2276  border-radius: 0.25rem;
2277}
2278
2279.rounded-lg {
2280  border-radius: 0.5rem;
2281}
2282
2283.border {
2284  border: 1px solid var(--border);
2285}
2286
2287.min-h-0 {
2288  min-height: 0;
2289}
2290
2291/* Overflow Menu */
2292.overflow-menu {
2293  position: absolute;
2294  top: calc(100% + 0.5rem);
2295  right: 0;
2296  background: var(--bg-secondary);
2297  border: 1px solid var(--border);
2298  border-radius: 0.5rem;
2299  box-shadow:
2300    0 4px 6px -1px rgba(0, 0, 0, 0.1),
2301    0 2px 4px -1px rgba(0, 0, 0, 0.06);
2302  min-width: 10rem;
2303  z-index: 50;
2304}
2305
2306.overflow-menu-item {
2307  display: flex;
2308  align-items: center;
2309  width: 100%;
2310  padding: 0.75rem 1rem;
2311  text-align: left;
2312  background: transparent;
2313  border: none;
2314  color: var(--text-primary);
2315  font-size: 0.875rem;
2316  cursor: pointer;
2317  transition: background-color 0.2s;
2318}
2319
2320.overflow-menu-item:hover {
2321  background: var(--bg-hover);
2322}
2323
2324.overflow-menu-item:first-child {
2325  border-top-left-radius: 0.5rem;
2326  border-top-right-radius: 0.5rem;
2327}
2328
2329.overflow-menu-item:last-child {
2330  border-bottom-left-radius: 0.5rem;
2331  border-bottom-right-radius: 0.5rem;
2332}
2333
2334.overflow-menu-divider {
2335  height: 1px;
2336  background: var(--border);
2337  margin: 0.5rem 0;
2338}
2339
2340.theme-toggle-row {
2341  display: flex;
2342  gap: 0.25rem;
2343  padding: 0.5rem;
2344}
2345
2346.theme-toggle-btn {
2347  flex: 1;
2348  display: flex;
2349  align-items: center;
2350  justify-content: center;
2351  padding: 0.5rem;
2352  background: transparent;
2353  border: 1px solid var(--border);
2354  border-radius: 0.375rem;
2355  color: var(--text-secondary);
2356  cursor: pointer;
2357  transition: all 0.15s;
2358}
2359
2360.theme-toggle-btn svg {
2361  width: 1.125rem;
2362  height: 1.125rem;
2363}
2364
2365.theme-toggle-btn:hover {
2366  background: var(--bg-tertiary);
2367  color: var(--text-primary);
2368}
2369
2370.theme-toggle-btn-selected {
2371  background: var(--primary);
2372  border-color: var(--primary);
2373  color: white;
2374}
2375
2376.theme-toggle-btn-selected:hover {
2377  background: var(--primary-dark);
2378  border-color: var(--primary-dark);
2379  color: white;
2380}
2381
2382/* Diff display styling */
2383.diff-display {
2384  font-family: var(--font-mono);
2385  font-size: 0.875rem;
2386  line-height: 1.5;
2387  background: var(--bg-base);
2388  padding: 1rem;
2389  border-radius: 0.25rem;
2390  overflow-x: auto;
2391  white-space: pre;
2392  color: var(--text-primary);
2393}
2394
2395/* Responsive adjustments */
2396@media (min-width: 768px) {
2397  .drawer {
2398    position: static;
2399    transform: translateX(0) !important;
2400  }
2401
2402  .drawer.collapsed {
2403    display: none;
2404  }
2405
2406  .hide-on-desktop {
2407    display: none !important;
2408  }
2409
2410  .show-on-desktop-only {
2411    display: flex !important;
2412  }
2413
2414  .backdrop {
2415    display: none !important;
2416  }
2417}
2418
2419/* Hide desktop-only elements on mobile */
2420@media (max-width: 767px) {
2421  .show-on-desktop-only {
2422    display: none !important;
2423  }
2424}
2425
2426/* Scroll to bottom button */
2427.scroll-to-bottom-button {
2428  position: absolute;
2429  bottom: 1rem;
2430  left: 50%;
2431  transform: translateX(-50%);
2432  background: var(--bg-elevated);
2433  border: 1px solid var(--border);
2434  border-radius: 2rem;
2435  padding: 0.5rem 1rem;
2436  display: flex;
2437  align-items: center;
2438  gap: 0.5rem;
2439  cursor: pointer;
2440  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
2441  transition: all 0.2s ease;
2442  color: var(--text-primary);
2443  font-size: 0.875rem;
2444  z-index: 10;
2445}
2446
2447.scroll-to-bottom-button:hover {
2448  background: var(--bg-hover);
2449  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2450}
2451
2452.scroll-to-bottom-button:active {
2453  transform: translateX(-50%) scale(0.95);
2454}
2455
2456/* Wrapper for messages area to position scroll-to-bottom button */
2457.messages-area-wrapper {
2458  position: relative;
2459  flex: 1 1 auto;
2460  min-height: 0; /* Important for flex children to shrink properly */
2461  overflow: hidden;
2462}
2463
2464.messages-container {
2465  height: 100%;
2466}
2467
2468/* Status bar configuration controls for empty conversations */
2469.status-bar-config {
2470  display: flex;
2471  align-items: center;
2472  gap: 0.75rem;
2473  width: 100%;
2474}
2475
2476.status-bar-new-conversation {
2477  display: flex;
2478  align-items: center;
2479  justify-content: space-between;
2480  width: 100%;
2481  flex-wrap: wrap;
2482  gap: 0.5rem;
2483}
2484
2485/* On smaller screens, allow the fields to stack vertically */
2486@media (max-width: 600px) {
2487  .status-bar-new-conversation {
2488    flex-direction: column;
2489    align-items: stretch;
2490  }
2491
2492  .status-field {
2493    width: 100%;
2494  }
2495}
2496
2497.status-bar-controls {
2498  display: flex;
2499  align-items: center;
2500  gap: 0.5rem;
2501}
2502
2503/* Flexible containers for status fields that adapt to content */
2504.status-field {
2505  display: flex;
2506  align-items: center;
2507  gap: 0.25rem;
2508  min-width: 0; /* Allow flex items to shrink below content size */
2509}
2510
2511.status-field-label {
2512  font-size: 0.7rem;
2513  color: var(--text-secondary);
2514  flex-shrink: 0;
2515}
2516
2517.status-field-model {
2518  flex: 1 1 auto;
2519  min-width: 150px;
2520  max-width: 300px;
2521}
2522
2523.status-field-cwd {
2524  flex: 1 1 auto;
2525  min-width: 180px;
2526  max-width: 400px;
2527}
2528
2529/* Compact clickable chips for model and cwd */
2530.status-chip {
2531  padding: 0.25rem 0.5rem;
2532  border: 1px solid var(--border);
2533  border-radius: 0.25rem;
2534  background: var(--bg-tertiary);
2535  color: var(--text-primary);
2536  font-size: 0.75rem;
2537  font-family: var(--font-mono);
2538  cursor: pointer;
2539  transition: all 0.2s;
2540  white-space: normal; /* Allow text to wrap */
2541  word-break: break-word; /* Break long words if needed */
2542  overflow-wrap: break-word;
2543  width: 100%;
2544  text-align: left;
2545  box-sizing: border-box;
2546  line-height: 1.3; /* Better line height for multi-line text */
2547  min-height: 1.75rem; /* Minimum height to accommodate wrapped text */
2548}
2549
2550.status-chip:hover:not(:disabled) {
2551  background: var(--bg-secondary);
2552  border-color: var(--blue-text);
2553}
2554
2555.status-chip:disabled {
2556  opacity: 0.5;
2557  cursor: not-allowed;
2558}
2559
2560.status-chip-error {
2561  border-color: var(--red-text, #dc2626);
2562  background: rgba(220, 38, 38, 0.1);
2563}
2564
2565.status-field-error {
2566  position: relative;
2567}
2568
2569.status-input-error {
2570  border-color: var(--red-text, #dc2626);
2571}
2572
2573.status-select {
2574  padding: 0.25rem 0.5rem;
2575  border: 1px solid var(--blue-text);
2576  border-radius: 0.25rem;
2577  background: var(--bg-base);
2578  color: var(--text-primary);
2579  font-size: 0.75rem;
2580  font-family: var(--font-mono);
2581  cursor: pointer;
2582  transition: border-color 0.2s;
2583  width: 100%;
2584  box-sizing: border-box;
2585}
2586
2587.status-select:hover:not(:disabled) {
2588  border-color: var(--blue-text);
2589}
2590
2591.status-select:focus {
2592  outline: none;
2593  border-color: var(--blue-text);
2594  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
2595}
2596
2597.status-select:disabled {
2598  opacity: 0.5;
2599  cursor: not-allowed;
2600}
2601
2602/* Model Picker Custom Dropdown */
2603.model-picker {
2604  position: relative;
2605  display: inline-block;
2606  width: 100%;
2607}
2608
2609.model-picker-trigger {
2610  display: flex;
2611  align-items: center;
2612  justify-content: space-between;
2613  gap: 0.5rem;
2614  padding: 0.25rem 0.5rem;
2615  border: 1px solid var(--border);
2616  border-radius: 0.25rem;
2617  background: var(--bg-tertiary);
2618  color: var(--text-primary);
2619  font-size: 0.75rem;
2620  font-family: var(--font-mono);
2621  cursor: pointer;
2622  transition: all 0.2s;
2623  width: 100%;
2624  text-align: left;
2625  box-sizing: border-box;
2626  min-height: 1.75rem;
2627}
2628
2629.model-picker-trigger:hover:not(:disabled) {
2630  background: var(--bg-secondary);
2631  border-color: var(--blue-text);
2632}
2633
2634.model-picker-trigger:disabled {
2635  opacity: 0.5;
2636  cursor: not-allowed;
2637}
2638
2639.model-picker-value {
2640  flex: 1;
2641  overflow: hidden;
2642  text-overflow: ellipsis;
2643  white-space: nowrap;
2644}
2645
2646.model-picker-chevron {
2647  flex-shrink: 0;
2648  transition: transform 0.2s;
2649  opacity: 0.6;
2650}
2651
2652.model-picker-chevron.open {
2653  transform: rotate(180deg);
2654}
2655
2656.model-picker-dropdown {
2657  position: absolute;
2658  top: 100%;
2659  left: 0;
2660  right: 0;
2661  margin-top: 2px;
2662  background: var(--bg-secondary);
2663  border: 1px solid var(--border);
2664  border-radius: 0.375rem;
2665  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
2666  z-index: 1000;
2667  max-height: 300px;
2668  overflow: hidden;
2669  display: flex;
2670  flex-direction: column;
2671}
2672
2673.model-picker-dropdown.open-upward {
2674  top: auto;
2675  bottom: 100%;
2676  margin-top: 0;
2677  margin-bottom: 2px;
2678}
2679
2680.model-picker-options {
2681  overflow-y: auto;
2682  max-height: 220px;
2683}
2684
2685.model-picker-option {
2686  display: flex;
2687  align-items: center;
2688  gap: 0.5rem;
2689  width: 100%;
2690  padding: 0.5rem 0.75rem;
2691  border: none;
2692  background: transparent;
2693  color: var(--text-primary);
2694  font-size: 0.8rem;
2695  font-family: var(--font-mono);
2696  cursor: pointer;
2697  text-align: left;
2698  transition: background 0.15s;
2699}
2700
2701.model-picker-option:hover:not(:disabled) {
2702  background: var(--bg-tertiary);
2703}
2704
2705.model-picker-option.selected {
2706  background: var(--bg-tertiary);
2707}
2708
2709.model-picker-option.disabled {
2710  opacity: 0.5;
2711  cursor: not-allowed;
2712}
2713
2714.model-picker-option-content {
2715  flex: 1;
2716  display: flex;
2717  flex-direction: column;
2718  gap: 0.125rem;
2719  min-width: 0;
2720}
2721
2722.model-picker-option-name {
2723  overflow: hidden;
2724  text-overflow: ellipsis;
2725  white-space: nowrap;
2726}
2727
2728.model-picker-option-source {
2729  font-size: 0.65rem;
2730  color: var(--text-secondary);
2731  overflow: hidden;
2732  text-overflow: ellipsis;
2733  white-space: nowrap;
2734}
2735
2736.model-picker-option-badge {
2737  font-size: 0.65rem;
2738  color: var(--text-secondary);
2739  background: var(--bg-base);
2740  padding: 0.125rem 0.375rem;
2741  border-radius: 0.25rem;
2742}
2743
2744.model-picker-option-check {
2745  flex-shrink: 0;
2746  color: var(--green-text);
2747}
2748
2749.model-picker-divider {
2750  height: 1px;
2751  background: var(--border);
2752  margin: 0.25rem 0;
2753}
2754
2755.model-picker-manage {
2756  color: var(--blue-text);
2757}
2758
2759.model-picker-manage:hover {
2760  background: var(--bg-tertiary);
2761}
2762
2763.model-picker-manage svg {
2764  flex-shrink: 0;
2765}
2766
2767.status-input {
2768  padding: 0.25rem 0.5rem;
2769  border: 1px solid var(--blue-text);
2770  border-radius: 0.25rem;
2771  background: var(--bg-base);
2772  color: var(--text-primary);
2773  font-size: 0.75rem;
2774  font-family: var(--font-mono);
2775  transition: border-color 0.2s;
2776  width: 100%;
2777  box-sizing: border-box;
2778}
2779
2780.status-input::placeholder {
2781  color: var(--text-secondary);
2782  opacity: 0.6;
2783}
2784
2785.status-input:hover:not(:disabled) {
2786  border-color: var(--blue-text);
2787}
2788
2789.status-input:focus {
2790  outline: none;
2791  border-color: var(--blue-text);
2792  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
2793}
2794
2795.status-input:disabled {
2796  opacity: 0.5;
2797  cursor: not-allowed;
2798}
2799
2800/* Responsive adjustments for status bar controls */
2801@media (max-width: 768px) {
2802  .status-bar-config {
2803    flex-wrap: wrap;
2804    gap: 0.5rem;
2805  }
2806
2807  .status-bar-controls {
2808    flex-wrap: wrap;
2809    gap: 0.5rem;
2810  }
2811
2812  .status-field-model {
2813    min-width: 120px;
2814    max-width: 200px;
2815  }
2816
2817  .status-field-cwd {
2818    min-width: 140px;
2819    max-width: 250px;
2820  }
2821}
2822
2823/* Directory Picker Modal */
2824.directory-picker-modal {
2825  max-width: 32rem;
2826  max-height: 70vh;
2827  display: flex;
2828  flex-direction: column;
2829}
2830
2831.directory-picker-body {
2832  flex: 1;
2833  display: flex;
2834  flex-direction: column;
2835  min-height: 0;
2836  overflow: hidden;
2837}
2838
2839.directory-picker-input-container {
2840  margin-bottom: 0.75rem;
2841}
2842
2843.directory-picker-input {
2844  width: 100%;
2845  padding: 0.5rem 0.75rem;
2846  border: 1px solid var(--border);
2847  border-radius: 0.25rem;
2848  background: var(--bg-base);
2849  color: var(--text-primary);
2850  font-family: var(--font-mono);
2851  font-size: 0.875rem;
2852}
2853
2854.directory-picker-input:focus {
2855  outline: none;
2856  border-color: var(--primary);
2857  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
2858}
2859
2860.directory-picker-current {
2861  display: flex;
2862  align-items: center;
2863  gap: 0.5rem;
2864  font-size: 0.75rem;
2865  color: var(--text-secondary);
2866  font-family: var(--font-mono);
2867  margin-bottom: 0.5rem;
2868  padding: 0.25rem 0;
2869}
2870
2871.directory-picker-current-path {
2872  flex-shrink: 0;
2873}
2874
2875.directory-picker-current-git .directory-picker-current-path {
2876  color: var(--accent-color, #f97316);
2877}
2878
2879.directory-picker-current-subject {
2880  flex: 1;
2881  min-width: 0;
2882  color: var(--text-tertiary);
2883  white-space: nowrap;
2884  overflow: hidden;
2885  text-overflow: ellipsis;
2886  text-align: right;
2887}
2888
2889.directory-picker-filter {
2890  color: var(--primary);
2891  font-weight: 500;
2892}
2893
2894.directory-picker-git-root-btn {
2895  display: flex;
2896  align-items: center;
2897  gap: 0.5rem;
2898  width: 100%;
2899  padding: 0.375rem 0.75rem;
2900  margin-bottom: 0.5rem;
2901  background: var(--bg-secondary);
2902  border: 1px solid var(--border-color);
2903  border-radius: 0.375rem;
2904  color: var(--accent-color, #f97316);
2905  font-size: 0.8125rem;
2906  cursor: pointer;
2907  text-align: left;
2908}
2909
2910.directory-picker-git-root-btn:hover {
2911  background: var(--bg-tertiary);
2912  border-color: var(--accent-color, #f97316);
2913}
2914
2915.directory-picker-git-root-btn .directory-picker-icon {
2916  flex-shrink: 0;
2917}
2918
2919.directory-picker-git-root-path {
2920  color: var(--text-tertiary);
2921  overflow: hidden;
2922  text-overflow: ellipsis;
2923  white-space: nowrap;
2924  margin-left: auto;
2925}
2926
2927.directory-picker-error {
2928  padding: 0.5rem 0.75rem;
2929  background: var(--error-bg);
2930  border: 1px solid var(--error-border);
2931  border-radius: 0.25rem;
2932  color: var(--error-text);
2933  font-size: 0.875rem;
2934  margin-bottom: 0.75rem;
2935}
2936
2937.directory-picker-loading {
2938  display: flex;
2939  align-items: center;
2940  gap: 0.5rem;
2941  padding: 1rem;
2942  color: var(--text-secondary);
2943  font-size: 0.875rem;
2944}
2945
2946.directory-picker-list {
2947  flex: 1;
2948  overflow-y: auto;
2949  border: 1px solid var(--border);
2950  border-radius: 0.25rem;
2951  min-height: 200px;
2952  max-height: 300px;
2953}
2954
2955.directory-picker-entry {
2956  display: flex;
2957  align-items: center;
2958  gap: 0.5rem;
2959  width: 100%;
2960  padding: 0.5rem 0.75rem;
2961  text-align: left;
2962  background: transparent;
2963  border: none;
2964  border-bottom: 1px solid var(--border);
2965  color: var(--text-primary);
2966  font-size: 0.875rem;
2967  font-family: var(--font-mono);
2968  cursor: pointer;
2969  transition: background-color 0.15s;
2970}
2971
2972.directory-picker-entry:last-child {
2973  border-bottom: none;
2974}
2975
2976.directory-picker-entry:hover {
2977  background: var(--bg-tertiary);
2978}
2979
2980.directory-picker-entry-parent {
2981  color: var(--text-secondary);
2982  font-weight: 500;
2983}
2984
2985.directory-picker-icon {
2986  width: 1rem;
2987  height: 1rem;
2988  flex-shrink: 0;
2989  color: var(--text-secondary);
2990}
2991
2992.directory-picker-entry-name {
2993  flex-shrink: 0;
2994}
2995
2996.directory-picker-entry-git .directory-picker-icon {
2997  color: var(--accent-color, #f97316);
2998}
2999
3000.directory-picker-git-subject {
3001  flex: 1;
3002  min-width: 0;
3003  color: var(--text-tertiary);
3004  font-size: 0.75rem;
3005  white-space: nowrap;
3006  overflow: hidden;
3007  text-overflow: ellipsis;
3008  text-align: right;
3009}
3010
3011.directory-picker-empty {
3012  padding: 2rem;
3013  text-align: center;
3014  color: var(--text-tertiary);
3015  font-size: 0.875rem;
3016}
3017
3018.directory-picker-footer {
3019  display: flex;
3020  align-items: center;
3021  gap: 0.5rem;
3022  padding: 1rem;
3023  border-top: 1px solid var(--border);
3024}
3025
3026.directory-picker-footer-spacer {
3027  flex: 1;
3028}
3029
3030.directory-picker-new-btn {
3031  display: flex;
3032  align-items: center;
3033  gap: 0.375rem;
3034}
3035
3036.directory-picker-new-icon {
3037  width: 1rem;
3038  height: 1rem;
3039}
3040
3041/* Create directory form inside the list */
3042.directory-picker-create-form {
3043  display: flex;
3044  align-items: center;
3045  gap: 0.5rem;
3046  padding: 0.5rem 0.75rem;
3047  background: var(--bg-tertiary);
3048  border-bottom: 1px solid var(--border);
3049}
3050
3051.directory-picker-create-input {
3052  flex: 1;
3053  padding: 0.375rem 0.5rem;
3054  border: 1px solid var(--border);
3055  border-radius: 0.25rem;
3056  background: var(--bg-base);
3057  color: var(--text-primary);
3058  font-family: var(--font-mono);
3059  font-size: 0.875rem;
3060}
3061
3062.directory-picker-create-input:focus {
3063  outline: none;
3064  border-color: var(--primary);
3065}
3066
3067.directory-picker-create-btn {
3068  display: flex;
3069  align-items: center;
3070  justify-content: center;
3071  width: 1.75rem;
3072  height: 1.75rem;
3073  padding: 0;
3074  border: none;
3075  border-radius: 0.25rem;
3076  background: var(--primary);
3077  color: white;
3078  cursor: pointer;
3079  transition: background-color 0.15s;
3080}
3081
3082.directory-picker-create-btn:hover:not(:disabled) {
3083  background: var(--primary-hover);
3084}
3085
3086.directory-picker-create-btn:disabled {
3087  opacity: 0.5;
3088  cursor: not-allowed;
3089}
3090
3091.directory-picker-create-btn svg {
3092  width: 1rem;
3093  height: 1rem;
3094}
3095
3096.directory-picker-cancel-btn {
3097  background: var(--bg-secondary);
3098  color: var(--text-secondary);
3099}
3100
3101.directory-picker-cancel-btn:hover:not(:disabled) {
3102  background: var(--bg-tertiary);
3103}
3104
3105.directory-picker-create-error {
3106  padding: 0.375rem 0.75rem;
3107  background: var(--error-bg);
3108  color: var(--error-text);
3109  font-size: 0.75rem;
3110  border-bottom: 1px solid var(--error-border);
3111}
3112
3113/* Screen reader only */
3114.sr-only {
3115  position: absolute;
3116  width: 1px;
3117  height: 1px;
3118  padding: 0;
3119  margin: -1px;
3120  overflow: hidden;
3121  clip: rect(0, 0, 0, 0);
3122  white-space: nowrap;
3123  border: 0;
3124}
3125
3126/* Context Usage Bar */
3127/* Status bar for active conversation */
3128.status-bar-active {
3129  display: flex;
3130  align-items: center;
3131  justify-content: space-between;
3132  width: 100%;
3133}
3134
3135.status-working-group {
3136  display: flex;
3137  align-items: center;
3138  gap: 0.5rem;
3139}
3140
3141.status-stop-button {
3142  display: flex;
3143  align-items: center;
3144  gap: 0.25rem;
3145  padding: 0.25rem 0.5rem;
3146  border: none;
3147  border-radius: 0.25rem;
3148  background: var(--error-bg);
3149  color: var(--error-text);
3150  cursor: pointer;
3151  transition: all 0.15s ease;
3152  font-size: 0.75rem;
3153  font-weight: 500;
3154}
3155
3156.status-stop-button:hover:not(:disabled) {
3157  background: var(--error-text);
3158  color: white;
3159}
3160
3161.status-stop-button:disabled {
3162  opacity: 0.5;
3163  cursor: not-allowed;
3164}
3165
3166.status-stop-button svg {
3167  width: 0.75rem;
3168  height: 0.75rem;
3169  flex-shrink: 0;
3170}
3171
3172.status-stop-label {
3173  white-space: nowrap;
3174}
3175
3176/* Hide stop label on small screens */
3177@media (max-width: 500px) {
3178  .status-stop-label {
3179    display: none;
3180  }
3181  .status-stop-button {
3182    padding: 0.25rem;
3183  }
3184}
3185
3186.context-usage-bar-container {
3187  display: flex;
3188  align-items: center;
3189  gap: 4px;
3190}
3191
3192.context-warning-icon {
3193  font-size: 14px;
3194  line-height: 1;
3195  cursor: help;
3196}
3197
3198.context-usage-bar {
3199  width: 60px;
3200  height: 6px;
3201  background: var(--bg-tertiary);
3202  border-radius: 3px;
3203  overflow: hidden;
3204  cursor: pointer;
3205}
3206
3207.context-usage-fill {
3208  height: 100%;
3209  border-radius: 3px;
3210  transition:
3211    width 0.3s ease,
3212    background-color 0.3s ease;
3213}
3214
3215/* Mobile optimizations for tighter spacing */
3216@media (max-width: 767px) {
3217  .header {
3218    padding: 0.375rem 0.75rem;
3219    padding-top: calc(0.375rem + env(safe-area-inset-top, 0px));
3220  }
3221
3222  .status-bar {
3223    padding: 0.375rem 0.75rem;
3224    min-height: 2rem;
3225  }
3226
3227  .message-input-container {
3228    padding: 0.5rem 0.75rem;
3229    padding-bottom: calc(0.5rem + env(safe-area-inset-bottom, 0px));
3230  }
3231}
3232
3233/* Print styles - looks like the chat window, just without chrome */
3234@media print {
3235  /* Reset page layout */
3236  html,
3237  body {
3238    height: auto !important;
3239    overflow: visible !important;
3240    background: white !important;
3241  }
3242
3243  /* Hide interactive chrome but keep the header title */
3244  .status-bar,
3245  .message-input-container,
3246  .drawer,
3247  .backdrop,
3248  .scroll-to-bottom-button,
3249  .overflow-menu,
3250  .context-menu,
3251  .modal-overlay {
3252    display: none !important;
3253  }
3254
3255  /* Hide header buttons but keep the title */
3256  .header-actions,
3257  .header .btn-icon {
3258    display: none !important;
3259  }
3260
3261  /* Simplify header for print */
3262  .header {
3263    background: white !important;
3264    border-bottom: 1px solid #e5e7eb !important;
3265    padding: 0.75rem 1rem !important;
3266  }
3267
3268  .header-title {
3269    font-size: 1rem !important;
3270  }
3271
3272  /* Reset app container for print */
3273  .app-container {
3274    display: block !important;
3275    height: auto !important;
3276    background: white !important;
3277  }
3278
3279  .main-content {
3280    display: block !important;
3281    height: auto !important;
3282  }
3283
3284  /* Reset messages area to flow naturally */
3285  .messages-area-wrapper {
3286    height: auto !important;
3287    overflow: visible !important;
3288    position: static !important;
3289    background: white !important;
3290  }
3291
3292  .messages-container {
3293    height: auto !important;
3294    overflow: visible !important;
3295    position: static !important;
3296    background: white !important;
3297  }
3298
3299  .messages-list {
3300    background: white !important;
3301  }
3302
3303  /* Hide empty state in print */
3304  .empty-state {
3305    display: none !important;
3306  }
3307
3308  /* Keep message styling, just add page break hints */
3309  .message {
3310    page-break-inside: avoid;
3311  }
3312
3313  /* Tool results */
3314  .tool-result-details {
3315    page-break-inside: avoid;
3316  }
3317
3318  /* Code blocks */
3319  pre,
3320  code {
3321    page-break-inside: avoid;
3322  }
3323
3324  /* Screenshots and images - ensure they fit */
3325  .screenshot-preview,
3326  .screenshot-image,
3327  .read-image-preview {
3328    max-width: 100% !important;
3329    height: auto !important;
3330    page-break-inside: avoid;
3331  }
3332}
3333/* Diff Viewer Overlay */
3334.diff-viewer-overlay {
3335  position: fixed;
3336  top: 0;
3337  left: 0;
3338  right: 0;
3339  bottom: 0;
3340  background: rgba(0, 0, 0, 0.5);
3341  z-index: 1000;
3342  display: flex;
3343  align-items: center;
3344  justify-content: center;
3345  padding: 1rem;
3346  padding-top: max(1rem, env(safe-area-inset-top));
3347  padding-bottom: max(1rem, env(safe-area-inset-bottom));
3348}
3349
3350.diff-viewer-container {
3351  background: var(--bg-base);
3352  border-radius: 0.5rem;
3353  width: calc(100% - 2rem);
3354  max-width: none;
3355  height: calc(100% - 2rem);
3356  max-height: none;
3357  display: flex;
3358  flex-direction: column;
3359  overflow: hidden;
3360  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
3361}
3362
3363.diff-viewer-header {
3364  display: flex;
3365  flex-direction: column;
3366  gap: 0.5rem;
3367  padding: 0.5rem 0.75rem;
3368  background: var(--bg-secondary);
3369  border-bottom: 1px solid var(--border-color);
3370}
3371
3372.diff-viewer-header-row {
3373  display: flex;
3374  align-items: center;
3375  gap: 0.5rem;
3376  width: 100%;
3377}
3378
3379.diff-viewer-selectors-row {
3380  display: flex;
3381  flex: 1;
3382  gap: 0.5rem;
3383  min-width: 0;
3384}
3385
3386.diff-viewer-selectors-row .diff-viewer-select {
3387  flex: 1;
3388  min-width: 0;
3389  max-width: none;
3390}
3391
3392.diff-viewer-file-selector-wrapper {
3393  display: flex;
3394  align-items: center;
3395  gap: 0.5rem;
3396  flex: 1;
3397  min-width: 0;
3398}
3399
3400.diff-viewer-file-selector-wrapper .diff-viewer-select {
3401  flex: 1;
3402  min-width: 0;
3403}
3404
3405.diff-viewer-file-index {
3406  font-size: 0.75rem;
3407  color: var(--text-secondary);
3408  white-space: nowrap;
3409  flex-shrink: 0;
3410}
3411
3412.diff-viewer-controls-row {
3413  display: flex;
3414  align-items: center;
3415  gap: 0.5rem;
3416  flex-shrink: 0;
3417}
3418
3419.diff-viewer-header-mobile {
3420  flex-direction: row;
3421  align-items: center;
3422  gap: 0.5rem;
3423  padding: 0.375rem 0.5rem;
3424}
3425
3426.diff-viewer-mobile-selectors {
3427  display: flex;
3428  flex: 1;
3429  gap: 0.375rem;
3430  min-width: 0;
3431}
3432
3433.diff-viewer-mobile-selectors .diff-viewer-select {
3434  flex: 1;
3435  min-width: 0;
3436  font-size: 0.75rem;
3437  padding: 0.375rem;
3438}
3439
3440.diff-viewer-mode-toggle {
3441  display: flex;
3442  border: 1px solid var(--border-color);
3443  border-radius: 0.25rem;
3444  overflow: hidden;
3445}
3446
3447.diff-viewer-mode-btn {
3448  padding: 0.25rem 0.5rem;
3449  border: none;
3450  background: var(--bg-base);
3451  color: var(--text-secondary);
3452  cursor: pointer;
3453  font-size: 0.875rem;
3454}
3455
3456.diff-viewer-mode-btn:first-child {
3457  border-right: 1px solid var(--border-color);
3458}
3459
3460.diff-viewer-mode-btn.active {
3461  background: var(--blue-bg);
3462  color: var(--blue-text);
3463}
3464
3465.diff-viewer-mode-btn:hover:not(.active) {
3466  background: var(--bg-tertiary);
3467}
3468
3469.diff-viewer-nav-buttons {
3470  display: flex;
3471  gap: 0.125rem;
3472}
3473
3474.diff-viewer-nav-btn {
3475  padding: 0.25rem 0.5rem;
3476  border: 1px solid var(--border-color);
3477  background: var(--bg-base);
3478  color: var(--text-primary);
3479  cursor: pointer;
3480  border-radius: 0.25rem;
3481  font-size: 0.875rem;
3482}
3483
3484.diff-viewer-nav-btn:disabled {
3485  opacity: 0.4;
3486  cursor: not-allowed;
3487}
3488
3489.diff-viewer-nav-btn:hover:not(:disabled) {
3490  background: var(--bg-tertiary);
3491}
3492
3493.diff-viewer-select {
3494  flex: 1;
3495  min-width: 120px;
3496  max-width: 300px;
3497  padding: 0.5rem;
3498  border: 1px solid var(--border-color);
3499  border-radius: 0.25rem;
3500  background: var(--bg-base);
3501  color: var(--text-primary);
3502  font-size: 0.875rem;
3503}
3504
3505.diff-viewer-dir-btn {
3506  width: 2rem;
3507  height: 2rem;
3508  border: none;
3509  background: transparent;
3510  color: var(--text-secondary);
3511  cursor: pointer;
3512  border-radius: 0.25rem;
3513  display: flex;
3514  align-items: center;
3515  justify-content: center;
3516  flex-shrink: 0;
3517  padding: 0;
3518}
3519
3520.diff-viewer-dir-btn:hover {
3521  background: var(--bg-tertiary);
3522  color: var(--text-primary);
3523}
3524
3525.diff-viewer-close {
3526  width: 2rem;
3527  height: 2rem;
3528  border: none;
3529  background: transparent;
3530  color: var(--text-secondary);
3531  font-size: 1.5rem;
3532  cursor: pointer;
3533  border-radius: 0.25rem;
3534  display: flex;
3535  align-items: center;
3536  justify-content: center;
3537  flex-shrink: 0;
3538}
3539
3540.diff-viewer-close:hover {
3541  background: var(--bg-tertiary);
3542  color: var(--text-primary);
3543}
3544
3545.diff-viewer-error {
3546  padding: 0.5rem 1rem;
3547  background: var(--error-bg);
3548  color: var(--error-text);
3549  font-size: 0.875rem;
3550}
3551
3552.diff-viewer-toast {
3553  position: fixed;
3554  bottom: 24px;
3555  right: 24px;
3556  padding: 12px 16px;
3557  border-radius: 8px;
3558  font-size: 14px;
3559  font-weight: 500;
3560  z-index: 9999;
3561  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
3562  animation: toast-fade-in 0.2s ease;
3563  color: #ffffff;
3564}
3565
3566.diff-viewer-toast-saving {
3567  background: #1976d2;
3568}
3569
3570.diff-viewer-toast-saved {
3571  background: #2e7d32;
3572}
3573
3574.diff-viewer-toast-error {
3575  background: #d32f2f;
3576}
3577
3578.diff-viewer-toast-hint {
3579  background: var(--bg-tertiary);
3580  color: var(--text-primary);
3581  border: 1px solid var(--border-color);
3582}
3583
3584@keyframes toast-fade-in {
3585  from {
3586    opacity: 0;
3587    transform: translateY(10px);
3588  }
3589  to {
3590    opacity: 1;
3591    transform: translateY(0);
3592  }
3593}
3594
3595.diff-viewer-content {
3596  flex: 1;
3597  overflow: hidden;
3598  position: relative;
3599}
3600
3601.diff-viewer-loading,
3602.diff-viewer-empty {
3603  display: flex;
3604  flex-direction: column;
3605  align-items: center;
3606  justify-content: center;
3607  height: 100%;
3608  color: var(--text-secondary);
3609  gap: 0.5rem;
3610}
3611
3612.diff-viewer-hint {
3613  font-size: 0.875rem;
3614  opacity: 0.7;
3615}
3616
3617.diff-viewer-editor {
3618  height: 100%;
3619  width: 100%;
3620}
3621
3622/* Diff viewer line hover highlighting (via decoration API) */
3623.diff-viewer-editor .monaco-editor .diff-viewer-line-hover {
3624  background-color: rgba(37, 99, 235, 0.08) !important;
3625}
3626
3627.dark .diff-viewer-editor .monaco-editor .diff-viewer-line-hover {
3628  background-color: rgba(96, 165, 250, 0.12) !important;
3629}
3630
3631/* Comment indicator glyph in margin for diff viewer */
3632.diff-viewer-editor .monaco-editor .diff-viewer-comment-glyph {
3633  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'%3E%3C/path%3E%3Cline x1='9' y1='10' x2='15' y2='10'%3E%3C/line%3E%3C/svg%3E");
3634  background-size: 14px 14px;
3635  background-repeat: no-repeat;
3636  background-position: center;
3637  opacity: 0.6;
3638  cursor: pointer;
3639}
3640
3641.diff-viewer-editor .monaco-editor .diff-viewer-comment-glyph:hover {
3642  opacity: 1;
3643}
3644
3645.dark .diff-viewer-editor .monaco-editor .diff-viewer-comment-glyph {
3646  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'%3E%3C/path%3E%3Cline x1='9' y1='10' x2='15' y2='10'%3E%3C/line%3E%3C/svg%3E");
3647}
3648
3649/* Make diff viewer Monaco lines clickable with pointer cursor */
3650.diff-viewer-editor .monaco-editor .view-lines {
3651  cursor: pointer;
3652}
3653
3654.diff-viewer-comment-badge {
3655  position: absolute;
3656  bottom: 1rem;
3657  left: 1rem;
3658  padding: 0.5rem 1rem;
3659  background: var(--blue-bg);
3660  color: var(--blue-text);
3661  border-radius: 1rem;
3662  font-size: 0.875rem;
3663  font-weight: 500;
3664}
3665
3666/* Comment dialog */
3667.diff-viewer-comment-dialog {
3668  position: absolute;
3669  top: 50%;
3670  left: 50%;
3671  transform: translate(-50%, -50%);
3672  width: 90%;
3673  max-width: 500px;
3674  background: var(--bg-base);
3675  border: 1px solid var(--border-color);
3676  border-radius: 0.5rem;
3677  padding: 1rem;
3678  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
3679  z-index: 1001;
3680}
3681
3682.diff-viewer-comment-dialog h4 {
3683  margin: 0 0 0.75rem 0;
3684  color: var(--text-primary);
3685}
3686
3687.diff-viewer-selected-text {
3688  margin: 0 0 0.75rem 0;
3689  padding: 0.5rem;
3690  background: var(--bg-tertiary);
3691  border: 1px solid var(--border-color);
3692  border-radius: 0.25rem;
3693  font-size: 0.75rem;
3694  font-family: monospace;
3695  max-height: 150px;
3696  overflow: auto;
3697  white-space: pre;
3698}
3699
3700.diff-viewer-comment-input {
3701  width: 100%;
3702  min-height: 100px;
3703  padding: 0.5rem;
3704  border: 1px solid var(--border-color);
3705  border-radius: 0.25rem;
3706  background: var(--bg-base);
3707  color: var(--text-primary);
3708  font-size: 0.875rem;
3709  resize: vertical;
3710}
3711
3712.diff-viewer-comment-actions {
3713  display: flex;
3714  justify-content: flex-end;
3715  gap: 0.5rem;
3716  margin-top: 0.75rem;
3717}
3718
3719.diff-viewer-btn {
3720  padding: 0.5rem 1rem;
3721  border: none;
3722  border-radius: 0.25rem;
3723  font-size: 0.875rem;
3724  cursor: pointer;
3725}
3726
3727.diff-viewer-btn:disabled {
3728  opacity: 0.5;
3729  cursor: not-allowed;
3730}
3731
3732.diff-viewer-btn-primary {
3733  background: var(--blue-bg);
3734  color: var(--blue-text);
3735}
3736
3737.diff-viewer-btn-primary:hover:not(:disabled) {
3738  filter: brightness(0.95);
3739}
3740
3741.diff-viewer-btn-secondary {
3742  background: var(--bg-tertiary);
3743  color: var(--text-primary);
3744}
3745
3746.diff-viewer-btn-secondary:hover:not(:disabled) {
3747  background: var(--bg-secondary);
3748}
3749
3750/* Mobile floating nav buttons */
3751.diff-viewer-mobile-nav {
3752  position: absolute;
3753  bottom: 1.5rem;
3754  left: 50%;
3755  transform: translateX(-50%);
3756  display: flex;
3757  gap: 0.5rem;
3758  z-index: 100;
3759}
3760
3761.diff-viewer-mobile-nav-btn {
3762  width: 3rem;
3763  height: 3rem;
3764  border: none;
3765  border-radius: 50%;
3766  background: var(--bg-base);
3767  color: var(--text-primary);
3768  cursor: pointer;
3769  display: flex;
3770  align-items: center;
3771  justify-content: center;
3772  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
3773}
3774
3775.diff-viewer-mobile-nav-btn svg {
3776  width: 24px;
3777  height: 24px;
3778}
3779
3780.diff-viewer-mobile-nav-btn:disabled {
3781  opacity: 0.4;
3782  cursor: not-allowed;
3783}
3784
3785.diff-viewer-mobile-nav-btn:active:not(:disabled) {
3786  background: var(--bg-tertiary);
3787  transform: scale(0.95);
3788}
3789
3790.diff-viewer-mobile-mode-btn {
3791  font-size: 1.25rem;
3792}
3793
3794.diff-viewer-mobile-mode-btn.active {
3795  background: var(--blue-bg);
3796  color: var(--blue-text);
3797}
3798
3799/* Monaco comment glyph decoration */
3800/* Mobile optimizations for diff viewer */
3801@media (max-width: 767px) {
3802  .diff-viewer-overlay {
3803    padding: 0;
3804  }
3805
3806  .diff-viewer-container {
3807    border-radius: 0;
3808    width: 100%;
3809    max-width: 100%;
3810    height: 100%;
3811    max-height: 100%;
3812  }
3813
3814  .diff-viewer-close {
3815    width: 1.75rem;
3816    height: 1.75rem;
3817    font-size: 1.25rem;
3818    flex-shrink: 0;
3819  }
3820
3821  /* Monaco editor mobile styles - hide gutters completely */
3822  .diff-viewer-editor .monaco-editor .margin {
3823    display: none !important;
3824    width: 0 !important;
3825  }
3826
3827  .diff-viewer-editor .monaco-editor .margin-view-overlays {
3828    display: none !important;
3829    width: 0 !important;
3830  }
3831
3832  .diff-viewer-editor .monaco-editor .editor-scrollable {
3833    left: 0 !important;
3834  }
3835
3836  .diff-viewer-editor .monaco-editor .lines-content {
3837    margin-left: 0 !important;
3838  }
3839
3840  /* Ensure diff editor uses full width */
3841  .diff-viewer-editor .monaco-diff-editor {
3842    width: 100% !important;
3843  }
3844
3845  .diff-viewer-editor .monaco-diff-editor .editor.modified {
3846    width: 100% !important;
3847    left: 0 !important;
3848  }
3849
3850  /* Comment dialog on top half of screen for mobile (keyboard space) */
3851  .diff-viewer-comment-dialog {
3852    top: 10%;
3853    transform: translate(-50%, 0);
3854    max-height: 40vh;
3855    overflow-y: auto;
3856  }
3857
3858  .diff-viewer-comment-input {
3859    min-height: 60px;
3860  }
3861}
3862
3863/* Injected text indicator (for diff comments) */
3864.injected-text-indicator {
3865  display: flex;
3866  align-items: center;
3867  justify-content: space-between;
3868  padding: 0.5rem 0.75rem;
3869  background: var(--blue-bg);
3870  border-bottom: 1px solid var(--border-color);
3871  gap: 0.5rem;
3872}
3873
3874.injected-text-label {
3875  font-size: 0.875rem;
3876  color: var(--blue-text);
3877  flex: 1;
3878  min-width: 0;
3879  overflow: hidden;
3880  text-overflow: ellipsis;
3881  white-space: nowrap;
3882}
3883
3884.injected-text-insert-btn {
3885  padding: 0.375rem 0.75rem;
3886  background: var(--blue-text);
3887  color: white;
3888  border: none;
3889  border-radius: 0.25rem;
3890  font-size: 0.75rem;
3891  font-weight: 500;
3892  cursor: pointer;
3893  white-space: nowrap;
3894  flex-shrink: 0;
3895}
3896
3897.injected-text-insert-btn:hover {
3898  filter: brightness(1.1);
3899}
3900
3901/* Links in message text */
3902.text-link {
3903  color: var(--blue-text);
3904  text-decoration: underline;
3905  text-underline-offset: 2px;
3906  text-decoration-color: var(--blue-border);
3907}
3908
3909.text-link:hover {
3910  text-decoration-color: var(--blue-text);
3911}
3912
3913/* Command Palette */
3914.command-palette-overlay {
3915  position: fixed;
3916  inset: 0;
3917  background: rgba(0, 0, 0, 0.5);
3918  z-index: 100;
3919  display: flex;
3920  align-items: flex-start;
3921  justify-content: center;
3922  padding-top: 15vh;
3923}
3924
3925.command-palette {
3926  background: var(--bg-base);
3927  border: 1px solid var(--border-color);
3928  border-radius: 0.75rem;
3929  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
3930  width: 100%;
3931  max-width: 32rem;
3932  max-height: 60vh;
3933  display: flex;
3934  flex-direction: column;
3935  overflow: hidden;
3936}
3937
3938.command-palette-input-wrapper {
3939  display: flex;
3940  align-items: center;
3941  padding: 0.75rem 1rem;
3942  border-bottom: 1px solid var(--border-color);
3943  gap: 0.75rem;
3944}
3945
3946.command-palette-search-icon {
3947  color: var(--text-secondary);
3948  flex-shrink: 0;
3949}
3950
3951.command-palette-input {
3952  flex: 1;
3953  border: none;
3954  background: transparent;
3955  font-size: 1rem;
3956  color: var(--text-primary);
3957  outline: none;
3958}
3959
3960.command-palette-input::placeholder {
3961  color: var(--text-secondary);
3962}
3963
3964.command-palette-shortcut {
3965  flex-shrink: 0;
3966}
3967
3968.command-palette-spinner {
3969  width: 16px;
3970  height: 16px;
3971  border: 2px solid var(--border-color);
3972  border-top-color: var(--primary);
3973  border-radius: 50%;
3974  animation: spin 0.6s linear infinite;
3975  flex-shrink: 0;
3976}
3977
3978.command-palette-list {
3979  flex: 1;
3980  overflow-y: auto;
3981  padding: 0.5rem;
3982}
3983
3984.command-palette-empty {
3985  padding: 2rem 1rem;
3986  text-align: center;
3987  color: var(--text-secondary);
3988}
3989
3990.command-palette-item {
3991  display: flex;
3992  align-items: center;
3993  padding: 0.625rem 0.75rem;
3994  border-radius: 0.5rem;
3995  cursor: pointer;
3996  gap: 0.75rem;
3997}
3998
3999.command-palette-item:hover,
4000.command-palette-item.selected {
4001  background: var(--bg-secondary);
4002}
4003
4004.command-palette-item-icon {
4005  flex-shrink: 0;
4006  color: var(--text-secondary);
4007  display: flex;
4008  align-items: center;
4009  justify-content: center;
4010}
4011
4012.command-palette-item.selected .command-palette-item-icon {
4013  color: var(--primary);
4014}
4015
4016.command-palette-item-content {
4017  flex: 1;
4018  min-width: 0;
4019}
4020
4021.command-palette-item-title {
4022  font-size: 0.875rem;
4023  color: var(--text-primary);
4024  white-space: nowrap;
4025  overflow: hidden;
4026  text-overflow: ellipsis;
4027}
4028
4029.command-palette-item-subtitle {
4030  font-size: 0.75rem;
4031  color: var(--text-secondary);
4032  white-space: nowrap;
4033  overflow: hidden;
4034  text-overflow: ellipsis;
4035  margin-top: 0.125rem;
4036}
4037
4038.command-palette-item-badge {
4039  flex-shrink: 0;
4040  font-size: 0.625rem;
4041  text-transform: uppercase;
4042  letter-spacing: 0.05em;
4043  padding: 0.125rem 0.375rem;
4044  background: var(--bg-tertiary);
4045  border-radius: 0.25rem;
4046  color: var(--text-secondary);
4047}
4048
4049.command-palette-footer {
4050  display: flex;
4051  gap: 1rem;
4052  padding: 0.5rem 1rem;
4053  border-top: 1px solid var(--border-color);
4054  font-size: 0.75rem;
4055  color: var(--text-secondary);
4056}
4057
4058.command-palette-footer span {
4059  display: flex;
4060  align-items: center;
4061  gap: 0.25rem;
4062}
4063
4064@media (max-width: 640px) {
4065  .command-palette-overlay {
4066    padding: 1rem;
4067    padding-top: 5vh;
4068  }
4069
4070  .command-palette {
4071    max-height: 80vh;
4072  }
4073
4074  .command-palette-footer {
4075    display: none;
4076  }
4077}
4078
4079/* Models Modal Styles */
4080.models-modal {
4081  padding: 0.5rem;
4082}
4083
4084.models-loading {
4085  display: flex;
4086  align-items: center;
4087  justify-content: center;
4088  gap: 0.5rem;
4089  padding: 2rem;
4090  color: var(--text-secondary);
4091}
4092
4093.models-error {
4094  display: flex;
4095  align-items: center;
4096  justify-content: space-between;
4097  padding: 0.75rem 1rem;
4098  background: var(--error-bg);
4099  border: 1px solid var(--error-border);
4100  border-radius: 0.375rem;
4101  color: var(--error-text);
4102  margin-bottom: 1rem;
4103}
4104
4105.models-error-dismiss {
4106  background: none;
4107  border: none;
4108  font-size: 1.25rem;
4109  cursor: pointer;
4110  color: inherit;
4111  padding: 0;
4112  line-height: 1;
4113}
4114
4115.models-info {
4116  padding: 0.75rem 1rem;
4117  background: var(--bg-tertiary);
4118  border-radius: 0.375rem;
4119  margin-bottom: 1rem;
4120}
4121
4122.models-info p {
4123  margin: 0 0 0.5rem 0;
4124  color: var(--text-secondary);
4125}
4126
4127.builtin-list {
4128  margin: 0;
4129  padding-left: 1.25rem;
4130  color: var(--text-primary);
4131}
4132
4133.builtin-list li {
4134  margin: 0.25rem 0;
4135}
4136
4137.models-list {
4138  display: flex;
4139  flex-direction: column;
4140  gap: 0.75rem;
4141  margin-bottom: 1rem;
4142}
4143
4144.model-card {
4145  padding: 0.75rem 1rem;
4146  background: var(--bg-base);
4147  border: 1px solid var(--border);
4148  border-radius: 0.375rem;
4149}
4150
4151.model-header {
4152  display: flex;
4153  justify-content: space-between;
4154  align-items: flex-start;
4155  gap: 0.5rem;
4156}
4157
4158.model-info {
4159  display: flex;
4160  flex-wrap: wrap;
4161  align-items: center;
4162  gap: 0.5rem;
4163}
4164
4165.model-name {
4166  font-weight: 500;
4167  color: var(--text-primary);
4168}
4169
4170.model-provider {
4171  font-size: 0.75rem;
4172  padding: 0.125rem 0.5rem;
4173  background: var(--bg-tertiary);
4174  border-radius: 0.25rem;
4175  color: var(--text-secondary);
4176}
4177
4178.model-source {
4179  font-size: 0.75rem;
4180  padding: 0.125rem 0.5rem;
4181  background: var(--bg-tertiary);
4182  border-radius: 0.25rem;
4183  color: var(--text-secondary);
4184}
4185
4186.model-card-builtin {
4187  opacity: 0.8;
4188  background: var(--bg-secondary);
4189}
4190
4191.models-empty {
4192  padding: 2rem;
4193  text-align: center;
4194  color: var(--text-secondary);
4195}
4196
4197.models-empty-hint {
4198  font-size: 0.875rem;
4199  margin-top: 0.5rem;
4200  color: var(--text-tertiary);
4201}
4202
4203.model-badge {
4204  font-size: 0.625rem;
4205  text-transform: uppercase;
4206  letter-spacing: 0.05em;
4207  padding: 0.125rem 0.375rem;
4208  background: var(--blue-bg);
4209  border: 1px solid var(--blue-border);
4210  border-radius: 0.25rem;
4211  color: var(--blue-text);
4212}
4213
4214.model-actions {
4215  display: flex;
4216  gap: 0.25rem;
4217  flex-shrink: 0;
4218}
4219
4220.model-details {
4221  margin-top: 0.5rem;
4222  display: flex;
4223  flex-direction: column;
4224  gap: 0.25rem;
4225}
4226
4227.model-api-name {
4228  font-size: 0.75rem;
4229  font-family: var(--font-mono);
4230  color: var(--text-secondary);
4231}
4232
4233.model-endpoint {
4234  font-size: 0.75rem;
4235  color: var(--text-tertiary);
4236  word-break: break-all;
4237}
4238
4239.btn-icon {
4240  padding: 0.25rem;
4241  border-radius: 0.25rem;
4242  color: var(--text-secondary);
4243  background: transparent;
4244  border: none;
4245  cursor: pointer;
4246  display: flex;
4247  align-items: center;
4248  justify-content: center;
4249}
4250
4251.btn-icon:hover {
4252  background: var(--bg-tertiary);
4253  color: var(--text-primary);
4254}
4255
4256/* Version Checker Styles */
4257.version-update-dot {
4258  position: absolute;
4259  top: 2px;
4260  right: 2px;
4261  width: 8px;
4262  height: 8px;
4263  background: #ef4444;
4264  border-radius: 50%;
4265  border: 2px solid var(--bg-base);
4266}
4267
4268.version-menu-dot {
4269  width: 8px;
4270  height: 8px;
4271  background: #ef4444;
4272  border-radius: 50%;
4273  margin-left: auto;
4274  flex-shrink: 0;
4275}
4276
4277.version-modal-overlay {
4278  position: fixed;
4279  inset: 0;
4280  background: rgba(0, 0, 0, 0.5);
4281  display: flex;
4282  align-items: center;
4283  justify-content: center;
4284  z-index: 1000;
4285  padding: 1rem;
4286}
4287
4288.version-modal {
4289  background: var(--bg-base);
4290  border-radius: 0.5rem;
4291  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
4292  max-width: 500px;
4293  width: 100%;
4294  max-height: 80vh;
4295  display: flex;
4296  flex-direction: column;
4297  overflow: hidden;
4298}
4299
4300.version-modal-header {
4301  display: flex;
4302  align-items: center;
4303  justify-content: space-between;
4304  padding: 1rem 1.25rem;
4305  border-bottom: 1px solid var(--border-color);
4306}
4307
4308.version-modal-header h2 {
4309  margin: 0;
4310  font-size: 1.125rem;
4311  font-weight: 600;
4312  color: var(--text-primary);
4313}
4314
4315.version-modal-close {
4316  background: none;
4317  border: none;
4318  padding: 0.25rem;
4319  cursor: pointer;
4320  color: var(--text-secondary);
4321  border-radius: 0.25rem;
4322}
4323
4324.version-modal-close:hover {
4325  background: var(--bg-tertiary);
4326  color: var(--text-primary);
4327}
4328
4329.version-modal-close svg {
4330  width: 1.25rem;
4331  height: 1.25rem;
4332}
4333
4334.version-modal-content {
4335  padding: 1.25rem;
4336  overflow-y: auto;
4337  display: flex;
4338  flex-direction: column;
4339  gap: 1rem;
4340}
4341
4342.version-info-row {
4343  display: flex;
4344  align-items: center;
4345  gap: 0.5rem;
4346  font-size: 0.875rem;
4347}
4348
4349.version-label {
4350  color: var(--text-secondary);
4351}
4352
4353.version-value {
4354  font-weight: 500;
4355  color: var(--text-primary);
4356  font-family: var(--font-mono);
4357}
4358
4359.version-date {
4360  color: var(--text-tertiary);
4361  font-size: 0.75rem;
4362}
4363
4364.version-error {
4365  padding: 0.75rem;
4366  background: var(--error-bg);
4367  border: 1px solid var(--error-border);
4368  border-radius: 0.375rem;
4369  font-size: 0.875rem;
4370  color: var(--error-text);
4371}
4372
4373.version-success {
4374  padding: 0.75rem;
4375  background: var(--success-bg);
4376  border: 1px solid var(--success-border);
4377  border-radius: 0.375rem;
4378  font-size: 0.875rem;
4379  color: var(--success-text);
4380}
4381
4382.version-changelog {
4383  border-top: 1px solid var(--border-color);
4384  padding-top: 1rem;
4385}
4386
4387.version-changelog h3 {
4388  margin: 0 0 0.75rem 0;
4389  font-size: 0.875rem;
4390  font-weight: 600;
4391}
4392
4393.changelog-link {
4394  color: var(--link-color);
4395  text-decoration: none;
4396}
4397
4398.changelog-link:hover {
4399  text-decoration: underline;
4400}
4401
4402.commit-list {
4403  margin: 0;
4404  padding: 0;
4405  list-style: none;
4406  max-height: 250px;
4407  overflow-y: auto;
4408  font-size: 0.8125rem;
4409}
4410
4411.commit-item {
4412  display: flex;
4413  gap: 0.5rem;
4414  padding: 0.5rem 0;
4415  border-bottom: 1px solid var(--border-color);
4416  align-items: flex-start;
4417}
4418
4419.commit-item:last-child {
4420  border-bottom: none;
4421}
4422
4423.commit-sha {
4424  font-family: var(--font-mono);
4425  color: var(--link-color);
4426  font-size: 0.75rem;
4427  flex-shrink: 0;
4428  text-decoration: none;
4429}
4430
4431.commit-sha:hover {
4432  text-decoration: underline;
4433}
4434
4435.commit-message {
4436  color: var(--text-primary);
4437  word-break: break-word;
4438  line-height: 1.4;
4439}
4440
4441.version-loading,
4442.version-no-commits {
4443  color: var(--text-secondary);
4444  font-size: 0.875rem;
4445  padding: 0.5rem 0;
4446}
4447
4448.version-actions {
4449  display: flex;
4450  flex-direction: column;
4451  gap: 0.75rem;
4452  border-top: 1px solid var(--border-color);
4453  padding-top: 1rem;
4454}
4455
4456.version-btn {
4457  padding: 0.5rem 1rem;
4458  border-radius: 0.375rem;
4459  font-size: 0.875rem;
4460  font-weight: 500;
4461  cursor: pointer;
4462  transition: background-color 0.15s;
4463}
4464
4465.version-btn:disabled {
4466  opacity: 0.6;
4467  cursor: not-allowed;
4468}
4469
4470.version-btn-primary {
4471  background: var(--primary);
4472  color: white;
4473  border: none;
4474}
4475
4476.version-btn-primary:hover:not(:disabled) {
4477  background: var(--primary-dark);
4478}
4479
4480.btn-icon.btn-danger:hover {
4481  background: var(--error-bg);
4482  color: var(--error-text);
4483}
4484
4485.add-model-btn {
4486  width: 100%;
4487}
4488
4489/* Model Form */
4490.model-form h3 {
4491  margin: 0 0 0.75rem 0;
4492  font-size: 1rem;
4493  font-weight: 600;
4494}
4495
4496.form-group {
4497  margin-bottom: 0.75rem;
4498}
4499
4500.form-group label {
4501  display: block;
4502  font-size: 0.875rem;
4503  font-weight: 500;
4504  margin-bottom: 0.25rem;
4505  color: var(--text-primary);
4506}
4507
4508.form-group label .optional {
4509  font-weight: 400;
4510  color: var(--text-secondary);
4511}
4512
4513.form-input {
4514  width: 100%;
4515  padding: 0.5rem 0.75rem;
4516  background: var(--bg-base);
4517  border: 1px solid var(--border);
4518  border-radius: 0.375rem;
4519  color: var(--text-primary);
4520  font-family: inherit;
4521  font-size: 0.875rem;
4522}
4523
4524.form-input:focus {
4525  outline: none;
4526  border-color: var(--primary);
4527  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
4528}
4529
4530.form-checkbox {
4531  display: flex;
4532  align-items: center;
4533}
4534
4535.form-checkbox label {
4536  display: flex;
4537  align-items: center;
4538  gap: 0.5rem;
4539  cursor: pointer;
4540  margin: 0;
4541}
4542
4543.form-checkbox input[type="checkbox"] {
4544  width: 1rem;
4545  height: 1rem;
4546  cursor: pointer;
4547}
4548
4549.info-icon-wrapper {
4550  position: relative;
4551  display: inline-flex;
4552  align-items: center;
4553  margin-left: 0.25rem;
4554}
4555
4556.info-icon {
4557  display: inline-flex;
4558  align-items: center;
4559  justify-content: center;
4560  color: var(--text-tertiary);
4561  cursor: pointer;
4562}
4563
4564.info-icon:hover {
4565  color: var(--text-secondary);
4566}
4567
4568.info-tooltip {
4569  position: absolute;
4570  top: 50%;
4571  left: 100%;
4572  transform: translateY(-50%);
4573  background: var(--bg-tertiary);
4574  border: 1px solid var(--border);
4575  border-radius: 0.375rem;
4576  padding: 0.5rem 0.75rem;
4577  font-size: 0.75rem;
4578  font-weight: 400;
4579  color: var(--text-primary);
4580  white-space: normal;
4581  width: 220px;
4582  margin-left: 0.375rem;
4583  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
4584  z-index: 100;
4585}
4586
4587.info-tooltip::after {
4588  content: "";
4589  position: absolute;
4590  top: 50%;
4591  right: 100%;
4592  transform: translateY(-50%);
4593  border: 6px solid transparent;
4594  border-right-color: var(--border);
4595}
4596
4597.provider-buttons {
4598  display: flex;
4599  gap: 0.5rem;
4600}
4601
4602.provider-btn {
4603  flex: 1;
4604  padding: 0.5rem;
4605  background: var(--bg-base);
4606  border: 1px solid var(--border);
4607  border-radius: 0.375rem;
4608  color: var(--text-primary);
4609  font-size: 0.875rem;
4610  cursor: pointer;
4611  transition: all 0.15s;
4612}
4613
4614.provider-btn:hover {
4615  background: var(--bg-tertiary);
4616}
4617
4618.provider-btn.selected {
4619  background: var(--primary);
4620  border-color: var(--primary);
4621  color: white;
4622}
4623
4624.endpoint-toggle {
4625  display: flex;
4626  gap: 0;
4627  margin-bottom: 0.5rem;
4628}
4629
4630.toggle-btn {
4631  flex: 1;
4632  padding: 0.375rem 0.75rem;
4633  background: var(--bg-base);
4634  border: 1px solid var(--border);
4635  color: var(--text-secondary);
4636  font-size: 0.75rem;
4637  cursor: pointer;
4638  transition: all 0.15s;
4639}
4640
4641.toggle-btn:first-child {
4642  border-radius: 0.375rem 0 0 0.375rem;
4643}
4644
4645.toggle-btn:last-child {
4646  border-radius: 0 0.375rem 0.375rem 0;
4647  border-left: none;
4648}
4649
4650.toggle-btn.selected {
4651  background: var(--bg-tertiary);
4652  color: var(--text-primary);
4653}
4654
4655.endpoint-display {
4656  padding: 0.5rem 0.75rem;
4657  background: var(--bg-tertiary);
4658  border-radius: 0.375rem;
4659  font-size: 0.75rem;
4660  color: var(--text-secondary);
4661  word-break: break-all;
4662}
4663
4664.model-presets {
4665  display: flex;
4666  flex-wrap: wrap;
4667  gap: 0.375rem;
4668  margin-bottom: 0.5rem;
4669}
4670
4671.preset-btn {
4672  padding: 0.25rem 0.625rem;
4673  background: var(--bg-base);
4674  border: 1px solid var(--border);
4675  border-radius: 0.25rem;
4676  color: var(--text-secondary);
4677  font-size: 0.75rem;
4678  cursor: pointer;
4679  transition: all 0.15s;
4680}
4681
4682.preset-btn:hover {
4683  background: var(--bg-tertiary);
4684  color: var(--text-primary);
4685}
4686
4687.preset-btn.selected {
4688  background: var(--blue-bg);
4689  border-color: var(--blue-border);
4690  color: var(--blue-text);
4691}
4692
4693.test-result {
4694  padding: 0.75rem 1rem;
4695  border-radius: 0.375rem;
4696  margin-bottom: 1rem;
4697  font-size: 0.875rem;
4698}
4699
4700.test-result.success {
4701  background: var(--success-bg);
4702  border: 1px solid var(--success-border);
4703  color: var(--success-text);
4704}
4705
4706.test-result.error {
4707  background: var(--error-bg);
4708  border: 1px solid var(--error-border);
4709  color: var(--error-text);
4710}
4711
4712.form-actions {
4713  display: flex;
4714  gap: 0.5rem;
4715  justify-content: flex-end;
4716  margin-top: 1rem;
4717  padding-bottom: 0.5rem;
4718}
4719
4720kbd {
4721  display: inline-block;
4722  padding: 0.125rem 0.375rem;
4723  font-size: 0.75rem;
4724  font-family: inherit;
4725  background: var(--bg-tertiary);
4726  border: 1px solid var(--border-color);
4727  border-radius: 0.25rem;
4728  color: var(--text-secondary);
4729}
4730
4731/* System Prompt View */
4732.system-prompt-view {
4733  background: var(--gray-100);
4734  border-radius: 0.5rem;
4735  margin: 0.5rem 0;
4736  width: 100%;
4737  border: 1px dashed var(--border);
4738}
4739
4740.dark .system-prompt-view {
4741  background: var(--gray-800);
4742}
4743
4744.system-prompt-header {
4745  display: flex;
4746  align-items: center;
4747  justify-content: space-between;
4748  padding: 0.75rem 1rem;
4749  cursor: pointer;
4750  user-select: none;
4751}
4752
4753.system-prompt-header:hover {
4754  background: rgba(0, 0, 0, 0.02);
4755  border-radius: 0.5rem;
4756}
4757
4758.dark .system-prompt-header:hover {
4759  background: rgba(255, 255, 255, 0.02);
4760}
4761
4762.system-prompt-summary {
4763  display: flex;
4764  align-items: center;
4765  gap: 0.5rem;
4766  flex: 1;
4767  min-width: 0;
4768}
4769
4770.system-prompt-icon {
4771  font-size: 1rem;
4772  flex-shrink: 0;
4773}
4774
4775.system-prompt-label {
4776  font-family: var(--font-mono);
4777  font-size: 0.875rem;
4778  color: var(--text-primary);
4779  font-weight: 500;
4780}
4781
4782.system-prompt-meta {
4783  font-size: 0.75rem;
4784  color: var(--text-secondary);
4785  flex-shrink: 0;
4786}
4787
4788.system-prompt-content {
4789  padding: 0 1rem 1rem 1rem;
4790}
4791
4792.system-prompt-text {
4793  font-family: var(--font-mono);
4794  font-size: 0.75rem;
4795  line-height: 1.5;
4796  color: var(--text-secondary);
4797  background: var(--bg-base);
4798  border: 1px solid var(--border);
4799  border-radius: 0.375rem;
4800  padding: 1rem;
4801  margin: 0;
4802  max-height: 400px;
4803  overflow: auto;
4804  white-space: pre-wrap;
4805  word-wrap: break-word;
4806}
4807
4808.dark .system-prompt-text {
4809  background: var(--gray-900);
4810}
4811
4812/* ===== Terminal Panel ===== */
4813.terminal-panel {
4814  display: flex;
4815  flex-direction: column;
4816  border-top: 1px solid var(--border);
4817  background: var(--bg-secondary);
4818  min-height: 80px;
4819  max-height: 800px;
4820  overflow: hidden;
4821}
4822
4823.terminal-panel-resize-handle {
4824  height: 6px;
4825  cursor: ns-resize;
4826  display: flex;
4827  align-items: center;
4828  justify-content: center;
4829  flex-shrink: 0;
4830  background: var(--bg-secondary);
4831  border-bottom: 1px solid var(--border);
4832  user-select: none;
4833}
4834
4835.terminal-panel-resize-handle:hover {
4836  background: var(--bg-tertiary);
4837}
4838
4839.terminal-panel-resize-grip {
4840  width: 40px;
4841  height: 3px;
4842  background: var(--text-tertiary);
4843  border-radius: 2px;
4844}
4845
4846.terminal-panel-header {
4847  display: flex;
4848  align-items: center;
4849  justify-content: space-between;
4850  padding: 0 8px;
4851  height: 34px;
4852  flex-shrink: 0;
4853  background: var(--bg-secondary);
4854  border-bottom: 1px solid var(--border);
4855  gap: 8px;
4856}
4857
4858.terminal-panel-tabs {
4859  display: flex;
4860  align-items: center;
4861  gap: 2px;
4862  overflow-x: auto;
4863  flex: 1;
4864  min-width: 0;
4865  scrollbar-width: none;
4866}
4867
4868.terminal-panel-tabs::-webkit-scrollbar {
4869  display: none;
4870}
4871
4872.terminal-panel-tab {
4873  display: flex;
4874  align-items: center;
4875  gap: 4px;
4876  padding: 4px 8px;
4877  border-radius: 4px;
4878  cursor: pointer;
4879  font-size: 12px;
4880  font-family: Consolas, "Liberation Mono", Menlo, monospace;
4881  color: var(--text-secondary);
4882  white-space: nowrap;
4883  user-select: none;
4884  border: 1px solid transparent;
4885  transition:
4886    background-color 0.1s,
4887    color 0.1s;
4888}
4889
4890.terminal-panel-tab:hover {
4891  background: var(--bg-tertiary);
4892  color: var(--text-primary);
4893}
4894
4895.terminal-panel-tab-active {
4896  background: var(--bg-base);
4897  color: var(--text-primary);
4898  border-color: var(--border);
4899}
4900
4901.terminal-panel-tab-indicator {
4902  font-size: 10px;
4903  line-height: 1;
4904}
4905
4906.terminal-panel-tab-running {
4907  color: var(--success-text);
4908}
4909
4910.terminal-panel-tab-success {
4911  color: var(--success-text);
4912}
4913
4914.terminal-panel-tab-error {
4915  color: var(--error-text);
4916}
4917
4918.terminal-panel-tab-label {
4919  max-width: 120px;
4920  overflow: hidden;
4921  text-overflow: ellipsis;
4922}
4923
4924.terminal-panel-tab-close {
4925  display: flex;
4926  align-items: center;
4927  justify-content: center;
4928  width: 16px;
4929  height: 16px;
4930  border: none;
4931  background: none;
4932  cursor: pointer;
4933  color: var(--text-tertiary);
4934  font-size: 14px;
4935  line-height: 1;
4936  border-radius: 3px;
4937  padding: 0;
4938}
4939
4940.terminal-panel-tab-close:hover {
4941  background: var(--bg-tertiary);
4942  color: var(--error-text);
4943}
4944
4945.terminal-panel-actions {
4946  display: flex;
4947  align-items: center;
4948  gap: 2px;
4949  background: var(--bg-base);
4950  border: 1px solid var(--border);
4951  border-radius: 4px;
4952  padding: 2px;
4953  flex-shrink: 0;
4954}
4955
4956.terminal-panel-actions-divider {
4957  width: 1px;
4958  height: 16px;
4959  background: var(--border);
4960  margin: 0 2px;
4961}
4962
4963.terminal-panel-action-btn {
4964  display: flex;
4965  align-items: center;
4966  justify-content: center;
4967  width: 24px;
4968  height: 24px;
4969  border-radius: 4px;
4970  border: none;
4971  background: transparent;
4972  cursor: pointer;
4973  color: var(--text-secondary);
4974  transition:
4975    background-color 0.15s,
4976    color 0.15s;
4977}
4978
4979.terminal-panel-action-btn:hover {
4980  background: var(--bg-tertiary);
4981}
4982
4983.terminal-panel-action-btn-feedback {
4984  background: var(--success-bg);
4985  color: var(--success-text);
4986}
4987
4988.terminal-panel-content {
4989  flex: 1;
4990  min-height: 0;
4991  overflow: hidden;
4992  position: relative;
4993}
4994
4995.terminal-panel-content > div {
4996  position: absolute;
4997  inset: 0;
4998}