@moritzwilksch/diffle 0.1.0 → 0.1.2

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 (83) hide show
  1. package/README.md +22 -2
  2. package/dist/client/assets/{angular-html-FsiSMH3Y.js → angular-html-CeRKnFwb.js} +1 -1
  3. package/dist/client/assets/{angular-ts-BSikFT16.js → angular-ts-BC1svU7k.js} +1 -1
  4. package/dist/client/assets/{apl-1IDS0jHU.js → apl-DLcHgTK9.js} +1 -1
  5. package/dist/client/assets/{astro-CvjIcDdF.js → astro-DUQI7urt.js} +1 -1
  6. package/dist/client/assets/{blade-iab1_tYE.js → blade-BhnU1iv3.js} +1 -1
  7. package/dist/client/assets/{c-CvC-n5Dt.js → c-CMu5jIVX.js} +1 -1
  8. package/dist/client/assets/{chapel-DWMV2k4B.js → chapel-CMnZt-JB.js} +1 -1
  9. package/dist/client/assets/{cobol-Dr8jUXVY.js → cobol-DO9od4KA.js} +1 -1
  10. package/dist/client/assets/{coffee-DogfyzLt.js → coffee-DsKgUUf6.js} +1 -1
  11. package/dist/client/assets/{cpp-DY0XLqOn.js → cpp-CN4unzDm.js} +1 -1
  12. package/dist/client/assets/{crystal-DTt4VJ7I.js → crystal-BhuvT6sA.js} +1 -1
  13. package/dist/client/assets/{css-CWsyBCI2.js → css-CfjdrINS.js} +1 -1
  14. package/dist/client/assets/{edge-Cbd0Hldf.js → edge-CL2Epm4e.js} +1 -1
  15. package/dist/client/assets/{elixir-Dlgm2eX2.js → elixir-Doe2U_Cg.js} +1 -1
  16. package/dist/client/assets/{elm-tQ1jykNc.js → elm-CoINdkUq.js} +1 -1
  17. package/dist/client/assets/{erb-lRQQr1Sc.js → erb-BCn0RM4V.js} +1 -1
  18. package/dist/client/assets/{git-rebase-mPGpy9fK.js → git-rebase-CNmD4c0v.js} +1 -1
  19. package/dist/client/assets/{glimmer-js-Cnwlg_IR.js → glimmer-js-CD3Ia2qL.js} +1 -1
  20. package/dist/client/assets/{glimmer-ts-lS7iLUfN.js → glimmer-ts-BxOVYEZy.js} +1 -1
  21. package/dist/client/assets/{glsl-Ddwau8g3.js → glsl-DK5AsFLJ.js} +1 -1
  22. package/dist/client/assets/{graphql-hYYZYECc.js → graphql-DyGyEESP.js} +1 -1
  23. package/dist/client/assets/{hack-tVOl2PyM.js → hack-BQ2MAuv0.js} +1 -1
  24. package/dist/client/assets/{haml-Cwtz-Dq4.js → haml-BOKZhUBe.js} +1 -1
  25. package/dist/client/assets/{handlebars-CyvaDab9.js → handlebars-BL4cycpI.js} +1 -1
  26. package/dist/client/assets/{html-BUo5i1NC.js → html-DG16Bgvg.js} +1 -1
  27. package/dist/client/assets/{html-derivative-DtP04Ng0.js → html-derivative-CHcF4Lpp.js} +1 -1
  28. package/dist/client/assets/{http-D1AHtlGd.js → http-usrmfqDt.js} +1 -1
  29. package/dist/client/assets/{hurl-C15vSi1V.js → hurl-C4JjMlIM.js} +1 -1
  30. package/dist/client/assets/index-BkdPjT98.js +2978 -0
  31. package/dist/client/assets/index-CBL0EMlj.css +2 -0
  32. package/dist/client/assets/{java-DPFrtqcs.js → java-ibBouxxn.js} +1 -1
  33. package/dist/client/assets/{javascript-D33iozV3.js → javascript-BZRzf92u.js} +1 -1
  34. package/dist/client/assets/{jinja-DRYgl0dQ.js → jinja-9QDSl6my.js} +1 -1
  35. package/dist/client/assets/{jison-DXyfqsqv.js → jison-BHG-979q.js} +1 -1
  36. package/dist/client/assets/{json-BH2tJSV_.js → json-DwElmnQB.js} +1 -1
  37. package/dist/client/assets/{jsx-BNYiHgWd.js → jsx-rBgzwRBS.js} +1 -1
  38. package/dist/client/assets/{julia-DWndCVqe.js → julia-CgiS75su.js} +1 -1
  39. package/dist/client/assets/{just-CaFvzxl4.js → just-De3y7xb2.js} +1 -1
  40. package/dist/client/assets/{latex-DqDoao-r.js → latex-Bk1wP9Tv.js} +1 -1
  41. package/dist/client/assets/{liquid-DYBj14Ih.js → liquid-CLTik2y8.js} +1 -1
  42. package/dist/client/assets/{lua-DISCLF_p.js → lua-B-AqNzj_.js} +1 -1
  43. package/dist/client/assets/{marko-BaO-VaHf.js → marko-DgFRqfls.js} +1 -1
  44. package/dist/client/assets/{mdc-5Q3_gdW7.js → mdc-BnZoJsPK.js} +1 -1
  45. package/dist/client/assets/{nginx-CQ4BjNxJ.js → nginx-DcKwYiIR.js} +1 -1
  46. package/dist/client/assets/{nim-OJ1IfTX5.js → nim-B7gmjUTZ.js} +1 -1
  47. package/dist/client/assets/{org-DE2pvWZc.js → org-4KQ2g826.js} +1 -1
  48. package/dist/client/assets/{perl-8QKFSfpf.js → perl-CXjWWsgb.js} +1 -1
  49. package/dist/client/assets/{php-DHN01N8j.js → php-Dx7gazwr.js} +1 -1
  50. package/dist/client/assets/{pug-DCS1tN7i.js → pug-DKbUPHHY.js} +1 -1
  51. package/dist/client/assets/{qml-6exH9-g5.js → qml-BI-uhfIo.js} +1 -1
  52. package/dist/client/assets/{r-DcfcrTMj.js → r-oD9rwg3Q.js} +1 -1
  53. package/dist/client/assets/{razor-CIrVisVV.js → razor-DqrY60Ia.js} +1 -1
  54. package/dist/client/assets/{regexp-OAMUjW-k.js → regexp-_wPM2tSe.js} +1 -1
  55. package/dist/client/assets/{rst-Dt5AjMM2.js → rst-CCjc99TE.js} +1 -1
  56. package/dist/client/assets/{ruby-E8arA1q2.js → ruby-D4Ot4GwF.js} +1 -1
  57. package/dist/client/assets/{sas-_hYONkAv.js → sas-CohVHUYB.js} +1 -1
  58. package/dist/client/assets/{scss-CuI5mog1.js → scss-BUvWF1R-.js} +1 -1
  59. package/dist/client/assets/{shellscript-brVl5slU.js → shellscript-BYChvHJY.js} +1 -1
  60. package/dist/client/assets/{shellsession-kD5Km7Fl.js → shellsession-CwfOGr4q.js} +1 -1
  61. package/dist/client/assets/{soy-AZoL22qE.js → soy-DDZl6fCd.js} +1 -1
  62. package/dist/client/assets/{sql-P6NiMgNx.js → sql-Cg1bVnSa.js} +1 -1
  63. package/dist/client/assets/{stata-CaLkIj3d.js → stata-DQ-G7ow_.js} +1 -1
  64. package/dist/client/assets/{surrealql-DVyAIU7z.js → surrealql-PbaZyPEf.js} +1 -1
  65. package/dist/client/assets/{svelte-CSnNgDkA.js → svelte-DWLvmChC.js} +1 -1
  66. package/dist/client/assets/{templ-Dqr_Un-e.js → templ-Dh9gCl-U.js} +1 -1
  67. package/dist/client/assets/{tex-CvSrixZF.js → tex-Bkx3emV1.js} +1 -1
  68. package/dist/client/assets/{ts-tags-DT7kX2Qk.js → ts-tags-qiqMwr4f.js} +1 -1
  69. package/dist/client/assets/{tsx-DtULR4Hc.js → tsx-82FujIkY.js} +1 -1
  70. package/dist/client/assets/{twig-D_yBfqrR.js → twig-DlmOvDnP.js} +1 -1
  71. package/dist/client/assets/{typescript-D8R1VR1Y.js → typescript-1Zmg8FSm.js} +1 -1
  72. package/dist/client/assets/{typst-C9bHxBJa.js → typst-DgvT7Zfo.js} +1 -1
  73. package/dist/client/assets/{vue-Bv6cNqLz.js → vue-d-TLnfkw.js} +1 -1
  74. package/dist/client/assets/{vue-html-CJupgPdM.js → vue-html-BX2spiYV.js} +1 -1
  75. package/dist/client/assets/{vue-vine-6vI54xHX.js → vue-vine-Brzvzd9Q.js} +1 -1
  76. package/dist/client/assets/{xml-CYK4-lRM.js → xml-B861sfkh.js} +1 -1
  77. package/dist/client/assets/{xsl-BOaafYfD.js → xsl-BIl5e-a1.js} +1 -1
  78. package/dist/client/assets/{yaml-CvfdNt6k.js → yaml-CinKI_rg.js} +1 -1
  79. package/dist/client/index.html +2 -2
  80. package/dist/server/main.js +7909 -602
  81. package/package.json +7 -1
  82. package/dist/client/assets/index-9z4xRD3M.css +0 -1
  83. package/dist/client/assets/index-Dtx7INNk.js +0 -2925
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moritzwilksch/diffle",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Local git diff reviewer in the browser with line comments exported as agent prompts",
5
5
  "keywords": [
6
6
  "agent",
@@ -48,6 +48,7 @@
48
48
  "@pierre/trees": "1.0.0-beta.6",
49
49
  "chokidar": "^5.0.0",
50
50
  "commander": "^15.0.0",
51
+ "commander-static-completion": "^0.0.1",
51
52
  "hono": "^4.13.5",
52
53
  "lucide-react": "^1.39.0",
53
54
  "picomatch": "^4.0.7",
@@ -55,11 +56,14 @@
55
56
  "react-dom": "^19.2.8",
56
57
  "react-markdown": "^10.1.0",
57
58
  "remark-gfm": "^4.0.1",
59
+ "tailwind-merge": "^3.6.0",
58
60
  "web-tree-sitter": "^0.25.10",
59
61
  "ws": "^8.21.3",
62
+ "zod": "^4.6.2",
60
63
  "zustand": "^5.0.15"
61
64
  },
62
65
  "devDependencies": {
66
+ "@tailwindcss/vite": "^4.3.3",
63
67
  "@tree-sitter-grammars/tree-sitter-lua": "^0.4.1",
64
68
  "@types/node": "^22",
65
69
  "@types/picomatch": "^4.0.3",
@@ -67,9 +71,11 @@
67
71
  "@types/react-dom": "^19",
68
72
  "@types/ws": "^8",
69
73
  "@vitejs/plugin-react": "^5",
74
+ "eslint-plugin-better-tailwindcss": "^4.7.0",
70
75
  "jsdom": "^30.0.1",
71
76
  "oxfmt": "^0.67.0",
72
77
  "oxlint": "^1.82.0",
78
+ "tailwindcss": "^4.3.3",
73
79
  "tree-sitter-wasms": "^0.1.13",
74
80
  "tsdown": "^0.22.14",
75
81
  "tsx": "^4",
@@ -1 +0,0 @@
1
- :root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:#fff;--bg-2:#f0f3f6;--bg-3:#e7ecf0;--fg:#0e1116;--fg-2:#66707b;--border:#acb6c0;--accent:#0349b4;--accent-fg:#fff;--danger:#a0111f;--warn:#744500;--add:#055d20;--del:#a0111f;--kind-type:#023b95;--kind-callable:#622cbc;--kind-value:#702c00;--search-match:#f0ce5380;--search-current:#e09b13;--search-current-fg:#0e1116;--bg-card:#fff;--shadow-card:0 1px 2px #0e111614, 0 .1875rem .625rem #0e11161a;--mono:ui-monospace, "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;--sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}:root:not([data-theme=light]){--bg:#0a0c10;--bg-2:#0a0c10;--bg-3:#272b33;--fg:#f0f3f6;--fg-2:#bdc4cc;--border:#2f353d;--accent:#71b7ff;--accent-fg:#0a0c10;--danger:#ff6a69;--warn:#f0ce53;--add:#26cd4d;--del:#ff6a69;--kind-type:#91cbff;--kind-callable:#dbb7ff;--kind-value:#ffb757;--search-match:#fbd66940;--search-current:#e09b13;--search-current-fg:#0a0c10;--bg-card:#14181f;--shadow-card:0 1px 2px #00000080, 0 .1875rem .625rem #0009}}:root[data-theme=dark]{--bg:#0a0c10;--bg-2:#0a0c10;--bg-3:#272b33;--fg:#f0f3f6;--fg-2:#bdc4cc;--border:#2f353d;--accent:#71b7ff;--accent-fg:#0a0c10;--danger:#ff6a69;--warn:#f0ce53;--add:#26cd4d;--del:#ff6a69;--kind-type:#91cbff;--kind-callable:#dbb7ff;--kind-value:#ffb757;--search-match:#fbd66940;--search-current:#e09b13;--search-current-fg:#0a0c10;--bg-card:#14181f;--shadow-card:0 1px 2px #00000080, 0 .1875rem .625rem #0009}:root[data-theme=dark] file-tree-container{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root[data-theme=light] file-tree-container{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) file-tree-container{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html{font-size:90%}html,body,#root{height:100%;margin:0}body{font:.8125rem/1.4 var(--sans);color:var(--fg);background:var(--bg)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:var(--bg-2);border:1px solid var(--border);border-radius:.375rem;align-items:center;gap:.3125rem;padding:.1875rem .5625rem;line-height:1.2;display:inline-flex}button svg{flex:none}button.icon{padding:.1875rem .3125rem}button:hover{background:var(--bg-3)}button.primary{background:var(--accent);color:var(--accent-fg);border-color:#0000}button.danger{color:var(--danger)}button.ghost{background:0 0;border-color:#0000}button.ghost:hover{background:var(--bg-3)}button.ghost.confirm,button.ghost.confirm:hover{background:var(--accent);color:var(--accent-fg);border-color:#0000}button.ghost.danger.confirm,button.ghost.danger.confirm:hover{background:var(--danger);color:#fff}button.ghost.posted,button.ghost.posted:hover{background:var(--add);color:var(--bg);border-color:#0000}button:disabled{opacity:.5;cursor:default}kbd{font:.6875rem var(--mono);border:1px solid var(--border);background:var(--bg-2);border-radius:.25rem;padding:0 .25rem}.app{grid-template-rows:2.5rem 1fr;grid-template-columns:17.5rem 4px minmax(0,1fr) 4px 21.25rem;height:100%;display:grid}.resizer{cursor:col-resize;background:var(--border);opacity:.6;transition:opacity .12s,background .12s}.resizer:hover,.resizer.resizing{background:var(--accent);opacity:1}body.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}button.off{opacity:.45}.header{border-bottom:1px solid var(--border);background:var(--bg-2);grid-column:1/-1;align-items:center;gap:.625rem;padding:0 .75rem;display:flex}.header .brand{letter-spacing:.02em;align-items:center;gap:.375rem;font-weight:700;display:inline-flex}.header .root{color:var(--fg-2);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;overflow:hidden}.header .spacer{flex:1}.header .stat{color:var(--fg-2)}.header .lsp{color:var(--fg-2);white-space:nowrap;align-items:center;gap:.3125rem;font-size:.75rem;display:inline-flex}.header .lsp.unavailable{color:var(--warn)}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.tree{--trees-font-family:var(--sans);--trees-font-family-override:var(--sans);--trees-font-size-override:.8125rem;--trees-padding-inline-override:1rem;--trees-icon-width-override:1rem;--trees-git-lane-width-override:.75rem;--trees-bg-override:var(--bg-2);--trees-border-color-override:var(--border);--trees-fg-override:var(--fg);--trees-fg-muted-override:var(--fg-2);--trees-accent-override:var(--accent);--trees-git-added-color-override:var(--add);--trees-git-untracked-color-override:var(--add);--trees-git-modified-color-override:var(--accent);--trees-git-renamed-color-override:var(--kind-type);--trees-git-deleted-color-override:var(--del);--trees-git-ignored-color-override:var(--fg-2);background:var(--bg-2);flex-direction:column;min-height:0;display:flex}.tree .tree-head{border-bottom:1px solid var(--border);color:var(--fg-2);align-items:center;gap:.5rem;padding:.375rem .625rem;display:flex}.tree .tree-head button{white-space:nowrap;flex:none}.tree .tree-head button.confirm{background:var(--danger);color:#fff;border-color:#0000}.tree .tree-body{flex:1;min-height:0}.toggle{border:1px solid var(--border);border-radius:.375rem;display:flex;overflow:hidden}.toggle button{background:0 0;border:0;border-radius:0;padding:2px .5rem}.toggle button.on{background:var(--bg-3);font-weight:600}.review{outline:none;flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.review .codeview{background:var(--bg-2);outline:none;flex:1;min-height:0;overflow:auto}.review .codeview diffs-container{outline:1px solid var(--border);outline-offset:-1px;display:block}.review .empty{color:var(--fg-2);text-align:center;padding:2.5rem}.review .banner{background:var(--bg-3);border-bottom:1px solid var(--border);color:var(--fg-2);padding:.5rem .75rem}.review .banner.error{color:var(--danger)}.review .fileview-bar{background:var(--bg-3);border-bottom:1px solid var(--border);align-items:center;gap:.75rem;padding:.375rem .75rem;font-size:.75rem;display:flex}.review .fileview-bar .path{min-width:0;font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.file-meta{font-family:var(--mono);align-items:center;gap:.625rem;font-size:.75rem;display:inline-flex}.file-meta .add{color:var(--add)}.file-meta .del{color:var(--del)}.file-meta label{cursor:pointer;font-family:var(--sans);align-items:center;gap:.25rem;display:inline-flex}.file-meta .badge{background:var(--bg-3);border-radius:.625rem;align-items:center;gap:.1875rem;padding:0 .4375rem;display:inline-flex}.annotation{font-family:var(--sans);margin:.25rem .5rem;font-size:.8125rem}.comment-card{border:1px solid var(--border);background:var(--bg-card);box-shadow:var(--shadow-card);border-radius:.375rem;padding:0;overflow:hidden}.comment-card.stale{border-style:dashed}.comment-card.focused{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent), var(--shadow-card)}.comment-card .meta{color:var(--fg-2);background:var(--bg-3);border-bottom:1px solid var(--border);align-items:center;gap:.5rem;padding:.25rem .375rem .25rem .625rem;font-size:.75rem;display:flex}.comment-card .meta>svg{color:var(--accent);flex:none}.comment-card .meta .loc{font-family:var(--mono);color:var(--fg);font-weight:600}.comment-card .meta .spacer{flex:1}.comment-card .meta .stale-tag{color:var(--warn);align-items:center;gap:.1875rem;display:inline-flex}.comment-card .body{word-break:break-word}.composer{border:1px solid var(--accent);background:var(--bg-2);border-radius:.375rem;padding:.5rem}.composer textarea{resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:4.375rem;font:.75rem/1.5 var(--mono);border-radius:.25rem;padding:.375rem}.composer .row{justify-content:flex-end;align-items:center;gap:.375rem;margin-top:.375rem;display:flex}.composer .hint{color:var(--fg-2);margin-right:auto;font-size:.75rem}.panel{background:var(--bg-2);flex-direction:column;min-height:0;display:flex}.panel .panel-head{border-bottom:1px solid var(--border);align-items:center;gap:.375rem;min-height:2.5rem;padding:.375rem .625rem;display:flex}.panel .panel-head button{white-space:nowrap;flex:none;padding:.1875rem .5rem}.panel .panel-head .title{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:.375rem;min-width:0;margin-right:auto;font-weight:600;display:inline-flex;overflow:hidden}.panel .panel-head .count{background:var(--bg-3);color:var(--fg-2);border-radius:.625rem;padding:0 .4375rem;font-weight:500}.panel .list{flex-direction:column;flex:1;gap:.875rem;padding:.625rem;display:flex;overflow:auto}.panel .group+.group{border-top:1px solid var(--border);padding-top:.75rem}.panel .group h4{font:.75rem/1.4 var(--mono);color:var(--fg-2);margin:0 0 .375rem}.filepath{font-family:var(--mono);overflow-wrap:anywhere;word-break:normal}.filepath .dir{color:var(--fg-2)}.filepath .base{color:var(--fg);font-weight:600}.filepath.nowrap{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.panel .item{text-align:left;border:1px solid var(--border);background:var(--bg-card);width:100%;box-shadow:var(--shadow-card);cursor:pointer;font:.8125rem/1.4 var(--sans);color:var(--fg);border-radius:.375rem;margin-bottom:.5rem;padding:0;transition:border-color .12s;display:block;overflow:hidden}.panel .item:hover{border-color:var(--accent)}.panel .item.is-stale{border-style:dashed}.panel .item .loc{color:var(--fg-2);background:var(--bg-3);border-bottom:1px solid var(--border);align-items:center;gap:.5rem;padding:.25rem .375rem .25rem .625rem;font-size:.75rem;display:flex}.panel .item .loc>svg{color:var(--accent);flex:none}.panel .item .loc .lines{font-family:var(--mono);color:var(--fg);font-weight:600}.panel .item:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.panel .item .loc .delete{opacity:0;margin-left:auto;padding:1px .1875rem;transition:opacity .12s}.panel .item:hover .loc .delete,.panel .item:focus-within .loc .delete,.panel .item .loc .delete.confirm{opacity:1}.panel .item .loc .stale{color:var(--warn);font:.6875rem var(--sans);align-items:center;gap:.1875rem;display:inline-flex}.panel .item .content{padding:.375rem .625rem .5rem}.panel .item .quote{font:.75rem/1.4 var(--mono);color:var(--fg-2);white-space:nowrap;text-overflow:ellipsis;margin:0 0 .375rem;overflow:hidden}.panel .item .body{word-break:break-word;font:.8125rem/1.4 var(--sans)}.panel .empty{color:var(--fg-2);text-align:center;padding:1.5rem .75rem}.panel .empty p{margin:0 0 .375rem}.copy-btn{transition:background .16s,color .16s,border-color .16s;position:relative}.copy-btn .copy-icon{width:.875rem;height:.875rem;display:inline-block;position:relative}.copy-btn .copy-icon>span{justify-content:center;align-items:center;transition:opacity .16s,transform .2s cubic-bezier(.2,.8,.2,1);display:inline-flex;position:absolute;inset:0}.copy-btn .copy-icon .ok{opacity:0;transform:scale(.4)rotate(-30deg)}.copy-btn.done .copy-icon .i{opacity:0;transform:scale(.4)}.copy-btn.done .copy-icon .ok{opacity:1;transform:scale(1)rotate(0)}.copy-btn.done{background:var(--add);color:#fff;border-color:#0000}.copy-btn.done.primary{background:var(--add)}.menu-wrap{position:relative}.menu{background:var(--bg);border:1px solid var(--border);z-index:20;border-radius:.625rem;min-width:23.75rem;padding:.375rem;position:absolute;top:calc(100% + .375rem);left:0;box-shadow:0 .625rem 1.875rem #0000002e}.menu-title{color:var(--fg-2);padding:.25rem .625rem .375rem;font-size:.6875rem;font-weight:600}.menu .entry{text-align:left;width:100%;color:var(--fg);font:.8125rem/1.3 var(--sans);background:0 0;border:0;border-radius:.4375rem;grid-template-columns:1.125rem 1fr auto 1.5rem;align-items:center;gap:.625rem;min-height:2.125rem;padding:.4375rem .625rem;display:grid}.menu .entry>svg{color:var(--fg-2)}.menu .entry:hover:not(.static){background:var(--bg-3)}.menu .entry.active .label{font-weight:600}.menu .entry.active>svg{color:var(--accent)}.menu .entry .label{white-space:nowrap}.menu .entry .desc{color:var(--fg-2);font:.75rem var(--mono);justify-self:end;align-items:center;display:inline-flex}.menu .entry kbd{color:var(--fg-2);justify-self:end}.mode-menu{width:max-content;min-width:15rem;max-width:calc(100vw - 2rem);display:flex}.mode-entries{flex-shrink:0;width:15rem}.mode-config{border-left:1px solid var(--border);flex-direction:column;gap:.75rem;width:19rem;min-width:0;margin-left:.375rem;padding:0 .75rem .5rem;display:flex}.mode-config .ref-select{flex-direction:column;gap:.375rem;min-width:0;display:flex}.mode-config .lbl,.mode-hint{color:var(--fg-2);font-size:.75rem}.mode-hint{white-space:normal;margin:0;padding:.5rem .625rem}.mode-error{color:var(--del);overflow-wrap:anywhere;margin:0;font-size:.75rem}.mode-config .mode-hint{padding:0}.mode-config select,.mode-config input{background:var(--bg-2);border:1px solid var(--border);width:100%;min-width:0;font:.75rem var(--mono);color:var(--fg);border-radius:.375rem;padding:.375rem .5rem}.ref-range{font:.8125rem/1.5 var(--mono);align-items:center;gap:.375rem;padding-top:.375rem;display:flex}.ref-input{flex:1;min-width:0;position:relative}.ref-actions{align-items:center;gap:.5rem;display:flex}.ref-actions .swap-refs{color:var(--fg-2);background:0 0;border:0;padding:.125rem}.ref-actions .swap-refs:hover{background:var(--bg-3);color:var(--fg)}.mode-config .ref-input input{font:inherit;border-color:#0000;padding:.25rem .375rem}.mode-config .ref-input input:focus{background:var(--bg-3);outline:none}.ref-comparison{align-self:flex-start}.ref-comparison:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ref-suggestions{border:1px solid var(--border);background:var(--bg);z-index:1;border-radius:.375rem;width:17rem;max-width:calc(100vw - 2rem);max-height:30rem;padding:.25rem;position:absolute;top:calc(100% + .375rem);left:0;overflow:auto;box-shadow:0 .375rem 1rem #0000002e}.ref-input:last-child .ref-suggestions{left:auto;right:0}.ref-section-divider{border-top:1px solid var(--border);margin:.25rem .5rem}.ref-suggestion{cursor:pointer;border-radius:.25rem;flex-direction:column;gap:.125rem;padding:.375rem .5rem;display:flex}.ref-suggestion:hover,.ref-suggestion[aria-selected=true]{background:var(--bg-3)}.ref-name,.ref-detail{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ref-detail,.ref-empty{color:var(--fg-2);font:.6875rem/1.4 var(--sans)}.ref-empty{padding:.5rem}.commit-config{flex-direction:column;gap:.5rem;padding-top:.375rem;display:flex}.commit-range{font:.8125rem/1.5 var(--mono);align-items:baseline;display:flex}.commit-preview-area{min-height:5.5rem}.commit-previews{gap:.75rem;margin-top:.25rem;display:grid}.commit-preview-ref{color:var(--fg-2);font:.6875rem/1.5 var(--mono);justify-content:space-between;gap:.5rem;display:flex}.commit-preview p{font:.75rem/1.5 var(--sans);white-space:pre-wrap;overflow-wrap:anywhere;max-height:6rem;margin:.125rem 0 0;overflow:auto}.commit-count{background:var(--bg-2);border-radius:.375rem;align-items:stretch;margin:0 .125rem;display:inline-flex;overflow:hidden}.commit-count:focus-within{background:var(--bg-3)}.mode-config .commit-count input{box-sizing:content-box;min-width:1ch;max-width:8ch;color:var(--fg);font:inherit;text-align:center;background:0 0;border-color:#0000;flex:0 auto;margin:0;padding:.125rem .375rem}.mode-config .commit-count input:focus{outline:none}.commit-count-buttons{grid-template-rows:1fr 1fr;display:grid}.commit-count-buttons button{color:var(--fg-2);background:0 0;border:0;border-radius:0;padding:0 .1875rem;line-height:1}.commit-count-buttons button:hover{background:var(--bg-2);color:var(--fg)}.mode-config>button{align-self:flex-end;margin-top:auto}@media (max-width:640px){.mode-menu{max-width:calc(100vw - 1rem);position:fixed;top:3rem;left:.5rem}.mode-entries{width:11rem}}.dialog-backdrop{z-index:50;background:#00000059;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog{background:var(--bg);border:1px solid var(--border);border-radius:.625rem;width:35rem;max-width:95vw;padding:1rem;box-shadow:0 1rem 3rem #0000004d}.dialog h3{margin:0 0 .5rem}.dialog p{color:var(--fg-2);margin:0 0 .5rem}.dialog textarea{width:100%;min-height:10rem;font-family:var(--mono);background:var(--bg-2);border:1px solid var(--border);border-radius:.375rem;padding:.5rem;font-size:.75rem}.dialog .row{justify-content:flex-end;gap:.375rem;margin-top:.625rem;display:flex}.dialog code{font-family:var(--mono);background:var(--bg-3);border-radius:.25rem;padding:0 .25rem}.searchbar{border-bottom:1px solid var(--border);background:var(--bg-2);align-items:center;gap:.5rem;padding:.375rem .625rem;display:flex}.searchbar input{background:var(--bg);border:1px solid var(--border);font-family:var(--mono);border-radius:.375rem;flex:1;padding:.25rem .5rem;font-size:.75rem}.searchbar .label{font:.75rem var(--mono);color:var(--fg-2);flex:1}.searchbar .label code{color:var(--fg)}.searchbar .opt{font:.6875rem var(--mono);color:var(--fg-2);border:1px solid #0000;border-radius:.25rem;padding:2px .375rem}.searchbar .opt.active{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent)}.symbols{z-index:30;background:var(--bg-2);border-bottom:1px solid var(--border);flex-direction:column;max-height:60%;display:flex;position:absolute;top:0;left:0;right:0;box-shadow:0 .625rem 1.875rem #0000002e}.symbols .searchbar{border-bottom:1px solid var(--border)}.symbols ul{margin:0;padding:.25rem;list-style:none;overflow:auto}.symbols li{font:.75rem var(--mono);cursor:pointer;border-radius:.375rem;grid-template-columns:4rem 1fr auto;align-items:baseline;gap:.625rem;padding:.25rem .5rem;display:grid}.symbols li.on{background:var(--bg-3)}.symbols li .kind{color:var(--fg-2);text-transform:lowercase;font-size:.6875rem}.symbols li .kind.type{color:var(--kind-type)}.symbols li .kind.callable{color:var(--kind-callable)}.symbols li .kind.value{color:var(--kind-value)}.symbols li .container{color:var(--fg-2)}.symbols li .where{color:var(--fg-2);white-space:nowrap;font-size:.6875rem}.symbols .empty{padding:.75rem}.symbol-menu{z-index:40;background:var(--bg);border:1px solid var(--border);border-radius:.5rem;gap:2px;padding:.1875rem;display:flex;position:fixed;box-shadow:0 .5rem 1.5rem #0000002e}.symbol-menu .name{border-left:1px solid var(--border);font:.75rem var(--mono);color:var(--fg);text-overflow:ellipsis;white-space:nowrap;align-self:center;max-width:13.75rem;margin-left:.25rem;padding:.1875rem .5rem;overflow:hidden}.symbol-menu button{color:var(--fg);font:.75rem var(--sans);cursor:pointer;background:0 0;border:0;border-radius:.375rem;align-items:center;gap:.375rem;padding:.25rem .5rem;display:flex}.symbol-menu button:hover{background:var(--bg-3)}.symbol-menu button kbd{margin-left:2px}.hover-tip{z-index:40;background:var(--bg);border:1px solid var(--border);border-radius:.5rem;max-width:min(40rem,90vw);max-height:45vh;padding:.5rem .75rem;font-size:.75rem;position:fixed;overflow:auto;box-shadow:0 .5rem 1.5rem #0000002e}.hover-tip .markdown pre{background:0 0;border:0;padding:0}.hover-tip .markdown pre+hr{margin:.5rem 0}.hover-tip .markdown p:last-child{margin-bottom:0}.references{flex-direction:column;width:min(60rem,92vw);max-height:80vh;padding:0;display:flex;overflow:hidden}.references-head{border-bottom:1px solid var(--border);align-items:baseline;gap:.875rem;padding:.875rem 1.125rem .625rem;display:flex}.references-head h3{margin:0;font-size:.9375rem}.references-head h3 code{color:var(--fg);background:var(--bg-3);border-radius:.3125rem;padding:1px .375rem}.references-head .hint{color:var(--fg-2);white-space:nowrap;margin-left:auto;font-size:.6875rem}.references-list{padding:.5rem .625rem .75rem;overflow:auto}.references section+section{margin-top:.625rem}.ref-file{z-index:1;background:var(--bg-3);border:1px solid var(--border);font:.75rem var(--mono);border-radius:.5rem;align-items:center;gap:.5rem;margin-bottom:2px;padding:.375rem .625rem;display:flex;position:sticky;top:0}.ref-file svg{color:var(--fg-2);flex:none}.ref-file .filepath{flex:1}.ref-file .count{background:var(--bg);border:1px solid var(--border);color:var(--fg-2);border-radius:.625rem;margin-left:auto;padding:0 .4375rem;font-size:.6875rem}.references .ref{font:.75rem/1.6 var(--mono);cursor:pointer;border-radius:.375rem;grid-template-columns:3.25rem 1fr;gap:.75rem;padding:.1875rem .625rem;display:grid}.references .ref:hover{background:var(--bg-2)}.references .ref.on{background:var(--bg-3)}.references .ref .line{color:var(--fg-2);text-align:right}.references .ref .code{white-space:pre;text-overflow:ellipsis;overflow:hidden}.searchbar .status{color:var(--fg-2);font:.75rem var(--mono);text-align:right;min-width:4.375rem}.flash{overflow-wrap:anywhere;background:var(--fg);max-width:min(48rem,90vw);color:var(--bg);z-index:60;border-radius:.5rem;padding:.75rem 1.25rem;font-size:1rem;line-height:1.4;animation:.16s flash-in;position:fixed;bottom:1.5rem;left:50%;transform:translate(-50%);box-shadow:0 .5rem 1.5rem #00000059}@keyframes flash-in{0%{opacity:0;transform:translate(-50%,.375rem)}to{opacity:1;transform:translate(-50%)}}.dialog.help{flex-direction:column;width:max-content;max-width:96vw;max-height:calc(100vh - 2rem);padding:0;display:flex;overflow:hidden}.help-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:.75rem 1.125rem .625rem;display:flex}.help-head h3{margin:0;font-size:.9375rem}.help-body{white-space:nowrap;grid-template-columns:auto auto;align-items:start;column-gap:2.5rem;padding:.625rem 1.125rem .875rem;font-size:.75rem;display:grid;overflow:auto}.help-col{grid-template-columns:max-content 1fr;align-content:start;column-gap:.75rem;display:grid}.help-col section{grid-template-columns:subgrid;grid-column:1/-1;margin-bottom:.625rem;display:grid}.help-col section:last-child{margin-bottom:0}.help-body h4{color:var(--fg-2);grid-column:1/-1;margin:0 0 .125rem;font-size:.75rem;font-weight:600}.help-row{grid-template-columns:subgrid;grid-column:1/-1;align-items:baseline;line-height:1.7;display:grid}.help-keys{gap:.375rem;display:inline-flex}.menu .entry kbd,.menu .inline kbd{margin-left:.25rem}.comment-card.resolved{opacity:.7}.comment-card .meta .resolved-tag{color:var(--add);align-items:center;gap:.1875rem;display:inline-flex}.comment-card .message{padding:.5rem .625rem}.comment-card .message+.message{border-top:1px solid var(--border)}.comment-card .message .who{color:var(--fg-2);align-items:center;gap:.375rem;margin-bottom:2px;font-size:.6875rem;display:flex}.comment-card .message .who .spacer{flex:1}.markdown .suggestion{font:.75rem/1.5 var(--mono);background:var(--bg);border:1px solid var(--add);white-space:pre;border-radius:.375rem;margin:.375rem 0 0;padding:1.125rem .5rem .375rem;position:relative;overflow-x:auto}.markdown .suggestion .tag{font:.625rem var(--sans);color:var(--add);padding:2px .375rem;position:absolute;top:0;left:0}.markdown .suggestion.highlighted{white-space:normal;--diffs-font-family:var(--mono);--diffs-font-size:.75rem;--diffs-line-height:1.125rem;padding:1.125rem 0 0;overflow:hidden}.composer.reply{margin:0 .625rem .625rem}.panel .panel-filter{border-bottom:1px solid var(--border);color:var(--fg-2);cursor:pointer;align-items:center;gap:.375rem;padding:.25rem .625rem;font-size:.75rem;display:flex}.panel .stale-row{cursor:default;color:var(--warn)}.panel .stale-row button{align-items:center;gap:.25rem;margin-left:auto;padding:1px .375rem;font-size:.75rem;display:inline-flex}.panel .item.is-resolved{opacity:.65}.panel .item .loc .replies{color:var(--fg-2)}.panel .item .loc .resolved{color:var(--add);font:.6875rem var(--sans);align-items:center;gap:.1875rem;display:inline-flex}.file-meta .badge.generated,.file-meta .badge.submodule{color:var(--fg-2);font-family:var(--sans)}.file-meta .badge.restale{color:var(--warn);font-family:var(--sans)}.markdown{line-height:1.45}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p,.markdown ul,.markdown ol,.markdown blockquote,.markdown pre,.markdown table{margin:0 0 .375rem}.markdown ul,.markdown ol{padding-left:1.375rem}.markdown li>p{margin:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{margin:.5rem 0 .25rem;font-weight:600;line-height:1.3}.markdown h1{font-size:.9375rem}.markdown h2{font-size:.875rem}.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-size:.8125rem}.markdown code{font:.75rem var(--mono);background:var(--bg-3);border-radius:.25rem;padding:1px .25rem}.markdown pre{background:var(--bg);border:1px solid var(--border);border-radius:.375rem;padding:.375rem .5rem;overflow-x:auto}.markdown pre code{white-space:pre;background:0 0;padding:0;line-height:1.5;display:block}.markdown blockquote{border-left:.1875rem solid var(--border);color:var(--fg-2);padding:0 0 0 .625rem}.markdown a{color:var(--accent)}.markdown hr{border:0;border-top:1px solid var(--border);margin:.5rem 0}.markdown table{border-collapse:collapse;max-width:100%;font-size:.75rem;display:block;overflow-x:auto}.markdown th,.markdown td{border:1px solid var(--border);text-align:left;padding:2px .375rem}.markdown th{background:var(--bg-3);font-weight:600}.markdown input[type=checkbox]{vertical-align:middle;margin:0 .25rem 0 0}input[type=checkbox]:not(.markdown *){appearance:none;border:1px solid var(--border);background:var(--bg);cursor:pointer;vertical-align:middle;border-radius:.1875rem;flex:none;place-items:center;width:.875rem;height:.875rem;margin:0;transition:background 80ms,border-color 80ms;display:inline-grid}input[type=checkbox]:not(.markdown *):hover{border-color:var(--fg-2)}input[type=checkbox]:not(.markdown *):checked{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:not(.markdown *):checked:after{content:"";border:solid var(--accent-fg);border-width:0 2px 2px 0;width:.25rem;height:.5rem;margin-top:-2px;transform:rotate(45deg)}input[type=checkbox]:not(.markdown *):focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=checkbox]:not(.markdown *):disabled{opacity:.5;cursor:default}.markdown .suggestion{margin:.375rem 0}