@in-the-loop-labs/pair-review 1.4.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/package.json +1 -1
  2. package/plugin/.claude-plugin/plugin.json +1 -1
  3. package/plugin/skills/review-requests/SKILL.md +54 -0
  4. package/plugin-code-critic/.claude-plugin/plugin.json +1 -1
  5. package/public/css/pr.css +1081 -54
  6. package/public/css/repo-settings.css +452 -140
  7. package/public/js/components/AdvancedConfigTab.js +1364 -0
  8. package/public/js/components/AnalysisConfigModal.js +488 -112
  9. package/public/js/components/CouncilProgressModal.js +1416 -0
  10. package/public/js/components/TextInputDialog.js +231 -0
  11. package/public/js/components/TimeoutSelect.js +367 -0
  12. package/public/js/components/VoiceCentricConfigTab.js +1334 -0
  13. package/public/js/local.js +162 -83
  14. package/public/js/modules/analysis-history.js +185 -11
  15. package/public/js/modules/comment-manager.js +13 -0
  16. package/public/js/modules/file-comment-manager.js +28 -0
  17. package/public/js/pr.js +233 -115
  18. package/public/js/repo-settings.js +575 -106
  19. package/public/local.html +11 -1
  20. package/public/pr.html +6 -1
  21. package/public/repo-settings.html +28 -21
  22. package/public/setup.html +8 -2
  23. package/src/ai/analyzer.js +1262 -111
  24. package/src/ai/claude-cli.js +2 -2
  25. package/src/ai/claude-provider.js +6 -6
  26. package/src/ai/codex-provider.js +6 -6
  27. package/src/ai/copilot-provider.js +3 -3
  28. package/src/ai/cursor-agent-provider.js +6 -6
  29. package/src/ai/gemini-provider.js +6 -6
  30. package/src/ai/opencode-provider.js +6 -6
  31. package/src/ai/pi-provider.js +6 -6
  32. package/src/ai/prompts/baseline/consolidation/balanced.js +208 -0
  33. package/src/ai/prompts/baseline/consolidation/fast.js +175 -0
  34. package/src/ai/prompts/baseline/consolidation/thorough.js +283 -0
  35. package/src/ai/prompts/config.js +1 -1
  36. package/src/ai/prompts/index.js +26 -2
  37. package/src/ai/provider.js +4 -2
  38. package/src/database.js +417 -14
  39. package/src/main.js +1 -1
  40. package/src/routes/analysis.js +495 -10
  41. package/src/routes/config.js +36 -15
  42. package/src/routes/councils.js +351 -0
  43. package/src/routes/local.js +33 -11
  44. package/src/routes/mcp.js +9 -2
  45. package/src/routes/setup.js +12 -2
  46. package/src/routes/shared.js +126 -13
  47. package/src/server.js +34 -4
  48. package/src/utils/stats-calculator.js +2 -0
@@ -242,6 +242,10 @@ html, body {
242
242
  border-radius: 12px;
243
243
  }
244
244
 
245
+ .settings-section--has-card {
246
+ position: relative;
247
+ }
248
+
245
249
  .section-header {
246
250
  margin-bottom: 20px;
247
251
  }
@@ -268,176 +272,511 @@ html, body {
268
272
  }
269
273
 
270
274
  /* ============================================
271
- Model Cards (matching AnalysisConfigModal)
272
- Note: Provider toggle styles are inherited from pr.css
275
+ Settings Model Selects
273
276
  ============================================ */
274
277
 
275
- /* Override provider toggle for settings page layout */
276
- .settings-section .provider-toggle {
277
- width: 100%;
278
- justify-content: stretch;
278
+ /* Settings Model Row */
279
+ .settings-model-row {
280
+ display: flex;
281
+ gap: 12px;
282
+ align-items: flex-end;
283
+ }
284
+
285
+ .settings-select-group {
286
+ display: flex;
287
+ flex-direction: column;
279
288
  }
280
289
 
281
- .settings-section .provider-btn {
290
+ .settings-select-group-grow {
282
291
  flex: 1;
283
- justify-content: center;
284
292
  }
285
293
 
286
- .model-cards {
287
- display: grid;
288
- grid-template-columns: repeat(3, 1fr);
289
- gap: 12px;
290
- margin-bottom: 16px;
294
+ .settings-select {
295
+ padding: 10px 14px;
296
+ background: var(--color-bg-primary);
297
+ border: 1px solid var(--color-border-primary);
298
+ border-radius: 8px;
299
+ font-family: inherit;
300
+ font-size: 14px;
301
+ color: var(--color-text-primary);
302
+ cursor: pointer;
303
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
304
+ appearance: none;
305
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M2.22 4.22a.75.75 0 011.06 0L6 6.94l2.72-2.72a.75.75 0 111.06 1.06l-3.25 3.25a.75.75 0 01-1.06 0L2.22 5.28a.75.75 0 010-1.06z'/%3E%3C/svg%3E");
306
+ background-repeat: no-repeat;
307
+ background-position: right 12px center;
308
+ padding-right: 36px;
309
+ min-width: 140px;
291
310
  }
292
311
 
293
- .model-card {
294
- position: relative;
312
+ .settings-select:focus {
313
+ outline: none;
314
+ border-color: #f59e0b;
315
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.12);
316
+ }
317
+
318
+ [data-theme="dark"] .settings-select:focus {
319
+ border-color: #fbbf24;
320
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.12);
321
+ }
322
+
323
+ .model-hint {
295
324
  display: flex;
296
- flex-direction: column;
297
325
  align-items: center;
298
- padding: 20px 16px;
299
- background: var(--color-bg-primary);
300
- border: 2px solid var(--color-border-primary);
301
- border-radius: 10px;
302
- cursor: pointer;
303
- transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
304
- text-align: center;
326
+ gap: 6px;
327
+ margin: 0;
328
+ margin-top: 14px;
329
+ font-size: 12px;
330
+ color: var(--color-text-muted);
305
331
  }
306
332
 
307
- .model-card:hover {
308
- border-color: var(--color-border-secondary);
309
- transform: translateY(-2px);
310
- box-shadow: 0 4px 12px var(--color-shadow);
333
+ .model-hint svg {
334
+ flex-shrink: 0;
311
335
  }
312
336
 
313
- .model-card.selected {
314
- border-color: #f59e0b;
315
- background: rgba(245, 158, 11, 0.06);
337
+ /* ============================================
338
+ Model Card Preview (Single Model mode)
339
+ ============================================ */
340
+
341
+ .settings-model-card-preview {
342
+ position: absolute;
343
+ top: 24px;
344
+ right: auto;
345
+ left: calc(100% + 20px);
346
+ }
347
+
348
+ /* Override the interactive model-card styles for the static preview card */
349
+ .model-card.settings-model-card-static {
350
+ position: relative;
351
+ cursor: default;
352
+ pointer-events: none;
353
+ width: 160px;
354
+ aspect-ratio: auto;
355
+ padding: 12px 10px 10px;
356
+ overflow: visible;
357
+ }
358
+
359
+ .settings-model-card-static:hover {
360
+ transform: none;
316
361
  box-shadow:
317
- 0 0 0 3px rgba(245, 158, 11, 0.12),
318
- 0 4px 12px rgba(245, 158, 11, 0.08);
362
+ 0 0 0 3px rgba(245, 158, 11, 0.15),
363
+ 0 4px 12px rgba(245, 158, 11, 0.1);
319
364
  }
320
365
 
321
- [data-theme="dark"] .model-card.selected {
322
- background: rgba(251, 191, 36, 0.08);
323
- border-color: #fbbf24;
366
+ [data-theme="dark"] .settings-model-card-static:hover {
324
367
  box-shadow:
325
- 0 0 0 3px rgba(251, 191, 36, 0.12),
326
- 0 4px 12px rgba(251, 191, 36, 0.06);
368
+ 0 0 0 3px rgba(251, 191, 36, 0.15),
369
+ 0 4px 12px rgba(251, 191, 36, 0.08);
327
370
  }
328
371
 
329
- .model-badge {
372
+ /* Speech bubble arrow — points left toward the settings section */
373
+ .settings-model-card-static::before {
374
+ --settings-model-card-bg: #fef7e8;
375
+ content: '';
330
376
  position: absolute;
331
- top: -10px;
332
- right: -6px;
333
- padding: 3px 10px;
334
- font-size: 10px;
335
- font-weight: 700;
336
- text-transform: uppercase;
337
- letter-spacing: 0.05em;
338
- border-radius: 12px;
339
- white-space: nowrap;
340
- /* Fallback for unknown badge classes */
341
- background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);
342
- color: white;
377
+ left: -8px;
378
+ top: 22px;
379
+ width: 14px;
380
+ height: 14px;
381
+ background: var(--settings-model-card-bg);
382
+ border-bottom: 2px solid var(--color-accent-ai-dark, #f59e0b);
383
+ border-left: 2px solid var(--color-accent-ai-dark, #f59e0b);
384
+ transform: rotate(45deg);
385
+ z-index: 1;
343
386
  }
344
387
 
345
- .badge-speed {
346
- background: linear-gradient(135deg, #06b6d4 0%, #0891b2 100%);
347
- color: white;
388
+ [data-theme="dark"] .settings-model-card-static::before {
389
+ --settings-model-card-bg: #2a2416;
390
+ border-bottom-color: var(--color-accent-ai, #fbbf24);
391
+ border-left-color: var(--color-accent-ai, #fbbf24);
348
392
  }
349
393
 
350
- .badge-recommended {
351
- background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
352
- color: white;
394
+ /* Position the tier badge to straddle the upper-right corner */
395
+ .settings-model-card-static .model-badge {
396
+ top: -8px;
397
+ right: -8px;
353
398
  }
354
399
 
355
- .badge-power {
356
- background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
357
- color: white;
400
+ /* Hide the checkmark indicator on the static preview */
401
+ .settings-model-card-static .model-selected-indicator {
402
+ display: none;
358
403
  }
359
404
 
360
- .badge-premium {
361
- background: linear-gradient(135deg, #ec4899 0%, #db2777 100%);
362
- color: white;
405
+ /* ============================================
406
+ Council Card Preview (Council mode)
407
+ ============================================ */
408
+
409
+ .council-card {
410
+ position: relative;
411
+ pointer-events: none;
412
+ width: 190px;
413
+ padding: 14px 12px 12px;
414
+ background: var(--color-bg-primary);
415
+ border: 1px solid var(--color-border-primary);
416
+ border-radius: 10px;
417
+ box-shadow:
418
+ 0 0 0 3px rgba(245, 158, 11, 0.15),
419
+ 0 4px 12px rgba(245, 158, 11, 0.1);
363
420
  }
364
421
 
365
- .badge-balanced {
366
- background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
367
- color: white;
422
+ [data-theme="dark"] .council-card {
423
+ box-shadow:
424
+ 0 0 0 3px rgba(251, 191, 36, 0.15),
425
+ 0 4px 12px rgba(251, 191, 36, 0.08);
426
+ }
427
+
428
+ .council-card-name {
429
+ font-size: 13px;
430
+ font-weight: 600;
431
+ color: var(--color-text-primary);
432
+ margin-bottom: 2px;
433
+ overflow: hidden;
434
+ text-overflow: ellipsis;
435
+ white-space: nowrap;
368
436
  }
369
437
 
370
- .model-icon {
371
- font-size: 32px;
438
+ .council-card-summary {
439
+ font-size: 11px;
440
+ color: var(--color-text-muted);
372
441
  margin-bottom: 10px;
373
- line-height: 1;
374
- filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
375
442
  }
376
443
 
377
- .model-info {
444
+ .council-card-reviewers {
378
445
  display: flex;
379
446
  flex-direction: column;
380
- gap: 2px;
447
+ gap: 4px;
381
448
  }
382
449
 
383
- .model-name {
384
- font-size: 15px;
450
+ .council-card-reviewer {
451
+ display: flex;
452
+ align-items: center;
453
+ gap: 5px;
454
+ font-size: 12px;
455
+ color: var(--color-text-secondary);
456
+ overflow: hidden;
457
+ text-overflow: ellipsis;
458
+ white-space: nowrap;
459
+ }
460
+
461
+ .council-card-reviewer-name {
462
+ flex: 1;
463
+ overflow: hidden;
464
+ text-overflow: ellipsis;
465
+ white-space: nowrap;
466
+ }
467
+
468
+ .council-card-tier {
469
+ flex-shrink: 0;
470
+ font-size: 10px;
471
+ color: var(--color-text-muted);
472
+ text-transform: capitalize;
473
+ }
474
+
475
+ .council-card-divider {
476
+ border: none;
477
+ border-top: 1px solid var(--color-border-primary);
478
+ margin: 8px 0 6px;
479
+ }
480
+
481
+ .council-card-consolidation {
482
+ font-size: 12px;
483
+ color: var(--color-text-secondary);
484
+ }
485
+
486
+ .council-card-consolidation-label {
487
+ font-size: 10px;
488
+ text-transform: uppercase;
489
+ letter-spacing: 0.04em;
490
+ color: var(--color-text-muted);
491
+ margin-bottom: 3px;
492
+ }
493
+
494
+ .council-card-level-header {
495
+ font-size: 10px;
496
+ text-transform: uppercase;
497
+ letter-spacing: 0.04em;
498
+ color: var(--color-text-muted);
499
+ margin-top: 8px;
500
+ margin-bottom: 3px;
501
+ }
502
+
503
+ .council-card-level-header:first-child {
504
+ margin-top: 0;
505
+ }
506
+
507
+ .council-card-badge-advanced {
508
+ display: inline-flex;
509
+ padding: 1px 6px;
510
+ font-size: 9px;
385
511
  font-weight: 600;
512
+ border-radius: 8px;
513
+ background: rgba(139, 92, 246, 0.12);
514
+ color: #7c3aed;
515
+ }
516
+
517
+ [data-theme="dark"] .council-card-badge-advanced {
518
+ background: rgba(139, 92, 246, 0.15);
519
+ color: #a78bfa;
520
+ }
521
+
522
+ /* Speech bubble arrow — points left toward the settings section */
523
+ .council-card::before {
524
+ content: '';
525
+ position: absolute;
526
+ left: -7px;
527
+ top: 22px;
528
+ width: 12px;
529
+ height: 12px;
530
+ background: var(--color-bg-primary);
531
+ border-bottom: 1px solid var(--color-border-primary);
532
+ border-left: 1px solid var(--color-border-primary);
533
+ transform: rotate(45deg);
534
+ }
535
+
536
+ /* ============================================
537
+ Analysis Mode Segmented Control
538
+ ============================================ */
539
+
540
+ .analysis-mode-toggle {
541
+ display: inline-flex;
542
+ background: var(--color-bg-tertiary);
543
+ border: 1px solid var(--color-border-primary);
544
+ border-radius: 8px;
545
+ padding: 3px;
546
+ margin-bottom: 20px;
547
+ }
548
+
549
+ .mode-btn {
550
+ padding: 8px 20px;
551
+ border: none;
552
+ border-radius: 6px;
553
+ background: transparent;
554
+ font-size: 14px;
555
+ font-weight: 500;
556
+ color: var(--color-text-secondary);
557
+ cursor: pointer;
558
+ transition: all 0.2s ease;
559
+ }
560
+
561
+ .mode-btn:hover:not(.selected) {
562
+ color: var(--color-text-primary);
563
+ }
564
+
565
+ .mode-btn.selected {
566
+ background: var(--color-bg-primary);
386
567
  color: var(--color-text-primary);
568
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
569
+ }
570
+
571
+ [data-theme="dark"] .mode-btn.selected {
572
+ background: var(--color-bg-elevated, var(--color-bg-secondary));
573
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
387
574
  }
388
575
 
389
- .model-tagline {
576
+ .subsection-label {
577
+ display: block;
390
578
  font-size: 12px;
579
+ font-weight: 600;
580
+ text-transform: uppercase;
581
+ letter-spacing: 0.05em;
391
582
  color: var(--color-text-secondary);
583
+ margin-bottom: 10px;
392
584
  }
393
585
 
394
- .model-description {
395
- margin: 10px 0 0;
396
- font-size: 12px;
397
- color: var(--color-text-tertiary);
398
- line-height: 1.4;
586
+ /* ============================================
587
+ Council Select Dropdown
588
+ ============================================ */
589
+
590
+ .council-select {
591
+ width: 100%;
592
+ padding: 10px 14px;
593
+ background: var(--color-bg-primary);
594
+ border: 1px solid var(--color-border-primary);
595
+ border-radius: 8px;
596
+ font-family: inherit;
597
+ font-size: 14px;
598
+ color: var(--color-text-primary);
599
+ cursor: pointer;
600
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
601
+ appearance: none;
602
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M2.22 4.22a.75.75 0 011.06 0L6 6.94l2.72-2.72a.75.75 0 111.06 1.06l-3.25 3.25a.75.75 0 01-1.06 0L2.22 5.28a.75.75 0 010-1.06z'/%3E%3C/svg%3E");
603
+ background-repeat: no-repeat;
604
+ background-position: right 12px center;
605
+ padding-right: 36px;
399
606
  }
400
607
 
401
- .model-selected-indicator {
402
- position: absolute;
403
- bottom: 10px;
404
- right: 10px;
405
- width: 22px;
406
- height: 22px;
608
+ .council-select:focus {
609
+ outline: none;
610
+ border-color: #f59e0b;
611
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.12);
612
+ }
613
+
614
+ [data-theme="dark"] .council-select:focus {
615
+ border-color: #fbbf24;
616
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.12);
617
+ }
618
+
619
+ /* ============================================
620
+ Custom Dropdown (Council Selector)
621
+ ============================================ */
622
+
623
+ .custom-dropdown {
624
+ position: relative;
625
+ width: 100%;
626
+ }
627
+
628
+ .custom-dropdown-trigger {
407
629
  display: flex;
408
630
  align-items: center;
409
- justify-content: center;
410
- background: #f59e0b;
411
- border-radius: 50%;
412
- color: white;
413
- opacity: 0;
414
- transform: scale(0.5);
415
- transition: all 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
631
+ width: 100%;
632
+ padding: 10px 14px;
633
+ padding-right: 36px;
634
+ background: var(--color-bg-primary);
635
+ border: 1px solid var(--color-border-primary);
636
+ border-radius: 8px;
637
+ font-family: inherit;
638
+ font-size: 14px;
639
+ color: var(--color-text-primary);
640
+ cursor: pointer;
641
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
642
+ text-align: left;
643
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M2.22 4.22a.75.75 0 011.06 0L6 6.94l2.72-2.72a.75.75 0 111.06 1.06l-3.25 3.25a.75.75 0 01-1.06 0L2.22 5.28a.75.75 0 010-1.06z'/%3E%3C/svg%3E");
644
+ background-repeat: no-repeat;
645
+ background-position: right 12px center;
416
646
  }
417
647
 
418
- [data-theme="dark"] .model-selected-indicator {
419
- background: #fbbf24;
420
- color: #1a1a1a;
648
+ .custom-dropdown-trigger:hover {
649
+ border-color: var(--color-border-secondary);
650
+ }
651
+
652
+ .custom-dropdown-trigger:focus {
653
+ outline: none;
654
+ border-color: #f59e0b;
655
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.12);
421
656
  }
422
657
 
423
- .model-card.selected .model-selected-indicator {
424
- opacity: 1;
425
- transform: scale(1);
658
+ [data-theme="dark"] .custom-dropdown-trigger:focus {
659
+ border-color: #fbbf24;
660
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.12);
426
661
  }
427
662
 
428
- .model-hint {
663
+ .custom-dropdown.open .custom-dropdown-trigger {
664
+ border-color: #f59e0b;
665
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.12);
666
+ border-bottom-left-radius: 0;
667
+ border-bottom-right-radius: 0;
668
+ }
669
+
670
+ [data-theme="dark"] .custom-dropdown.open .custom-dropdown-trigger {
671
+ border-color: #fbbf24;
672
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.12);
673
+ }
674
+
675
+ .custom-dropdown-trigger .trigger-text {
676
+ flex: 1;
677
+ overflow: hidden;
678
+ text-overflow: ellipsis;
679
+ white-space: nowrap;
680
+ }
681
+
682
+ .custom-dropdown-trigger .trigger-text.placeholder {
683
+ color: var(--color-text-tertiary);
684
+ }
685
+
686
+ .custom-dropdown-list {
687
+ display: none;
688
+ position: absolute;
689
+ top: 100%;
690
+ left: 0;
691
+ right: 0;
692
+ z-index: 50;
693
+ max-height: 240px;
694
+ overflow-y: auto;
695
+ background: var(--color-bg-primary);
696
+ border: 1px solid #f59e0b;
697
+ border-top: none;
698
+ border-bottom-left-radius: 8px;
699
+ border-bottom-right-radius: 8px;
700
+ box-shadow: 0 4px 12px var(--color-shadow);
701
+ }
702
+
703
+ [data-theme="dark"] .custom-dropdown-list {
704
+ border-color: #fbbf24;
705
+ }
706
+
707
+ .custom-dropdown.open .custom-dropdown-list {
708
+ display: block;
709
+ }
710
+
711
+ .custom-dropdown-option {
429
712
  display: flex;
430
713
  align-items: center;
431
- gap: 6px;
432
- margin: 0;
433
- font-size: 12px;
434
- color: var(--color-text-muted);
714
+ gap: 8px;
715
+ padding: 10px 14px;
716
+ cursor: pointer;
717
+ font-size: 14px;
718
+ color: var(--color-text-primary);
719
+ transition: background-color 0.1s ease;
435
720
  }
436
721
 
437
- .model-hint svg {
722
+ .custom-dropdown-option:hover,
723
+ .custom-dropdown-option.focused {
724
+ background: var(--color-bg-tertiary);
725
+ }
726
+
727
+ .custom-dropdown-option.selected {
728
+ background: rgba(245, 158, 11, 0.08);
729
+ font-weight: 500;
730
+ }
731
+
732
+ [data-theme="dark"] .custom-dropdown-option.selected {
733
+ background: rgba(251, 191, 36, 0.1);
734
+ }
735
+
736
+ .custom-dropdown-option + .custom-dropdown-option {
737
+ border-top: 1px solid var(--color-border-primary);
738
+ }
739
+
740
+ .custom-dropdown-option .option-name {
741
+ flex: 1;
742
+ overflow: hidden;
743
+ text-overflow: ellipsis;
744
+ white-space: nowrap;
745
+ }
746
+
747
+ /* Council type badges in dropdown */
748
+ .council-type-badge {
749
+ display: inline-flex;
750
+ align-items: center;
751
+ padding: 2px 7px;
752
+ font-size: 10px;
753
+ font-weight: 600;
754
+ letter-spacing: 0.03em;
755
+ border-radius: 10px;
756
+ white-space: nowrap;
438
757
  flex-shrink: 0;
439
758
  }
440
759
 
760
+ .council-type-badge.badge-standard {
761
+ background: rgba(34, 197, 94, 0.12);
762
+ color: #16a34a;
763
+ }
764
+
765
+ [data-theme="dark"] .council-type-badge.badge-standard {
766
+ background: rgba(34, 197, 94, 0.15);
767
+ color: #4ade80;
768
+ }
769
+
770
+ .council-type-badge.badge-advanced {
771
+ background: rgba(139, 92, 246, 0.12);
772
+ color: #7c3aed;
773
+ }
774
+
775
+ [data-theme="dark"] .council-type-badge.badge-advanced {
776
+ background: rgba(139, 92, 246, 0.15);
777
+ color: #a78bfa;
778
+ }
779
+
441
780
  /* ============================================
442
781
  Instructions Textarea
443
782
  ============================================ */
@@ -789,6 +1128,13 @@ html, body {
789
1128
  Responsive Design
790
1129
  ============================================ */
791
1130
 
1131
+ /* Hide card preview on narrower viewports where there's no room to the side */
1132
+ @media (max-width: 1199px) {
1133
+ .settings-model-card-preview {
1134
+ display: none;
1135
+ }
1136
+ }
1137
+
792
1138
  @media (max-width: 768px) {
793
1139
  .nav-content {
794
1140
  padding: 12px 16px;
@@ -812,42 +1158,8 @@ html, body {
812
1158
  padding: 20px 16px;
813
1159
  }
814
1160
 
815
- .model-cards {
816
- grid-template-columns: 1fr;
817
- gap: 10px;
818
- }
819
-
820
- .model-card {
821
- flex-direction: row;
822
- text-align: left;
823
- padding: 16px;
824
- gap: 14px;
825
- }
826
-
827
- .model-icon {
828
- font-size: 28px;
829
- margin-bottom: 0;
830
- }
831
-
832
- .model-info {
833
- flex: 1;
834
- }
835
-
836
- .model-description {
837
- margin-top: 6px;
838
- }
839
-
840
- .model-badge {
841
- position: static;
842
- align-self: flex-start;
843
- margin-left: auto;
844
- font-size: 9px;
845
- padding: 2px 8px;
846
- }
847
-
848
- .model-selected-indicator {
849
- position: static;
850
- margin-left: 8px;
1161
+ .settings-model-row {
1162
+ flex-direction: column;
851
1163
  }
852
1164
 
853
1165
  .action-bar-content {