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  width: 100%;
1683  box-sizing: border-box;
1684  min-height: 46px;
1685  max-height: 200px;
1686  padding: 0.625rem 1rem;
1687  border: 1.5px solid var(--border);
1688  border-radius: 4px;
1689  resize: none;
1690  background: var(--bg-base);
1691  color: var(--text-primary);
1692  font-family: inherit;
1693  font-size: 16px; /* Must be 16px+ to prevent iOS zoom on focus */
1694  line-height: 1.5;
1695  transition:
1696    border-color 0.2s,
1697    box-shadow 0.2s;
1698}
1699
1700.message-textarea:focus {
1701  outline: none;
1702  border-color: var(--primary);
1703  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.08);
1704}
1705
1706.message-textarea:disabled {
1707  opacity: 0.5;
1708  cursor: not-allowed;
1709}
1710
1711.message-send-btn svg {
1712  transform: rotate(-90deg);
1713}
1714
1715.message-textarea::placeholder {
1716  color: var(--text-tertiary);
1717}
1718
1719.message-send-btn {
1720  flex-shrink: 0;
1721  width: 36px;
1722  height: 36px;
1723  margin-bottom: 0.25rem;
1724  padding: 0;
1725  background: var(--primary);
1726  color: white;
1727  border: none;
1728  border-radius: 50%;
1729  display: flex;
1730  align-items: center;
1731  justify-content: center;
1732  transition:
1733    background-color 0.2s,
1734    transform 0.1s;
1735  cursor: pointer;
1736}
1737
1738.message-send-btn:hover:not(:disabled) {
1739  background: var(--primary-dark);
1740  transform: scale(1.05);
1741}
1742
1743.message-send-btn:active:not(:disabled) {
1744  transform: scale(0.95);
1745}
1746
1747.message-send-btn:disabled {
1748  background: var(--gray-300);
1749  cursor: not-allowed;
1750  opacity: 0.6;
1751}
1752
1753.dark .message-send-btn:disabled {
1754  background: var(--gray-600);
1755}
1756
1757/* Attach file button */
1758.message-attach-btn {
1759  flex-shrink: 0;
1760  width: 36px;
1761  height: 36px;
1762  margin-bottom: 0.25rem;
1763  padding: 0;
1764  background: transparent;
1765  color: var(--text-secondary);
1766  border: none;
1767  border-radius: 50%;
1768  display: flex;
1769  align-items: center;
1770  justify-content: center;
1771  transition:
1772    background-color 0.2s,
1773    color 0.2s,
1774    transform 0.1s;
1775  cursor: pointer;
1776}
1777
1778.message-attach-btn:hover:not(:disabled) {
1779  background: var(--gray-100);
1780  color: var(--text-primary);
1781}
1782
1783.dark .message-attach-btn:hover:not(:disabled) {
1784  background: var(--gray-700);
1785}
1786
1787.message-attach-btn:active:not(:disabled) {
1788  transform: scale(0.95);
1789}
1790
1791.message-attach-btn:disabled {
1792  cursor: not-allowed;
1793  opacity: 0.4;
1794}
1795
1796/* Voice input button */
1797.message-voice-btn {
1798  flex-shrink: 0;
1799  width: 36px;
1800  height: 36px;
1801  margin-bottom: 0.25rem;
1802  padding: 0;
1803  background: transparent;
1804  color: var(--text-secondary);
1805  border: none;
1806  border-radius: 50%;
1807  display: flex;
1808  align-items: center;
1809  justify-content: center;
1810  transition:
1811    background-color 0.2s,
1812    color 0.2s,
1813    transform 0.1s;
1814  cursor: pointer;
1815}
1816
1817.message-voice-btn:hover:not(:disabled):not(.listening) {
1818  background: var(--gray-100);
1819  color: var(--text-primary);
1820}
1821
1822.dark .message-voice-btn:hover:not(:disabled):not(.listening) {
1823  background: var(--gray-700);
1824}
1825
1826.message-voice-btn:active:not(:disabled):not(.listening) {
1827  transform: scale(0.95);
1828}
1829
1830.message-voice-btn:disabled {
1831  cursor: not-allowed;
1832  opacity: 0.4;
1833}
1834
1835.message-voice-btn.listening,
1836.message-voice-btn.listening:hover {
1837  background: #dc2626;
1838  color: white;
1839  animation: pulse-voice 1.5s ease-in-out infinite;
1840}
1841
1842.dark .message-voice-btn.listening,
1843.dark .message-voice-btn.listening:hover {
1844  background: #ef4444;
1845  color: white;
1846}
1847
1848@keyframes pulse-voice {
1849  0%,
1850  100% {
1851    transform: scale(1);
1852  }
1853  50% {
1854    transform: scale(1.1);
1855  }
1856}
1857
1858/* Drag and drop styles */
1859.message-input-container {
1860  position: relative;
1861}
1862
1863.message-input-container.drag-over {
1864  border-color: var(--primary);
1865}
1866
1867.message-input-container.shell-mode .message-input-form {
1868  border-color: var(--warning-border);
1869  background: var(--warning-bg);
1870}
1871
1872.message-input-container.shell-mode .message-textarea {
1873  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
1874  background: transparent;
1875  padding-left: 36px;
1876  width: 100%;
1877}
1878
1879.textarea-wrapper {
1880  position: relative;
1881  flex: 1;
1882  min-width: 0;
1883}
1884
1885.message-input-container.shell-mode .message-textarea::placeholder {
1886  font-family: inherit;
1887}
1888
1889.shell-mode-indicator {
1890  position: absolute;
1891  left: 12px;
1892  top: 14px;
1893  display: flex;
1894  align-items: center;
1895  justify-content: center;
1896  color: var(--warning-text);
1897  pointer-events: none;
1898  z-index: 1;
1899}
1900
1901.drag-overlay {
1902  position: absolute;
1903  inset: 0;
1904  background: rgba(37, 99, 235, 0.1);
1905  border: 2px dashed var(--primary);
1906  border-radius: 4px;
1907  display: flex;
1908  align-items: center;
1909  justify-content: center;
1910  z-index: 10;
1911  pointer-events: none;
1912}
1913
1914.drag-overlay-content {
1915  background: var(--primary);
1916  color: white;
1917  padding: 0.5rem 1rem;
1918  border-radius: 4px;
1919  font-size: 0.875rem;
1920  font-weight: 500;
1921}
1922
1923/* Modal */
1924.modal-overlay {
1925  position: fixed;
1926  inset: 0;
1927  background: rgba(0, 0, 0, 0.5);
1928  z-index: 50;
1929  display: flex;
1930  align-items: center;
1931  justify-content: center;
1932  padding: 1rem;
1933}
1934
1935.modal {
1936  background: var(--bg-base);
1937  border-radius: 0.5rem;
1938  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
1939  max-width: 28rem;
1940  width: 100%;
1941  max-height: 80vh;
1942  overflow: hidden;
1943}
1944
1945.modal.modal-wide {
1946  max-width: 40rem;
1947}
1948
1949.modal-header {
1950  display: flex;
1951  align-items: center;
1952  justify-content: space-between;
1953  padding: 1rem;
1954  border-bottom: 1px solid var(--border);
1955}
1956
1957.modal-title {
1958  font-size: 1.125rem;
1959  font-weight: 600;
1960}
1961
1962.modal-title-right {
1963  margin-left: auto;
1964  margin-right: 1rem;
1965}
1966
1967.modal-body {
1968  padding: 1rem;
1969  overflow-y: auto;
1970  max-height: calc(80vh - 60px);
1971}
1972
1973/* Form Elements */
1974label {
1975  display: block;
1976  font-size: 0.875rem;
1977  font-weight: 500;
1978  margin-bottom: 0.5rem;
1979}
1980
1981select {
1982  width: 100%;
1983  background: var(--bg-tertiary);
1984  border: 1px solid var(--border);
1985  border-radius: 0.375rem;
1986  padding: 0.5rem 0.75rem;
1987  font-family: inherit;
1988  font-size: 1rem;
1989  color: var(--text-primary);
1990}
1991
1992select:focus {
1993  outline: none;
1994  border-color: var(--primary);
1995  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
1996}
1997
1998select:disabled {
1999  opacity: 0.5;
2000  cursor: not-allowed;
2001}
2002
2003/* Loading Spinner */
2004.spinner {
2005  width: 2rem;
2006  height: 2rem;
2007  border: 2px solid transparent;
2008  border-top-color: var(--primary);
2009  border-radius: 50%;
2010  animation: spin 0.8s linear infinite;
2011}
2012
2013.spinner-small {
2014  width: 1rem;
2015  height: 1rem;
2016  border-width: 2px;
2017  border-top-color: currentColor;
2018}
2019
2020@keyframes spin {
2021  to {
2022    transform: rotate(360deg);
2023  }
2024}
2025
2026/* Loading/Error States */
2027.loading-container,
2028.error-container {
2029  height: 100vh; /* Fallback for older browsers */
2030  height: 100dvh;
2031  display: flex;
2032  align-items: center;
2033  justify-content: center;
2034}
2035
2036.loading-content,
2037.error-content {
2038  text-align: center;
2039}
2040
2041/* Unified Status Bar */
2042.status-bar {
2043  flex: 0 0 auto;
2044  background: var(--bg-base);
2045  border-top: 1px solid var(--border);
2046  padding: 0.5rem 1rem;
2047  padding-left: max(1rem, env(safe-area-inset-left));
2048  padding-right: max(1rem, env(safe-area-inset-right));
2049  min-height: 2.5rem;
2050  display: flex;
2051  align-items: center;
2052}
2053
2054.status-bar-content {
2055  display: flex;
2056  align-items: center;
2057  justify-content: space-between;
2058  width: 100%;
2059  gap: 0.75rem;
2060}
2061
2062.status-message {
2063  color: var(--text-secondary);
2064  font-size: 0.875rem;
2065  flex: 1;
2066  min-width: 0;
2067}
2068
2069.status-message.status-ready {
2070  color: var(--text-tertiary);
2071}
2072
2073.status-message.status-warning {
2074  color: var(--blue-text);
2075  font-weight: 500;
2076}
2077
2078.status-message.status-error {
2079  color: var(--error-text);
2080  font-weight: 500;
2081}
2082
2083.status-message.status-reconnecting {
2084  color: var(--blue-text);
2085  font-weight: 500;
2086}
2087
2088.reconnecting-dots {
2089  display: inline-block;
2090  animation: reconnecting-pulse 1.5s ease-in-out infinite;
2091}
2092
2093@keyframes reconnecting-pulse {
2094  0%,
2095  100% {
2096    opacity: 0.3;
2097  }
2098  50% {
2099    opacity: 1;
2100  }
2101}
2102
2103.animated-working {
2104  display: inline;
2105}
2106
2107.animated-working .bold-letter {
2108  font-weight: 700;
2109}
2110
2111.status-button {
2112  padding: 0.375rem 0.875rem;
2113  border-radius: 0.375rem;
2114  font-size: 0.875rem;
2115  font-weight: 500;
2116  transition: all 0.2s;
2117  display: flex;
2118  align-items: center;
2119  gap: 0.375rem;
2120  white-space: nowrap;
2121  border: none;
2122  cursor: pointer;
2123}
2124
2125.status-button svg {
2126  width: 0.875rem;
2127  height: 0.875rem;
2128}
2129
2130.status-button-primary {
2131  background: var(--primary);
2132  color: white;
2133}
2134
2135.status-button-primary:hover {
2136  background: var(--primary-dark);
2137}
2138
2139.status-button-cancel {
2140  background: var(--error-bg);
2141  color: var(--error-text);
2142  border: 1px solid var(--error-border);
2143}
2144
2145.status-button-cancel:hover:not(:disabled) {
2146  background: var(--error-text);
2147  color: white;
2148}
2149
2150.status-button-cancel:disabled {
2151  opacity: 0.6;
2152  cursor: not-allowed;
2153}
2154
2155.status-button-text {
2156  background: transparent;
2157  color: var(--text-secondary);
2158  padding: 0.25rem;
2159}
2160
2161.status-button-text:hover {
2162  background: var(--bg-tertiary);
2163  color: var(--text-primary);
2164}
2165
2166/* Legacy disconnect/error banner classes (kept for compatibility but unused) */
2167.disconnect-banner {
2168  background: var(--gray-100);
2169  border-top: 1px solid var(--border);
2170  padding: 0.5rem 1rem;
2171}
2172
2173.dark .disconnect-banner {
2174  background: var(--gray-800);
2175}
2176
2177.disconnect-banner-content {
2178  display: flex;
2179  align-items: center;
2180  justify-content: center;
2181  gap: 0.75rem;
2182}
2183
2184.disconnect-message {
2185  color: var(--text-secondary);
2186  font-size: 0.875rem;
2187  margin: 0;
2188}
2189
2190.btn-reconnect {
2191  padding: 0.25rem 0.75rem;
2192  background: var(--primary);
2193  color: white;
2194  border-radius: 0.375rem;
2195  font-size: 0.875rem;
2196  font-weight: 500;
2197  transition: background-color 0.2s;
2198}
2199
2200.btn-reconnect:hover {
2201  background: var(--primary-dark);
2202}
2203
2204.error-banner {
2205  background: var(--error-bg);
2206  border-top: 1px solid var(--error-border);
2207  padding: 0.75rem 1rem;
2208}
2209
2210.error-banner-content {
2211  display: flex;
2212  align-items: center;
2213  justify-content: space-between;
2214}
2215
2216.error-message {
2217  color: var(--error-text);
2218  font-size: 0.875rem;
2219}
2220
2221/* Empty State */
2222.empty-state {
2223  display: flex;
2224  align-items: center;
2225  justify-content: center;
2226  height: 100%;
2227  color: var(--text-secondary);
2228}
2229
2230.empty-state-content {
2231  text-align: center;
2232}
2233
2234/* Scrollbar */
2235.scrollable {
2236  scrollbar-width: thin;
2237  scrollbar-color: rgba(156, 163, 175, 0.5) transparent;
2238}
2239
2240.scrollable::-webkit-scrollbar {
2241  width: 6px;
2242}
2243
2244.scrollable::-webkit-scrollbar-track {
2245  background: transparent;
2246}
2247
2248.scrollable::-webkit-scrollbar-thumb {
2249  background-color: rgba(156, 163, 175, 0.5);
2250  border-radius: 3px;
2251}
2252
2253.scrollable::-webkit-scrollbar-thumb:hover {
2254  background-color: rgba(156, 163, 175, 0.8);
2255}
2256
2257/* SVG Icons */
2258svg {
2259  width: 1.25rem;
2260  height: 1.25rem;
2261  display: block;
2262}
2263
2264.icon-sm svg {
2265  width: 1rem;
2266  height: 1rem;
2267}
2268
2269/* Utility Classes */
2270.relative {
2271  position: relative;
2272}
2273
2274.overflow-auto {
2275  overflow: auto;
2276}
2277
2278.overflow-hidden {
2279  overflow: hidden;
2280}
2281
2282.rounded {
2283  border-radius: 0.25rem;
2284}
2285
2286.rounded-lg {
2287  border-radius: 0.5rem;
2288}
2289
2290.border {
2291  border: 1px solid var(--border);
2292}
2293
2294.min-h-0 {
2295  min-height: 0;
2296}
2297
2298/* Overflow Menu */
2299.overflow-menu {
2300  position: absolute;
2301  top: calc(100% + 0.5rem);
2302  right: 0;
2303  background: var(--bg-secondary);
2304  border: 1px solid var(--border);
2305  border-radius: 0.5rem;
2306  box-shadow:
2307    0 4px 6px -1px rgba(0, 0, 0, 0.1),
2308    0 2px 4px -1px rgba(0, 0, 0, 0.06);
2309  min-width: 10rem;
2310  z-index: 50;
2311}
2312
2313.overflow-menu-item {
2314  display: flex;
2315  align-items: center;
2316  width: 100%;
2317  padding: 0.75rem 1rem;
2318  text-align: left;
2319  background: transparent;
2320  border: none;
2321  color: var(--text-primary);
2322  font-size: 0.875rem;
2323  cursor: pointer;
2324  transition: background-color 0.2s;
2325}
2326
2327.overflow-menu-item:hover {
2328  background: var(--bg-hover);
2329}
2330
2331.overflow-menu-item:first-child {
2332  border-top-left-radius: 0.5rem;
2333  border-top-right-radius: 0.5rem;
2334}
2335
2336.overflow-menu-item:last-child {
2337  border-bottom-left-radius: 0.5rem;
2338  border-bottom-right-radius: 0.5rem;
2339}
2340
2341.overflow-menu-divider {
2342  height: 1px;
2343  background: var(--border);
2344  margin: 0.5rem 0;
2345}
2346
2347.theme-toggle-row {
2348  display: flex;
2349  gap: 0.25rem;
2350  padding: 0.5rem;
2351}
2352
2353.theme-toggle-btn {
2354  flex: 1;
2355  display: flex;
2356  align-items: center;
2357  justify-content: center;
2358  padding: 0.5rem;
2359  background: transparent;
2360  border: 1px solid var(--border);
2361  border-radius: 0.375rem;
2362  color: var(--text-secondary);
2363  cursor: pointer;
2364  transition: all 0.15s;
2365}
2366
2367.theme-toggle-btn svg {
2368  width: 1.125rem;
2369  height: 1.125rem;
2370}
2371
2372.theme-toggle-btn:hover {
2373  background: var(--bg-tertiary);
2374  color: var(--text-primary);
2375}
2376
2377.theme-toggle-btn-selected {
2378  background: var(--primary);
2379  border-color: var(--primary);
2380  color: white;
2381}
2382
2383.theme-toggle-btn-selected:hover {
2384  background: var(--primary-dark);
2385  border-color: var(--primary-dark);
2386  color: white;
2387}
2388
2389/* Diff display styling */
2390.diff-display {
2391  font-family: var(--font-mono);
2392  font-size: 0.875rem;
2393  line-height: 1.5;
2394  background: var(--bg-base);
2395  padding: 1rem;
2396  border-radius: 0.25rem;
2397  overflow-x: auto;
2398  white-space: pre;
2399  color: var(--text-primary);
2400}
2401
2402/* Responsive adjustments */
2403@media (min-width: 768px) {
2404  .drawer {
2405    position: static;
2406    transform: translateX(0) !important;
2407  }
2408
2409  .drawer.collapsed {
2410    display: none;
2411  }
2412
2413  .hide-on-desktop {
2414    display: none !important;
2415  }
2416
2417  .show-on-desktop-only {
2418    display: flex !important;
2419  }
2420
2421  .backdrop {
2422    display: none !important;
2423  }
2424}
2425
2426/* Hide desktop-only elements on mobile */
2427@media (max-width: 767px) {
2428  .show-on-desktop-only {
2429    display: none !important;
2430  }
2431}
2432
2433/* Scroll to bottom button */
2434.scroll-to-bottom-button {
2435  position: absolute;
2436  bottom: 1rem;
2437  left: 50%;
2438  transform: translateX(-50%);
2439  background: var(--bg-elevated);
2440  border: 1px solid var(--border);
2441  border-radius: 2rem;
2442  padding: 0.5rem 1rem;
2443  display: flex;
2444  align-items: center;
2445  gap: 0.5rem;
2446  cursor: pointer;
2447  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
2448  transition: all 0.2s ease;
2449  color: var(--text-primary);
2450  font-size: 0.875rem;
2451  z-index: 10;
2452}
2453
2454.scroll-to-bottom-button:hover {
2455  background: var(--bg-hover);
2456  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2457}
2458
2459.scroll-to-bottom-button:active {
2460  transform: translateX(-50%) scale(0.95);
2461}
2462
2463/* Wrapper for messages area to position scroll-to-bottom button */
2464.messages-area-wrapper {
2465  position: relative;
2466  flex: 1 1 auto;
2467  min-height: 0; /* Important for flex children to shrink properly */
2468  overflow: hidden;
2469}
2470
2471.messages-container {
2472  height: 100%;
2473}
2474
2475/* Status bar configuration controls for empty conversations */
2476.status-bar-config {
2477  display: flex;
2478  align-items: center;
2479  gap: 0.75rem;
2480  width: 100%;
2481}
2482
2483.status-bar-new-conversation {
2484  display: flex;
2485  align-items: center;
2486  justify-content: space-between;
2487  width: 100%;
2488  flex-wrap: wrap;
2489  gap: 0.5rem;
2490}
2491
2492/* On smaller screens, allow the fields to stack vertically */
2493@media (max-width: 600px) {
2494  .status-bar-new-conversation {
2495    flex-direction: column;
2496    align-items: stretch;
2497  }
2498
2499  .status-field {
2500    width: 100%;
2501    max-width: none;
2502  }
2503
2504  .status-field-label {
2505    width: 2.5rem;
2506    text-align: right;
2507  }
2508}
2509
2510.status-bar-controls {
2511  display: flex;
2512  align-items: center;
2513  gap: 0.5rem;
2514}
2515
2516/* Flexible containers for status fields that adapt to content */
2517.status-field {
2518  display: flex;
2519  align-items: center;
2520  gap: 0.25rem;
2521  min-width: 0; /* Allow flex items to shrink below content size */
2522}
2523
2524.status-field-label {
2525  font-size: 0.7rem;
2526  color: var(--text-secondary);
2527  flex-shrink: 0;
2528}
2529
2530.status-field-model {
2531  flex: 1 1 auto;
2532  min-width: 150px;
2533  max-width: 300px;
2534}
2535
2536.status-field-cwd {
2537  flex: 1 1 auto;
2538  min-width: 180px;
2539  max-width: 400px;
2540}
2541
2542/* Compact clickable chips for model and cwd */
2543.status-chip {
2544  padding: 0.25rem 0.5rem;
2545  border: 1px solid var(--border);
2546  border-radius: 0.25rem;
2547  background: var(--bg-tertiary);
2548  color: var(--text-primary);
2549  font-size: 0.75rem;
2550  font-family: var(--font-mono);
2551  cursor: pointer;
2552  transition: all 0.2s;
2553  white-space: normal; /* Allow text to wrap */
2554  word-break: break-word; /* Break long words if needed */
2555  overflow-wrap: break-word;
2556  width: 100%;
2557  text-align: left;
2558  box-sizing: border-box;
2559  line-height: 1.3; /* Better line height for multi-line text */
2560  min-height: 1.75rem; /* Minimum height to accommodate wrapped text */
2561}
2562
2563.status-chip:hover:not(:disabled) {
2564  background: var(--bg-secondary);
2565  border-color: var(--blue-text);
2566}
2567
2568.status-chip:disabled {
2569  opacity: 0.5;
2570  cursor: not-allowed;
2571}
2572
2573.status-chip-error {
2574  border-color: var(--red-text, #dc2626);
2575  background: rgba(220, 38, 38, 0.1);
2576}
2577
2578.status-field-error {
2579  position: relative;
2580}
2581
2582.status-input-error {
2583  border-color: var(--red-text, #dc2626);
2584}
2585
2586.status-select {
2587  padding: 0.25rem 0.5rem;
2588  border: 1px solid var(--blue-text);
2589  border-radius: 0.25rem;
2590  background: var(--bg-base);
2591  color: var(--text-primary);
2592  font-size: 0.75rem;
2593  font-family: var(--font-mono);
2594  cursor: pointer;
2595  transition: border-color 0.2s;
2596  width: 100%;
2597  box-sizing: border-box;
2598}
2599
2600.status-select:hover:not(:disabled) {
2601  border-color: var(--blue-text);
2602}
2603
2604.status-select:focus {
2605  outline: none;
2606  border-color: var(--blue-text);
2607  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
2608}
2609
2610.status-select:disabled {
2611  opacity: 0.5;
2612  cursor: not-allowed;
2613}
2614
2615/* Model Picker Custom Dropdown */
2616.model-picker {
2617  position: relative;
2618  display: inline-block;
2619  width: 100%;
2620}
2621
2622.model-picker-trigger {
2623  display: flex;
2624  align-items: center;
2625  justify-content: space-between;
2626  gap: 0.5rem;
2627  padding: 0.25rem 0.5rem;
2628  border: 1px solid var(--border);
2629  border-radius: 0.25rem;
2630  background: var(--bg-tertiary);
2631  color: var(--text-primary);
2632  font-size: 0.75rem;
2633  font-family: var(--font-mono);
2634  cursor: pointer;
2635  transition: all 0.2s;
2636  width: 100%;
2637  text-align: left;
2638  box-sizing: border-box;
2639  min-height: 1.75rem;
2640}
2641
2642.model-picker-trigger:hover:not(:disabled) {
2643  background: var(--bg-secondary);
2644  border-color: var(--blue-text);
2645}
2646
2647.model-picker-trigger:disabled {
2648  opacity: 0.5;
2649  cursor: not-allowed;
2650}
2651
2652.model-picker-value {
2653  flex: 1;
2654  overflow: hidden;
2655  text-overflow: ellipsis;
2656  white-space: nowrap;
2657}
2658
2659.model-picker-chevron {
2660  flex-shrink: 0;
2661  transition: transform 0.2s;
2662  opacity: 0.6;
2663}
2664
2665.model-picker-chevron.open {
2666  transform: rotate(180deg);
2667}
2668
2669.model-picker-dropdown {
2670  position: absolute;
2671  top: 100%;
2672  left: 0;
2673  right: 0;
2674  margin-top: 2px;
2675  background: var(--bg-secondary);
2676  border: 1px solid var(--border);
2677  border-radius: 0.375rem;
2678  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
2679  z-index: 1000;
2680  max-height: 300px;
2681  overflow: hidden;
2682  display: flex;
2683  flex-direction: column;
2684}
2685
2686.model-picker-dropdown.open-upward {
2687  top: auto;
2688  bottom: 100%;
2689  margin-top: 0;
2690  margin-bottom: 2px;
2691}
2692
2693.model-picker-options {
2694  overflow-y: auto;
2695  max-height: 220px;
2696}
2697
2698.model-picker-option {
2699  display: flex;
2700  align-items: center;
2701  gap: 0.5rem;
2702  width: 100%;
2703  padding: 0.5rem 0.75rem;
2704  border: none;
2705  background: transparent;
2706  color: var(--text-primary);
2707  font-size: 0.8rem;
2708  font-family: var(--font-mono);
2709  cursor: pointer;
2710  text-align: left;
2711  transition: background 0.15s;
2712}
2713
2714.model-picker-option:hover:not(:disabled) {
2715  background: var(--bg-tertiary);
2716}
2717
2718.model-picker-option.selected {
2719  background: var(--bg-tertiary);
2720}
2721
2722.model-picker-option.disabled {
2723  opacity: 0.5;
2724  cursor: not-allowed;
2725}
2726
2727.model-picker-option-content {
2728  flex: 1;
2729  display: flex;
2730  flex-direction: column;
2731  gap: 0.125rem;
2732  min-width: 0;
2733}
2734
2735.model-picker-option-name {
2736  overflow: hidden;
2737  text-overflow: ellipsis;
2738  white-space: nowrap;
2739}
2740
2741.model-picker-option-source {
2742  font-size: 0.65rem;
2743  color: var(--text-secondary);
2744  overflow: hidden;
2745  text-overflow: ellipsis;
2746  white-space: nowrap;
2747}
2748
2749.model-picker-option-badge {
2750  font-size: 0.65rem;
2751  color: var(--text-secondary);
2752  background: var(--bg-base);
2753  padding: 0.125rem 0.375rem;
2754  border-radius: 0.25rem;
2755}
2756
2757.model-picker-option-check {
2758  flex-shrink: 0;
2759  color: var(--green-text);
2760}
2761
2762.model-picker-divider {
2763  height: 1px;
2764  background: var(--border);
2765  margin: 0.25rem 0;
2766}
2767
2768.model-picker-manage {
2769  color: var(--blue-text);
2770}
2771
2772.model-picker-manage:hover {
2773  background: var(--bg-tertiary);
2774}
2775
2776.model-picker-manage svg {
2777  flex-shrink: 0;
2778}
2779
2780.status-input {
2781  padding: 0.25rem 0.5rem;
2782  border: 1px solid var(--blue-text);
2783  border-radius: 0.25rem;
2784  background: var(--bg-base);
2785  color: var(--text-primary);
2786  font-size: 0.75rem;
2787  font-family: var(--font-mono);
2788  transition: border-color 0.2s;
2789  width: 100%;
2790  box-sizing: border-box;
2791}
2792
2793.status-input::placeholder {
2794  color: var(--text-secondary);
2795  opacity: 0.6;
2796}
2797
2798.status-input:hover:not(:disabled) {
2799  border-color: var(--blue-text);
2800}
2801
2802.status-input:focus {
2803  outline: none;
2804  border-color: var(--blue-text);
2805  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
2806}
2807
2808.status-input:disabled {
2809  opacity: 0.5;
2810  cursor: not-allowed;
2811}
2812
2813/* Responsive adjustments for status bar controls */
2814@media (max-width: 768px) {
2815  .status-bar-config {
2816    flex-wrap: wrap;
2817    gap: 0.5rem;
2818  }
2819
2820  .status-bar-controls {
2821    flex-wrap: wrap;
2822    gap: 0.5rem;
2823  }
2824
2825  .status-field-model {
2826    min-width: 120px;
2827    max-width: none;
2828  }
2829
2830  .status-field-cwd {
2831    min-width: 140px;
2832    max-width: none;
2833  }
2834}
2835
2836/* Directory Picker Modal */
2837.directory-picker-modal {
2838  max-width: 32rem;
2839  max-height: 70vh;
2840  display: flex;
2841  flex-direction: column;
2842}
2843
2844.directory-picker-body {
2845  flex: 1;
2846  display: flex;
2847  flex-direction: column;
2848  min-height: 0;
2849  overflow: hidden;
2850}
2851
2852.directory-picker-input-container {
2853  margin-bottom: 0.75rem;
2854}
2855
2856.directory-picker-input {
2857  width: 100%;
2858  padding: 0.5rem 0.75rem;
2859  border: 1px solid var(--border);
2860  border-radius: 0.25rem;
2861  background: var(--bg-base);
2862  color: var(--text-primary);
2863  font-family: var(--font-mono);
2864  font-size: 0.875rem;
2865}
2866
2867.directory-picker-input:focus {
2868  outline: none;
2869  border-color: var(--primary);
2870  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
2871}
2872
2873.directory-picker-current {
2874  display: flex;
2875  align-items: center;
2876  gap: 0.5rem;
2877  font-size: 0.75rem;
2878  color: var(--text-secondary);
2879  font-family: var(--font-mono);
2880  margin-bottom: 0.5rem;
2881  padding: 0.25rem 0;
2882}
2883
2884.directory-picker-current-path {
2885  flex-shrink: 0;
2886}
2887
2888.directory-picker-current-git .directory-picker-current-path {
2889  color: var(--accent-color, #f97316);
2890}
2891
2892.directory-picker-current-subject {
2893  flex: 1;
2894  min-width: 0;
2895  color: var(--text-tertiary);
2896  white-space: nowrap;
2897  overflow: hidden;
2898  text-overflow: ellipsis;
2899  text-align: right;
2900}
2901
2902.directory-picker-filter {
2903  color: var(--primary);
2904  font-weight: 500;
2905}
2906
2907.directory-picker-git-root-btn {
2908  display: flex;
2909  align-items: center;
2910  gap: 0.5rem;
2911  width: 100%;
2912  padding: 0.375rem 0.75rem;
2913  margin-bottom: 0.5rem;
2914  background: var(--bg-secondary);
2915  border: 1px solid var(--border-color);
2916  border-radius: 0.375rem;
2917  color: var(--accent-color, #f97316);
2918  font-size: 0.8125rem;
2919  cursor: pointer;
2920  text-align: left;
2921}
2922
2923.directory-picker-git-root-btn:hover {
2924  background: var(--bg-tertiary);
2925  border-color: var(--accent-color, #f97316);
2926}
2927
2928.directory-picker-git-root-btn .directory-picker-icon {
2929  flex-shrink: 0;
2930}
2931
2932.directory-picker-git-root-path {
2933  color: var(--text-tertiary);
2934  overflow: hidden;
2935  text-overflow: ellipsis;
2936  white-space: nowrap;
2937  margin-left: auto;
2938}
2939
2940.directory-picker-error {
2941  padding: 0.5rem 0.75rem;
2942  background: var(--error-bg);
2943  border: 1px solid var(--error-border);
2944  border-radius: 0.25rem;
2945  color: var(--error-text);
2946  font-size: 0.875rem;
2947  margin-bottom: 0.75rem;
2948}
2949
2950.directory-picker-loading {
2951  display: flex;
2952  align-items: center;
2953  gap: 0.5rem;
2954  padding: 1rem;
2955  color: var(--text-secondary);
2956  font-size: 0.875rem;
2957}
2958
2959.directory-picker-list {
2960  flex: 1;
2961  overflow-y: auto;
2962  border: 1px solid var(--border);
2963  border-radius: 0.25rem;
2964  min-height: 200px;
2965  max-height: 300px;
2966}
2967
2968.directory-picker-entry {
2969  display: flex;
2970  align-items: center;
2971  gap: 0.5rem;
2972  width: 100%;
2973  padding: 0.5rem 0.75rem;
2974  text-align: left;
2975  background: transparent;
2976  border: none;
2977  border-bottom: 1px solid var(--border);
2978  color: var(--text-primary);
2979  font-size: 0.875rem;
2980  font-family: var(--font-mono);
2981  cursor: pointer;
2982  transition: background-color 0.15s;
2983}
2984
2985.directory-picker-entry:last-child {
2986  border-bottom: none;
2987}
2988
2989.directory-picker-entry:hover {
2990  background: var(--bg-tertiary);
2991}
2992
2993.directory-picker-entry-parent {
2994  color: var(--text-secondary);
2995  font-weight: 500;
2996}
2997
2998.directory-picker-icon {
2999  width: 1rem;
3000  height: 1rem;
3001  flex-shrink: 0;
3002  color: var(--text-secondary);
3003}
3004
3005.directory-picker-entry-name {
3006  flex-shrink: 0;
3007}
3008
3009.directory-picker-entry-git .directory-picker-icon {
3010  color: var(--accent-color, #f97316);
3011}
3012
3013.directory-picker-git-subject {
3014  flex: 1;
3015  min-width: 0;
3016  color: var(--text-tertiary);
3017  font-size: 0.75rem;
3018  white-space: nowrap;
3019  overflow: hidden;
3020  text-overflow: ellipsis;
3021  text-align: right;
3022}
3023
3024.directory-picker-empty {
3025  padding: 2rem;
3026  text-align: center;
3027  color: var(--text-tertiary);
3028  font-size: 0.875rem;
3029}
3030
3031.directory-picker-footer {
3032  display: flex;
3033  align-items: center;
3034  gap: 0.5rem;
3035  padding: 1rem;
3036  border-top: 1px solid var(--border);
3037}
3038
3039.directory-picker-footer-spacer {
3040  flex: 1;
3041}
3042
3043.directory-picker-new-btn {
3044  display: flex;
3045  align-items: center;
3046  gap: 0.375rem;
3047}
3048
3049.directory-picker-new-icon {
3050  width: 1rem;
3051  height: 1rem;
3052}
3053
3054/* Create directory form inside the list */
3055.directory-picker-create-form {
3056  display: flex;
3057  align-items: center;
3058  gap: 0.5rem;
3059  padding: 0.5rem 0.75rem;
3060  background: var(--bg-tertiary);
3061  border-bottom: 1px solid var(--border);
3062}
3063
3064.directory-picker-create-input {
3065  flex: 1;
3066  padding: 0.375rem 0.5rem;
3067  border: 1px solid var(--border);
3068  border-radius: 0.25rem;
3069  background: var(--bg-base);
3070  color: var(--text-primary);
3071  font-family: var(--font-mono);
3072  font-size: 0.875rem;
3073}
3074
3075.directory-picker-create-input:focus {
3076  outline: none;
3077  border-color: var(--primary);
3078}
3079
3080.directory-picker-create-btn {
3081  display: flex;
3082  align-items: center;
3083  justify-content: center;
3084  width: 1.75rem;
3085  height: 1.75rem;
3086  padding: 0;
3087  border: none;
3088  border-radius: 0.25rem;
3089  background: var(--primary);
3090  color: white;
3091  cursor: pointer;
3092  transition: background-color 0.15s;
3093}
3094
3095.directory-picker-create-btn:hover:not(:disabled) {
3096  background: var(--primary-hover);
3097}
3098
3099.directory-picker-create-btn:disabled {
3100  opacity: 0.5;
3101  cursor: not-allowed;
3102}
3103
3104.directory-picker-create-btn svg {
3105  width: 1rem;
3106  height: 1rem;
3107}
3108
3109.directory-picker-cancel-btn {
3110  background: var(--bg-secondary);
3111  color: var(--text-secondary);
3112}
3113
3114.directory-picker-cancel-btn:hover:not(:disabled) {
3115  background: var(--bg-tertiary);
3116}
3117
3118.directory-picker-create-error {
3119  padding: 0.375rem 0.75rem;
3120  background: var(--error-bg);
3121  color: var(--error-text);
3122  font-size: 0.75rem;
3123  border-bottom: 1px solid var(--error-border);
3124}
3125
3126/* Screen reader only */
3127.sr-only {
3128  position: absolute;
3129  width: 1px;
3130  height: 1px;
3131  padding: 0;
3132  margin: -1px;
3133  overflow: hidden;
3134  clip: rect(0, 0, 0, 0);
3135  white-space: nowrap;
3136  border: 0;
3137}
3138
3139/* Context Usage Bar */
3140/* Status bar for active conversation */
3141.status-bar-active {
3142  display: flex;
3143  align-items: center;
3144  justify-content: space-between;
3145  width: 100%;
3146}
3147
3148.status-working-group {
3149  display: flex;
3150  align-items: center;
3151  gap: 0.5rem;
3152}
3153
3154.status-stop-button {
3155  display: flex;
3156  align-items: center;
3157  gap: 0.25rem;
3158  padding: 0.25rem 0.5rem;
3159  border: none;
3160  border-radius: 0.25rem;
3161  background: var(--error-bg);
3162  color: var(--error-text);
3163  cursor: pointer;
3164  transition: all 0.15s ease;
3165  font-size: 0.75rem;
3166  font-weight: 500;
3167}
3168
3169.status-stop-button:hover:not(:disabled) {
3170  background: var(--error-text);
3171  color: white;
3172}
3173
3174.status-stop-button:disabled {
3175  opacity: 0.5;
3176  cursor: not-allowed;
3177}
3178
3179.status-stop-button svg {
3180  width: 0.75rem;
3181  height: 0.75rem;
3182  flex-shrink: 0;
3183}
3184
3185.status-stop-label {
3186  white-space: nowrap;
3187}
3188
3189/* Hide stop label on small screens */
3190@media (max-width: 500px) {
3191  .status-stop-label {
3192    display: none;
3193  }
3194  .status-stop-button {
3195    padding: 0.25rem;
3196  }
3197}
3198
3199.context-usage-bar-container {
3200  display: flex;
3201  align-items: center;
3202  gap: 4px;
3203}
3204
3205.context-warning-icon {
3206  font-size: 14px;
3207  line-height: 1;
3208  cursor: help;
3209}
3210
3211.context-usage-bar {
3212  width: 60px;
3213  height: 6px;
3214  background: var(--bg-tertiary);
3215  border-radius: 3px;
3216  overflow: hidden;
3217  cursor: pointer;
3218}
3219
3220.context-usage-fill {
3221  height: 100%;
3222  border-radius: 3px;
3223  transition:
3224    width 0.3s ease,
3225    background-color 0.3s ease;
3226}
3227
3228/* Mobile optimizations for tighter spacing */
3229@media (max-width: 767px) {
3230  .header {
3231    padding: 0.375rem 0.75rem;
3232    padding-top: calc(0.375rem + env(safe-area-inset-top, 0px));
3233  }
3234
3235  .status-bar {
3236    padding: 0.375rem 0.75rem;
3237    min-height: 2rem;
3238  }
3239
3240  .message-input-container {
3241    padding: 0.5rem 0.75rem;
3242    padding-bottom: calc(0.5rem + env(safe-area-inset-bottom, 0px));
3243  }
3244}
3245
3246/* Print styles - looks like the chat window, just without chrome */
3247@media print {
3248  /* Reset page layout */
3249  html,
3250  body {
3251    height: auto !important;
3252    overflow: visible !important;
3253    background: white !important;
3254  }
3255
3256  /* Hide interactive chrome but keep the header title */
3257  .status-bar,
3258  .message-input-container,
3259  .drawer,
3260  .backdrop,
3261  .scroll-to-bottom-button,
3262  .overflow-menu,
3263  .context-menu,
3264  .modal-overlay {
3265    display: none !important;
3266  }
3267
3268  /* Hide header buttons but keep the title */
3269  .header-actions,
3270  .header .btn-icon {
3271    display: none !important;
3272  }
3273
3274  /* Simplify header for print */
3275  .header {
3276    background: white !important;
3277    border-bottom: 1px solid #e5e7eb !important;
3278    padding: 0.75rem 1rem !important;
3279  }
3280
3281  .header-title {
3282    font-size: 1rem !important;
3283  }
3284
3285  /* Reset app container for print */
3286  .app-container {
3287    display: block !important;
3288    height: auto !important;
3289    background: white !important;
3290  }
3291
3292  .main-content {
3293    display: block !important;
3294    height: auto !important;
3295  }
3296
3297  /* Reset messages area to flow naturally */
3298  .messages-area-wrapper {
3299    height: auto !important;
3300    overflow: visible !important;
3301    position: static !important;
3302    background: white !important;
3303  }
3304
3305  .messages-container {
3306    height: auto !important;
3307    overflow: visible !important;
3308    position: static !important;
3309    background: white !important;
3310  }
3311
3312  .messages-list {
3313    background: white !important;
3314  }
3315
3316  /* Hide empty state in print */
3317  .empty-state {
3318    display: none !important;
3319  }
3320
3321  /* Keep message styling, just add page break hints */
3322  .message {
3323    page-break-inside: avoid;
3324  }
3325
3326  /* Tool results */
3327  .tool-result-details {
3328    page-break-inside: avoid;
3329  }
3330
3331  /* Code blocks */
3332  pre,
3333  code {
3334    page-break-inside: avoid;
3335  }
3336
3337  /* Screenshots and images - ensure they fit */
3338  .screenshot-preview,
3339  .screenshot-image,
3340  .read-image-preview {
3341    max-width: 100% !important;
3342    height: auto !important;
3343    page-break-inside: avoid;
3344  }
3345}
3346/* Diff Viewer Overlay */
3347.diff-viewer-overlay {
3348  position: fixed;
3349  top: 0;
3350  left: 0;
3351  right: 0;
3352  bottom: 0;
3353  background: rgba(0, 0, 0, 0.5);
3354  z-index: 1000;
3355  display: flex;
3356  align-items: center;
3357  justify-content: center;
3358  padding: 1rem;
3359  padding-top: max(1rem, env(safe-area-inset-top));
3360  padding-bottom: max(1rem, env(safe-area-inset-bottom));
3361}
3362
3363.diff-viewer-container {
3364  background: var(--bg-base);
3365  border-radius: 0.5rem;
3366  width: calc(100% - 2rem);
3367  max-width: none;
3368  height: calc(100% - 2rem);
3369  max-height: none;
3370  display: flex;
3371  flex-direction: column;
3372  overflow: hidden;
3373  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
3374}
3375
3376.diff-viewer-header {
3377  display: flex;
3378  flex-direction: column;
3379  gap: 0.5rem;
3380  padding: 0.5rem 0.75rem;
3381  background: var(--bg-secondary);
3382  border-bottom: 1px solid var(--border-color);
3383}
3384
3385.diff-viewer-header-row {
3386  display: flex;
3387  align-items: center;
3388  gap: 0.5rem;
3389  width: 100%;
3390}
3391
3392.diff-viewer-selectors-row {
3393  display: flex;
3394  flex: 1;
3395  gap: 0.5rem;
3396  min-width: 0;
3397}
3398
3399.diff-viewer-selectors-row .diff-viewer-select {
3400  flex: 1;
3401  min-width: 0;
3402  max-width: none;
3403}
3404
3405.diff-viewer-file-selector-wrapper {
3406  display: flex;
3407  align-items: center;
3408  gap: 0.5rem;
3409  flex: 1;
3410  min-width: 0;
3411}
3412
3413.diff-viewer-file-selector-wrapper .diff-viewer-select {
3414  flex: 1;
3415  min-width: 0;
3416}
3417
3418.diff-viewer-file-index {
3419  font-size: 0.75rem;
3420  color: var(--text-secondary);
3421  white-space: nowrap;
3422  flex-shrink: 0;
3423}
3424
3425.diff-viewer-controls-row {
3426  display: flex;
3427  align-items: center;
3428  gap: 0.5rem;
3429  flex-shrink: 0;
3430}
3431
3432.diff-viewer-header-mobile {
3433  flex-direction: row;
3434  align-items: center;
3435  gap: 0.5rem;
3436  padding: 0.375rem 0.5rem;
3437}
3438
3439.diff-viewer-mobile-selectors {
3440  display: flex;
3441  flex: 1;
3442  gap: 0.375rem;
3443  min-width: 0;
3444}
3445
3446.diff-viewer-mobile-selectors .diff-viewer-select {
3447  flex: 1;
3448  min-width: 0;
3449  font-size: 0.75rem;
3450  padding: 0.375rem;
3451}
3452
3453.diff-viewer-mode-toggle {
3454  display: flex;
3455  border: 1px solid var(--border-color);
3456  border-radius: 0.25rem;
3457  overflow: hidden;
3458}
3459
3460.diff-viewer-mode-btn {
3461  padding: 0.25rem 0.5rem;
3462  border: none;
3463  background: var(--bg-base);
3464  color: var(--text-secondary);
3465  cursor: pointer;
3466  font-size: 0.875rem;
3467}
3468
3469.diff-viewer-mode-btn:first-child {
3470  border-right: 1px solid var(--border-color);
3471}
3472
3473.diff-viewer-mode-btn.active {
3474  background: var(--blue-bg);
3475  color: var(--blue-text);
3476}
3477
3478.diff-viewer-mode-btn:hover:not(.active) {
3479  background: var(--bg-tertiary);
3480}
3481
3482.diff-viewer-nav-buttons {
3483  display: flex;
3484  gap: 0.125rem;
3485}
3486
3487.diff-viewer-nav-btn {
3488  padding: 0.25rem 0.5rem;
3489  border: 1px solid var(--border-color);
3490  background: var(--bg-base);
3491  color: var(--text-primary);
3492  cursor: pointer;
3493  border-radius: 0.25rem;
3494  font-size: 0.875rem;
3495}
3496
3497.diff-viewer-nav-btn:disabled {
3498  opacity: 0.4;
3499  cursor: not-allowed;
3500}
3501
3502.diff-viewer-nav-btn:hover:not(:disabled) {
3503  background: var(--bg-tertiary);
3504}
3505
3506.diff-viewer-select {
3507  flex: 1;
3508  min-width: 120px;
3509  max-width: 300px;
3510  padding: 0.5rem;
3511  border: 1px solid var(--border-color);
3512  border-radius: 0.25rem;
3513  background: var(--bg-base);
3514  color: var(--text-primary);
3515  font-size: 0.875rem;
3516}
3517
3518.diff-viewer-dir-btn {
3519  width: 2rem;
3520  height: 2rem;
3521  border: none;
3522  background: transparent;
3523  color: var(--text-secondary);
3524  cursor: pointer;
3525  border-radius: 0.25rem;
3526  display: flex;
3527  align-items: center;
3528  justify-content: center;
3529  flex-shrink: 0;
3530  padding: 0;
3531}
3532
3533.diff-viewer-dir-btn:hover {
3534  background: var(--bg-tertiary);
3535  color: var(--text-primary);
3536}
3537
3538.diff-viewer-close {
3539  width: 2rem;
3540  height: 2rem;
3541  border: none;
3542  background: transparent;
3543  color: var(--text-secondary);
3544  font-size: 1.5rem;
3545  cursor: pointer;
3546  border-radius: 0.25rem;
3547  display: flex;
3548  align-items: center;
3549  justify-content: center;
3550  flex-shrink: 0;
3551}
3552
3553.diff-viewer-close:hover {
3554  background: var(--bg-tertiary);
3555  color: var(--text-primary);
3556}
3557
3558.diff-viewer-error {
3559  padding: 0.5rem 1rem;
3560  background: var(--error-bg);
3561  color: var(--error-text);
3562  font-size: 0.875rem;
3563}
3564
3565.diff-viewer-toast {
3566  position: fixed;
3567  bottom: 24px;
3568  right: 24px;
3569  padding: 12px 16px;
3570  border-radius: 8px;
3571  font-size: 14px;
3572  font-weight: 500;
3573  z-index: 9999;
3574  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
3575  animation: toast-fade-in 0.2s ease;
3576  color: #ffffff;
3577}
3578
3579.diff-viewer-toast-saving {
3580  background: #1976d2;
3581}
3582
3583.diff-viewer-toast-saved {
3584  background: #2e7d32;
3585}
3586
3587.diff-viewer-toast-error {
3588  background: #d32f2f;
3589}
3590
3591.diff-viewer-toast-hint {
3592  background: var(--bg-tertiary);
3593  color: var(--text-primary);
3594  border: 1px solid var(--border-color);
3595}
3596
3597@keyframes toast-fade-in {
3598  from {
3599    opacity: 0;
3600    transform: translateY(10px);
3601  }
3602  to {
3603    opacity: 1;
3604    transform: translateY(0);
3605  }
3606}
3607
3608.diff-viewer-content {
3609  flex: 1;
3610  overflow: hidden;
3611  position: relative;
3612}
3613
3614.diff-viewer-loading,
3615.diff-viewer-empty {
3616  display: flex;
3617  flex-direction: column;
3618  align-items: center;
3619  justify-content: center;
3620  height: 100%;
3621  color: var(--text-secondary);
3622  gap: 0.5rem;
3623}
3624
3625.diff-viewer-hint {
3626  font-size: 0.875rem;
3627  opacity: 0.7;
3628}
3629
3630.diff-viewer-editor {
3631  height: 100%;
3632  width: 100%;
3633}
3634
3635/* Diff viewer line hover highlighting (via decoration API) */
3636.diff-viewer-editor .monaco-editor .diff-viewer-line-hover {
3637  background-color: rgba(37, 99, 235, 0.08) !important;
3638}
3639
3640.dark .diff-viewer-editor .monaco-editor .diff-viewer-line-hover {
3641  background-color: rgba(96, 165, 250, 0.12) !important;
3642}
3643
3644/* Comment indicator glyph in margin for diff viewer */
3645.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='%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");
3647  background-size: 14px 14px;
3648  background-repeat: no-repeat;
3649  background-position: center;
3650  opacity: 0.6;
3651  cursor: pointer;
3652}
3653
3654.diff-viewer-editor .monaco-editor .diff-viewer-comment-glyph:hover {
3655  opacity: 1;
3656}
3657
3658.dark .diff-viewer-editor .monaco-editor .diff-viewer-comment-glyph {
3659  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");
3660}
3661
3662/* Make diff viewer Monaco lines clickable with pointer cursor */
3663.diff-viewer-editor .monaco-editor .view-lines {
3664  cursor: pointer;
3665}
3666
3667.diff-viewer-comment-badge {
3668  position: absolute;
3669  bottom: 1rem;
3670  left: 1rem;
3671  padding: 0.5rem 1rem;
3672  background: var(--blue-bg);
3673  color: var(--blue-text);
3674  border-radius: 1rem;
3675  font-size: 0.875rem;
3676  font-weight: 500;
3677}
3678
3679/* Comment dialog */
3680.diff-viewer-comment-dialog {
3681  position: absolute;
3682  top: 50%;
3683  left: 50%;
3684  transform: translate(-50%, -50%);
3685  width: 90%;
3686  max-width: 500px;
3687  background: var(--bg-base);
3688  border: 1px solid var(--border-color);
3689  border-radius: 0.5rem;
3690  padding: 1rem;
3691  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
3692  z-index: 1001;
3693}
3694
3695.diff-viewer-comment-dialog h4 {
3696  margin: 0 0 0.75rem 0;
3697  color: var(--text-primary);
3698}
3699
3700.diff-viewer-selected-text {
3701  margin: 0 0 0.75rem 0;
3702  padding: 0.5rem;
3703  background: var(--bg-tertiary);
3704  border: 1px solid var(--border-color);
3705  border-radius: 0.25rem;
3706  font-size: 0.75rem;
3707  font-family: monospace;
3708  max-height: 150px;
3709  overflow: auto;
3710  white-space: pre;
3711}
3712
3713.diff-viewer-comment-input {
3714  width: 100%;
3715  min-height: 100px;
3716  padding: 0.5rem;
3717  border: 1px solid var(--border-color);
3718  border-radius: 0.25rem;
3719  background: var(--bg-base);
3720  color: var(--text-primary);
3721  font-size: 0.875rem;
3722  resize: vertical;
3723}
3724
3725.diff-viewer-comment-actions {
3726  display: flex;
3727  justify-content: flex-end;
3728  gap: 0.5rem;
3729  margin-top: 0.75rem;
3730}
3731
3732.diff-viewer-btn {
3733  padding: 0.5rem 1rem;
3734  border: none;
3735  border-radius: 0.25rem;
3736  font-size: 0.875rem;
3737  cursor: pointer;
3738}
3739
3740.diff-viewer-btn:disabled {
3741  opacity: 0.5;
3742  cursor: not-allowed;
3743}
3744
3745.diff-viewer-btn-primary {
3746  background: var(--blue-bg);
3747  color: var(--blue-text);
3748}
3749
3750.diff-viewer-btn-primary:hover:not(:disabled) {
3751  filter: brightness(0.95);
3752}
3753
3754.diff-viewer-btn-secondary {
3755  background: var(--bg-tertiary);
3756  color: var(--text-primary);
3757}
3758
3759.diff-viewer-btn-secondary:hover:not(:disabled) {
3760  background: var(--bg-secondary);
3761}
3762
3763/* Mobile floating nav buttons */
3764.diff-viewer-mobile-nav {
3765  position: absolute;
3766  bottom: 1.5rem;
3767  left: 50%;
3768  transform: translateX(-50%);
3769  display: flex;
3770  gap: 0.5rem;
3771  z-index: 100;
3772}
3773
3774.diff-viewer-mobile-nav-btn {
3775  width: 3rem;
3776  height: 3rem;
3777  border: none;
3778  border-radius: 50%;
3779  background: var(--bg-base);
3780  color: var(--text-primary);
3781  cursor: pointer;
3782  display: flex;
3783  align-items: center;
3784  justify-content: center;
3785  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
3786}
3787
3788.diff-viewer-mobile-nav-btn svg {
3789  width: 24px;
3790  height: 24px;
3791}
3792
3793.diff-viewer-mobile-nav-btn:disabled {
3794  opacity: 0.4;
3795  cursor: not-allowed;
3796}
3797
3798.diff-viewer-mobile-nav-btn:active:not(:disabled) {
3799  background: var(--bg-tertiary);
3800  transform: scale(0.95);
3801}
3802
3803.diff-viewer-mobile-mode-btn {
3804  font-size: 1.25rem;
3805}
3806
3807.diff-viewer-mobile-mode-btn.active {
3808  background: var(--blue-bg);
3809  color: var(--blue-text);
3810}
3811
3812/* Monaco comment glyph decoration */
3813/* Mobile optimizations for diff viewer */
3814@media (max-width: 767px) {
3815  .diff-viewer-overlay {
3816    padding: 0;
3817  }
3818
3819  .diff-viewer-container {
3820    border-radius: 0;
3821    width: 100%;
3822    max-width: 100%;
3823    height: 100%;
3824    max-height: 100%;
3825  }
3826
3827  .diff-viewer-close {
3828    width: 1.75rem;
3829    height: 1.75rem;
3830    font-size: 1.25rem;
3831    flex-shrink: 0;
3832  }
3833
3834  /* Monaco editor mobile styles - hide gutters completely */
3835  .diff-viewer-editor .monaco-editor .margin {
3836    display: none !important;
3837    width: 0 !important;
3838  }
3839
3840  .diff-viewer-editor .monaco-editor .margin-view-overlays {
3841    display: none !important;
3842    width: 0 !important;
3843  }
3844
3845  .diff-viewer-editor .monaco-editor .editor-scrollable {
3846    left: 0 !important;
3847  }
3848
3849  .diff-viewer-editor .monaco-editor .lines-content {
3850    margin-left: 0 !important;
3851  }
3852
3853  /* Ensure diff editor uses full width */
3854  .diff-viewer-editor .monaco-diff-editor {
3855    width: 100% !important;
3856  }
3857
3858  .diff-viewer-editor .monaco-diff-editor .editor.modified {
3859    width: 100% !important;
3860    left: 0 !important;
3861  }
3862
3863  /* Comment dialog on top half of screen for mobile (keyboard space) */
3864  .diff-viewer-comment-dialog {
3865    top: 10%;
3866    transform: translate(-50%, 0);
3867    max-height: 40vh;
3868    overflow-y: auto;
3869  }
3870
3871  .diff-viewer-comment-input {
3872    min-height: 60px;
3873  }
3874}
3875
3876/* Injected text indicator (for diff comments) */
3877.injected-text-indicator {
3878  display: flex;
3879  align-items: center;
3880  justify-content: space-between;
3881  padding: 0.5rem 0.75rem;
3882  background: var(--blue-bg);
3883  border-bottom: 1px solid var(--border-color);
3884  gap: 0.5rem;
3885}
3886
3887.injected-text-label {
3888  font-size: 0.875rem;
3889  color: var(--blue-text);
3890  flex: 1;
3891  min-width: 0;
3892  overflow: hidden;
3893  text-overflow: ellipsis;
3894  white-space: nowrap;
3895}
3896
3897.injected-text-insert-btn {
3898  padding: 0.375rem 0.75rem;
3899  background: var(--blue-text);
3900  color: white;
3901  border: none;
3902  border-radius: 0.25rem;
3903  font-size: 0.75rem;
3904  font-weight: 500;
3905  cursor: pointer;
3906  white-space: nowrap;
3907  flex-shrink: 0;
3908}
3909
3910.injected-text-insert-btn:hover {
3911  filter: brightness(1.1);
3912}
3913
3914/* Links in message text */
3915.text-link {
3916  color: var(--blue-text);
3917  text-decoration: underline;
3918  text-underline-offset: 2px;
3919  text-decoration-color: var(--blue-border);
3920}
3921
3922.text-link:hover {
3923  text-decoration-color: var(--blue-text);
3924}
3925
3926/* Command Palette */
3927.command-palette-overlay {
3928  position: fixed;
3929  inset: 0;
3930  background: rgba(0, 0, 0, 0.5);
3931  z-index: 100;
3932  display: flex;
3933  align-items: flex-start;
3934  justify-content: center;
3935  padding-top: 15vh;
3936}
3937
3938.command-palette {
3939  background: var(--bg-base);
3940  border: 1px solid var(--border-color);
3941  border-radius: 0.75rem;
3942  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
3943  width: 100%;
3944  max-width: 32rem;
3945  max-height: 60vh;
3946  display: flex;
3947  flex-direction: column;
3948  overflow: hidden;
3949}
3950
3951.command-palette-input-wrapper {
3952  display: flex;
3953  align-items: center;
3954  padding: 0.75rem 1rem;
3955  border-bottom: 1px solid var(--border-color);
3956  gap: 0.75rem;
3957}
3958
3959.command-palette-search-icon {
3960  color: var(--text-secondary);
3961  flex-shrink: 0;
3962}
3963
3964.command-palette-input {
3965  flex: 1;
3966  border: none;
3967  background: transparent;
3968  font-size: 1rem;
3969  color: var(--text-primary);
3970  outline: none;
3971}
3972
3973.command-palette-input::placeholder {
3974  color: var(--text-secondary);
3975}
3976
3977.command-palette-shortcut {
3978  flex-shrink: 0;
3979}
3980
3981.command-palette-spinner {
3982  width: 16px;
3983  height: 16px;
3984  border: 2px solid var(--border-color);
3985  border-top-color: var(--primary);
3986  border-radius: 50%;
3987  animation: spin 0.6s linear infinite;
3988  flex-shrink: 0;
3989}
3990
3991.command-palette-list {
3992  flex: 1;
3993  overflow-y: auto;
3994  padding: 0.5rem;
3995}
3996
3997.command-palette-empty {
3998  padding: 2rem 1rem;
3999  text-align: center;
4000  color: var(--text-secondary);
4001}
4002
4003.command-palette-item {
4004  display: flex;
4005  align-items: center;
4006  padding: 0.625rem 0.75rem;
4007  border-radius: 0.5rem;
4008  cursor: pointer;
4009  gap: 0.75rem;
4010}
4011
4012.command-palette-item:hover,
4013.command-palette-item.selected {
4014  background: var(--bg-secondary);
4015}
4016
4017.command-palette-item-icon {
4018  flex-shrink: 0;
4019  color: var(--text-secondary);
4020  display: flex;
4021  align-items: center;
4022  justify-content: center;
4023}
4024
4025.command-palette-item.selected .command-palette-item-icon {
4026  color: var(--primary);
4027}
4028
4029.command-palette-item-content {
4030  flex: 1;
4031  min-width: 0;
4032}
4033
4034.command-palette-item-title {
4035  font-size: 0.875rem;
4036  color: var(--text-primary);
4037  white-space: nowrap;
4038  overflow: hidden;
4039  text-overflow: ellipsis;
4040}
4041
4042.command-palette-item-subtitle {
4043  font-size: 0.75rem;
4044  color: var(--text-secondary);
4045  white-space: nowrap;
4046  overflow: hidden;
4047  text-overflow: ellipsis;
4048  margin-top: 0.125rem;
4049}
4050
4051.command-palette-item-badge {
4052  flex-shrink: 0;
4053  font-size: 0.625rem;
4054  text-transform: uppercase;
4055  letter-spacing: 0.05em;
4056  padding: 0.125rem 0.375rem;
4057  background: var(--bg-tertiary);
4058  border-radius: 0.25rem;
4059  color: var(--text-secondary);
4060}
4061
4062.command-palette-footer {
4063  display: flex;
4064  gap: 1rem;
4065  padding: 0.5rem 1rem;
4066  border-top: 1px solid var(--border-color);
4067  font-size: 0.75rem;
4068  color: var(--text-secondary);
4069}
4070
4071.command-palette-footer span {
4072  display: flex;
4073  align-items: center;
4074  gap: 0.25rem;
4075}
4076
4077@media (max-width: 640px) {
4078  .command-palette-overlay {
4079    padding: 1rem;
4080    padding-top: 5vh;
4081  }
4082
4083  .command-palette {
4084    max-height: 80vh;
4085  }
4086
4087  .command-palette-footer {
4088    display: none;
4089  }
4090}
4091
4092/* Models Modal Styles */
4093.models-modal {
4094  padding: 0.5rem;
4095}
4096
4097.models-loading {
4098  display: flex;
4099  align-items: center;
4100  justify-content: center;
4101  gap: 0.5rem;
4102  padding: 2rem;
4103  color: var(--text-secondary);
4104}
4105
4106.models-error {
4107  display: flex;
4108  align-items: center;
4109  justify-content: space-between;
4110  padding: 0.75rem 1rem;
4111  background: var(--error-bg);
4112  border: 1px solid var(--error-border);
4113  border-radius: 0.375rem;
4114  color: var(--error-text);
4115  margin-bottom: 1rem;
4116}
4117
4118.models-error-dismiss {
4119  background: none;
4120  border: none;
4121  font-size: 1.25rem;
4122  cursor: pointer;
4123  color: inherit;
4124  padding: 0;
4125  line-height: 1;
4126}
4127
4128.models-info {
4129  padding: 0.75rem 1rem;
4130  background: var(--bg-tertiary);
4131  border-radius: 0.375rem;
4132  margin-bottom: 1rem;
4133}
4134
4135.models-info p {
4136  margin: 0 0 0.5rem 0;
4137  color: var(--text-secondary);
4138}
4139
4140.builtin-list {
4141  margin: 0;
4142  padding-left: 1.25rem;
4143  color: var(--text-primary);
4144}
4145
4146.builtin-list li {
4147  margin: 0.25rem 0;
4148}
4149
4150.models-list {
4151  display: flex;
4152  flex-direction: column;
4153  gap: 0.75rem;
4154  margin-bottom: 1rem;
4155}
4156
4157.model-card {
4158  padding: 0.75rem 1rem;
4159  background: var(--bg-base);
4160  border: 1px solid var(--border);
4161  border-radius: 0.375rem;
4162}
4163
4164.model-header {
4165  display: flex;
4166  justify-content: space-between;
4167  align-items: flex-start;
4168  gap: 0.5rem;
4169}
4170
4171.model-info {
4172  display: flex;
4173  flex-wrap: wrap;
4174  align-items: center;
4175  gap: 0.5rem;
4176}
4177
4178.model-name {
4179  font-weight: 500;
4180  color: var(--text-primary);
4181}
4182
4183.model-provider {
4184  font-size: 0.75rem;
4185  padding: 0.125rem 0.5rem;
4186  background: var(--bg-tertiary);
4187  border-radius: 0.25rem;
4188  color: var(--text-secondary);
4189}
4190
4191.model-source {
4192  font-size: 0.75rem;
4193  padding: 0.125rem 0.5rem;
4194  background: var(--bg-tertiary);
4195  border-radius: 0.25rem;
4196  color: var(--text-secondary);
4197}
4198
4199.model-card-builtin {
4200  opacity: 0.8;
4201  background: var(--bg-secondary);
4202}
4203
4204.models-empty {
4205  padding: 2rem;
4206  text-align: center;
4207  color: var(--text-secondary);
4208}
4209
4210.models-empty-hint {
4211  font-size: 0.875rem;
4212  margin-top: 0.5rem;
4213  color: var(--text-tertiary);
4214}
4215
4216.model-badge {
4217  font-size: 0.625rem;
4218  text-transform: uppercase;
4219  letter-spacing: 0.05em;
4220  padding: 0.125rem 0.375rem;
4221  background: var(--blue-bg);
4222  border: 1px solid var(--blue-border);
4223  border-radius: 0.25rem;
4224  color: var(--blue-text);
4225}
4226
4227.model-actions {
4228  display: flex;
4229  gap: 0.25rem;
4230  flex-shrink: 0;
4231}
4232
4233.model-details {
4234  margin-top: 0.5rem;
4235  display: flex;
4236  flex-direction: column;
4237  gap: 0.25rem;
4238}
4239
4240.model-api-name {
4241  font-size: 0.75rem;
4242  font-family: var(--font-mono);
4243  color: var(--text-secondary);
4244}
4245
4246.model-endpoint {
4247  font-size: 0.75rem;
4248  color: var(--text-tertiary);
4249  word-break: break-all;
4250}
4251
4252.btn-icon {
4253  padding: 0.25rem;
4254  border-radius: 0.25rem;
4255  color: var(--text-secondary);
4256  background: transparent;
4257  border: none;
4258  cursor: pointer;
4259  display: flex;
4260  align-items: center;
4261  justify-content: center;
4262}
4263
4264.btn-icon:hover {
4265  background: var(--bg-tertiary);
4266  color: var(--text-primary);
4267}
4268
4269/* Version Checker Styles */
4270.version-update-dot {
4271  position: absolute;
4272  top: 2px;
4273  right: 2px;
4274  width: 8px;
4275  height: 8px;
4276  background: #ef4444;
4277  border-radius: 50%;
4278  border: 2px solid var(--bg-base);
4279}
4280
4281.version-menu-dot {
4282  width: 8px;
4283  height: 8px;
4284  background: #ef4444;
4285  border-radius: 50%;
4286  margin-left: auto;
4287  flex-shrink: 0;
4288}
4289
4290.version-modal-overlay {
4291  position: fixed;
4292  inset: 0;
4293  background: rgba(0, 0, 0, 0.5);
4294  display: flex;
4295  align-items: center;
4296  justify-content: center;
4297  z-index: 1000;
4298  padding: 1rem;
4299}
4300
4301.version-modal {
4302  background: var(--bg-base);
4303  border-radius: 0.5rem;
4304  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
4305  max-width: 500px;
4306  width: 100%;
4307  max-height: 80vh;
4308  display: flex;
4309  flex-direction: column;
4310  overflow: hidden;
4311}
4312
4313.version-modal-header {
4314  display: flex;
4315  align-items: center;
4316  justify-content: space-between;
4317  padding: 1rem 1.25rem;
4318  border-bottom: 1px solid var(--border-color);
4319}
4320
4321.version-modal-header h2 {
4322  margin: 0;
4323  font-size: 1.125rem;
4324  font-weight: 600;
4325  color: var(--text-primary);
4326}
4327
4328.version-modal-close {
4329  background: none;
4330  border: none;
4331  padding: 0.25rem;
4332  cursor: pointer;
4333  color: var(--text-secondary);
4334  border-radius: 0.25rem;
4335}
4336
4337.version-modal-close:hover {
4338  background: var(--bg-tertiary);
4339  color: var(--text-primary);
4340}
4341
4342.version-modal-close svg {
4343  width: 1.25rem;
4344  height: 1.25rem;
4345}
4346
4347.version-modal-content {
4348  padding: 1.25rem;
4349  overflow-y: auto;
4350  display: flex;
4351  flex-direction: column;
4352  gap: 1rem;
4353}
4354
4355.version-info-row {
4356  display: flex;
4357  align-items: center;
4358  gap: 0.5rem;
4359  font-size: 0.875rem;
4360}
4361
4362.version-label {
4363  color: var(--text-secondary);
4364}
4365
4366.version-value {
4367  font-weight: 500;
4368  color: var(--text-primary);
4369  font-family: var(--font-mono);
4370}
4371
4372.version-date {
4373  color: var(--text-tertiary);
4374  font-size: 0.75rem;
4375}
4376
4377.version-error {
4378  padding: 0.75rem;
4379  background: var(--error-bg);
4380  border: 1px solid var(--error-border);
4381  border-radius: 0.375rem;
4382  font-size: 0.875rem;
4383  color: var(--error-text);
4384}
4385
4386.version-success {
4387  padding: 0.75rem;
4388  background: var(--success-bg);
4389  border: 1px solid var(--success-border);
4390  border-radius: 0.375rem;
4391  font-size: 0.875rem;
4392  color: var(--success-text);
4393}
4394
4395.version-changelog {
4396  border-top: 1px solid var(--border-color);
4397  padding-top: 1rem;
4398}
4399
4400.version-changelog h3 {
4401  margin: 0 0 0.75rem 0;
4402  font-size: 0.875rem;
4403  font-weight: 600;
4404}
4405
4406.changelog-link {
4407  color: var(--link-color);
4408  text-decoration: none;
4409}
4410
4411.changelog-link:hover {
4412  text-decoration: underline;
4413}
4414
4415.commit-list {
4416  margin: 0;
4417  padding: 0;
4418  list-style: none;
4419  max-height: 250px;
4420  overflow-y: auto;
4421  font-size: 0.8125rem;
4422}
4423
4424.commit-item {
4425  display: flex;
4426  gap: 0.5rem;
4427  padding: 0.5rem 0;
4428  border-bottom: 1px solid var(--border-color);
4429  align-items: flex-start;
4430}
4431
4432.commit-item:last-child {
4433  border-bottom: none;
4434}
4435
4436.commit-sha {
4437  font-family: var(--font-mono);
4438  color: var(--link-color);
4439  font-size: 0.75rem;
4440  flex-shrink: 0;
4441  text-decoration: none;
4442}
4443
4444.commit-sha:hover {
4445  text-decoration: underline;
4446}
4447
4448.commit-message {
4449  color: var(--text-primary);
4450  word-break: break-word;
4451  line-height: 1.4;
4452}
4453
4454.version-loading,
4455.version-no-commits {
4456  color: var(--text-secondary);
4457  font-size: 0.875rem;
4458  padding: 0.5rem 0;
4459}
4460
4461.version-actions {
4462  display: flex;
4463  flex-direction: column;
4464  gap: 0.75rem;
4465  border-top: 1px solid var(--border-color);
4466  padding-top: 1rem;
4467}
4468
4469.version-btn {
4470  padding: 0.5rem 1rem;
4471  border-radius: 0.375rem;
4472  font-size: 0.875rem;
4473  font-weight: 500;
4474  cursor: pointer;
4475  transition: background-color 0.15s;
4476}
4477
4478.version-btn:disabled {
4479  opacity: 0.6;
4480  cursor: not-allowed;
4481}
4482
4483.version-btn-primary {
4484  background: var(--primary);
4485  color: white;
4486  border: none;
4487}
4488
4489.version-btn-primary:hover:not(:disabled) {
4490  background: var(--primary-dark);
4491}
4492
4493.btn-icon.btn-danger:hover {
4494  background: var(--error-bg);
4495  color: var(--error-text);
4496}
4497
4498.add-model-btn {
4499  width: 100%;
4500}
4501
4502/* Model Form */
4503.model-form h3 {
4504  margin: 0 0 0.75rem 0;
4505  font-size: 1rem;
4506  font-weight: 600;
4507}
4508
4509.form-group {
4510  margin-bottom: 0.75rem;
4511}
4512
4513.form-group label {
4514  display: block;
4515  font-size: 0.875rem;
4516  font-weight: 500;
4517  margin-bottom: 0.25rem;
4518  color: var(--text-primary);
4519}
4520
4521.form-group label .optional {
4522  font-weight: 400;
4523  color: var(--text-secondary);
4524}
4525
4526.form-input {
4527  width: 100%;
4528  padding: 0.5rem 0.75rem;
4529  background: var(--bg-base);
4530  border: 1px solid var(--border);
4531  border-radius: 0.375rem;
4532  color: var(--text-primary);
4533  font-family: inherit;
4534  font-size: 0.875rem;
4535}
4536
4537.form-input:focus {
4538  outline: none;
4539  border-color: var(--primary);
4540  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
4541}
4542
4543.form-checkbox {
4544  display: flex;
4545  align-items: center;
4546}
4547
4548.form-checkbox label {
4549  display: flex;
4550  align-items: center;
4551  gap: 0.5rem;
4552  cursor: pointer;
4553  margin: 0;
4554}
4555
4556.form-checkbox input[type="checkbox"] {
4557  width: 1rem;
4558  height: 1rem;
4559  cursor: pointer;
4560}
4561
4562.info-icon-wrapper {
4563  position: relative;
4564  display: inline-flex;
4565  align-items: center;
4566  margin-left: 0.25rem;
4567}
4568
4569.info-icon {
4570  display: inline-flex;
4571  align-items: center;
4572  justify-content: center;
4573  color: var(--text-tertiary);
4574  cursor: pointer;
4575}
4576
4577.info-icon:hover {
4578  color: var(--text-secondary);
4579}
4580
4581.info-tooltip {
4582  position: absolute;
4583  top: 50%;
4584  left: 100%;
4585  transform: translateY(-50%);
4586  background: var(--bg-tertiary);
4587  border: 1px solid var(--border);
4588  border-radius: 0.375rem;
4589  padding: 0.5rem 0.75rem;
4590  font-size: 0.75rem;
4591  font-weight: 400;
4592  color: var(--text-primary);
4593  white-space: normal;
4594  width: 220px;
4595  margin-left: 0.375rem;
4596  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
4597  z-index: 100;
4598}
4599
4600.info-tooltip::after {
4601  content: "";
4602  position: absolute;
4603  top: 50%;
4604  right: 100%;
4605  transform: translateY(-50%);
4606  border: 6px solid transparent;
4607  border-right-color: var(--border);
4608}
4609
4610.provider-buttons {
4611  display: flex;
4612  gap: 0.5rem;
4613}
4614
4615.provider-btn {
4616  flex: 1;
4617  padding: 0.5rem;
4618  background: var(--bg-base);
4619  border: 1px solid var(--border);
4620  border-radius: 0.375rem;
4621  color: var(--text-primary);
4622  font-size: 0.875rem;
4623  cursor: pointer;
4624  transition: all 0.15s;
4625}
4626
4627.provider-btn:hover {
4628  background: var(--bg-tertiary);
4629}
4630
4631.provider-btn.selected {
4632  background: var(--primary);
4633  border-color: var(--primary);
4634  color: white;
4635}
4636
4637.endpoint-toggle {
4638  display: flex;
4639  gap: 0;
4640  margin-bottom: 0.5rem;
4641}
4642
4643.toggle-btn {
4644  flex: 1;
4645  padding: 0.375rem 0.75rem;
4646  background: var(--bg-base);
4647  border: 1px solid var(--border);
4648  color: var(--text-secondary);
4649  font-size: 0.75rem;
4650  cursor: pointer;
4651  transition: all 0.15s;
4652}
4653
4654.toggle-btn:first-child {
4655  border-radius: 0.375rem 0 0 0.375rem;
4656}
4657
4658.toggle-btn:last-child {
4659  border-radius: 0 0.375rem 0.375rem 0;
4660  border-left: none;
4661}
4662
4663.toggle-btn.selected {
4664  background: var(--bg-tertiary);
4665  color: var(--text-primary);
4666}
4667
4668.endpoint-display {
4669  padding: 0.5rem 0.75rem;
4670  background: var(--bg-tertiary);
4671  border-radius: 0.375rem;
4672  font-size: 0.75rem;
4673  color: var(--text-secondary);
4674  word-break: break-all;
4675}
4676
4677.model-presets {
4678  display: flex;
4679  flex-wrap: wrap;
4680  gap: 0.375rem;
4681  margin-bottom: 0.5rem;
4682}
4683
4684.preset-btn {
4685  padding: 0.25rem 0.625rem;
4686  background: var(--bg-base);
4687  border: 1px solid var(--border);
4688  border-radius: 0.25rem;
4689  color: var(--text-secondary);
4690  font-size: 0.75rem;
4691  cursor: pointer;
4692  transition: all 0.15s;
4693}
4694
4695.preset-btn:hover {
4696  background: var(--bg-tertiary);
4697  color: var(--text-primary);
4698}
4699
4700.preset-btn.selected {
4701  background: var(--blue-bg);
4702  border-color: var(--blue-border);
4703  color: var(--blue-text);
4704}
4705
4706.test-result {
4707  padding: 0.75rem 1rem;
4708  border-radius: 0.375rem;
4709  margin-bottom: 1rem;
4710  font-size: 0.875rem;
4711}
4712
4713.test-result.success {
4714  background: var(--success-bg);
4715  border: 1px solid var(--success-border);
4716  color: var(--success-text);
4717}
4718
4719.test-result.error {
4720  background: var(--error-bg);
4721  border: 1px solid var(--error-border);
4722  color: var(--error-text);
4723}
4724
4725.form-actions {
4726  display: flex;
4727  gap: 0.5rem;
4728  justify-content: flex-end;
4729  margin-top: 1rem;
4730  padding-bottom: 0.5rem;
4731}
4732
4733kbd {
4734  display: inline-block;
4735  padding: 0.125rem 0.375rem;
4736  font-size: 0.75rem;
4737  font-family: inherit;
4738  background: var(--bg-tertiary);
4739  border: 1px solid var(--border-color);
4740  border-radius: 0.25rem;
4741  color: var(--text-secondary);
4742}
4743
4744/* System Prompt View */
4745.system-prompt-view {
4746  background: var(--gray-100);
4747  border-radius: 0.5rem;
4748  margin: 0.5rem 0;
4749  width: 100%;
4750  border: 1px dashed var(--border);
4751}
4752
4753.dark .system-prompt-view {
4754  background: var(--gray-800);
4755}
4756
4757.system-prompt-header {
4758  display: flex;
4759  align-items: center;
4760  justify-content: space-between;
4761  padding: 0.75rem 1rem;
4762  cursor: pointer;
4763  user-select: none;
4764}
4765
4766.system-prompt-header:hover {
4767  background: rgba(0, 0, 0, 0.02);
4768  border-radius: 0.5rem;
4769}
4770
4771.dark .system-prompt-header:hover {
4772  background: rgba(255, 255, 255, 0.02);
4773}
4774
4775.system-prompt-summary {
4776  display: flex;
4777  align-items: center;
4778  gap: 0.5rem;
4779  flex: 1;
4780  min-width: 0;
4781}
4782
4783.system-prompt-icon {
4784  font-size: 1rem;
4785  flex-shrink: 0;
4786}
4787
4788.system-prompt-label {
4789  font-family: var(--font-mono);
4790  font-size: 0.875rem;
4791  color: var(--text-primary);
4792  font-weight: 500;
4793}
4794
4795.system-prompt-meta {
4796  font-size: 0.75rem;
4797  color: var(--text-secondary);
4798  flex-shrink: 0;
4799}
4800
4801.system-prompt-content {
4802  padding: 0 1rem 1rem 1rem;
4803}
4804
4805.system-prompt-text {
4806  font-family: var(--font-mono);
4807  font-size: 0.75rem;
4808  line-height: 1.5;
4809  color: var(--text-secondary);
4810  background: var(--bg-base);
4811  border: 1px solid var(--border);
4812  border-radius: 0.375rem;
4813  padding: 1rem;
4814  margin: 0;
4815  max-height: 400px;
4816  overflow: auto;
4817  white-space: pre-wrap;
4818  word-wrap: break-word;
4819}
4820
4821.dark .system-prompt-text {
4822  background: var(--gray-900);
4823}
4824
4825/* ===== Terminal Panel ===== */
4826.terminal-panel {
4827  display: flex;
4828  flex-direction: column;
4829  border-top: 1px solid var(--border);
4830  background: var(--bg-secondary);
4831  min-height: 80px;
4832  max-height: 800px;
4833  overflow: hidden;
4834}
4835
4836.terminal-panel-resize-handle {
4837  height: 6px;
4838  cursor: ns-resize;
4839  display: flex;
4840  align-items: center;
4841  justify-content: center;
4842  flex-shrink: 0;
4843  background: var(--bg-secondary);
4844  border-bottom: 1px solid var(--border);
4845  user-select: none;
4846}
4847
4848.terminal-panel-resize-handle:hover {
4849  background: var(--bg-tertiary);
4850}
4851
4852.terminal-panel-resize-grip {
4853  width: 40px;
4854  height: 3px;
4855  background: var(--text-tertiary);
4856  border-radius: 2px;
4857}
4858
4859.terminal-panel-header {
4860  display: flex;
4861  align-items: center;
4862  justify-content: space-between;
4863  padding: 0 8px;
4864  height: 34px;
4865  flex-shrink: 0;
4866  background: var(--bg-secondary);
4867  border-bottom: 1px solid var(--border);
4868  gap: 8px;
4869}
4870
4871.terminal-panel-tabs {
4872  display: flex;
4873  align-items: center;
4874  gap: 2px;
4875  overflow-x: auto;
4876  flex: 1;
4877  min-width: 0;
4878  scrollbar-width: none;
4879}
4880
4881.terminal-panel-tabs::-webkit-scrollbar {
4882  display: none;
4883}
4884
4885.terminal-panel-tab {
4886  display: flex;
4887  align-items: center;
4888  gap: 4px;
4889  padding: 4px 8px;
4890  border-radius: 4px;
4891  cursor: pointer;
4892  font-size: 12px;
4893  font-family: Consolas, "Liberation Mono", Menlo, monospace;
4894  color: var(--text-secondary);
4895  white-space: nowrap;
4896  user-select: none;
4897  border: 1px solid transparent;
4898  transition:
4899    background-color 0.1s,
4900    color 0.1s;
4901}
4902
4903.terminal-panel-tab:hover {
4904  background: var(--bg-tertiary);
4905  color: var(--text-primary);
4906}
4907
4908.terminal-panel-tab-active {
4909  background: var(--bg-base);
4910  color: var(--text-primary);
4911  border-color: var(--border);
4912}
4913
4914.terminal-panel-tab-indicator {
4915  font-size: 10px;
4916  line-height: 1;
4917}
4918
4919.terminal-panel-tab-running {
4920  color: var(--success-text);
4921}
4922
4923.terminal-panel-tab-success {
4924  color: var(--success-text);
4925}
4926
4927.terminal-panel-tab-error {
4928  color: var(--error-text);
4929}
4930
4931.terminal-panel-tab-label {
4932  max-width: 120px;
4933  overflow: hidden;
4934  text-overflow: ellipsis;
4935}
4936
4937.terminal-panel-tab-close {
4938  display: flex;
4939  align-items: center;
4940  justify-content: center;
4941  width: 16px;
4942  height: 16px;
4943  border: none;
4944  background: none;
4945  cursor: pointer;
4946  color: var(--text-tertiary);
4947  font-size: 14px;
4948  line-height: 1;
4949  border-radius: 3px;
4950  padding: 0;
4951}
4952
4953.terminal-panel-tab-close:hover {
4954  background: var(--bg-tertiary);
4955  color: var(--error-text);
4956}
4957
4958.terminal-panel-actions {
4959  display: flex;
4960  align-items: center;
4961  gap: 2px;
4962  background: var(--bg-base);
4963  border: 1px solid var(--border);
4964  border-radius: 4px;
4965  padding: 2px;
4966  flex-shrink: 0;
4967}
4968
4969.terminal-panel-actions-divider {
4970  width: 1px;
4971  height: 16px;
4972  background: var(--border);
4973  margin: 0 2px;
4974}
4975
4976.terminal-panel-action-btn {
4977  display: flex;
4978  align-items: center;
4979  justify-content: center;
4980  width: 24px;
4981  height: 24px;
4982  border-radius: 4px;
4983  border: none;
4984  background: transparent;
4985  cursor: pointer;
4986  color: var(--text-secondary);
4987  transition:
4988    background-color 0.15s,
4989    color 0.15s;
4990}
4991
4992.terminal-panel-action-btn:hover {
4993  background: var(--bg-tertiary);
4994}
4995
4996.terminal-panel-action-btn-feedback {
4997  background: var(--success-bg);
4998  color: var(--success-text);
4999}
5000
5001.terminal-panel-content {
5002  flex: 1;
5003  min-height: 0;
5004  overflow: hidden;
5005  position: relative;
5006}
5007
5008.terminal-panel-content > div {
5009  position: absolute;
5010  inset: 0;
5011  padding: 8px 12px;
5012}