reasonix 0.39.1 → 0.40.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 (115) hide show
  1. package/dashboard/app.css +580 -0
  2. package/dashboard/dist/app.js +1827 -32
  3. package/dashboard/dist/app.js.map +1 -1
  4. package/dist/cli/chat-G7CUW4ZI.js +45 -0
  5. package/dist/cli/{chunk-VM6A6QLY.js → chunk-26UDIXLD.js} +1109 -1223
  6. package/dist/cli/chunk-26UDIXLD.js.map +1 -0
  7. package/dist/cli/{chunk-SUZRC4NC.js → chunk-4X3NY5ZM.js} +2 -2
  8. package/dist/cli/{chunk-BTSIAOUG.js → chunk-4YV2GBYG.js} +2252 -2245
  9. package/dist/cli/chunk-4YV2GBYG.js.map +1 -0
  10. package/dist/cli/{chunk-6NMWJSES.js → chunk-5GKJLNP2.js} +2 -2
  11. package/dist/cli/{chunk-6DR4F3MC.js → chunk-7DLHHBGN.js} +49 -18
  12. package/dist/cli/chunk-7DLHHBGN.js.map +1 -0
  13. package/dist/cli/{chunk-NLV2YORE.js → chunk-A5LSGEEK.js} +43 -3
  14. package/dist/cli/chunk-A5LSGEEK.js.map +1 -0
  15. package/dist/cli/{code-TTOCA52N.js → chunk-AVB3WZWU.js} +51 -132
  16. package/dist/cli/chunk-AVB3WZWU.js.map +1 -0
  17. package/dist/cli/{chunk-4D662BWT.js → chunk-CLAN6PVH.js} +4 -95
  18. package/dist/cli/chunk-CLAN6PVH.js.map +1 -0
  19. package/dist/cli/chunk-CPTZ5OHX.js +18 -0
  20. package/dist/cli/chunk-CPTZ5OHX.js.map +1 -0
  21. package/dist/cli/{chunk-SWLIVNTP.js → chunk-CZSJILQP.js} +84 -1
  22. package/dist/cli/chunk-CZSJILQP.js.map +1 -0
  23. package/dist/cli/{chunk-MHDNZXJJ.js → chunk-E46ECXJD.js} +7 -2
  24. package/dist/cli/{chunk-MHDNZXJJ.js.map → chunk-E46ECXJD.js.map} +1 -1
  25. package/dist/cli/{chunk-CGX5GIW6.js → chunk-FFNOMR32.js} +2 -2
  26. package/dist/cli/{chunk-TWJAH4XD.js → chunk-H7PHYVPM.js} +102 -18
  27. package/dist/cli/chunk-H7PHYVPM.js.map +1 -0
  28. package/dist/cli/{chunk-SJNIIH5W.js → chunk-HCC42PEI.js} +5 -1
  29. package/dist/cli/{chunk-SJNIIH5W.js.map → chunk-HCC42PEI.js.map} +1 -1
  30. package/dist/cli/chunk-IYF36OCJ.js +45 -0
  31. package/dist/cli/chunk-IYF36OCJ.js.map +1 -0
  32. package/dist/cli/{chunk-6TJSZ4J2.js → chunk-JWCTX5S4.js} +2 -2
  33. package/dist/cli/{chunk-DDA76P44.js → chunk-R4YTW7PR.js} +5 -21
  34. package/dist/cli/chunk-R4YTW7PR.js.map +1 -0
  35. package/dist/cli/{chunk-7G3SESEU.js → chunk-RFX7TYVV.js} +2 -15
  36. package/dist/cli/chunk-RFX7TYVV.js.map +1 -0
  37. package/dist/cli/{chunk-NTVW2TWO.js → chunk-SZH34P45.js} +186 -12
  38. package/dist/cli/chunk-SZH34P45.js.map +1 -0
  39. package/dist/cli/chunk-UCMTWZKU.js +100 -0
  40. package/dist/cli/chunk-UCMTWZKU.js.map +1 -0
  41. package/dist/cli/{chunk-V5D77TFD.js → chunk-ULBW7DYL.js} +2 -2
  42. package/dist/cli/{chunk-TPDWAMG6.js → chunk-UVRXTSK3.js} +195 -20
  43. package/dist/cli/chunk-UVRXTSK3.js.map +1 -0
  44. package/dist/cli/chunk-VLNRQMCI.js +413 -0
  45. package/dist/cli/chunk-VLNRQMCI.js.map +1 -0
  46. package/dist/cli/{chunk-JBBMMYOI.js → chunk-WKOMCPXP.js} +9 -7
  47. package/dist/cli/{chunk-JBBMMYOI.js.map → chunk-WKOMCPXP.js.map} +1 -1
  48. package/dist/cli/{chunk-6CXT5JRM.js → chunk-XST7BSZJ.js} +2 -1
  49. package/dist/cli/{chunk-6CXT5JRM.js.map → chunk-XST7BSZJ.js.map} +1 -1
  50. package/dist/cli/code-YQGVLIT2.js +147 -0
  51. package/dist/cli/code-YQGVLIT2.js.map +1 -0
  52. package/dist/cli/{commands-PJMHSP3Z.js → commands-FQZOBLLZ.js} +6 -4
  53. package/dist/cli/{commands-PJMHSP3Z.js.map → commands-FQZOBLLZ.js.map} +1 -1
  54. package/dist/cli/{commit-R6SC44W5.js → commit-ZS24SHPG.js} +2 -2
  55. package/dist/cli/desktop-6OLENOOO.js +807 -0
  56. package/dist/cli/desktop-6OLENOOO.js.map +1 -0
  57. package/dist/cli/{diff-RO2QQBNN.js → diff-2VUKNGEI.js} +4 -4
  58. package/dist/cli/{doctor-ISVGUPT2.js → doctor-JO2WNN6C.js} +8 -7
  59. package/dist/cli/{events-SQXPVV7B.js → events-APSVNROZ.js} +3 -3
  60. package/dist/cli/index.js +93 -33
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/{mcp-RABKZDX4.js → mcp-DCKOE5RF.js} +2 -2
  63. package/dist/cli/{mcp-browse-H6O73SHN.js → mcp-browse-D6GBP5RQ.js} +2 -2
  64. package/dist/cli/{mcp-inspect-XWBO52H6.js → mcp-inspect-KFGFPJ3E.js} +42 -5
  65. package/dist/cli/mcp-inspect-KFGFPJ3E.js.map +1 -0
  66. package/dist/cli/{prompt-CZSOFYK6.js → prompt-PKCCLLAD.js} +3 -3
  67. package/dist/cli/{prune-sessions-FCFOYCBP.js → prune-sessions-LV33R47N.js} +2 -2
  68. package/dist/cli/{replay-ZDS4TDXB.js → replay-WFCYX7XF.js} +5 -5
  69. package/dist/cli/{run-TG7NE73J.js → run-IUJYEPMT.js} +18 -15
  70. package/dist/cli/run-IUJYEPMT.js.map +1 -0
  71. package/dist/cli/{server-2FXGNQ4F.js → server-CN4QPPVJ.js} +531 -88
  72. package/dist/cli/server-CN4QPPVJ.js.map +1 -0
  73. package/dist/cli/{sessions-XFGZNOOJ.js → sessions-F5GPGTJN.js} +10 -10
  74. package/dist/cli/{setup-EJAMRGKQ.js → setup-WWMDBPSB.js} +6 -6
  75. package/dist/cli/{version-DPEVFI6I.js → version-KQUPV6T5.js} +10 -10
  76. package/dist/index.d.ts +43 -0
  77. package/dist/index.js +381 -101
  78. package/dist/index.js.map +1 -1
  79. package/package.json +1 -1
  80. package/dist/cli/chat-EVPUW4A4.js +0 -42
  81. package/dist/cli/chunk-4D662BWT.js.map +0 -1
  82. package/dist/cli/chunk-6DR4F3MC.js.map +0 -1
  83. package/dist/cli/chunk-7G3SESEU.js.map +0 -1
  84. package/dist/cli/chunk-BQNUJJN7.js +0 -42
  85. package/dist/cli/chunk-BQNUJJN7.js.map +0 -1
  86. package/dist/cli/chunk-BTSIAOUG.js.map +0 -1
  87. package/dist/cli/chunk-DDA76P44.js.map +0 -1
  88. package/dist/cli/chunk-NLV2YORE.js.map +0 -1
  89. package/dist/cli/chunk-NTVW2TWO.js.map +0 -1
  90. package/dist/cli/chunk-SWLIVNTP.js.map +0 -1
  91. package/dist/cli/chunk-TPDWAMG6.js.map +0 -1
  92. package/dist/cli/chunk-TWJAH4XD.js.map +0 -1
  93. package/dist/cli/chunk-VM6A6QLY.js.map +0 -1
  94. package/dist/cli/code-TTOCA52N.js.map +0 -1
  95. package/dist/cli/mcp-inspect-XWBO52H6.js.map +0 -1
  96. package/dist/cli/run-TG7NE73J.js.map +0 -1
  97. package/dist/cli/server-2FXGNQ4F.js.map +0 -1
  98. /package/dist/cli/{chat-EVPUW4A4.js.map → chat-G7CUW4ZI.js.map} +0 -0
  99. /package/dist/cli/{chunk-SUZRC4NC.js.map → chunk-4X3NY5ZM.js.map} +0 -0
  100. /package/dist/cli/{chunk-6NMWJSES.js.map → chunk-5GKJLNP2.js.map} +0 -0
  101. /package/dist/cli/{chunk-CGX5GIW6.js.map → chunk-FFNOMR32.js.map} +0 -0
  102. /package/dist/cli/{chunk-6TJSZ4J2.js.map → chunk-JWCTX5S4.js.map} +0 -0
  103. /package/dist/cli/{chunk-V5D77TFD.js.map → chunk-ULBW7DYL.js.map} +0 -0
  104. /package/dist/cli/{commit-R6SC44W5.js.map → commit-ZS24SHPG.js.map} +0 -0
  105. /package/dist/cli/{diff-RO2QQBNN.js.map → diff-2VUKNGEI.js.map} +0 -0
  106. /package/dist/cli/{doctor-ISVGUPT2.js.map → doctor-JO2WNN6C.js.map} +0 -0
  107. /package/dist/cli/{events-SQXPVV7B.js.map → events-APSVNROZ.js.map} +0 -0
  108. /package/dist/cli/{mcp-RABKZDX4.js.map → mcp-DCKOE5RF.js.map} +0 -0
  109. /package/dist/cli/{mcp-browse-H6O73SHN.js.map → mcp-browse-D6GBP5RQ.js.map} +0 -0
  110. /package/dist/cli/{prompt-CZSOFYK6.js.map → prompt-PKCCLLAD.js.map} +0 -0
  111. /package/dist/cli/{prune-sessions-FCFOYCBP.js.map → prune-sessions-LV33R47N.js.map} +0 -0
  112. /package/dist/cli/{replay-ZDS4TDXB.js.map → replay-WFCYX7XF.js.map} +0 -0
  113. /package/dist/cli/{sessions-XFGZNOOJ.js.map → sessions-F5GPGTJN.js.map} +0 -0
  114. /package/dist/cli/{setup-EJAMRGKQ.js.map → setup-WWMDBPSB.js.map} +0 -0
  115. /package/dist/cli/{version-DPEVFI6I.js.map → version-KQUPV6T5.js.map} +0 -0
package/dashboard/app.css CHANGED
@@ -2427,3 +2427,583 @@ input:focus, textarea:focus, select:focus { border-color: var(--c-brand); }
2427
2427
  color: var(--c-brand);
2428
2428
  }
2429
2429
 
2430
+ .changes-layout {
2431
+ display: flex;
2432
+ flex-direction: row;
2433
+ height: 100%;
2434
+ overflow: hidden;
2435
+ }
2436
+
2437
+ .app-body.changes-active {
2438
+ padding: 0;
2439
+ overflow: hidden;
2440
+ }
2441
+
2442
+ .changes-panel {
2443
+ display: flex;
2444
+ flex-direction: column;
2445
+ min-width: 200px;
2446
+ overflow: hidden;
2447
+ background: var(--bg-elev);
2448
+ border: 1px solid var(--bd);
2449
+ border-radius: var(--r);
2450
+ }
2451
+
2452
+ .changes-panel-left {
2453
+ width: 30%;
2454
+ }
2455
+
2456
+ .changes-panel-center {
2457
+ flex: 1;
2458
+ min-width: 0;
2459
+ }
2460
+
2461
+ .changes-panel-right {
2462
+ width: 30%;
2463
+ }
2464
+
2465
+ .changes-panel-header {
2466
+ display: flex;
2467
+ align-items: center;
2468
+ gap: 8px;
2469
+ padding: 8px 12px;
2470
+ border-bottom: 1px solid var(--bd);
2471
+ font-family: var(--font-mono);
2472
+ font-size: 10.5px;
2473
+ color: var(--fg-3);
2474
+ text-transform: uppercase;
2475
+ letter-spacing: .1em;
2476
+ flex-shrink: 0;
2477
+ background: var(--bg-elev);
2478
+ }
2479
+
2480
+ .changes-panel-header .glyph {
2481
+ color: var(--c-brand);
2482
+ font-size: 12px;
2483
+ }
2484
+
2485
+ .changes-panel-body {
2486
+ flex: 1;
2487
+ overflow-y: auto;
2488
+ min-height: 0;
2489
+ }
2490
+
2491
+ @media (max-width: 899px) {
2492
+ .changes-layout {
2493
+ flex-direction: column;
2494
+ }
2495
+ .changes-panel {
2496
+ min-width: 0;
2497
+ min-height: 180px;
2498
+ }
2499
+ .changes-panel-left,
2500
+ .changes-panel-right {
2501
+ width: 100%;
2502
+ max-height: 40vh;
2503
+ }
2504
+ .changes-panel-center {
2505
+ flex: 1;
2506
+ }
2507
+ .changes-layout .resize-handle {
2508
+ display: none;
2509
+ }
2510
+ }
2511
+
2512
+ /* ── Line Comment System ──────────────────────────────────────────── */
2513
+ .line-comment-anchor {
2514
+ width: 16px;
2515
+ height: 16px;
2516
+ display: flex;
2517
+ align-items: center;
2518
+ justify-content: center;
2519
+ opacity: 0;
2520
+ pointer-events: none;
2521
+ cursor: pointer;
2522
+ transition: opacity 0.15s ease;
2523
+ flex-shrink: 0;
2524
+ }
2525
+
2526
+ .editor-line:hover .line-comment-anchor.visible {
2527
+ opacity: 1;
2528
+ pointer-events: auto;
2529
+ }
2530
+
2531
+ .line-comment-anchor .plus-icon,
2532
+ .line-comment-anchor .comment-count {
2533
+ font-family: var(--font-mono);
2534
+ font-size: 14px;
2535
+ color: var(--fg-3);
2536
+ line-height: 1;
2537
+ }
2538
+
2539
+ .line-comment-anchor:hover .plus-icon,
2540
+ .line-comment-anchor:hover .comment-count {
2541
+ color: var(--c-brand);
2542
+ }
2543
+
2544
+ .line-comment-anchor .comment-count {
2545
+ background: rgba(121, 192, 255, 0.12);
2546
+ border-radius: var(--r);
2547
+ padding: 0 3px;
2548
+ font-size: 10px;
2549
+ color: var(--c-brand);
2550
+ }
2551
+
2552
+ .line-comment-editor {
2553
+ grid-column: 2;
2554
+ justify-self: stretch;
2555
+ min-width: 0;
2556
+ background: var(--bg-elev);
2557
+ border: 1px solid var(--bd-strong);
2558
+ border-radius: 6px;
2559
+ padding: 10px 12px;
2560
+ margin: 2px 0 4px 0;
2561
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
2562
+ display: flex;
2563
+ flex-direction: column;
2564
+ gap: 8px;
2565
+ }
2566
+
2567
+ .line-comment-bubble {
2568
+ grid-column: 2;
2569
+ justify-self: stretch;
2570
+ min-width: 0;
2571
+ background: var(--bg-elev);
2572
+ border: 1px solid var(--bd-strong);
2573
+ border-radius: 6px;
2574
+ padding: 10px 12px;
2575
+ margin: 2px 0 4px 0;
2576
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
2577
+ display: flex;
2578
+ flex-direction: column;
2579
+ gap: 8px;
2580
+ }
2581
+
2582
+ .line-comment-label {
2583
+ font-family: var(--font-mono);
2584
+ font-size: 10.5px;
2585
+ color: var(--fg-3);
2586
+ text-transform: uppercase;
2587
+ letter-spacing: .08em;
2588
+ }
2589
+
2590
+ .line-comment-textarea {
2591
+ background: var(--bg-input);
2592
+ border: 1px solid var(--bd);
2593
+ border-radius: var(--r);
2594
+ color: var(--fg-0);
2595
+ font-family: var(--font-mono);
2596
+ font-size: 12px;
2597
+ padding: 8px 10px;
2598
+ resize: vertical;
2599
+ min-height: 60px;
2600
+ outline: none;
2601
+ line-height: 1.5;
2602
+ width: 100%;
2603
+ box-sizing: border-box;
2604
+ }
2605
+
2606
+ .line-comment-textarea:focus {
2607
+ border-color: var(--c-brand);
2608
+ }
2609
+
2610
+ .line-comment-actions {
2611
+ display: flex;
2612
+ gap: 6px;
2613
+ justify-content: flex-end;
2614
+ }
2615
+
2616
+ .bubble-content {
2617
+ background: var(--bg-input);
2618
+ border: 1px solid var(--bd);
2619
+ border-radius: var(--r);
2620
+ color: var(--fg-0);
2621
+ font-family: var(--font-mono);
2622
+ font-size: 12px;
2623
+ padding: 8px 10px;
2624
+ min-height: 36px;
2625
+ line-height: 1.5;
2626
+ white-space: pre-wrap;
2627
+ word-break: break-word;
2628
+ box-sizing: border-box;
2629
+ }
2630
+
2631
+ .bubble-footer {
2632
+ display: flex;
2633
+ align-items: center;
2634
+ gap: 8px;
2635
+ font-family: var(--font-mono);
2636
+ font-size: 10px;
2637
+ color: var(--fg-3);
2638
+ }
2639
+
2640
+ .bubble-line {
2641
+ flex: 1;
2642
+ }
2643
+
2644
+ .bubble-actions {
2645
+ display: flex;
2646
+ gap: 4px;
2647
+ }
2648
+
2649
+ .bubble-btn {
2650
+ background: transparent;
2651
+ border: none;
2652
+ color: var(--fg-3);
2653
+ padding: 2px 6px;
2654
+ font-size: 10px;
2655
+ cursor: pointer;
2656
+ border-radius: var(--r);
2657
+ }
2658
+
2659
+ .bubble-btn:hover {
2660
+ background: var(--bg-hover);
2661
+ color: var(--fg-0);
2662
+ }
2663
+
2664
+ .bubble-btn.danger:hover {
2665
+ color: var(--c-err);
2666
+ }
2667
+
2668
+ .comment-card {
2669
+ display: inline-flex;
2670
+ align-items: center;
2671
+ gap: 8px;
2672
+ background: var(--bg-elev-1);
2673
+ border: 1px solid var(--bd);
2674
+ border-radius: 6px;
2675
+ padding: 6px 10px;
2676
+ font-family: var(--font-mono);
2677
+ font-size: 12px;
2678
+ color: var(--fg-2);
2679
+ cursor: default;
2680
+ min-width: 120px;
2681
+ }
2682
+
2683
+ .comment-card-icon {
2684
+ color: var(--c-brand);
2685
+ font-size: 12px;
2686
+ font-weight: bold;
2687
+ flex-shrink: 0;
2688
+ }
2689
+
2690
+ .comment-card-file {
2691
+ color: var(--c-brand);
2692
+ white-space: nowrap;
2693
+ }
2694
+
2695
+ .comment-card-content {
2696
+ color: var(--fg-1);
2697
+ font-size: 12px;
2698
+ line-height: 1.4;
2699
+ white-space: nowrap;
2700
+ overflow: hidden;
2701
+ text-overflow: ellipsis;
2702
+ }
2703
+
2704
+ .comment-card-remove {
2705
+ color: var(--fg-3);
2706
+ cursor: pointer;
2707
+ padding: 0 2px;
2708
+ font-size: 14px;
2709
+ line-height: 1;
2710
+ transition: color 0.15s ease;
2711
+ flex-shrink: 0;
2712
+ margin-left: auto;
2713
+ }
2714
+
2715
+ .comment-card-remove:hover {
2716
+ color: var(--c-err);
2717
+ }
2718
+
2719
+ /* ── File Tree Toggle ─────────────────────────────────────────────── */
2720
+ .file-tree-toggle {
2721
+ display: flex;
2722
+ gap: 0;
2723
+ padding: 6px 8px;
2724
+ border-bottom: 1px solid var(--bd);
2725
+ }
2726
+
2727
+ .toggle-btn {
2728
+ flex: 1;
2729
+ background: transparent;
2730
+ border: 1px solid var(--bd);
2731
+ color: var(--fg-3);
2732
+ padding: 4px 10px;
2733
+ font-family: var(--font-mono);
2734
+ font-size: 11px;
2735
+ cursor: pointer;
2736
+ text-align: center;
2737
+ transition: all 0.15s ease;
2738
+ }
2739
+
2740
+ .toggle-btn:first-child {
2741
+ border-radius: var(--r) 0 0 var(--r);
2742
+ border-right: none;
2743
+ }
2744
+
2745
+ .toggle-btn:last-child {
2746
+ border-radius: 0 var(--r) var(--r) 0;
2747
+ }
2748
+
2749
+ .toggle-btn:hover {
2750
+ background: var(--bg-hover);
2751
+ color: var(--fg-1);
2752
+ }
2753
+
2754
+ .toggle-btn.active {
2755
+ background: var(--bg-hover);
2756
+ color: var(--fg-0);
2757
+ border-color: var(--fg-4);
2758
+ }
2759
+
2760
+ /* ── Review Tab ───────────────────────────────────────────────────── */
2761
+ .review-tab {
2762
+ display: flex;
2763
+ align-items: center;
2764
+ gap: 4px;
2765
+ }
2766
+
2767
+ .review-tab .review-icon {
2768
+ font-size: 12px;
2769
+ color: var(--c-brand);
2770
+ }
2771
+
2772
+ .review-tab.active .review-icon {
2773
+ color: var(--c-brand);
2774
+ }
2775
+
2776
+ /* ── Modification Indicator ───────────────────────────────────────── */
2777
+ .tree-node .mod-indicator {
2778
+ width: 6px;
2779
+ height: 6px;
2780
+ border-radius: 50%;
2781
+ background: var(--c-ok);
2782
+ flex-shrink: 0;
2783
+ margin-left: 4px;
2784
+ }
2785
+
2786
+ /* ── Review Diff View ─────────────────────────────────────────────── */
2787
+ .review-diff-view {
2788
+ display: flex;
2789
+ flex-direction: column;
2790
+ height: 100%;
2791
+ overflow: hidden;
2792
+ }
2793
+
2794
+ .review-diff-header {
2795
+ display: flex;
2796
+ align-items: center;
2797
+ gap: 12px;
2798
+ padding: 8px 12px;
2799
+ border-bottom: 1px solid var(--bd);
2800
+ background: var(--bg-elev);
2801
+ flex-shrink: 0;
2802
+ }
2803
+
2804
+ .review-diff-title {
2805
+ font-family: var(--font-mono);
2806
+ font-size: 11px;
2807
+ color: var(--fg-2);
2808
+ text-transform: uppercase;
2809
+ letter-spacing: .08em;
2810
+ }
2811
+
2812
+ .review-diff-list {
2813
+ flex: 1;
2814
+ overflow-y: auto;
2815
+ padding: 8px;
2816
+ }
2817
+
2818
+ .review-file-item {
2819
+ margin-bottom: 8px;
2820
+ border: 1px solid var(--bd);
2821
+ border-radius: var(--r);
2822
+ overflow: hidden;
2823
+ }
2824
+
2825
+ .review-file-header {
2826
+ display: flex;
2827
+ align-items: center;
2828
+ gap: 8px;
2829
+ padding: 8px 10px;
2830
+ background: var(--bg-elev);
2831
+ cursor: pointer;
2832
+ user-select: none;
2833
+ font-family: var(--font-mono);
2834
+ font-size: 12px;
2835
+ color: var(--fg-1);
2836
+ }
2837
+
2838
+ .review-file-header:hover {
2839
+ background: var(--bg-hover);
2840
+ }
2841
+
2842
+ .review-file-header .chev {
2843
+ color: var(--fg-3);
2844
+ font-size: 10px;
2845
+ width: 12px;
2846
+ }
2847
+
2848
+ .review-file-header .filename {
2849
+ flex: 1;
2850
+ }
2851
+
2852
+ .review-file-header .stat {
2853
+ font-size: 11px;
2854
+ color: var(--fg-3);
2855
+ }
2856
+
2857
+ .review-file-header .stat .add {
2858
+ color: var(--c-ok);
2859
+ }
2860
+
2861
+ .review-file-header .stat .rem {
2862
+ color: var(--c-err);
2863
+ }
2864
+
2865
+ .review-file-body {
2866
+ padding: 8px;
2867
+ background: var(--bg-code);
2868
+ }
2869
+
2870
+ .review-empty {
2871
+ padding: 32px;
2872
+ text-align: center;
2873
+ color: var(--fg-3);
2874
+ font-family: var(--font-mono);
2875
+ font-size: 12px;
2876
+ }
2877
+
2878
+ /* ── Split Diff View ──────────────────────────────────────────── */
2879
+ .split-diff {
2880
+ font-family: var(--font-mono);
2881
+ font-size: 12px;
2882
+ line-height: 1.5;
2883
+ overflow-x: auto;
2884
+ }
2885
+ .diff-hunk-header {
2886
+ padding: 4px 12px;
2887
+ background: var(--bg-elev-2);
2888
+ color: var(--fg-3);
2889
+ font-size: 11px;
2890
+ display: flex;
2891
+ gap: 8px;
2892
+ border-bottom: 1px solid var(--bd);
2893
+ }
2894
+ .diff-hdr-left,
2895
+ .diff-hdr-right {
2896
+ flex: 1;
2897
+ }
2898
+ .diff-line {
2899
+ display: flex;
2900
+ padding: 0 12px;
2901
+ min-height: 20px;
2902
+ }
2903
+ .diff-line.diff-add { background: rgba(126,231,135,.08); }
2904
+ .diff-line.diff-del { background: rgba(255,139,129,.08); }
2905
+ .diff-ln-old,
2906
+ .diff-ln-new {
2907
+ display: inline-block;
2908
+ width: 36px;
2909
+ text-align: right;
2910
+ color: var(--fg-4);
2911
+ font-size: 11px;
2912
+ padding-right: 8px;
2913
+ user-select: none;
2914
+ flex-shrink: 0;
2915
+ }
2916
+ .diff-prefix {
2917
+ width: 14px;
2918
+ flex-shrink: 0;
2919
+ color: var(--fg-3);
2920
+ }
2921
+ .diff-content {
2922
+ flex: 1;
2923
+ white-space: pre;
2924
+ }
2925
+ .diff-add .diff-content { color: var(--c-ok); }
2926
+ .diff-del .diff-content { color: var(--c-err); }
2927
+
2928
+ /* Split rows */
2929
+ .diff-split-row {
2930
+ display: flex;
2931
+ }
2932
+ .diff-split-cell {
2933
+ flex: 1;
2934
+ min-width: 0;
2935
+ display: flex;
2936
+ padding: 0 8px;
2937
+ min-height: 20px;
2938
+ border-right: 1px solid var(--bd);
2939
+ overflow: hidden;
2940
+ }
2941
+ .diff-split-cell:last-child { border-right: none; }
2942
+ .diff-split-cell .diff-content {
2943
+ flex: 1;
2944
+ white-space: pre;
2945
+ overflow: hidden;
2946
+ text-overflow: ellipsis;
2947
+ }
2948
+
2949
+ /* Diff source toggle */
2950
+ .diff-source-toggle {
2951
+ display: flex;
2952
+ gap: 4px;
2953
+ align-items: center;
2954
+ }
2955
+ .diff-source-toggle .toggle-btn {
2956
+ font-family: var(--font-mono);
2957
+ font-size: 10.5px;
2958
+ padding: 2px 8px;
2959
+ border: 1px solid var(--bd);
2960
+ border-radius: var(--r);
2961
+ background: var(--bg-elev);
2962
+ color: var(--fg-2);
2963
+ cursor: pointer;
2964
+ }
2965
+ .diff-source-toggle .toggle-btn.active {
2966
+ background: var(--c-brand);
2967
+ color: var(--bg);
2968
+ border-color: var(--c-brand);
2969
+ }
2970
+ .diff-source-toggle .toggle-btn:hover:not(.active) {
2971
+ background: var(--bg-hover);
2972
+ color: var(--fg-0);
2973
+ }
2974
+
2975
+ /* Diff style toggle */
2976
+ .diff-style-toggle {
2977
+ display: flex;
2978
+ gap: 4px;
2979
+ align-items: center;
2980
+ }
2981
+ .diff-style-toggle .toggle-btn {
2982
+ font-family: var(--font-mono);
2983
+ font-size: 10.5px;
2984
+ padding: 2px 8px;
2985
+ border: 1px solid var(--bd);
2986
+ border-radius: var(--r);
2987
+ background: var(--bg-elev);
2988
+ color: var(--fg-2);
2989
+ cursor: pointer;
2990
+ }
2991
+ .diff-style-toggle .toggle-btn.active {
2992
+ background: var(--c-brand);
2993
+ color: var(--bg);
2994
+ border-color: var(--c-brand);
2995
+ }
2996
+ .diff-style-toggle .toggle-btn:hover:not(.active) {
2997
+ background: var(--bg-hover);
2998
+ color: var(--fg-0);
2999
+ }
3000
+
3001
+ .diff-empty {
3002
+ padding: 24px;
3003
+ text-align: center;
3004
+ color: var(--fg-3);
3005
+ font-family: var(--font-mono);
3006
+ font-size: 12px;
3007
+ }
3008
+
3009
+