@young1lin/dsh-ui-gitworkbench 0.1.7 → 0.1.9

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.
package/lib/client.js CHANGED
@@ -811,6 +811,32 @@ window.__ModuleLoader__.load({
811
811
  for (const id of ids) if (id > top) top = id;
812
812
  return top + 1;
813
813
  }
814
+ /**
815
+ * Where each change block sits, derived from the rows rather than measured.
816
+ *
817
+ * A windowed pane cannot measure: the block being walked to usually has no
818
+ * element, because the whole point is that it is not on screen. The rows are a
819
+ * fixed height there by construction, so the position is arithmetic.
820
+ *
821
+ * @param blocks - each row's block id, `-1` for a row that is not part of one.
822
+ * @param rowH - row height in px.
823
+ * @param offset - px above the first row, e.g. the grid's top padding.
824
+ * @returns the first row of each block, in the order the blocks appear.
825
+ */
826
+ function blockTopsFromRows(blocks, rowH, offset = 0) {
827
+ const tops = [];
828
+ const seen = /* @__PURE__ */ new Set();
829
+ for (let i = 0; i < blocks.length; i += 1) {
830
+ const block = blocks[i];
831
+ if (!Number.isInteger(block) || block < 0 || seen.has(block)) continue;
832
+ seen.add(block);
833
+ tops.push({
834
+ block,
835
+ top: offset + i * rowH
836
+ });
837
+ }
838
+ return tops;
839
+ }
814
840
  //#endregion
815
841
  //#region src/client/pane-size.ts
816
842
  /** Sub-pixel tolerance: two boxes a third of a pixel apart are touching. */
@@ -844,6 +870,55 @@ window.__ModuleLoader__.load({
844
870
  const max = Math.max(min, drawer - other - minDiff);
845
871
  return Math.min(Math.max(next, min), max);
846
872
  }
873
+ /**
874
+ * A viewport height to assume before the scroller has been measured.
875
+ *
876
+ * The first paint happens before any layout effect runs. Rendering nothing
877
+ * until the height is known would flash an empty pane; a screenful is both
878
+ * safe and close.
879
+ */
880
+ const ASSUMED_VIEWPORT_PX = 1200;
881
+ /**
882
+ * @param value - a number from the DOM, which can be NaN or negative.
883
+ * @param fallback - used when it is neither finite nor usable.
884
+ * @returns a finite, non-negative number.
885
+ */
886
+ function sane(value, fallback) {
887
+ return Number.isFinite(value) && value > 0 ? value : fallback;
888
+ }
889
+ /**
890
+ * The window of rows to render for a given scroll position.
891
+ *
892
+ * @param scrollTop - the scroller's current offset in px.
893
+ * @param viewportH - the scroller's visible height in px; 0 before it is measured.
894
+ * @param rowCount - how many rows the file has.
895
+ * @param rowH - row height in px.
896
+ * @param overscan - rows to keep beyond each edge.
897
+ * @returns the rows to render and the spacer heights standing in for the rest.
898
+ */
899
+ function rowWindow(scrollTop, viewportH, rowCount, rowH = 20, overscan = 40) {
900
+ const rows = Math.max(0, Math.trunc(rowCount));
901
+ const height = sane(rowH, 20);
902
+ if (rows <= 400) return {
903
+ start: 0,
904
+ end: rows,
905
+ padTop: 0,
906
+ padBottom: 0
907
+ };
908
+ const top = Number.isFinite(scrollTop) && scrollTop > 0 ? scrollTop : 0;
909
+ const view = sane(viewportH, ASSUMED_VIEWPORT_PX);
910
+ const pad = Math.max(0, Math.trunc(overscan));
911
+ const first = Math.max(0, Math.floor(top / height) - pad);
912
+ const last = Math.min(rows, Math.ceil((top + view) / height) + pad);
913
+ const start = Math.min(first, rows);
914
+ const end = Math.max(start, last);
915
+ return {
916
+ start,
917
+ end,
918
+ padTop: start * height,
919
+ padBottom: (rows - end) * height
920
+ };
921
+ }
847
922
  //#endregion
848
923
  //#region src/client/history-layout.ts
849
924
  /** Every layout, in the order the switch offers them. */
@@ -903,20 +978,27 @@ window.__ModuleLoader__.load({
903
978
  /**
904
979
  * @param scrollRef - the element that scrolls, and the one whose subtree
905
980
  * carries the `data-block` marks.
981
+ * @param tops - where the blocks are, when the caller can say. A WINDOWED pane
982
+ * must supply this: it renders only the rows near the viewport, so the block
983
+ * the reader is walking to usually has no DOM to measure. Omitted, the
984
+ * positions are measured off the `data-block` marks as before.
906
985
  */
907
- function useChangeNav(scrollRef) {
986
+ function useChangeNav(scrollRef, tops) {
908
987
  /** What the last press landed on. A ref, not state: it exists to make the
909
988
  * NEXT press correct, and nothing on screen reads it. */
910
989
  const navMemory = (0, react.useRef)(null);
911
990
  /**
912
991
  * Every change block's position inside the scrolled content.
913
992
  *
914
- * Measured off the DOM rather than derived from a row model: a model knows
915
- * which rows changed, not how many pixels down the page they sit, and the
916
- * rows are never the only thing in the scroller padding, a sticky bar and,
917
- * in the armed side-by-side pane, a CodeMirror view of a different height
918
- * all move the answer. One layout read per PRESS is cheap; nothing here runs
919
- * on scroll.
993
+ * The fallback, for a pane that renders all of its rows. Measuring is the
994
+ * more general answer — a model knows which rows changed, not how many
995
+ * pixels down the page they sit, and the rows are never the only thing in
996
+ * the scroller. One layout read per PRESS is cheap; nothing here runs on
997
+ * scroll.
998
+ *
999
+ * It stops being available the moment a pane renders only part of its rows,
1000
+ * which is why `tops` exists: what is not in the DOM cannot be measured, and
1001
+ * a walk that skips every change outside the viewport is worse than no walk.
920
1002
  *
921
1003
  * `offsetTop` is deliberately not used: it is relative to whichever ancestor
922
1004
  * happens to be positioned, which no rule in the stylesheet guarantees.
@@ -942,8 +1024,8 @@ window.__ModuleLoader__.load({
942
1024
  const goToChange = (direction) => {
943
1025
  const scroller = scrollRef.current;
944
1026
  if (scroller === null) return;
945
- const tops = blockTops();
946
- const target = stepToBlock(tops, anchorFrom(tops, scroller.scrollTop, navMemory.current), direction);
1027
+ const measured = tops === void 0 ? blockTops() : tops();
1028
+ const target = stepToBlock(measured, anchorFrom(measured, scroller.scrollTop, navMemory.current), direction);
947
1029
  if (target === null) return;
948
1030
  scroller.scrollTop = scrollTopFor(target.top);
949
1031
  navMemory.current = {
@@ -1139,7 +1221,7 @@ window.__ModuleLoader__.load({
1139
1221
  }
1140
1222
  //#endregion
1141
1223
  //#region \0dsh-css:src/client/GitWorkbenchPanel.module.css.mjs
1142
- const css = ".SD8qLW_card{border:1px solid var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:7px;padding:3px 10px;font-size:12px;line-height:18px;transition:background .12s,border-color .12s;display:inline-flex}.SD8qLW_card:hover,.SD8qLW_card:focus-visible{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3)}.SD8qLW_cardBranch{max-width:220px;color:var(--dsw-alias-label-primary);align-items:center;gap:4px;font-weight:550;display:inline-flex;overflow:hidden}.SD8qLW_cardBranchName{min-width:0;overflow:hidden}.SD8qLW_cardGlyph{opacity:.7;flex:none}.SD8qLW_cardDetached{background:var(--dsw-alias-state-warning-bg,#bb800926);color:var(--dsw-alias-state-warning-primary,#d29922);letter-spacing:.02em;border-radius:999px;padding:0 6px;font-size:10px;line-height:16px}.SD8qLW_cardWt{background:var(--dsw-alias-state-business-bg,#388bfd29);max-width:150px;color:var(--dsw-alias-state-business-primary,#58a6ff);letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;gap:3px;padding:0 6px;font-size:10px;line-height:16px;display:inline-flex;overflow:hidden}.SD8qLW_cardAhead,.SD8qLW_cardBehind{color:var(--dsw-alias-label-tertiary);font-size:11px}.SD8qLW_cardAhead{color:var(--dsw-alias-state-success-primary)}.SD8qLW_cardBehind{color:var(--dsw-alias-state-attention-primary,#d29922)}.SD8qLW_cardSep{background:var(--dsw-alias-border-l2);width:1px;height:14px}.SD8qLW_cardAdded{color:var(--dsw-alias-state-success-primary)}.SD8qLW_cardDeleted{color:var(--dsw-alias-state-error-primary)}.SD8qLW_cardFiles{color:var(--dsw-alias-label-tertiary)}.SD8qLW_overlay[data-gs-theme=github-dark]{--gs-bg:#0d1117;--gs-panel:#161b22;--gs-raise:#21262d;--gs-border:#30363d;--gs-border-soft:#21262d;--gs-fg:#e6edf3;--gs-fg-muted:#c9d1d9;--gs-fg-dim:#8b949e;--gs-fg-faint:#6e7681;--gs-fg-fainter:#484f58;--gs-accent:#58a6ff;--gs-accent-bg:#388bfd24;--gs-accent-border:#388bfd8c;--gs-add:#3fb950;--gs-del:#f85149;--gs-warn:#d29922;--gs-info:#79c0ff;--gs-add-bg:#2ea04329;--gs-del-bg:#f8514929;--gs-warn-bg:#bb800929;--gs-info-bg:#388bfd29;--gs-add-line:#12261e;--gs-del-line:#25181c;--gs-add-word:#1a4a29;--gs-del-word:#6b2b2b;--gs-add-num:#1c4428;--gs-del-num:#542426;--gs-hunk:#111d2e;--gs-hunk-num:#0c2d6b;--gs-neutral-bg:#6e76812e;--gs-backdrop:#01040999;--gs-shadow:#0104098c}.SD8qLW_overlay[data-gs-theme=github-light]{--gs-bg:#fff;--gs-panel:#f6f8fa;--gs-raise:#eaeef2;--gs-border:#d0d7de;--gs-border-soft:#eaeef2;--gs-fg:#1f2328;--gs-fg-muted:#32383f;--gs-fg-dim:#656d76;--gs-fg-faint:#8c959f;--gs-fg-fainter:#afb8c1;--gs-accent:#0969da;--gs-accent-bg:#0969da1a;--gs-accent-border:#0969da73;--gs-add:#1a7f37;--gs-del:#cf222e;--gs-warn:#9a6700;--gs-info:#0550ae;--gs-add-bg:#1a7f371f;--gs-del-bg:#cf222e1f;--gs-warn-bg:#9a67001f;--gs-info-bg:#0969da1f;--gs-add-line:#dafbe1;--gs-del-line:#ffebe9;--gs-add-word:#aceebb;--gs-del-word:#ffcecb;--gs-add-num:#aceebb;--gs-del-num:#ffcecb;--gs-hunk:#ddf4ff;--gs-hunk-num:#b6e3ff;--gs-neutral-bg:#6e76811f;--gs-backdrop:#1f232847;--gs-shadow:#1f232838}.SD8qLW_overlay[data-gs-theme=idea-dark]{--gs-bg:#1e1f22;--gs-panel:#2b2d30;--gs-raise:#393b40;--gs-border:#393b40;--gs-border-soft:#2b2d30;--gs-fg:#dfe1e5;--gs-fg-muted:#ced0d6;--gs-fg-dim:#9da0a8;--gs-fg-faint:#6f737a;--gs-fg-fainter:#4e5157;--gs-accent:#548af7;--gs-accent-bg:#548af729;--gs-accent-border:#548af78c;--gs-add:#5fad65;--gs-del:#e26e6e;--gs-warn:#f0a732;--gs-info:#3592c4;--gs-add-bg:#5fad6529;--gs-del-bg:#e26e6e29;--gs-warn-bg:#f0a73229;--gs-info-bg:#3592c429;--gs-add-line:#293c2e;--gs-del-line:#3d2b2b;--gs-add-word:#3d6640;--gs-del-word:#6b3838;--gs-hunk:#548af71a;--gs-neutral-bg:#9da0a82e;--gs-backdrop:#10111399;--gs-shadow:#00000080}.SD8qLW_overlay[data-gs-theme=idea-light]{--gs-bg:#fff;--gs-panel:#f7f8fa;--gs-raise:#ebecf0;--gs-border:#d3d5db;--gs-border-soft:#ebecf0;--gs-fg:#1e1f22;--gs-fg-muted:#3c3f44;--gs-fg-dim:#6c707e;--gs-fg-faint:#818594;--gs-fg-fainter:#a8adbd;--gs-accent:#3574f0;--gs-accent-bg:#3574f01a;--gs-accent-border:#3574f073;--gs-add:#398a4a;--gs-del:#cc4a4a;--gs-warn:#a8760b;--gs-info:#2b7fb8;--gs-add-bg:#398a4a1f;--gs-del-bg:#cc4a4a1f;--gs-warn-bg:#a8760b1f;--gs-info-bg:#2b7fb81f;--gs-add-line:#e6f5e9;--gs-del-line:#fbe9ea;--gs-add-word:#c2e5c9;--gs-del-word:#f5c9cc;--gs-hunk:#3574f012;--gs-neutral-bg:#6c707e1f;--gs-backdrop:#1e1f2242;--gs-shadow:#1e1f222e}.SD8qLW_overlay[data-gs-theme=vscode-dark]{--gs-bg:#1e1e1e;--gs-panel:#252526;--gs-raise:#2d2d30;--gs-border:#3e3e42;--gs-border-soft:#2d2d30;--gs-fg:#d4d4d4;--gs-fg-muted:#ccc;--gs-fg-dim:#9d9d9d;--gs-fg-faint:gray;--gs-fg-fainter:#5a5a5a;--gs-accent:#0098ff;--gs-accent-bg:#007acc3d;--gs-accent-border:#0098ff99;--gs-add:#89d185;--gs-del:#f14c4c;--gs-warn:#cca700;--gs-info:#75beff;--gs-add-bg:#89d1852e;--gs-del-bg:#f14c4c2e;--gs-warn-bg:#cca7002e;--gs-info-bg:#75beff2e;--gs-add-line:#9bb9552e;--gs-del-line:#ff000029;--gs-add-word:#9bb95566;--gs-del-word:#ff00005c;--gs-hunk:#007acc24;--gs-neutral-bg:#bebebe24;--gs-backdrop:#0000008c;--gs-shadow:#0009}.SD8qLW_overlay[data-gs-theme=vscode-light]{--gs-bg:#fff;--gs-panel:#f3f3f3;--gs-raise:#e8e8e8;--gs-border:#cecece;--gs-border-soft:#e8e8e8;--gs-fg:#1e1e1e;--gs-fg-muted:#333;--gs-fg-dim:#616161;--gs-fg-faint:#767676;--gs-fg-fainter:#a0a0a0;--gs-accent:#005fb8;--gs-accent-bg:#005fb81a;--gs-accent-border:#005fb873;--gs-add:#10793f;--gs-del:#b5200d;--gs-warn:#855b00;--gs-info:#005fb8;--gs-add-bg:#10793f1f;--gs-del-bg:#b5200d1f;--gs-warn-bg:#855b001f;--gs-info-bg:#005fb81f;--gs-add-line:#9bb95538;--gs-del-line:#ff000021;--gs-add-word:#9bb95573;--gs-del-word:#ff00004d;--gs-hunk:#005fb812;--gs-neutral-bg:#6161611f;--gs-backdrop:#00000040;--gs-shadow:#0000002e}.SD8qLW_overlay[data-gs-theme=cyberpunk-dark]{--gs-bg:#0b0417;--gs-panel:#14082a;--gs-raise:#1f0d3d;--gs-border:#3a1f6b;--gs-border-soft:#26124a;--gs-fg:#f0e6ff;--gs-fg-muted:#d5c2f5;--gs-fg-dim:#a98fd6;--gs-fg-faint:#7d64a8;--gs-fg-fainter:#56427a;--gs-accent:#00f0ff;--gs-on-accent:#0b0417;--gs-accent-bg:#00f0ff24;--gs-accent-border:#00f0ff80;--gs-add:#39ff88;--gs-del:#ff2e88;--gs-warn:#fc0;--gs-info:#00f0ff;--gs-add-bg:#39ff8824;--gs-del-bg:#ff2e8824;--gs-warn-bg:#ffcc0024;--gs-info-bg:#00f0ff24;--gs-add-line:#39ff881f;--gs-del-line:#ff2e881f;--gs-add-word:#39ff8857;--gs-del-word:#ff2e8857;--gs-hunk:#00f0ff1a;--gs-neutral-bg:#a98fd629;--gs-backdrop:#06020ead;--gs-shadow:#00f0ff24}.SD8qLW_overlay[data-gs-theme=cyberpunk-light]{--gs-bg:#fdfbff;--gs-panel:#f4eeff;--gs-raise:#e9dfff;--gs-border:#c9b3f0;--gs-border-soft:#e0d2f7;--gs-fg:#1a0b2e;--gs-fg-muted:#33195c;--gs-fg-dim:#6b4ba0;--gs-fg-faint:#8f74bd;--gs-fg-fainter:#b9a5d6;--gs-accent:#00a6b8;--gs-accent-bg:#00a6b81f;--gs-accent-border:#00a6b880;--gs-add:#00875a;--gs-del:#d6006e;--gs-warn:#b37a00;--gs-info:#00a6b8;--gs-add-bg:#00875a1f;--gs-del-bg:#d6006e1f;--gs-warn-bg:#b37a001f;--gs-info-bg:#00a6b81f;--gs-add-line:#00c88224;--gs-del-line:#ff2e881f;--gs-add-word:#00c88257;--gs-del-word:#ff2e884d;--gs-hunk:#00a6b814;--gs-neutral-bg:#6b4ba01f;--gs-backdrop:#1a0b2e47;--gs-shadow:#1a0b2e29}.SD8qLW_overlay[data-gs-theme=one-dark]{--gs-bg:#282c34;--gs-panel:#21252b;--gs-raise:#2c313a;--gs-border:#3e4451;--gs-border-soft:#2c313a;--gs-fg:#abb2bf;--gs-fg-muted:#b6bdca;--gs-fg-dim:#7f848e;--gs-fg-faint:#636d83;--gs-fg-fainter:#4b5263;--gs-accent:#61afef;--gs-accent-bg:#61afef24;--gs-accent-border:#61afef8c;--gs-add:#98c379;--gs-del:#e06c75;--gs-warn:#e5c07b;--gs-info:#56b6c2;--gs-add-bg:#98c37929;--gs-del-bg:#e06c7529;--gs-warn-bg:#e5c07b29;--gs-info-bg:#56b6c229;--gs-add-line:#98c37924;--gs-del-line:#e06c7524;--gs-add-word:#98c37961;--gs-del-word:#e06c7561;--gs-hunk:#61afef1a;--gs-neutral-bg:#7f848e2e;--gs-backdrop:#171a2199;--gs-shadow:#0f11158c}.SD8qLW_overlay[data-gs-theme=one-light]{--gs-bg:#fafafa;--gs-panel:#f0f0f0;--gs-raise:#e5e5e6;--gs-border:#d4d4d4;--gs-border-soft:#e5e5e6;--gs-fg:#383a42;--gs-fg-muted:#4a4c53;--gs-fg-dim:#696c77;--gs-fg-faint:#909196;--gs-fg-fainter:#b8b9bd;--gs-accent:#4078f2;--gs-accent-bg:#4078f21a;--gs-accent-border:#4078f273;--gs-add:#50a14f;--gs-del:#e45649;--gs-warn:#c18401;--gs-info:#0184bc;--gs-add-bg:#50a14f1f;--gs-del-bg:#e456491f;--gs-warn-bg:#c184011f;--gs-info-bg:#0184bc1f;--gs-add-line:#50a14f24;--gs-del-line:#e4564921;--gs-add-word:#50a14f57;--gs-del-word:#e4564952;--gs-hunk:#4078f212;--gs-neutral-bg:#696c771f;--gs-backdrop:#383a4242;--gs-shadow:#383a422e}.SD8qLW_overlay[data-gs-theme=solarized-dark]{--gs-bg:#002b36;--gs-panel:#073642;--gs-raise:#0a4553;--gs-border:#0f5666;--gs-border-soft:#073642;--gs-fg:#93a1a1;--gs-fg-muted:#839496;--gs-fg-dim:#657b83;--gs-fg-faint:#586e75;--gs-fg-fainter:#45636b;--gs-accent:#268bd2;--gs-accent-bg:#268bd229;--gs-accent-border:#268bd28c;--gs-add:#859900;--gs-del:#dc322f;--gs-warn:#b58900;--gs-info:#2aa198;--gs-add-bg:#85990033;--gs-del-bg:#dc322f2e;--gs-warn-bg:#b589002e;--gs-info-bg:#2aa1982e;--gs-add-line:#85990029;--gs-del-line:#dc322f26;--gs-add-word:#85990066;--gs-del-word:#dc322f61;--gs-hunk:#268bd21f;--gs-neutral-bg:#657b8333;--gs-backdrop:#00141a9e;--gs-shadow:#00141a8c}.SD8qLW_overlay[data-gs-theme=solarized-light]{--gs-bg:#fdf6e3;--gs-panel:#eee8d5;--gs-raise:#e3ddca;--gs-border:#d5cfbb;--gs-border-soft:#eee8d5;--gs-fg:#586e75;--gs-fg-muted:#657b83;--gs-fg-dim:#839496;--gs-fg-faint:#93a1a1;--gs-fg-fainter:#b5b0a0;--gs-accent:#268bd2;--gs-accent-bg:#268bd21f;--gs-accent-border:#268bd273;--gs-add:#6c7c00;--gs-del:#cb2825;--gs-warn:#9a7400;--gs-info:#21867f;--gs-add-bg:#8599002e;--gs-del-bg:#dc322f24;--gs-warn-bg:#b5890029;--gs-info-bg:#2aa19824;--gs-add-line:#85990029;--gs-del-line:#dc322f1f;--gs-add-word:#85990061;--gs-del-word:#dc322f4d;--gs-hunk:#268bd214;--gs-neutral-bg:#586e7524;--gs-backdrop:#586e7542;--gs-shadow:#586e7533}.SD8qLW_overlay[data-gs-theme=nord-dark]{--gs-bg:#2e3440;--gs-panel:#3b4252;--gs-raise:#434c5e;--gs-border:#4c566a;--gs-border-soft:#3b4252;--gs-fg:#eceff4;--gs-fg-muted:#d8dee9;--gs-fg-dim:#9aa5b8;--gs-fg-faint:#7b88a1;--gs-fg-fainter:#5d6a82;--gs-accent:#88c0d0;--gs-on-accent:#2e3440;--gs-accent-bg:#88c0d024;--gs-accent-border:#88c0d08c;--gs-add:#a3be8c;--gs-del:#bf616a;--gs-warn:#ebcb8b;--gs-info:#81a1c1;--gs-add-bg:#a3be8c29;--gs-del-bg:#bf616a2e;--gs-warn-bg:#ebcb8b29;--gs-info-bg:#81a1c129;--gs-add-line:#a3be8c24;--gs-del-line:#bf616a26;--gs-add-word:#a3be8c61;--gs-del-word:#bf616a66;--gs-hunk:#88c0d01a;--gs-neutral-bg:#9aa5b829;--gs-backdrop:#1d232d9e;--gs-shadow:#1419218c}.SD8qLW_overlay[data-gs-theme=nord-light]{--gs-bg:#eceff4;--gs-panel:#e5e9f0;--gs-raise:#d8dee9;--gs-border:#c3cbd8;--gs-border-soft:#dfe4ec;--gs-fg:#2e3440;--gs-fg-muted:#3b4252;--gs-fg-dim:#4c566a;--gs-fg-faint:#6b7689;--gs-fg-fainter:#9aa4b5;--gs-accent:#5e81ac;--gs-accent-bg:#5e81ac1f;--gs-accent-border:#5e81ac80;--gs-add:#5e7d47;--gs-del:#a5424c;--gs-warn:#97701f;--gs-info:#4c7a8c;--gs-add-bg:#5e7d4724;--gs-del-bg:#a5424c21;--gs-warn-bg:#97701f24;--gs-info-bg:#4c7a8c21;--gs-add-line:#5e7d4724;--gs-del-line:#a5424c1f;--gs-add-word:#5e7d4757;--gs-del-word:#a5424c52;--gs-hunk:#5e81ac17;--gs-neutral-bg:#4c566a21;--gs-backdrop:#2e344042;--gs-shadow:#2e34402e}.SD8qLW_overlay{--gs-inset:14px;--gs-h-control:28px;--gs-h-compact:24px;--gs-pad-control:0 12px;--gs-pad-compact:0 10px;--gs-on-accent:#fff;--gs-graph-0:#58a6ff;--gs-graph-1:#3fb950;--gs-graph-2:#d29922;--gs-graph-3:#bc8cff;--gs-graph-4:#f778ba;--gs-graph-5:#39c5cf;--gs-r-pill:999px;--gs-r-control:8px;--gs-r-surface:12px;--gs-r-drawer:14px;--gs-t-meta:11px;--gs-t-dense:12px;--gs-t-ui:13px;--gs-gutter:16px;--gs-gutter-pane:12px;z-index:1000;padding:var(--gs-inset);box-sizing:border-box;background:var(--gs-backdrop);justify-content:flex-end;align-items:stretch;gap:12px;animation:.16s ease-out SD8qLW_gsFade;display:flex;position:fixed;inset:0}.SD8qLW_drawer{box-sizing:border-box;width:min(1600px,94vw);height:100%;color:var(--gs-fg);background:var(--gs-bg);border:1px solid var(--gs-border);border-radius:var(--gs-r-drawer);box-shadow:0 24px 64px var(--gs-shadow);font-family:var(--dsw-font-ui,-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif);--gs-surface:var(--gs-bg);--gs-surface-2:var(--gs-panel);flex-direction:column;animation:.18s cubic-bezier(.22,1,.36,1) SD8qLW_gsSlide;display:flex;position:relative;overflow:hidden}.SD8qLW_drawer[data-gs-bg]{--gs-surface:color-mix(in srgb, var(--gs-bg) var(--gs-veil), transparent);--gs-surface-2:color-mix(in srgb, var(--gs-panel) var(--gs-veil), transparent)}.SD8qLW_drawer[data-gs-bg]:before{content:\"\";z-index:0;background-image:var(--gs-bg-image);filter:blur(var(--gs-bg-blur));pointer-events:none;background-position:50%;background-size:cover;position:absolute;inset:0;transform:scale(1.12)}.SD8qLW_drawer>:not(.SD8qLW_resizer){z-index:1;position:relative}.SD8qLW_drawer>.SD8qLW_header{z-index:24}.SD8qLW_drawer>.SD8qLW_tabs{z-index:23}.SD8qLW_drawer>.SD8qLW_compareBar{z-index:22}.SD8qLW_drawer>.SD8qLW_syncBar{z-index:20}.SD8qLW_drawer>.SD8qLW_confirmScrim{z-index:40;position:absolute;inset:0}.SD8qLW_overlayMax{gap:0;padding:0}.SD8qLW_overlayMax .SD8qLW_drawer{border-width:0 0 0 1px;border-radius:0;flex:auto;width:auto;min-width:0}@keyframes SD8qLW_gsFade{0%{opacity:0}}@keyframes SD8qLW_gsSlide{0%{opacity:0;transform:translate(24px)}}.SD8qLW_resizer{z-index:30;cursor:col-resize;touch-action:none;justify-content:center;align-items:center;width:10px;display:flex;position:absolute;top:0;bottom:0;left:0}.SD8qLW_resizer:after{content:\"\";background:var(--gs-fg-fainter);opacity:0;border-radius:999px;width:3px;height:32px;transition:opacity .14s,height .14s}.SD8qLW_resizer:hover:after{opacity:.6}.SD8qLW_resizerActive:after{opacity:.9;height:56px}.SD8qLW_paneDivider{z-index:5;cursor:col-resize;touch-action:none;flex:none;justify-content:center;align-items:center;width:7px;display:flex;position:relative}.SD8qLW_paneDivider:before{content:\"\";background:var(--gs-border-soft);width:1px;position:absolute;top:0;bottom:0;left:3px}.SD8qLW_paneDivider:after{content:\"\";background:var(--gs-fg-fainter);opacity:0;border-radius:999px;width:3px;height:28px;transition:opacity .14s,height .14s;position:relative}.SD8qLW_paneDivider:hover:after{opacity:.6}.SD8qLW_paneDividerActive:after{opacity:.9;height:48px}.SD8qLW_paneDividerY{cursor:row-resize;width:auto;height:7px}.SD8qLW_paneDividerY:before{width:auto;height:1px;inset:3px 0 auto}.SD8qLW_paneDividerY:after{width:28px;height:3px;transition:opacity .14s,width .14s}.SD8qLW_paneDividerY.SD8qLW_paneDividerActive:after{width:48px;height:3px}.SD8qLW_header{padding:10px var(--gs-gutter);border-bottom:1px solid var(--gs-border);background:var(--gs-surface-2);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-ui);flex:none;justify-content:space-between;align-items:center;gap:12px;display:flex}.SD8qLW_headerLeft{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.SD8qLW_headerBranch{border:1px solid var(--gs-accent-border);background:var(--gs-accent-bg);color:var(--gs-accent);border-radius:999px;align-items:center;gap:6px;padding:2px 10px;font-weight:600;display:inline-flex}.SD8qLW_refButton.SD8qLW_headerPicker{border-color:var(--gs-accent-border);background:var(--gs-accent-bg);max-width:420px;color:var(--gs-accent);font-weight:600}.SD8qLW_refButton.SD8qLW_headerPicker:hover{background:var(--gs-accent-bg);color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_elide{flex:0 auto;align-items:baseline;min-width:0;display:inline-flex}.SD8qLW_elideHead{white-space:nowrap;text-overflow:ellipsis;flex:0 999 auto;min-width:0;overflow:hidden}.SD8qLW_elideTail{white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.SD8qLW_headerPathMain{color:var(--gs-fg-faint);font-size:var(--gs-t-meta)}.SD8qLW_headerPathMain .SD8qLW_elideTail{color:var(--gs-fg-dim)}.SD8qLW_headerViewRef{max-width:160px}.SD8qLW_headerView{background:var(--gs-neutral-bg);color:var(--gs-fg-muted);font-size:var(--gs-t-meta);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:1px 8px}.SD8qLW_headerDetached{background:var(--gs-warn-bg);color:var(--gs-warn);font-size:var(--gs-t-meta);letter-spacing:.02em;border-radius:999px;padding:1px 8px}.SD8qLW_headerTotals{font-variant-numeric:tabular-nums}.SD8qLW_headerTotalsAdd{color:var(--gs-add);font-weight:600}.SD8qLW_headerTotalsDel{color:var(--gs-del);font-weight:600}.SD8qLW_headerTotalsDim{color:var(--gs-fg-dim);font-size:var(--gs-t-dense)}.SD8qLW_headerRight{flex:none;gap:8px;display:flex;position:relative}.SD8qLW_theme{display:inline-flex;position:relative}.SD8qLW_refPop.SD8qLW_settingsPop{width:320px;max-width:calc(100vw - 32px);max-height:min(560px,100vh - 120px);top:calc(100% + 6px);left:auto;right:0}.SD8qLW_themeRail{min-height:0;font-family:var(--dsw-font-ui,system-ui, sans-serif);flex-direction:column;flex:1;gap:14px;padding:12px 14px 16px;display:flex;overflow-y:auto}.SD8qLW_themeGroup{flex-direction:column;gap:6px;display:flex}.SD8qLW_themeLabel{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);letter-spacing:.04em;text-transform:uppercase;font-weight:600}.SD8qLW_themeRowSplit{justify-content:space-between;align-items:center;gap:8px;display:flex}.SD8qLW_segmented{gap:6px;display:flex}.SD8qLW_segment{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-meta);cursor:pointer;background:0 0;flex-direction:column;flex:1 1 0;align-items:stretch;gap:4px;padding:4px;transition:background .12s,color .12s,border-color .12s;display:flex}.SD8qLW_segment:hover{background:var(--gs-raise);border-color:var(--gs-fg-fainter);color:var(--gs-fg)}.SD8qLW_segment:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_segmentChip{border-radius:calc(var(--gs-r-control) - 4px);border:1px solid #80808073;height:20px}.SD8qLW_chipLight{background:#fff}.SD8qLW_chipDark{background:#0b0b0d}.SD8qLW_chipSystem{background:linear-gradient(105deg,#fff 0 50%,#0b0b0d 50% 100%)}.SD8qLW_paletteRow{box-sizing:border-box;border-radius:var(--gs-r-control);width:100%;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:5px 8px;display:flex}.SD8qLW_paletteRow:hover{background:var(--gs-raise);color:var(--gs-fg)}.SD8qLW_swatch{border:1px solid var(--gs-border);border-radius:3px;flex:none;width:26px;height:12px;display:inline-flex;overflow:hidden}.SD8qLW_swatch span{flex:1}.SD8qLW_scopeRow{gap:6px;display:flex}.SD8qLW_scopeHint{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);overflow-wrap:anywhere}.SD8qLW_bgPreview{border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background-color:var(--gs-bg);background-position:50%;background-size:cover;height:64px}.SD8qLW_bgEmpty{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);justify-content:center;align-items:center;display:flex}.SD8qLW_sliderRow{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);align-items:center;gap:8px;display:flex}.SD8qLW_sliderRow input{min-width:0;accent-color:var(--gs-accent);flex:1}.SD8qLW_sliderValue{text-align:right;font-variant-numeric:tabular-nums;flex:none;width:38px}.SD8qLW_cssArea{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-bg);width:100%;min-height:96px;max-height:220px;color:var(--gs-fg);font-family:var(--dsw-font-mono,ui-monospace, Consolas, monospace);font-size:var(--gs-t-meta);resize:vertical;outline:none;padding:7px 8px}.SD8qLW_cssArea:focus{border-color:var(--gs-accent-border)}.SD8qLW_themeNote{color:var(--gs-warn);font-size:var(--gs-t-meta)}.SD8qLW_themeDirty{color:var(--gs-accent);font-size:var(--gs-t-meta)}.SD8qLW_wtCurrent{color:var(--gs-add);font-size:8px;line-height:1}.SD8qLW_commitCopy{margin-left:auto}.SD8qLW_commitPop{z-index:40;box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-surface);background:var(--gs-panel);width:min(380px,100vw - 24px);color:var(--gs-fg);box-shadow:0 16px 40px var(--gs-shadow);font-family:var(--dsw-font-ui,-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif);font-size:var(--gs-t-dense);flex-direction:column;gap:6px;padding:10px 12px 12px;display:flex;position:fixed;overflow:auto}.SD8qLW_commitPopTop{align-items:center;gap:8px;display:flex}.SD8qLW_commitPopTop .SD8qLW_commitWhen{margin-right:auto}.SD8qLW_commitPopMeta{color:var(--gs-fg-muted);font-size:var(--gs-t-dense);flex-direction:column;gap:2px;line-height:16px;display:flex}.SD8qLW_commitFilter{min-width:120px;height:var(--gs-h-control);box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:auto;padding:0 10px}.SD8qLW_commitFilter:focus{border-color:var(--gs-accent)}.SD8qLW_commitFilter::placeholder{color:var(--gs-fg-faint)}.SD8qLW_filterChips{border-bottom:1px solid var(--gs-border-soft);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:6px 10px;display:flex}.SD8qLW_filterChip{border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-surface-2);max-width:220px;font-size:var(--gs-t-dense);align-items:center;gap:2px;line-height:18px;display:inline-flex}.SD8qLW_filterChipLabel{text-overflow:ellipsis;white-space:nowrap;color:var(--gs-fg-muted);padding:2px 4px 2px 8px;overflow:hidden}.SD8qLW_filterChipRemove{border:none;border-left:1px solid var(--gs-border-soft);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;flex:none;padding:0 6px;line-height:20px}.SD8qLW_filterChipRemove:hover{color:var(--gs-danger,var(--gs-fg))}.SD8qLW_filterClear{color:var(--gs-fg-faint);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;border:none;padding:2px 4px;line-height:18px}.SD8qLW_filterClear:hover{color:var(--gs-fg)}.SD8qLW_funnel{display:inline-flex;position:relative}.SD8qLW_funnelButton.SD8qLW_funnelButtonActive{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_funnelPop{z-index:40;box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-surface);background:var(--gs-panel);width:320px;max-width:calc(100vw - 24px);box-shadow:0 16px 40px var(--gs-shadow);font-size:var(--gs-t-dense);flex-direction:column;display:flex;position:fixed;overflow:hidden}.SD8qLW_funnelTabs{border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-pill);background:var(--gs-bg);flex:none;gap:2px;margin:8px 8px 0;padding:2px;display:flex}.SD8qLW_funnelTab{border-radius:var(--gs-r-pill);min-width:0;height:22px;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);white-space:nowrap;cursor:pointer;background:0 0;border:none;flex:1;padding:0 8px;line-height:1;transition:background .12s,color .12s}.SD8qLW_funnelTab:hover{color:var(--gs-fg)}.SD8qLW_funnelTab.SD8qLW_funnelTabActive{color:var(--gs-fg);background:var(--gs-raise);box-shadow:inset 0 0 0 1px var(--gs-border)}.SD8qLW_funnelTab:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_funnelTabCount{color:var(--gs-accent);font-variant-numeric:tabular-nums;margin-left:4px}.SD8qLW_funnelPane{flex-direction:column;flex:auto;gap:6px;min-height:0;padding:8px;display:flex}.SD8qLW_funnelCaption{color:var(--gs-fg-faint);letter-spacing:.04em;text-transform:uppercase;flex:none;font-size:11px;line-height:14px}.SD8qLW_funnelBounds{border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);flex:none;gap:2px;padding:2px;display:flex}.SD8qLW_funnelBoundBtn{border-radius:calc(var(--gs-r-control) - 3px);min-width:0;height:20px;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;border:none;flex:1;padding:0 6px;line-height:1;transition:background .12s,color .12s}.SD8qLW_funnelBoundBtn:hover{color:var(--gs-fg)}.SD8qLW_funnelBoundBtn.SD8qLW_funnelBoundBtnActive{color:var(--gs-accent);background:var(--gs-accent-bg);box-shadow:inset 0 0 0 1px var(--gs-accent-border)}.SD8qLW_cal{flex-direction:column;flex:none;gap:4px;display:flex}.SD8qLW_calHead{align-items:center;gap:4px;display:flex}.SD8qLW_calTitle{text-align:center;color:var(--gs-fg);font-size:var(--gs-t-dense);flex:1;line-height:20px}.SD8qLW_calNav{border-radius:var(--gs-r-control);width:22px;height:20px;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-ui);cursor:pointer;background:0 0;border:none;flex:none;padding:0}.SD8qLW_calNav:hover{color:var(--gs-fg);background:var(--gs-raise)}.SD8qLW_calWeek,.SD8qLW_calGrid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.SD8qLW_calWeek span{text-align:center;color:var(--gs-fg-faint);font-size:11px;line-height:14px}.SD8qLW_calGrid button{border-radius:var(--gs-r-control);height:26px;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);font-variant-numeric:tabular-nums;cursor:pointer;background:0 0;border:none}.SD8qLW_calGrid button:hover{background:var(--gs-raise);color:var(--gs-fg)}.SD8qLW_calGrid button.SD8qLW_calOut{color:var(--gs-fg-fainter)}.SD8qLW_calGrid button.SD8qLW_calToday{color:var(--gs-accent);font-weight:600}.SD8qLW_calGrid button.SD8qLW_calIn{background:var(--gs-accent-bg);color:var(--gs-fg)}.SD8qLW_calGrid button.SD8qLW_calMark{background:var(--gs-accent);color:var(--gs-on-accent);font-weight:600}.SD8qLW_funnelBoundRows{flex:none;grid-template-columns:1fr 1fr;gap:6px;display:grid}.SD8qLW_funnelBoundRow{box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);align-items:center;gap:4px;min-width:0;padding:3px 6px;font-size:11px;line-height:16px;display:flex}.SD8qLW_funnelBoundKey{color:var(--gs-fg-faint);flex:none}.SD8qLW_funnelBoundVal{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--gs-fg-faint);font-variant-numeric:tabular-nums;flex:1;overflow:hidden}.SD8qLW_funnelBoundValSet{color:var(--gs-fg)}.SD8qLW_funnelBoundClear{color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;border:none;flex:none;padding:0 2px;line-height:1}.SD8qLW_funnelBoundClear:hover{color:var(--gs-danger,var(--gs-fg))}.SD8qLW_funnelSearch{box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);height:26px;color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:none;padding:0 8px}.SD8qLW_funnelSearch::placeholder{color:var(--gs-fg-faint)}.SD8qLW_funnelSearch:focus{border-color:var(--gs-accent);box-shadow:0 0 0 2px var(--gs-accent-bg)}.SD8qLW_funnelList{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--gs-fg-fainter) transparent;flex-direction:column;flex:auto;gap:1px;min-height:0;margin:0 -4px;padding:0 4px;display:flex;overflow-y:auto}.SD8qLW_funnelList::-webkit-scrollbar{width:10px}.SD8qLW_funnelList::-webkit-scrollbar-track{background:0 0}.SD8qLW_funnelList::-webkit-scrollbar-thumb{background:var(--gs-fg-fainter);background-clip:content-box;border:3px solid #0000;border-radius:5px}.SD8qLW_funnelRow{box-sizing:border-box;border-radius:var(--gs-r-control);cursor:pointer;align-items:center;gap:6px;min-height:24px;padding:0 4px;display:flex}.SD8qLW_funnelRow:hover{background:var(--gs-raise)}.SD8qLW_funnelRow:has(input[type=checkbox]:checked) .SD8qLW_funnelName,.SD8qLW_funnelRow:has(input[type=checkbox]:indeterminate) .SD8qLW_funnelName{color:var(--gs-fg)}.SD8qLW_funnelRow input[type=checkbox]{-webkit-appearance:none;appearance:none;box-sizing:border-box;border:1px solid var(--gs-fg-fainter);cursor:pointer;background:0 0;border-radius:3px;flex:none;width:14px;height:14px;margin:0;transition:background .12s,border-color .12s;position:relative}.SD8qLW_funnelRow input[type=checkbox]:hover{border-color:var(--gs-fg-dim)}.SD8qLW_funnelRow input[type=checkbox]:checked,.SD8qLW_funnelRow input[type=checkbox]:indeterminate{background:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_funnelRow input[type=checkbox]:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_funnelRow input[type=checkbox]:checked:after{content:\"\";border:solid var(--gs-on-accent);border-width:0 1.5px 1.5px 0;width:3px;height:7px;position:absolute;top:1px;left:4px;transform:rotate(42deg)}.SD8qLW_funnelRow input[type=checkbox]:indeterminate:after{content:\"\";background:var(--gs-on-accent);border-radius:1px;width:8px;height:2px;position:absolute;top:5px;left:2px}.SD8qLW_pathNode,.SD8qLW_pathChildren{flex-direction:column;display:flex}.SD8qLW_pathFileGlyph,.SD8qLW_pathDirGlyph{width:16px;height:16px;color:var(--gs-fg-dim);flex:none}.SD8qLW_funnelRow:hover .SD8qLW_pathFileGlyph,.SD8qLW_funnelRow:hover .SD8qLW_pathDirGlyph{color:var(--gs-fg-muted)}.SD8qLW_funnelName{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--gs-fg-muted);flex:1;overflow:hidden}.SD8qLW_funnelCount{color:var(--gs-fg-faint);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.SD8qLW_funnelMore{color:var(--gs-fg-faint);padding:4px 6px}.SD8qLW_funnelChevron{width:14px;color:var(--gs-fg-faint);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-family:inherit;font-size:9px;line-height:16px}.SD8qLW_funnelChevron:hover:not(:disabled){color:var(--gs-fg)}.SD8qLW_funnelChevron:disabled{cursor:default}.SD8qLW_funnelPresets{flex:none;gap:4px;display:flex}.SD8qLW_funnelPreset{flex:1 1 0;min-width:0;padding:0 6px}.SD8qLW_funnelPreset.SD8qLW_funnelPresetActive{color:var(--gs-accent);border-color:var(--gs-accent);background:var(--gs-accent-bg)}.SD8qLW_funnelFoot{border-top:1px solid var(--gs-border-soft);background:var(--gs-bg);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:11px;line-height:16px;display:flex}.SD8qLW_funnelFootCount{color:var(--gs-fg-faint);font-variant-numeric:tabular-nums}.SD8qLW_funnelFootCountOn{color:var(--gs-fg-muted)}.SD8qLW_funnelFootClear{border-radius:var(--gs-r-control);color:var(--gs-fg-dim);cursor:pointer;background:0 0;border:none;flex:none;padding:2px 6px;font-family:inherit;font-size:11px;line-height:16px}.SD8qLW_funnelFootClear:hover:not(:disabled){color:var(--gs-fg);background:var(--gs-raise)}.SD8qLW_funnelFootClear:disabled{color:var(--gs-fg-fainter);cursor:default}.SD8qLW_commitPopSubject{color:var(--gs-fg);font-size:var(--gs-t-ui);white-space:pre-wrap;overflow-wrap:anywhere;user-select:text;font-weight:600;line-height:18px}.SD8qLW_commitPopBody{color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);white-space:pre-wrap;overflow-wrap:anywhere;user-select:text;margin:0;line-height:18px}.SD8qLW_tabs{padding:0 var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);flex:none;gap:24px;font-family:inherit;display:flex}.SD8qLW_tab{font-family:inherit;font-size:var(--gs-t-ui);color:var(--gs-fg-dim);cursor:pointer;background:0 0;border:none;padding:8px 0 9px;font-weight:500;line-height:16px;position:relative}.SD8qLW_tab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.SD8qLW_tabActive{color:var(--gs-accent)}.SD8qLW_tabActive:after{background:var(--gs-accent)}.SD8qLW_compareBar{padding:8px var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);color:var(--gs-fg-dim);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-dense);flex-wrap:wrap;flex:none;align-items:center;gap:10px;display:flex}.SD8qLW_compareArrow{color:var(--gs-fg-faint)}.SD8qLW_refPicker{align-items:center;gap:6px;display:inline-flex;position:relative}.SD8qLW_refLabel{color:var(--gs-fg-faint);flex:none}.SD8qLW_refButton{justify-content:space-between;max-width:260px}.SD8qLW_refValue{min-width:0;overflow:hidden}.SD8qLW_refCaret{color:var(--gs-fg-faint);flex:none;font-size:9px}.SD8qLW_refPop{z-index:10;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-panel);width:300px;max-width:80vw;box-shadow:0 12px 32px var(--gs-shadow);flex-direction:column;display:flex;position:absolute;top:calc(100% + 4px);left:0;overflow:hidden}.SD8qLW_menuPop{width:auto;min-width:100%;padding:4px;left:auto;right:0}.SD8qLW_refSearch{border:0;border-bottom:1px solid var(--gs-border-soft);background:var(--gs-bg);color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:none;padding:7px 10px}.SD8qLW_refSearch::placeholder{color:var(--gs-fg-faint)}.SD8qLW_refList{flex:1;max-height:280px;padding:4px;overflow-y:auto}.SD8qLW_refGroup{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);letter-spacing:.04em;text-transform:uppercase;padding:6px 8px 3px;font-weight:600}.SD8qLW_refRow{box-sizing:border-box;border-radius:var(--gs-r-control);width:100%;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:5px 8px;display:flex}.SD8qLW_refRow:hover{background:var(--gs-raise);color:var(--gs-fg)}.SD8qLW_refRowSpacer{flex:none;width:12px}.SD8qLW_refRowName{flex:auto;min-width:0;overflow:hidden}.SD8qLW_refEmpty{color:var(--gs-fg-faint);font-size:var(--gs-t-dense);padding:14px 10px}.SD8qLW_refFoot{border-top:1px solid var(--gs-border-soft);color:var(--gs-fg-faint);font-size:var(--gs-t-meta);flex:none;padding:5px 10px}.SD8qLW_commitsPane{box-sizing:border-box;width:26%;min-height:0;min-width:var(--gs-min-commits);background:var(--gs-surface);flex-direction:column;flex:0 auto;max-width:340px;display:flex}.SD8qLW_paneHead{box-sizing:border-box;min-height:37px;padding:6px var(--gs-gutter-pane);border-bottom:1px solid var(--gs-border-soft);color:var(--gs-fg-dim);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-dense);flex-wrap:wrap;flex:none;align-items:center;gap:8px;display:flex}.SD8qLW_paneTitle{font-weight:600}.SD8qLW_commitsSentinel{flex:none;height:1px}.SD8qLW_commitsFoot{color:var(--gs-fg-faint);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-meta);text-align:center;flex:none;min-height:16px;padding:8px}.SD8qLW_commits{flex-direction:column;flex:1;min-height:0;padding:4px 6px 4px 0;display:flex;overflow-y:auto}.SD8qLW_commitLine{height:var(--gs-commit-row);flex:none;align-items:stretch;display:flex}.SD8qLW_graphCell{flex:none;display:block}.SD8qLW_commit{box-sizing:border-box;border-radius:var(--gs-r-surface);text-align:left;cursor:pointer;min-width:0;height:100%;font-family:inherit;font-size:var(--gs-t-dense);background:0 0;border:1px solid #0000;flex:auto;align-items:center;gap:10px;margin:1px 0;padding:4px 8px;transition:background .12s,border-color .12s;display:flex;overflow:hidden}.SD8qLW_commitsPane[data-layout=columns] .SD8qLW_commit{flex-direction:column;justify-content:center;align-items:stretch;gap:2px}.SD8qLW_commitsPane[data-layout=columns] .SD8qLW_commitSubjectRow{flex:none}.SD8qLW_commitTop{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.SD8qLW_commit:hover{background:var(--gs-raise)}.SD8qLW_commitActive{border-color:var(--gs-accent-border);background:var(--gs-accent-bg)}.SD8qLW_commitMeta{flex:none;align-items:baseline;gap:8px;display:flex}.SD8qLW_commitHash{color:var(--gs-info);flex:none}.SD8qLW_commitSubjectRow{flex:auto;align-items:baseline;gap:4px;min-width:0;display:flex}.SD8qLW_commitSubject{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--gs-fg-muted);flex:0 auto;overflow:hidden}.SD8qLW_commitHasBody{color:var(--gs-fg-faint);letter-spacing:.04em;flex:none}.SD8qLW_commitRef{white-space:nowrap;text-overflow:ellipsis;border:1px solid var(--gs-accent-border);border-radius:var(--gs-r-pill);background:var(--gs-accent-bg);max-width:96px;color:var(--gs-accent);font-size:var(--gs-t-meta);flex:none;padding:0 5px;line-height:15px;overflow:hidden}.SD8qLW_commitWhen{color:var(--gs-fg-faint);flex:none}.SD8qLW_commitAuthor{text-overflow:ellipsis;white-space:nowrap;max-width:120px;color:var(--gs-fg-dim);flex:none;overflow:hidden}.SD8qLW_body{z-index:1;flex:1;min-height:0;display:flex}.SD8qLW_body[data-stacked]{flex-direction:column}.SD8qLW_bodyRow{flex:1 1 0;min-width:0;min-height:0;display:flex}.SD8qLW_body[data-stacked] .SD8qLW_commitsPane{width:auto;min-width:0;max-width:none;height:34%;min-height:var(--gs-min-commits-tall);max-height:max(var(--gs-min-commits-tall), calc(100% - var(--gs-min-stacked-lower)));flex:none}.SD8qLW_treeCol{box-sizing:border-box;width:28%;min-height:0;min-width:var(--gs-min-tree);background:var(--gs-surface);flex-direction:column;flex:0 auto;max-width:400px;display:flex}.SD8qLW_treeWrap{box-sizing:border-box;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.SD8qLW_treeTools{box-sizing:border-box;min-height:37px;padding:6px var(--gs-gutter-pane);border-bottom:1px solid var(--gs-border-soft);flex-wrap:wrap;flex:none;justify-content:space-between;align-items:center;gap:6px;display:flex}.SD8qLW_treeActions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.SD8qLW_treeLead{align-items:center;gap:4px;min-width:0;display:flex}.SD8qLW_treeLabel{white-space:nowrap;color:var(--gs-fg-dim);font-size:var(--gs-t-dense);flex:none}.SD8qLW_treeFilter{padding:6px var(--gs-gutter-pane);border-bottom:1px solid var(--gs-border-soft);flex:none;align-items:center;display:flex;position:relative}.SD8qLW_treeFilterInput{min-width:0;height:var(--gs-h-compact);box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:auto;padding:0 24px 0 8px}.SD8qLW_treeFilterInput:focus{border-color:var(--gs-accent)}.SD8qLW_treeFilterInput::placeholder{color:var(--gs-fg-faint)}.SD8qLW_treeFilterClear{right:calc(var(--gs-gutter-pane) + 6px);border-radius:var(--gs-r-pill);width:16px;height:16px;color:var(--gs-fg-faint);font-size:var(--gs-t-ui);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;line-height:1;display:flex;position:absolute}.SD8qLW_treeFilterClear:hover{color:var(--gs-fg)}.SD8qLW_tree{flex:1;min-height:0;margin:0;padding:6px 0 16px;list-style:none;overflow:auto}.SD8qLW_treeEmpty{min-height:0;color:var(--gs-fg-faint);font-size:var(--gs-t-ui);flex:1;justify-content:center;align-items:center;display:flex}.SD8qLW_treeSub{margin:0;padding:0;list-style:none;position:relative}.SD8qLW_treeSub:before{content:\"\";top:0;bottom:0;left:var(--gs-rail,0);background:var(--gs-border-soft);width:1px;position:absolute}.SD8qLW_treeDirLi{position:relative}.SD8qLW_treeDir{box-sizing:border-box;width:100%;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:4px 12px 4px 8px;font-weight:600;display:flex}.SD8qLW_treeDir:hover{background:var(--gs-panel);color:var(--gs-fg-muted)}.SD8qLW_treeDirActive{color:var(--gs-fg-muted)}.SD8qLW_chevron{width:10px;color:var(--gs-fg-fainter);font-size:var(--gs-t-meta);flex:none;transition:transform .12s;display:inline-block}.SD8qLW_chevronOpen{transform:rotate(90deg)}.SD8qLW_treeDirName{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.SD8qLW_treeDirCount{background:var(--gs-neutral-bg);color:var(--gs-fg-dim);font-size:var(--gs-t-meta);border-radius:999px;flex:none;padding:0 6px;font-weight:600;line-height:16px}.SD8qLW_treeDirCounts{font-size:var(--gs-t-meta);font-variant-numeric:tabular-nums;flex:none}.SD8qLW_file{box-sizing:border-box;width:100%;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;border-left:2px solid #0000;align-items:center;gap:8px;padding:5px 14px;display:flex}.SD8qLW_file:hover{background:var(--gs-panel)}.SD8qLW_fileActive{background:var(--gs-panel);border-left-color:var(--gs-accent);color:var(--gs-fg)}.SD8qLW_fileStatus{width:18px;height:18px;font-weight:700;font-size:var(--gs-t-meta);border-radius:5px;flex:none;justify-content:center;align-items:center;line-height:1;display:inline-flex}.SD8qLW_stAdded,.SD8qLW_stUntracked{color:var(--gs-add);background:var(--gs-add-bg)}.SD8qLW_stDeleted{color:var(--gs-del);background:var(--gs-del-bg)}.SD8qLW_stModified{color:var(--gs-warn);background:var(--gs-warn-bg)}.SD8qLW_stRenamed{color:var(--gs-info);background:var(--gs-info-bg)}.SD8qLW_filePath{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.SD8qLW_fileBinary{background:var(--gs-neutral-bg);color:var(--gs-fg-dim);letter-spacing:.06em;border-radius:4px;flex:none;padding:0 5px;font-size:9px;font-weight:700}.SD8qLW_fileCounts{font-size:var(--gs-t-meta);font-variant-numeric:tabular-nums;flex:none}.SD8qLW_fileCountAdd{color:var(--gs-add)}.SD8qLW_fileCountDel{color:var(--gs-del)}.SD8qLW_diffPane{min-width:var(--gs-min-diff);background:var(--gs-surface);flex-direction:column;flex:1 1 0;display:flex;overflow:auto}.SD8qLW_diffWrap{flex-direction:column;flex:auto;width:100%;min-height:0;display:flex}.SD8qLW_diffScroll{outline:none;flex:1 1 0;min-height:0;overflow:auto}.SD8qLW_diffNav{border-bottom:1px solid var(--gs-border-soft);flex:none;justify-content:flex-end;align-items:center;gap:4px;padding:3px 12px 3px 0;display:flex}.SD8qLW_diffNav .SD8qLW_blockBtn{padding-inline:6px;line-height:0}.SD8qLW_diffPre{width:max-content;min-width:100%;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:var(--gs-t-dense);font-variant-ligatures:none;font-feature-settings:\"liga\" 0, \"calt\" 0;tab-size:4;flex-direction:column;margin:0;padding:8px 0 16px;font-weight:400;line-height:20px;display:flex}.SD8qLW_renameLine{border-bottom:1px solid var(--gs-border-soft);color:var(--gs-info);font-size:var(--gs-t-dense);flex:none;padding:8px 16px}.SD8qLW_renameLine code{color:var(--gs-fg)}.SD8qLW_line{white-space:nowrap;align-items:stretch;width:max-content;min-width:100%;min-height:20px;line-height:20px;display:flex}.SD8qLW_lnOld,.SD8qLW_lnNew{box-sizing:border-box;text-align:right;width:3.2em;color:var(--gs-fg-fainter);user-select:none;font-variant-numeric:tabular-nums;flex:none;padding:0 8px}.SD8qLW_line:hover .SD8qLW_lnOld,.SD8qLW_line:hover .SD8qLW_lnNew{color:var(--gs-fg-dim)}.SD8qLW_gutter{text-align:center;user-select:none;flex:none;width:1.4em}.SD8qLW_code{white-space:pre;flex:1 0 auto;padding:0 16px 0 10px}.SD8qLW_lineAdd{background:var(--gs-add-line)}.SD8qLW_lineDel{background:var(--gs-del-line)}.SD8qLW_lineAdd .SD8qLW_lnOld,.SD8qLW_lineAdd .SD8qLW_lnNew,.SD8qLW_lineAdd .SD8qLW_gutter{background:var(--gs-add-num,var(--gs-add-line))}.SD8qLW_lineDel .SD8qLW_lnOld,.SD8qLW_lineDel .SD8qLW_lnNew,.SD8qLW_lineDel .SD8qLW_gutter{background:var(--gs-del-num,var(--gs-del-line))}.SD8qLW_lineContext{color:var(--gs-fg-muted)}.SD8qLW_lineHunk{background:var(--gs-hunk)}.SD8qLW_lineHunk .SD8qLW_code{color:var(--gs-fg-dim)}.SD8qLW_lineHunk .SD8qLW_lnOld,.SD8qLW_lineHunk .SD8qLW_lnNew,.SD8qLW_lineHunk .SD8qLW_gutter{background:var(--gs-hunk-num,var(--gs-hunk))}.SD8qLW_signAdd{color:var(--gs-add)}.SD8qLW_signDel{color:var(--gs-del)}.SD8qLW_wordAdd{background:var(--gs-add-word);border-radius:2px}.SD8qLW_wordDel{background:var(--gs-del-word);border-radius:2px}.SD8qLW_sidePane{flex-direction:column;width:100%;min-width:0;height:100%;display:flex}.SD8qLW_sideScroll{flex:1 1 0;min-height:0;overflow:hidden auto}.SD8qLW_sideCols{align-items:stretch;min-height:100%;display:flex}.SD8qLW_sideCol{flex:none;min-width:0;overflow-x:auto}.SD8qLW_sideColRight{flex:1 1 0}.SD8qLW_sideColGrid{width:max-content;min-width:100%;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:var(--gs-t-dense);font-variant-ligatures:none;font-feature-settings:\"liga\" 0, \"calt\" 0;tab-size:4;grid-template-columns:3.2em 1fr;align-content:start;padding:8px 0 16px;font-weight:400;line-height:20px;display:grid}.SD8qLW_sideColGridBlame{grid-template-columns:13em 3.2em 1fr}.SD8qLW_blameCell{box-sizing:border-box;border-right:1px solid var(--gs-border-soft);color:var(--gs-fg-faint);font-size:var(--gs-t-meta);white-space:pre;text-overflow:ellipsis;user-select:none;padding:0 8px 0 10px;overflow:hidden}.SD8qLW_sideTabs{z-index:5;border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);flex:none;gap:16px;padding:6px 16px 0;display:flex}.SD8qLW_sideTab{font-family:inherit;font-size:var(--gs-t-meta);color:var(--gs-fg-dim);cursor:pointer;background:0 0;border:none;padding:2px 0 5px;font-weight:500;line-height:16px;position:relative}.SD8qLW_sideTab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.SD8qLW_sideTabActive{color:var(--gs-accent)}.SD8qLW_sideTabActive:after{background:var(--gs-accent)}.SD8qLW_sideNotice{border-bottom:1px solid var(--gs-border-soft);color:var(--gs-info);font-size:var(--gs-t-dense);flex:none;padding:8px 16px}.SD8qLW_sideNum{box-sizing:border-box;text-align:right;color:var(--gs-fg-fainter);user-select:none;font-variant-numeric:tabular-nums;padding:0 8px}.SD8qLW_sideNumAdd{background:var(--gs-add-num,var(--gs-add-line))}.SD8qLW_sideNumDel{background:var(--gs-del-num,var(--gs-del-line))}.SD8qLW_sideCode{white-space:pre;min-height:20px;padding:0 16px 0 10px}.SD8qLW_sideCodeSame{color:var(--gs-fg-muted)}.SD8qLW_sideCodeAdd{background:var(--gs-add-line)}.SD8qLW_sideCodeDel{background:var(--gs-del-line)}.SD8qLW_sideCellBlock{position:relative}.SD8qLW_sideBlockHot{outline:1px solid var(--gs-accent);outline-offset:-1px}.SD8qLW_blockBar{z-index:4;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-surface-2,var(--gs-bg));box-shadow:0 4px 14px var(--gs-shadow);white-space:nowrap;gap:4px;padding:2px;display:flex;position:absolute;top:-21px;left:0}.SD8qLW_blockBtn{border:1px solid var(--gs-border);border-radius:var(--gs-r-pill);background:var(--gs-bg);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-meta);cursor:pointer;padding:0 8px;line-height:16px}.SD8qLW_blockBtn:hover:not(:disabled){color:var(--gs-fg);border-color:var(--gs-accent)}.SD8qLW_blockBtn:disabled{opacity:.45;cursor:default}.SD8qLW_blockBtnDanger{color:var(--gs-del);border-color:var(--gs-del-bg,var(--gs-border))}.SD8qLW_blockBtnDanger:hover:not(:disabled){color:var(--gs-del);border-color:var(--gs-del)}.SD8qLW_sideArmable{cursor:text}.SD8qLW_cmHost{position:relative}.SD8qLW_cmHost[data-editable]:before{content:\"\";background:var(--gs-accent);opacity:.32;pointer-events:none;border-radius:1px;width:2px;transition:opacity .14s;position:absolute;top:0;bottom:0;left:0}.SD8qLW_cmHost[data-editable]:focus-within:before{opacity:1}.SD8qLW_sideNav{align-items:center;gap:4px;margin-left:auto;padding:2px 0 5px;display:flex}.SD8qLW_sideNav .SD8qLW_blockBtn{padding-inline:6px;line-height:0}.SD8qLW_sideNavCount{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);white-space:nowrap}.SD8qLW_sideActions{align-items:flex-start;gap:4px;margin-left:auto;padding:2px 0 5px;display:flex}.SD8qLW_sideSaveReady{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_sideBanner{border-bottom:1px solid var(--gs-border-soft);background:var(--gs-del-bg,transparent);color:var(--gs-del);font-size:var(--gs-t-dense);flex-direction:column;flex:none;gap:6px;padding:8px 16px;display:flex}.SD8qLW_sideBannerTitle{font-weight:600}.SD8qLW_sideBannerActs{gap:4px;display:flex}.SD8qLW_sideEditCell{position:relative}.SD8qLW_empty{color:var(--gs-fg-faint);font-size:var(--gs-t-ui);padding:32px 24px}.SD8qLW_syncBar{padding:8px var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);font-size:var(--gs-t-dense);color:var(--gs-fg-dim);flex-wrap:wrap;flex:none;align-items:center;gap:8px;display:flex}.SD8qLW_syncUpstream{white-space:nowrap;text-overflow:ellipsis;max-width:260px;color:var(--gs-fg-muted);font-variant-numeric:tabular-nums;overflow:hidden}.SD8qLW_syncLevel{color:var(--gs-fg-faint)}.SD8qLW_syncSpacer{flex:auto}.SD8qLW_btn:disabled,.SD8qLW_treeIcon:disabled,.SD8qLW_miniBtn:disabled,.SD8qLW_refButton:disabled,.SD8qLW_funnelButton:disabled{opacity:.45;cursor:default}.SD8qLW_btn[data-quiet]:disabled,.SD8qLW_refButton[data-quiet]:disabled{opacity:1}.SD8qLW_opBanner{padding:8px var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);font-size:var(--gs-t-dense);white-space:pre-wrap;overflow-wrap:anywhere;user-select:text;flex:none;line-height:18px}.SD8qLW_opBannerOk{background:var(--gs-add-bg);color:var(--gs-add)}.SD8qLW_opBannerBad{background:var(--gs-del-bg);color:var(--gs-del)}.SD8qLW_fileLi{align-items:stretch;display:flex}.SD8qLW_fileLi .SD8qLW_file{flex:auto;min-width:0}.SD8qLW_fileDiscard{width:22px;color:var(--gs-fg-faint);opacity:0;cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;transition:opacity .12s,color .12s;display:flex}.SD8qLW_fileLi:hover .SD8qLW_fileDiscard,.SD8qLW_fileDiscard:focus-visible{opacity:1}.SD8qLW_fileDiscard:hover{color:var(--gs-del)}.SD8qLW_fileDiscard:focus-visible{outline:2px solid var(--gs-accent);outline-offset:-2px;border-radius:var(--gs-r-control)}.SD8qLW_treeRow{align-items:stretch;display:flex}.SD8qLW_treeRow .SD8qLW_treeDir{flex:auto;min-width:0}.SD8qLW_checkBox{cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;width:22px;padding:0;display:flex}.SD8qLW_checkMark{box-sizing:border-box;border:1px solid var(--gs-fg-faint);background:var(--gs-bg);color:#0000;border-radius:3px;justify-content:center;align-items:center;width:14px;height:14px;font-size:10px;font-weight:700;line-height:1;transition:background .12s,border-color .12s;display:flex}.SD8qLW_checkBox:hover .SD8qLW_checkMark{border-color:var(--gs-accent)}.SD8qLW_checkBox:focus-visible{outline:none}.SD8qLW_checkBox:focus-visible .SD8qLW_checkMark{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_checkMarkOn,.SD8qLW_checkMarkPartial{border-color:var(--gs-accent);background:var(--gs-accent);color:var(--gs-on-accent)}.SD8qLW_commitBox{padding:8px var(--gs-gutter-pane) 10px;border-top:1px solid var(--gs-border);background:var(--gs-surface-2);flex-direction:column;flex:none;gap:6px;display:flex}.SD8qLW_commitMessage{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-bg);width:100%;min-height:46px;max-height:160px;color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);resize:vertical;outline:none;padding:6px 8px;line-height:18px}.SD8qLW_commitMessage:focus{border-color:var(--gs-accent-border)}.SD8qLW_commitMessage::placeholder{color:var(--gs-fg-faint)}.SD8qLW_commitRow{align-items:center;gap:8px;display:flex}.SD8qLW_commitAmend{color:var(--gs-fg-dim);font-size:var(--gs-t-meta);cursor:pointer;align-items:center;gap:4px;display:inline-flex}.SD8qLW_commitAmend input{accent-color:var(--gs-accent);cursor:pointer}.SD8qLW_commitStaged{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);margin-left:auto}.SD8qLW_commitLead{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);margin:0;line-height:15px}.SD8qLW_commitBtn{box-sizing:border-box;min-width:92px;height:var(--gs-h-control);border-radius:var(--gs-r-control);background:var(--gs-accent);color:var(--gs-on-accent);font-family:inherit;font-size:var(--gs-t-ui);white-space:nowrap;cursor:pointer;border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0 16px;font-weight:600;line-height:1;transition:filter .12s,opacity .12s;display:inline-flex}.SD8qLW_commitBtn:hover:not(:disabled){filter:brightness(1.1)}.SD8qLW_commitBtn:focus-visible{outline:2px solid var(--gs-accent);outline-offset:2px}.SD8qLW_commitBtn:disabled{background:var(--gs-raise);color:var(--gs-fg-faint);border-color:var(--gs-border);cursor:default}.SD8qLW_btn,.SD8qLW_miniBtn,.SD8qLW_treeIcon,.SD8qLW_commitCopy,.SD8qLW_scopeBtn,.SD8qLW_refButton,.SD8qLW_funnelButton,.SD8qLW_funnelPreset,.SD8qLW_layoutButton{box-sizing:border-box;height:var(--gs-h-control);padding:var(--gs-pad-control);border:1px solid var(--gs-border);border-radius:var(--gs-r-control);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-ui);white-space:nowrap;cursor:pointer;background:0 0;flex:none;justify-content:center;align-items:center;gap:6px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.SD8qLW_btn:hover,.SD8qLW_miniBtn:hover,.SD8qLW_treeIcon:hover,.SD8qLW_commitCopy:hover,.SD8qLW_scopeBtn:hover,.SD8qLW_refButton:hover,.SD8qLW_funnelButton:hover,.SD8qLW_funnelPreset:hover,.SD8qLW_layoutButton:hover{background:var(--gs-raise);color:var(--gs-fg);border-color:var(--gs-fg-fainter)}.SD8qLW_btn:focus-visible,.SD8qLW_miniBtn:focus-visible,.SD8qLW_treeIcon:focus-visible,.SD8qLW_commitCopy:focus-visible,.SD8qLW_scopeBtn:focus-visible,.SD8qLW_refButton:focus-visible,.SD8qLW_funnelPreset:focus-visible,.SD8qLW_layoutButton:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_btn,.SD8qLW_refButton{border-radius:var(--gs-r-pill)}.SD8qLW_treeIcon,.SD8qLW_commitCopy,.SD8qLW_funnelPreset,.SD8qLW_layoutButton{height:var(--gs-h-compact);padding:var(--gs-pad-compact);font-size:var(--gs-t-dense)}.SD8qLW_treeIcon{width:var(--gs-h-compact);padding:0}.SD8qLW_layoutSwitch{flex:none;gap:2px;margin-left:auto;display:inline-flex}.SD8qLW_layoutButton{width:var(--gs-h-compact);padding:0}.SD8qLW_layoutButton.SD8qLW_layoutButtonOn{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_layoutGlyph{display:block}.SD8qLW_treeIcon.SD8qLW_treeIconOn{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_treeIconGlyph{font-size:var(--gs-t-meta);line-height:1;display:block}.SD8qLW_treeIconDown{transform:rotate(90deg)}.SD8qLW_scopeBtn{flex:1 1 0}.SD8qLW_scopeBtnActive,.SD8qLW_miniBtnPrimary,.SD8qLW_segmentActive,.SD8qLW_refRowActive,.SD8qLW_paletteRowActive{border-color:var(--gs-accent-border);background:var(--gs-accent-bg);color:var(--gs-accent);font-weight:600}.SD8qLW_btnIcon{width:var(--gs-h-control);padding:0}.SD8qLW_btnIcon svg{display:block}.SD8qLW_btnClose:hover:not(:disabled){border-color:var(--gs-del);background:var(--gs-del-bg);color:var(--gs-del)}.SD8qLW_btnBehind{border-color:var(--gs-warn);background:var(--gs-warn-bg);color:var(--gs-warn);font-weight:600}.SD8qLW_btnBehind:hover:not(:disabled){background:var(--gs-warn-bg);color:var(--gs-warn);border-color:var(--gs-warn)}.SD8qLW_btnAhead{border-color:var(--gs-add);background:var(--gs-add-bg);color:var(--gs-add);font-weight:600}.SD8qLW_btnAhead:hover:not(:disabled){background:var(--gs-add-bg);color:var(--gs-add);border-color:var(--gs-add)}.SD8qLW_btnPrimary{border-color:var(--gs-accent);background:var(--gs-accent);color:var(--gs-on-accent,#fff);font-weight:600}.SD8qLW_btnPrimary:hover:not(:disabled){background:var(--gs-accent);color:var(--gs-on-accent,#fff);border-color:var(--gs-accent)}.SD8qLW_btnCount{font-variant-numeric:tabular-nums;opacity:.85;border-left:1px solid;margin-left:1px;padding-left:6px}.SD8qLW_pullGroup{flex:none;align-items:center;display:inline-flex}.SD8qLW_pullGroup>.SD8qLW_refPicker>.SD8qLW_refButton{border-right-color:#0000;border-top-right-radius:0;border-bottom-right-radius:0}.SD8qLW_pullGroup>.SD8qLW_btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.SD8qLW_drawer{scrollbar-width:thin;scrollbar-color:var(--gs-border) transparent}.SD8qLW_drawer ::-webkit-scrollbar{width:10px;height:10px}.SD8qLW_drawer ::-webkit-scrollbar-track,.SD8qLW_drawer ::-webkit-scrollbar-corner{background:0 0}.SD8qLW_drawer ::-webkit-scrollbar-thumb{background:var(--gs-border);background-clip:padding-box;border:3px solid #0000;border-radius:999px}.SD8qLW_drawer ::-webkit-scrollbar-thumb:hover{background:var(--gs-fg-faint);background-clip:padding-box}.SD8qLW_commitRefMore{border-radius:var(--gs-r-pill);background:var(--gs-neutral-bg);color:var(--gs-fg-dim);font-size:var(--gs-t-meta);cursor:default;flex:none;padding:0 5px;line-height:15px}.SD8qLW_confirmScrim{background:var(--gs-backdrop);justify-content:center;align-items:center;padding:24px;animation:.12s ease-out SD8qLW_gsFade;display:flex}.SD8qLW_confirmBox{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-drawer);background:var(--gs-bg);width:min(440px,100%);box-shadow:0 18px 48px var(--gs-shadow);flex-direction:column;gap:10px;padding:18px;display:flex}.SD8qLW_confirmTitle{color:var(--gs-fg);font-size:var(--gs-t-ui);font-weight:600}.SD8qLW_confirmBody{color:var(--gs-fg-dim);font-size:var(--gs-t-dense);overflow-wrap:anywhere;line-height:1.55}.SD8qLW_confirmActions{flex-direction:row-reverse;gap:8px;margin-top:2px;display:flex}.SD8qLW_btn.SD8qLW_btnDanger{border-color:var(--gs-del);background:var(--gs-del);color:var(--gs-on-accent,#fff);font-weight:600}.SD8qLW_btn.SD8qLW_btnDanger:hover:not(:disabled){border-color:var(--gs-del);background:var(--gs-del);color:var(--gs-on-accent,#fff)}.SD8qLW_fbTree{min-width:var(--gs-min-tree);background:var(--gs-surface-2);flex-direction:column;flex:none;gap:4px;padding:6px;display:flex;overflow:auto}.SD8qLW_fbSearch{box-sizing:border-box;width:100%;font:inherit;font-size:var(--gs-t-meta);color:var(--gs-fg);background:var(--gs-surface);border:1px solid var(--gs-border);border-radius:4px;flex:none;padding:4px 6px}.SD8qLW_fbSearch:focus{border-color:var(--gs-accent);outline:none}.SD8qLW_fbNote{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);flex:none;padding:2px 4px}.SD8qLW_fbList{margin:0;padding:0;list-style:none}.SD8qLW_fbRow{width:100%;font:inherit;font-size:var(--gs-t-dense);color:var(--gs-fg-dim);text-align:left;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:3px;align-items:center;gap:4px;padding:2px 6px 2px 4px;display:flex;overflow:hidden}.SD8qLW_fbRow:hover{background:var(--gs-hover)}.SD8qLW_fbRowActive{background:var(--gs-selected);color:var(--gs-fg)}.SD8qLW_fbDirName,.SD8qLW_fbFileName{text-overflow:ellipsis;overflow:hidden}.SD8qLW_fbMain{min-width:var(--gs-min-diff);background:var(--gs-surface);flex-direction:column;flex:1 1 0;min-height:0;display:flex}.SD8qLW_fbHeader{border-bottom:1px solid var(--gs-border);flex:none;align-items:flex-start;gap:8px;padding:4px 8px 0;display:flex}.SD8qLW_fbPath{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);text-overflow:ellipsis;white-space:nowrap;padding:4px 0;overflow:hidden}.SD8qLW_fbBody{flex:1 1 0;min-height:0;padding:4px 8px;overflow:auto}.SD8qLW_fbCommit{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);background:var(--gs-surface-2);border-bottom:1px solid var(--gs-border);flex:none;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.SD8qLW_fbCommitLine{color:var(--gs-fg-faint);font-variant-numeric:tabular-nums;flex:none}.SD8qLW_fbCommitWho{color:var(--gs-fg);flex:none;font-weight:600}.SD8qLW_fbCommitWhen{font-variant-numeric:tabular-nums;flex:none}.SD8qLW_fbCommitHash{color:var(--gs-fg-faint);flex:none;font-family:inherit}.SD8qLW_fbCommitWhat{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--gs-fg);flex:auto;overflow:hidden}.SD8qLW_fbCommitHint{color:var(--gs-fg-faint)}.SD8qLW_fbMore{font-size:var(--gs-t-meta);color:var(--gs-fg-faint);padding:2px 6px 4px 4px;font-style:italic;display:block}.SD8qLW_imgPane{flex-direction:column;gap:8px;height:100%;min-height:0;display:flex}.SD8qLW_imgStage{border-radius:var(--gs-r-control);background-color:var(--gs-surface-2);background-image:linear-gradient(45deg, var(--gs-border-soft) 25%, transparent 25%, transparent 75%, var(--gs-border-soft) 75%), linear-gradient(45deg, var(--gs-border-soft) 25%, transparent 25%, transparent 75%, var(--gs-border-soft) 75%);background-position:0 0,8px 8px;background-size:16px 16px;flex:auto;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.SD8qLW_imgShot{object-fit:contain;image-rendering:auto;max-width:100%;max-height:100%}.SD8qLW_imgStage[data-actual]{justify-content:flex-start;align-items:flex-start}.SD8qLW_imgStage[data-actual] .SD8qLW_imgShot{object-fit:none;max-width:none;max-height:none}.SD8qLW_imgCaption{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;display:flex}";
1224
+ const css = ".SD8qLW_card{border:1px solid var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:7px;padding:3px 10px;font-size:12px;line-height:18px;transition:background .12s,border-color .12s;display:inline-flex}.SD8qLW_card:hover,.SD8qLW_card:focus-visible{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3)}.SD8qLW_cardBranch{max-width:220px;color:var(--dsw-alias-label-primary);align-items:center;gap:4px;font-weight:550;display:inline-flex;overflow:hidden}.SD8qLW_cardBranchName{min-width:0;overflow:hidden}.SD8qLW_cardGlyph{opacity:.7;flex:none}.SD8qLW_cardDetached{background:var(--dsw-alias-state-warning-bg,#bb800926);color:var(--dsw-alias-state-warning-primary,#d29922);letter-spacing:.02em;border-radius:999px;padding:0 6px;font-size:10px;line-height:16px}.SD8qLW_cardWt{background:var(--dsw-alias-state-business-bg,#388bfd29);max-width:150px;color:var(--dsw-alias-state-business-primary,#58a6ff);letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;gap:3px;padding:0 6px;font-size:10px;line-height:16px;display:inline-flex;overflow:hidden}.SD8qLW_cardAhead,.SD8qLW_cardBehind{color:var(--dsw-alias-label-tertiary);font-size:11px}.SD8qLW_cardAhead{color:var(--dsw-alias-state-success-primary)}.SD8qLW_cardBehind{color:var(--dsw-alias-state-attention-primary,#d29922)}.SD8qLW_cardSep{background:var(--dsw-alias-border-l2);width:1px;height:14px}.SD8qLW_cardAdded{color:var(--dsw-alias-state-success-primary)}.SD8qLW_cardDeleted{color:var(--dsw-alias-state-error-primary)}.SD8qLW_cardFiles{color:var(--dsw-alias-label-tertiary)}.SD8qLW_overlay[data-gs-theme=github-dark]{--gs-bg:#0d1117;--gs-panel:#161b22;--gs-raise:#21262d;--gs-border:#30363d;--gs-border-soft:#21262d;--gs-fg:#e6edf3;--gs-fg-muted:#c9d1d9;--gs-fg-dim:#8b949e;--gs-fg-faint:#6e7681;--gs-fg-fainter:#484f58;--gs-accent:#58a6ff;--gs-accent-bg:#388bfd24;--gs-accent-border:#388bfd8c;--gs-add:#3fb950;--gs-del:#f85149;--gs-warn:#d29922;--gs-info:#79c0ff;--gs-add-bg:#2ea04329;--gs-del-bg:#f8514929;--gs-warn-bg:#bb800929;--gs-info-bg:#388bfd29;--gs-add-line:#12261e;--gs-del-line:#25181c;--gs-add-word:#1a4a29;--gs-del-word:#6b2b2b;--gs-add-num:#1c4428;--gs-del-num:#542426;--gs-hunk:#111d2e;--gs-hunk-num:#0c2d6b;--gs-neutral-bg:#6e76812e;--gs-backdrop:#01040999;--gs-shadow:#0104098c}.SD8qLW_overlay[data-gs-theme=github-light]{--gs-bg:#fff;--gs-panel:#f6f8fa;--gs-raise:#eaeef2;--gs-border:#d0d7de;--gs-border-soft:#eaeef2;--gs-fg:#1f2328;--gs-fg-muted:#32383f;--gs-fg-dim:#656d76;--gs-fg-faint:#8c959f;--gs-fg-fainter:#afb8c1;--gs-accent:#0969da;--gs-accent-bg:#0969da1a;--gs-accent-border:#0969da73;--gs-add:#1a7f37;--gs-del:#cf222e;--gs-warn:#9a6700;--gs-info:#0550ae;--gs-add-bg:#1a7f371f;--gs-del-bg:#cf222e1f;--gs-warn-bg:#9a67001f;--gs-info-bg:#0969da1f;--gs-add-line:#dafbe1;--gs-del-line:#ffebe9;--gs-add-word:#aceebb;--gs-del-word:#ffcecb;--gs-add-num:#aceebb;--gs-del-num:#ffcecb;--gs-hunk:#ddf4ff;--gs-hunk-num:#b6e3ff;--gs-neutral-bg:#6e76811f;--gs-backdrop:#1f232847;--gs-shadow:#1f232838}.SD8qLW_overlay[data-gs-theme=idea-dark]{--gs-bg:#1e1f22;--gs-panel:#2b2d30;--gs-raise:#393b40;--gs-border:#393b40;--gs-border-soft:#2b2d30;--gs-fg:#dfe1e5;--gs-fg-muted:#ced0d6;--gs-fg-dim:#9da0a8;--gs-fg-faint:#6f737a;--gs-fg-fainter:#4e5157;--gs-accent:#548af7;--gs-accent-bg:#548af729;--gs-accent-border:#548af78c;--gs-add:#5fad65;--gs-del:#e26e6e;--gs-warn:#f0a732;--gs-info:#3592c4;--gs-add-bg:#5fad6529;--gs-del-bg:#e26e6e29;--gs-warn-bg:#f0a73229;--gs-info-bg:#3592c429;--gs-add-line:#293c2e;--gs-del-line:#3d2b2b;--gs-add-word:#3d6640;--gs-del-word:#6b3838;--gs-hunk:#548af71a;--gs-neutral-bg:#9da0a82e;--gs-backdrop:#10111399;--gs-shadow:#00000080}.SD8qLW_overlay[data-gs-theme=idea-light]{--gs-bg:#fff;--gs-panel:#f7f8fa;--gs-raise:#ebecf0;--gs-border:#d3d5db;--gs-border-soft:#ebecf0;--gs-fg:#1e1f22;--gs-fg-muted:#3c3f44;--gs-fg-dim:#6c707e;--gs-fg-faint:#818594;--gs-fg-fainter:#a8adbd;--gs-accent:#3574f0;--gs-accent-bg:#3574f01a;--gs-accent-border:#3574f073;--gs-add:#398a4a;--gs-del:#cc4a4a;--gs-warn:#a8760b;--gs-info:#2b7fb8;--gs-add-bg:#398a4a1f;--gs-del-bg:#cc4a4a1f;--gs-warn-bg:#a8760b1f;--gs-info-bg:#2b7fb81f;--gs-add-line:#e6f5e9;--gs-del-line:#fbe9ea;--gs-add-word:#c2e5c9;--gs-del-word:#f5c9cc;--gs-hunk:#3574f012;--gs-neutral-bg:#6c707e1f;--gs-backdrop:#1e1f2242;--gs-shadow:#1e1f222e}.SD8qLW_overlay[data-gs-theme=vscode-dark]{--gs-bg:#1e1e1e;--gs-panel:#252526;--gs-raise:#2d2d30;--gs-border:#3e3e42;--gs-border-soft:#2d2d30;--gs-fg:#d4d4d4;--gs-fg-muted:#ccc;--gs-fg-dim:#9d9d9d;--gs-fg-faint:gray;--gs-fg-fainter:#5a5a5a;--gs-accent:#0098ff;--gs-accent-bg:#007acc3d;--gs-accent-border:#0098ff99;--gs-add:#89d185;--gs-del:#f14c4c;--gs-warn:#cca700;--gs-info:#75beff;--gs-add-bg:#89d1852e;--gs-del-bg:#f14c4c2e;--gs-warn-bg:#cca7002e;--gs-info-bg:#75beff2e;--gs-add-line:#9bb9552e;--gs-del-line:#ff000029;--gs-add-word:#9bb95566;--gs-del-word:#ff00005c;--gs-hunk:#007acc24;--gs-neutral-bg:#bebebe24;--gs-backdrop:#0000008c;--gs-shadow:#0009}.SD8qLW_overlay[data-gs-theme=vscode-light]{--gs-bg:#fff;--gs-panel:#f3f3f3;--gs-raise:#e8e8e8;--gs-border:#cecece;--gs-border-soft:#e8e8e8;--gs-fg:#1e1e1e;--gs-fg-muted:#333;--gs-fg-dim:#616161;--gs-fg-faint:#767676;--gs-fg-fainter:#a0a0a0;--gs-accent:#005fb8;--gs-accent-bg:#005fb81a;--gs-accent-border:#005fb873;--gs-add:#10793f;--gs-del:#b5200d;--gs-warn:#855b00;--gs-info:#005fb8;--gs-add-bg:#10793f1f;--gs-del-bg:#b5200d1f;--gs-warn-bg:#855b001f;--gs-info-bg:#005fb81f;--gs-add-line:#9bb95538;--gs-del-line:#ff000021;--gs-add-word:#9bb95573;--gs-del-word:#ff00004d;--gs-hunk:#005fb812;--gs-neutral-bg:#6161611f;--gs-backdrop:#00000040;--gs-shadow:#0000002e}.SD8qLW_overlay[data-gs-theme=cyberpunk-dark]{--gs-bg:#0b0417;--gs-panel:#14082a;--gs-raise:#1f0d3d;--gs-border:#3a1f6b;--gs-border-soft:#26124a;--gs-fg:#f0e6ff;--gs-fg-muted:#d5c2f5;--gs-fg-dim:#a98fd6;--gs-fg-faint:#7d64a8;--gs-fg-fainter:#56427a;--gs-accent:#00f0ff;--gs-on-accent:#0b0417;--gs-accent-bg:#00f0ff24;--gs-accent-border:#00f0ff80;--gs-add:#39ff88;--gs-del:#ff2e88;--gs-warn:#fc0;--gs-info:#00f0ff;--gs-add-bg:#39ff8824;--gs-del-bg:#ff2e8824;--gs-warn-bg:#ffcc0024;--gs-info-bg:#00f0ff24;--gs-add-line:#39ff881f;--gs-del-line:#ff2e881f;--gs-add-word:#39ff8857;--gs-del-word:#ff2e8857;--gs-hunk:#00f0ff1a;--gs-neutral-bg:#a98fd629;--gs-backdrop:#06020ead;--gs-shadow:#00f0ff24}.SD8qLW_overlay[data-gs-theme=cyberpunk-light]{--gs-bg:#fdfbff;--gs-panel:#f4eeff;--gs-raise:#e9dfff;--gs-border:#c9b3f0;--gs-border-soft:#e0d2f7;--gs-fg:#1a0b2e;--gs-fg-muted:#33195c;--gs-fg-dim:#6b4ba0;--gs-fg-faint:#8f74bd;--gs-fg-fainter:#b9a5d6;--gs-accent:#00a6b8;--gs-accent-bg:#00a6b81f;--gs-accent-border:#00a6b880;--gs-add:#00875a;--gs-del:#d6006e;--gs-warn:#b37a00;--gs-info:#00a6b8;--gs-add-bg:#00875a1f;--gs-del-bg:#d6006e1f;--gs-warn-bg:#b37a001f;--gs-info-bg:#00a6b81f;--gs-add-line:#00c88224;--gs-del-line:#ff2e881f;--gs-add-word:#00c88257;--gs-del-word:#ff2e884d;--gs-hunk:#00a6b814;--gs-neutral-bg:#6b4ba01f;--gs-backdrop:#1a0b2e47;--gs-shadow:#1a0b2e29}.SD8qLW_overlay[data-gs-theme=one-dark]{--gs-bg:#282c34;--gs-panel:#21252b;--gs-raise:#2c313a;--gs-border:#3e4451;--gs-border-soft:#2c313a;--gs-fg:#abb2bf;--gs-fg-muted:#b6bdca;--gs-fg-dim:#7f848e;--gs-fg-faint:#636d83;--gs-fg-fainter:#4b5263;--gs-accent:#61afef;--gs-accent-bg:#61afef24;--gs-accent-border:#61afef8c;--gs-add:#98c379;--gs-del:#e06c75;--gs-warn:#e5c07b;--gs-info:#56b6c2;--gs-add-bg:#98c37929;--gs-del-bg:#e06c7529;--gs-warn-bg:#e5c07b29;--gs-info-bg:#56b6c229;--gs-add-line:#98c37924;--gs-del-line:#e06c7524;--gs-add-word:#98c37961;--gs-del-word:#e06c7561;--gs-hunk:#61afef1a;--gs-neutral-bg:#7f848e2e;--gs-backdrop:#171a2199;--gs-shadow:#0f11158c}.SD8qLW_overlay[data-gs-theme=one-light]{--gs-bg:#fafafa;--gs-panel:#f0f0f0;--gs-raise:#e5e5e6;--gs-border:#d4d4d4;--gs-border-soft:#e5e5e6;--gs-fg:#383a42;--gs-fg-muted:#4a4c53;--gs-fg-dim:#696c77;--gs-fg-faint:#909196;--gs-fg-fainter:#b8b9bd;--gs-accent:#4078f2;--gs-accent-bg:#4078f21a;--gs-accent-border:#4078f273;--gs-add:#50a14f;--gs-del:#e45649;--gs-warn:#c18401;--gs-info:#0184bc;--gs-add-bg:#50a14f1f;--gs-del-bg:#e456491f;--gs-warn-bg:#c184011f;--gs-info-bg:#0184bc1f;--gs-add-line:#50a14f24;--gs-del-line:#e4564921;--gs-add-word:#50a14f57;--gs-del-word:#e4564952;--gs-hunk:#4078f212;--gs-neutral-bg:#696c771f;--gs-backdrop:#383a4242;--gs-shadow:#383a422e}.SD8qLW_overlay[data-gs-theme=solarized-dark]{--gs-bg:#002b36;--gs-panel:#073642;--gs-raise:#0a4553;--gs-border:#0f5666;--gs-border-soft:#073642;--gs-fg:#93a1a1;--gs-fg-muted:#839496;--gs-fg-dim:#657b83;--gs-fg-faint:#586e75;--gs-fg-fainter:#45636b;--gs-accent:#268bd2;--gs-accent-bg:#268bd229;--gs-accent-border:#268bd28c;--gs-add:#859900;--gs-del:#dc322f;--gs-warn:#b58900;--gs-info:#2aa198;--gs-add-bg:#85990033;--gs-del-bg:#dc322f2e;--gs-warn-bg:#b589002e;--gs-info-bg:#2aa1982e;--gs-add-line:#85990029;--gs-del-line:#dc322f26;--gs-add-word:#85990066;--gs-del-word:#dc322f61;--gs-hunk:#268bd21f;--gs-neutral-bg:#657b8333;--gs-backdrop:#00141a9e;--gs-shadow:#00141a8c}.SD8qLW_overlay[data-gs-theme=solarized-light]{--gs-bg:#fdf6e3;--gs-panel:#eee8d5;--gs-raise:#e3ddca;--gs-border:#d5cfbb;--gs-border-soft:#eee8d5;--gs-fg:#586e75;--gs-fg-muted:#657b83;--gs-fg-dim:#839496;--gs-fg-faint:#93a1a1;--gs-fg-fainter:#b5b0a0;--gs-accent:#268bd2;--gs-accent-bg:#268bd21f;--gs-accent-border:#268bd273;--gs-add:#6c7c00;--gs-del:#cb2825;--gs-warn:#9a7400;--gs-info:#21867f;--gs-add-bg:#8599002e;--gs-del-bg:#dc322f24;--gs-warn-bg:#b5890029;--gs-info-bg:#2aa19824;--gs-add-line:#85990029;--gs-del-line:#dc322f1f;--gs-add-word:#85990061;--gs-del-word:#dc322f4d;--gs-hunk:#268bd214;--gs-neutral-bg:#586e7524;--gs-backdrop:#586e7542;--gs-shadow:#586e7533}.SD8qLW_overlay[data-gs-theme=nord-dark]{--gs-bg:#2e3440;--gs-panel:#3b4252;--gs-raise:#434c5e;--gs-border:#4c566a;--gs-border-soft:#3b4252;--gs-fg:#eceff4;--gs-fg-muted:#d8dee9;--gs-fg-dim:#9aa5b8;--gs-fg-faint:#7b88a1;--gs-fg-fainter:#5d6a82;--gs-accent:#88c0d0;--gs-on-accent:#2e3440;--gs-accent-bg:#88c0d024;--gs-accent-border:#88c0d08c;--gs-add:#a3be8c;--gs-del:#bf616a;--gs-warn:#ebcb8b;--gs-info:#81a1c1;--gs-add-bg:#a3be8c29;--gs-del-bg:#bf616a2e;--gs-warn-bg:#ebcb8b29;--gs-info-bg:#81a1c129;--gs-add-line:#a3be8c24;--gs-del-line:#bf616a26;--gs-add-word:#a3be8c61;--gs-del-word:#bf616a66;--gs-hunk:#88c0d01a;--gs-neutral-bg:#9aa5b829;--gs-backdrop:#1d232d9e;--gs-shadow:#1419218c}.SD8qLW_overlay[data-gs-theme=nord-light]{--gs-bg:#eceff4;--gs-panel:#e5e9f0;--gs-raise:#d8dee9;--gs-border:#c3cbd8;--gs-border-soft:#dfe4ec;--gs-fg:#2e3440;--gs-fg-muted:#3b4252;--gs-fg-dim:#4c566a;--gs-fg-faint:#6b7689;--gs-fg-fainter:#9aa4b5;--gs-accent:#5e81ac;--gs-accent-bg:#5e81ac1f;--gs-accent-border:#5e81ac80;--gs-add:#5e7d47;--gs-del:#a5424c;--gs-warn:#97701f;--gs-info:#4c7a8c;--gs-add-bg:#5e7d4724;--gs-del-bg:#a5424c21;--gs-warn-bg:#97701f24;--gs-info-bg:#4c7a8c21;--gs-add-line:#5e7d4724;--gs-del-line:#a5424c1f;--gs-add-word:#5e7d4757;--gs-del-word:#a5424c52;--gs-hunk:#5e81ac17;--gs-neutral-bg:#4c566a21;--gs-backdrop:#2e344042;--gs-shadow:#2e34402e}.SD8qLW_overlay{--gs-inset:14px;--gs-h-control:28px;--gs-h-compact:24px;--gs-pad-control:0 12px;--gs-pad-compact:0 10px;--gs-on-accent:#fff;--gs-graph-0:#58a6ff;--gs-graph-1:#3fb950;--gs-graph-2:#d29922;--gs-graph-3:#bc8cff;--gs-graph-4:#f778ba;--gs-graph-5:#39c5cf;--gs-r-pill:999px;--gs-r-control:8px;--gs-r-surface:12px;--gs-r-drawer:14px;--gs-t-meta:11px;--gs-t-dense:12px;--gs-t-ui:13px;--gs-gutter:16px;--gs-gutter-pane:12px;z-index:1000;padding:var(--gs-inset);box-sizing:border-box;background:var(--gs-backdrop);justify-content:flex-end;align-items:stretch;gap:12px;animation:.16s ease-out SD8qLW_gsFade;display:flex;position:fixed;inset:0}.SD8qLW_drawer{box-sizing:border-box;width:min(1600px,94vw);height:100%;color:var(--gs-fg);background:var(--gs-bg);border:1px solid var(--gs-border);border-radius:var(--gs-r-drawer);box-shadow:0 24px 64px var(--gs-shadow);font-family:var(--dsw-font-ui,-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif);--gs-surface:var(--gs-bg);--gs-surface-2:var(--gs-panel);flex-direction:column;animation:.18s cubic-bezier(.22,1,.36,1) SD8qLW_gsSlide;display:flex;position:relative;overflow:hidden}.SD8qLW_drawer[data-gs-bg]{--gs-surface:color-mix(in srgb, var(--gs-bg) var(--gs-veil), transparent);--gs-surface-2:color-mix(in srgb, var(--gs-panel) var(--gs-veil), transparent)}.SD8qLW_drawer[data-gs-bg]:before{content:\"\";z-index:0;background-image:var(--gs-bg-image);filter:blur(var(--gs-bg-blur));pointer-events:none;background-position:50%;background-size:cover;position:absolute;inset:0;transform:scale(1.12)}.SD8qLW_drawer>:not(.SD8qLW_resizer){z-index:1;position:relative}.SD8qLW_drawer>.SD8qLW_header{z-index:24}.SD8qLW_drawer>.SD8qLW_tabs{z-index:23}.SD8qLW_drawer>.SD8qLW_compareBar{z-index:22}.SD8qLW_drawer>.SD8qLW_syncBar{z-index:20}.SD8qLW_drawer>.SD8qLW_confirmScrim{z-index:40;position:absolute;inset:0}.SD8qLW_overlayMax{gap:0;padding:0}.SD8qLW_overlayMax .SD8qLW_drawer{border-width:0 0 0 1px;border-radius:0;flex:auto;width:auto;min-width:0}@keyframes SD8qLW_gsFade{0%{opacity:0}}@keyframes SD8qLW_gsSlide{0%{opacity:0;transform:translate(24px)}}.SD8qLW_resizer{z-index:30;cursor:col-resize;touch-action:none;justify-content:center;align-items:center;width:10px;display:flex;position:absolute;top:0;bottom:0;left:0}.SD8qLW_resizer:after{content:\"\";background:var(--gs-fg-fainter);opacity:0;border-radius:999px;width:3px;height:32px;transition:opacity .14s,height .14s}.SD8qLW_resizer:hover:after{opacity:.6}.SD8qLW_resizerActive:after{opacity:.9;height:56px}.SD8qLW_paneDivider{z-index:5;cursor:col-resize;touch-action:none;flex:none;justify-content:center;align-items:center;width:7px;display:flex;position:relative}.SD8qLW_paneDivider:before{content:\"\";background:var(--gs-border-soft);width:1px;position:absolute;top:0;bottom:0;left:3px}.SD8qLW_paneDivider:after{content:\"\";background:var(--gs-fg-fainter);opacity:0;border-radius:999px;width:3px;height:28px;transition:opacity .14s,height .14s;position:relative}.SD8qLW_paneDivider:hover:after{opacity:.6}.SD8qLW_paneDividerActive:after{opacity:.9;height:48px}.SD8qLW_paneDividerY{cursor:row-resize;width:auto;height:7px}.SD8qLW_paneDividerY:before{width:auto;height:1px;inset:3px 0 auto}.SD8qLW_paneDividerY:after{width:28px;height:3px;transition:opacity .14s,width .14s}.SD8qLW_paneDividerY.SD8qLW_paneDividerActive:after{width:48px;height:3px}.SD8qLW_header{padding:10px var(--gs-gutter);border-bottom:1px solid var(--gs-border);background:var(--gs-surface-2);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-ui);flex:none;justify-content:space-between;align-items:center;gap:12px;display:flex}.SD8qLW_headerLeft{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.SD8qLW_headerBranch{border:1px solid var(--gs-accent-border);background:var(--gs-accent-bg);color:var(--gs-accent);border-radius:999px;align-items:center;gap:6px;padding:2px 10px;font-weight:600;display:inline-flex}.SD8qLW_refButton.SD8qLW_headerPicker{border-color:var(--gs-accent-border);background:var(--gs-accent-bg);max-width:420px;color:var(--gs-accent);font-weight:600}.SD8qLW_refButton.SD8qLW_headerPicker:hover{background:var(--gs-accent-bg);color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_elide{flex:0 auto;align-items:baseline;min-width:0;display:inline-flex}.SD8qLW_elideHead{white-space:nowrap;text-overflow:ellipsis;flex:0 999 auto;min-width:0;overflow:hidden}.SD8qLW_elideTail{white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.SD8qLW_headerPathMain{color:var(--gs-fg-faint);font-size:var(--gs-t-meta)}.SD8qLW_headerPathMain .SD8qLW_elideTail{color:var(--gs-fg-dim)}.SD8qLW_headerViewRef{max-width:160px}.SD8qLW_headerView{background:var(--gs-neutral-bg);color:var(--gs-fg-muted);font-size:var(--gs-t-meta);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:1px 8px}.SD8qLW_headerDetached{background:var(--gs-warn-bg);color:var(--gs-warn);font-size:var(--gs-t-meta);letter-spacing:.02em;border-radius:999px;padding:1px 8px}.SD8qLW_headerTotals{font-variant-numeric:tabular-nums}.SD8qLW_headerTotalsAdd{color:var(--gs-add);font-weight:600}.SD8qLW_headerTotalsDel{color:var(--gs-del);font-weight:600}.SD8qLW_headerTotalsDim{color:var(--gs-fg-dim);font-size:var(--gs-t-dense)}.SD8qLW_headerRight{flex:none;gap:8px;display:flex;position:relative}.SD8qLW_theme{display:inline-flex;position:relative}.SD8qLW_refPop.SD8qLW_settingsPop{width:320px;max-width:calc(100vw - 32px);max-height:min(560px,100vh - 120px);top:calc(100% + 6px);left:auto;right:0}.SD8qLW_themeRail{min-height:0;font-family:var(--dsw-font-ui,system-ui, sans-serif);flex-direction:column;flex:1;gap:14px;padding:12px 14px 16px;display:flex;overflow-y:auto}.SD8qLW_themeGroup{flex-direction:column;gap:6px;display:flex}.SD8qLW_themeLabel{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);letter-spacing:.04em;text-transform:uppercase;font-weight:600}.SD8qLW_themeRowSplit{justify-content:space-between;align-items:center;gap:8px;display:flex}.SD8qLW_segmented{gap:6px;display:flex}.SD8qLW_segment{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-meta);cursor:pointer;background:0 0;flex-direction:column;flex:1 1 0;align-items:stretch;gap:4px;padding:4px;transition:background .12s,color .12s,border-color .12s;display:flex}.SD8qLW_segment:hover{background:var(--gs-raise);border-color:var(--gs-fg-fainter);color:var(--gs-fg)}.SD8qLW_segment:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_segmentChip{border-radius:calc(var(--gs-r-control) - 4px);border:1px solid #80808073;height:20px}.SD8qLW_chipLight{background:#fff}.SD8qLW_chipDark{background:#0b0b0d}.SD8qLW_chipSystem{background:linear-gradient(105deg,#fff 0 50%,#0b0b0d 50% 100%)}.SD8qLW_paletteRow{box-sizing:border-box;border-radius:var(--gs-r-control);width:100%;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:5px 8px;display:flex}.SD8qLW_paletteRow:hover{background:var(--gs-raise);color:var(--gs-fg)}.SD8qLW_swatch{border:1px solid var(--gs-border);border-radius:3px;flex:none;width:26px;height:12px;display:inline-flex;overflow:hidden}.SD8qLW_swatch span{flex:1}.SD8qLW_scopeRow{gap:6px;display:flex}.SD8qLW_scopeHint{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);overflow-wrap:anywhere}.SD8qLW_bgPreview{border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background-color:var(--gs-bg);background-position:50%;background-size:cover;height:64px}.SD8qLW_bgEmpty{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);justify-content:center;align-items:center;display:flex}.SD8qLW_sliderRow{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);align-items:center;gap:8px;display:flex}.SD8qLW_sliderRow input{min-width:0;accent-color:var(--gs-accent);flex:1}.SD8qLW_sliderValue{text-align:right;font-variant-numeric:tabular-nums;flex:none;width:38px}.SD8qLW_cssArea{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-bg);width:100%;min-height:96px;max-height:220px;color:var(--gs-fg);font-family:var(--dsw-font-mono,ui-monospace, Consolas, monospace);font-size:var(--gs-t-meta);resize:vertical;outline:none;padding:7px 8px}.SD8qLW_cssArea:focus{border-color:var(--gs-accent-border)}.SD8qLW_themeNote{color:var(--gs-warn);font-size:var(--gs-t-meta)}.SD8qLW_themeDirty{color:var(--gs-accent);font-size:var(--gs-t-meta)}.SD8qLW_wtCurrent{color:var(--gs-add);font-size:8px;line-height:1}.SD8qLW_commitCopy{margin-left:auto}.SD8qLW_commitPop{z-index:40;box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-surface);background:var(--gs-panel);width:min(380px,100vw - 24px);color:var(--gs-fg);box-shadow:0 16px 40px var(--gs-shadow);font-family:var(--dsw-font-ui,-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif);font-size:var(--gs-t-dense);flex-direction:column;gap:6px;padding:10px 12px 12px;display:flex;position:fixed;overflow:auto}.SD8qLW_commitPopTop{align-items:center;gap:8px;display:flex}.SD8qLW_commitPopTop .SD8qLW_commitWhen{margin-right:auto}.SD8qLW_commitPopMeta{color:var(--gs-fg-muted);font-size:var(--gs-t-dense);flex-direction:column;gap:2px;line-height:16px;display:flex}.SD8qLW_commitFilter{min-width:120px;height:var(--gs-h-control);box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:auto;padding:0 10px}.SD8qLW_commitFilter:focus{border-color:var(--gs-accent)}.SD8qLW_commitFilter::placeholder{color:var(--gs-fg-faint)}.SD8qLW_filterChips{border-bottom:1px solid var(--gs-border-soft);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:6px 10px;display:flex}.SD8qLW_filterChip{border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-surface-2);max-width:220px;font-size:var(--gs-t-dense);align-items:center;gap:2px;line-height:18px;display:inline-flex}.SD8qLW_filterChipLabel{text-overflow:ellipsis;white-space:nowrap;color:var(--gs-fg-muted);padding:2px 4px 2px 8px;overflow:hidden}.SD8qLW_filterChipRemove{border:none;border-left:1px solid var(--gs-border-soft);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;flex:none;padding:0 6px;line-height:20px}.SD8qLW_filterChipRemove:hover{color:var(--gs-danger,var(--gs-fg))}.SD8qLW_filterClear{color:var(--gs-fg-faint);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;border:none;padding:2px 4px;line-height:18px}.SD8qLW_filterClear:hover{color:var(--gs-fg)}.SD8qLW_funnel{display:inline-flex;position:relative}.SD8qLW_funnelButton.SD8qLW_funnelButtonActive{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_funnelPop{z-index:40;box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-surface);background:var(--gs-panel);width:320px;max-width:calc(100vw - 24px);box-shadow:0 16px 40px var(--gs-shadow);font-size:var(--gs-t-dense);flex-direction:column;display:flex;position:fixed;overflow:hidden}.SD8qLW_funnelTabs{border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-pill);background:var(--gs-bg);flex:none;gap:2px;margin:8px 8px 0;padding:2px;display:flex}.SD8qLW_funnelTab{border-radius:var(--gs-r-pill);min-width:0;height:22px;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);white-space:nowrap;cursor:pointer;background:0 0;border:none;flex:1;padding:0 8px;line-height:1;transition:background .12s,color .12s}.SD8qLW_funnelTab:hover{color:var(--gs-fg)}.SD8qLW_funnelTab.SD8qLW_funnelTabActive{color:var(--gs-fg);background:var(--gs-raise);box-shadow:inset 0 0 0 1px var(--gs-border)}.SD8qLW_funnelTab:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_funnelTabCount{color:var(--gs-accent);font-variant-numeric:tabular-nums;margin-left:4px}.SD8qLW_funnelPane{flex-direction:column;flex:auto;gap:6px;min-height:0;padding:8px;display:flex}.SD8qLW_funnelCaption{color:var(--gs-fg-faint);letter-spacing:.04em;text-transform:uppercase;flex:none;font-size:11px;line-height:14px}.SD8qLW_funnelBounds{border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);flex:none;gap:2px;padding:2px;display:flex}.SD8qLW_funnelBoundBtn{border-radius:calc(var(--gs-r-control) - 3px);min-width:0;height:20px;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;border:none;flex:1;padding:0 6px;line-height:1;transition:background .12s,color .12s}.SD8qLW_funnelBoundBtn:hover{color:var(--gs-fg)}.SD8qLW_funnelBoundBtn.SD8qLW_funnelBoundBtnActive{color:var(--gs-accent);background:var(--gs-accent-bg);box-shadow:inset 0 0 0 1px var(--gs-accent-border)}.SD8qLW_cal{flex-direction:column;flex:none;gap:4px;display:flex}.SD8qLW_calHead{align-items:center;gap:4px;display:flex}.SD8qLW_calTitle{text-align:center;color:var(--gs-fg);font-size:var(--gs-t-dense);flex:1;line-height:20px}.SD8qLW_calNav{border-radius:var(--gs-r-control);width:22px;height:20px;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-ui);cursor:pointer;background:0 0;border:none;flex:none;padding:0}.SD8qLW_calNav:hover{color:var(--gs-fg);background:var(--gs-raise)}.SD8qLW_calWeek,.SD8qLW_calGrid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.SD8qLW_calWeek span{text-align:center;color:var(--gs-fg-faint);font-size:11px;line-height:14px}.SD8qLW_calGrid button{border-radius:var(--gs-r-control);height:26px;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);font-variant-numeric:tabular-nums;cursor:pointer;background:0 0;border:none}.SD8qLW_calGrid button:hover{background:var(--gs-raise);color:var(--gs-fg)}.SD8qLW_calGrid button.SD8qLW_calOut{color:var(--gs-fg-fainter)}.SD8qLW_calGrid button.SD8qLW_calToday{color:var(--gs-accent);font-weight:600}.SD8qLW_calGrid button.SD8qLW_calIn{background:var(--gs-accent-bg);color:var(--gs-fg)}.SD8qLW_calGrid button.SD8qLW_calMark{background:var(--gs-accent);color:var(--gs-on-accent);font-weight:600}.SD8qLW_funnelBoundRows{flex:none;grid-template-columns:1fr 1fr;gap:6px;display:grid}.SD8qLW_funnelBoundRow{box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);align-items:center;gap:4px;min-width:0;padding:3px 6px;font-size:11px;line-height:16px;display:flex}.SD8qLW_funnelBoundKey{color:var(--gs-fg-faint);flex:none}.SD8qLW_funnelBoundVal{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--gs-fg-faint);font-variant-numeric:tabular-nums;flex:1;overflow:hidden}.SD8qLW_funnelBoundValSet{color:var(--gs-fg)}.SD8qLW_funnelBoundClear{color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);cursor:pointer;background:0 0;border:none;flex:none;padding:0 2px;line-height:1}.SD8qLW_funnelBoundClear:hover{color:var(--gs-danger,var(--gs-fg))}.SD8qLW_funnelSearch{box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);height:26px;color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:none;padding:0 8px}.SD8qLW_funnelSearch::placeholder{color:var(--gs-fg-faint)}.SD8qLW_funnelSearch:focus{border-color:var(--gs-accent);box-shadow:0 0 0 2px var(--gs-accent-bg)}.SD8qLW_funnelList{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--gs-fg-fainter) transparent;flex-direction:column;flex:auto;gap:1px;min-height:0;margin:0 -4px;padding:0 4px;display:flex;overflow-y:auto}.SD8qLW_funnelList::-webkit-scrollbar{width:10px}.SD8qLW_funnelList::-webkit-scrollbar-track{background:0 0}.SD8qLW_funnelList::-webkit-scrollbar-thumb{background:var(--gs-fg-fainter);background-clip:content-box;border:3px solid #0000;border-radius:5px}.SD8qLW_funnelRow{box-sizing:border-box;border-radius:var(--gs-r-control);cursor:pointer;align-items:center;gap:6px;min-height:24px;padding:0 4px;display:flex}.SD8qLW_funnelRow:hover{background:var(--gs-raise)}.SD8qLW_funnelRow:has(input[type=checkbox]:checked) .SD8qLW_funnelName,.SD8qLW_funnelRow:has(input[type=checkbox]:indeterminate) .SD8qLW_funnelName{color:var(--gs-fg)}.SD8qLW_funnelRow input[type=checkbox]{-webkit-appearance:none;appearance:none;box-sizing:border-box;border:1px solid var(--gs-fg-fainter);cursor:pointer;background:0 0;border-radius:3px;flex:none;width:14px;height:14px;margin:0;transition:background .12s,border-color .12s;position:relative}.SD8qLW_funnelRow input[type=checkbox]:hover{border-color:var(--gs-fg-dim)}.SD8qLW_funnelRow input[type=checkbox]:checked,.SD8qLW_funnelRow input[type=checkbox]:indeterminate{background:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_funnelRow input[type=checkbox]:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_funnelRow input[type=checkbox]:checked:after{content:\"\";border:solid var(--gs-on-accent);border-width:0 1.5px 1.5px 0;width:3px;height:7px;position:absolute;top:1px;left:4px;transform:rotate(42deg)}.SD8qLW_funnelRow input[type=checkbox]:indeterminate:after{content:\"\";background:var(--gs-on-accent);border-radius:1px;width:8px;height:2px;position:absolute;top:5px;left:2px}.SD8qLW_pathNode,.SD8qLW_pathChildren{flex-direction:column;display:flex}.SD8qLW_pathFileGlyph,.SD8qLW_pathDirGlyph{width:16px;height:16px;color:var(--gs-fg-dim);flex:none}.SD8qLW_funnelRow:hover .SD8qLW_pathFileGlyph,.SD8qLW_funnelRow:hover .SD8qLW_pathDirGlyph{color:var(--gs-fg-muted)}.SD8qLW_funnelName{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--gs-fg-muted);flex:1;overflow:hidden}.SD8qLW_funnelCount{color:var(--gs-fg-faint);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.SD8qLW_funnelMore{color:var(--gs-fg-faint);padding:4px 6px}.SD8qLW_funnelChevron{width:14px;color:var(--gs-fg-faint);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-family:inherit;font-size:9px;line-height:16px}.SD8qLW_funnelChevron:hover:not(:disabled){color:var(--gs-fg)}.SD8qLW_funnelChevron:disabled{cursor:default}.SD8qLW_funnelPresets{flex:none;gap:4px;display:flex}.SD8qLW_funnelPreset{flex:1 1 0;min-width:0;padding:0 6px}.SD8qLW_funnelPreset.SD8qLW_funnelPresetActive{color:var(--gs-accent);border-color:var(--gs-accent);background:var(--gs-accent-bg)}.SD8qLW_funnelFoot{border-top:1px solid var(--gs-border-soft);background:var(--gs-bg);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:11px;line-height:16px;display:flex}.SD8qLW_funnelFootCount{color:var(--gs-fg-faint);font-variant-numeric:tabular-nums}.SD8qLW_funnelFootCountOn{color:var(--gs-fg-muted)}.SD8qLW_funnelFootClear{border-radius:var(--gs-r-control);color:var(--gs-fg-dim);cursor:pointer;background:0 0;border:none;flex:none;padding:2px 6px;font-family:inherit;font-size:11px;line-height:16px}.SD8qLW_funnelFootClear:hover:not(:disabled){color:var(--gs-fg);background:var(--gs-raise)}.SD8qLW_funnelFootClear:disabled{color:var(--gs-fg-fainter);cursor:default}.SD8qLW_commitPopSubject{color:var(--gs-fg);font-size:var(--gs-t-ui);white-space:pre-wrap;overflow-wrap:anywhere;user-select:text;font-weight:600;line-height:18px}.SD8qLW_commitPopBody{color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);white-space:pre-wrap;overflow-wrap:anywhere;user-select:text;margin:0;line-height:18px}.SD8qLW_tabs{padding:0 var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);flex:none;gap:24px;font-family:inherit;display:flex}.SD8qLW_tab{font-family:inherit;font-size:var(--gs-t-ui);color:var(--gs-fg-dim);cursor:pointer;background:0 0;border:none;padding:8px 0 9px;font-weight:500;line-height:16px;position:relative}.SD8qLW_tab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.SD8qLW_tabActive{color:var(--gs-accent)}.SD8qLW_tabActive:after{background:var(--gs-accent)}.SD8qLW_compareBar{padding:8px var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);color:var(--gs-fg-dim);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-dense);flex-wrap:wrap;flex:none;align-items:center;gap:10px;display:flex}.SD8qLW_compareArrow{color:var(--gs-fg-faint)}.SD8qLW_refPicker{align-items:center;gap:6px;display:inline-flex;position:relative}.SD8qLW_refLabel{color:var(--gs-fg-faint);flex:none}.SD8qLW_refButton{justify-content:space-between;max-width:260px}.SD8qLW_refValue{min-width:0;overflow:hidden}.SD8qLW_refCaret{color:var(--gs-fg-faint);flex:none;font-size:9px}.SD8qLW_refPop{z-index:10;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-panel);width:300px;max-width:80vw;box-shadow:0 12px 32px var(--gs-shadow);flex-direction:column;display:flex;position:absolute;top:calc(100% + 4px);left:0;overflow:hidden}.SD8qLW_menuPop{width:auto;min-width:100%;padding:4px;left:auto;right:0}.SD8qLW_refSearch{border:0;border-bottom:1px solid var(--gs-border-soft);background:var(--gs-bg);color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:none;padding:7px 10px}.SD8qLW_refSearch::placeholder{color:var(--gs-fg-faint)}.SD8qLW_refList{flex:1;max-height:280px;padding:4px;overflow-y:auto}.SD8qLW_refGroup{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);letter-spacing:.04em;text-transform:uppercase;padding:6px 8px 3px;font-weight:600}.SD8qLW_refRow{box-sizing:border-box;border-radius:var(--gs-r-control);width:100%;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:5px 8px;display:flex}.SD8qLW_refRow:hover{background:var(--gs-raise);color:var(--gs-fg)}.SD8qLW_refRowSpacer{flex:none;width:12px}.SD8qLW_refRowName{flex:auto;min-width:0;overflow:hidden}.SD8qLW_refEmpty{color:var(--gs-fg-faint);font-size:var(--gs-t-dense);padding:14px 10px}.SD8qLW_refFoot{border-top:1px solid var(--gs-border-soft);color:var(--gs-fg-faint);font-size:var(--gs-t-meta);flex:none;padding:5px 10px}.SD8qLW_commitsPane{box-sizing:border-box;width:26%;min-height:0;min-width:var(--gs-min-commits);background:var(--gs-surface);flex-direction:column;flex:0 auto;max-width:340px;display:flex}.SD8qLW_paneHead{box-sizing:border-box;min-height:37px;padding:6px var(--gs-gutter-pane);border-bottom:1px solid var(--gs-border-soft);color:var(--gs-fg-dim);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-dense);flex-wrap:wrap;flex:none;align-items:center;gap:8px;display:flex}.SD8qLW_paneTitle{font-weight:600}.SD8qLW_commitsSentinel{flex:none;height:1px}.SD8qLW_commitsFoot{color:var(--gs-fg-faint);font-family:var(--dsw-font-ui,system-ui, sans-serif);font-size:var(--gs-t-meta);text-align:center;flex:none;min-height:16px;padding:8px}.SD8qLW_commits{flex-direction:column;flex:1;min-height:0;padding:4px 6px 4px 0;display:flex;overflow-y:auto}.SD8qLW_commitLine{height:var(--gs-commit-row);flex:none;align-items:stretch;display:flex}.SD8qLW_graphCell{flex:none;display:block}.SD8qLW_commit{box-sizing:border-box;border-radius:var(--gs-r-surface);text-align:left;cursor:pointer;min-width:0;height:100%;font-family:inherit;font-size:var(--gs-t-dense);background:0 0;border:1px solid #0000;flex:auto;align-items:center;gap:10px;margin:1px 0;padding:4px 8px;transition:background .12s,border-color .12s;display:flex;overflow:hidden}.SD8qLW_commitsPane[data-layout=columns] .SD8qLW_commit{flex-direction:column;justify-content:center;align-items:stretch;gap:2px}.SD8qLW_commitsPane[data-layout=columns] .SD8qLW_commitSubjectRow{flex:none}.SD8qLW_commitTop{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.SD8qLW_commit:hover{background:var(--gs-raise)}.SD8qLW_commitActive{border-color:var(--gs-accent-border);background:var(--gs-accent-bg)}.SD8qLW_commitMeta{flex:none;align-items:baseline;gap:8px;display:flex}.SD8qLW_commitHash{color:var(--gs-info);flex:none}.SD8qLW_commitSubjectRow{flex:auto;align-items:baseline;gap:4px;min-width:0;display:flex}.SD8qLW_commitSubject{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--gs-fg-muted);flex:0 auto;overflow:hidden}.SD8qLW_commitHasBody{color:var(--gs-fg-faint);letter-spacing:.04em;flex:none}.SD8qLW_commitRef{white-space:nowrap;text-overflow:ellipsis;border:1px solid var(--gs-accent-border);border-radius:var(--gs-r-pill);background:var(--gs-accent-bg);max-width:96px;color:var(--gs-accent);font-size:var(--gs-t-meta);flex:none;padding:0 5px;line-height:15px;overflow:hidden}.SD8qLW_commitWhen{color:var(--gs-fg-faint);flex:none}.SD8qLW_commitAuthor{text-overflow:ellipsis;white-space:nowrap;max-width:120px;color:var(--gs-fg-dim);flex:none;overflow:hidden}.SD8qLW_body{z-index:1;flex:1;min-height:0;display:flex}.SD8qLW_body[data-stacked]{flex-direction:column}.SD8qLW_bodyRow{flex:1 1 0;min-width:0;min-height:0;display:flex}.SD8qLW_body[data-stacked] .SD8qLW_commitsPane{width:auto;min-width:0;max-width:none;height:34%;min-height:var(--gs-min-commits-tall);max-height:max(var(--gs-min-commits-tall), calc(100% - var(--gs-min-stacked-lower)));flex:none}.SD8qLW_treeCol{box-sizing:border-box;width:28%;min-height:0;min-width:var(--gs-min-tree);background:var(--gs-surface);flex-direction:column;flex:0 auto;max-width:400px;display:flex}.SD8qLW_treeWrap{box-sizing:border-box;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.SD8qLW_treeTools{box-sizing:border-box;min-height:37px;padding:6px var(--gs-gutter-pane);border-bottom:1px solid var(--gs-border-soft);flex-wrap:wrap;flex:none;justify-content:space-between;align-items:center;gap:6px;display:flex}.SD8qLW_treeActions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.SD8qLW_treeLead{align-items:center;gap:4px;min-width:0;display:flex}.SD8qLW_treeLabel{white-space:nowrap;color:var(--gs-fg-dim);font-size:var(--gs-t-dense);flex:none}.SD8qLW_treeFilter{padding:6px var(--gs-gutter-pane);border-bottom:1px solid var(--gs-border-soft);flex:none;align-items:center;display:flex;position:relative}.SD8qLW_treeFilterInput{min-width:0;height:var(--gs-h-compact);box-sizing:border-box;border:1px solid var(--gs-border-soft);border-radius:var(--gs-r-control);background:var(--gs-bg);color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);outline:none;flex:auto;padding:0 24px 0 8px}.SD8qLW_treeFilterInput:focus{border-color:var(--gs-accent)}.SD8qLW_treeFilterInput::placeholder{color:var(--gs-fg-faint)}.SD8qLW_treeFilterClear{right:calc(var(--gs-gutter-pane) + 6px);border-radius:var(--gs-r-pill);width:16px;height:16px;color:var(--gs-fg-faint);font-size:var(--gs-t-ui);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;line-height:1;display:flex;position:absolute}.SD8qLW_treeFilterClear:hover{color:var(--gs-fg)}.SD8qLW_tree{flex:1;min-height:0;margin:0;padding:6px 0 16px;list-style:none;overflow:auto}.SD8qLW_treeEmpty{min-height:0;color:var(--gs-fg-faint);font-size:var(--gs-t-ui);flex:1;justify-content:center;align-items:center;display:flex}.SD8qLW_treeSub{margin:0;padding:0;list-style:none;position:relative}.SD8qLW_treeSub:before{content:\"\";top:0;bottom:0;left:var(--gs-rail,0);background:var(--gs-border-soft);width:1px;position:absolute}.SD8qLW_treeDirLi{position:relative}.SD8qLW_treeDir{box-sizing:border-box;width:100%;color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:4px 12px 4px 8px;font-weight:600;display:flex}.SD8qLW_treeDir:hover{background:var(--gs-panel);color:var(--gs-fg-muted)}.SD8qLW_treeDirActive{color:var(--gs-fg-muted)}.SD8qLW_chevron{width:10px;color:var(--gs-fg-fainter);font-size:var(--gs-t-meta);flex:none;transition:transform .12s;display:inline-block}.SD8qLW_chevronOpen{transform:rotate(90deg)}.SD8qLW_treeDirName{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.SD8qLW_treeDirCount{background:var(--gs-neutral-bg);color:var(--gs-fg-dim);font-size:var(--gs-t-meta);border-radius:999px;flex:none;padding:0 6px;font-weight:600;line-height:16px}.SD8qLW_treeDirCounts{font-size:var(--gs-t-meta);font-variant-numeric:tabular-nums;flex:none}.SD8qLW_file{box-sizing:border-box;width:100%;color:var(--gs-fg-muted);font-family:inherit;font-size:var(--gs-t-dense);text-align:left;cursor:pointer;background:0 0;border:0;border-left:2px solid #0000;align-items:center;gap:8px;padding:5px 14px;display:flex}.SD8qLW_file:hover{background:var(--gs-panel)}.SD8qLW_fileActive{background:var(--gs-panel);border-left-color:var(--gs-accent);color:var(--gs-fg)}.SD8qLW_fileStatus{width:18px;height:18px;font-weight:700;font-size:var(--gs-t-meta);border-radius:5px;flex:none;justify-content:center;align-items:center;line-height:1;display:inline-flex}.SD8qLW_stAdded,.SD8qLW_stUntracked{color:var(--gs-add);background:var(--gs-add-bg)}.SD8qLW_stDeleted{color:var(--gs-del);background:var(--gs-del-bg)}.SD8qLW_stModified{color:var(--gs-warn);background:var(--gs-warn-bg)}.SD8qLW_stRenamed{color:var(--gs-info);background:var(--gs-info-bg)}.SD8qLW_filePath{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.SD8qLW_fileBinary{background:var(--gs-neutral-bg);color:var(--gs-fg-dim);letter-spacing:.06em;border-radius:4px;flex:none;padding:0 5px;font-size:9px;font-weight:700}.SD8qLW_fileCounts{font-size:var(--gs-t-meta);font-variant-numeric:tabular-nums;flex:none}.SD8qLW_fileCountAdd{color:var(--gs-add)}.SD8qLW_fileCountDel{color:var(--gs-del)}.SD8qLW_diffPane{min-width:var(--gs-min-diff);background:var(--gs-surface);flex-direction:column;flex:1 1 0;display:flex;overflow:auto}.SD8qLW_diffWrap{flex-direction:column;flex:auto;width:100%;min-height:0;display:flex}.SD8qLW_diffScroll{outline:none;flex:1 1 0;min-height:0;overflow:auto}.SD8qLW_diffNav{border-bottom:1px solid var(--gs-border-soft);flex:none;justify-content:flex-end;align-items:center;gap:4px;padding:3px 12px 3px 0;display:flex}.SD8qLW_diffNav .SD8qLW_blockBtn{padding-inline:6px;line-height:0}.SD8qLW_diffPre{width:max-content;min-width:100%;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:var(--gs-t-dense);font-variant-ligatures:none;font-feature-settings:\"liga\" 0, \"calt\" 0;tab-size:4;flex-direction:column;margin:0;padding:8px 0 16px;font-weight:400;line-height:20px;display:flex}.SD8qLW_renameLine{border-bottom:1px solid var(--gs-border-soft);color:var(--gs-info);font-size:var(--gs-t-dense);flex:none;padding:8px 16px}.SD8qLW_renameLine code{color:var(--gs-fg)}.SD8qLW_line{white-space:nowrap;align-items:stretch;width:max-content;min-width:100%;min-height:20px;line-height:20px;display:flex}.SD8qLW_lnOld,.SD8qLW_lnNew{box-sizing:border-box;text-align:right;width:3.2em;color:var(--gs-fg-fainter);user-select:none;font-variant-numeric:tabular-nums;flex:none;padding:0 8px}.SD8qLW_line:hover .SD8qLW_lnOld,.SD8qLW_line:hover .SD8qLW_lnNew{color:var(--gs-fg-dim)}.SD8qLW_gutter{text-align:center;user-select:none;flex:none;width:1.4em}.SD8qLW_code{white-space:pre;flex:1 0 auto;padding:0 16px 0 10px}.SD8qLW_lineAdd{background:var(--gs-add-line)}.SD8qLW_lineDel{background:var(--gs-del-line)}.SD8qLW_lineAdd .SD8qLW_lnOld,.SD8qLW_lineAdd .SD8qLW_lnNew,.SD8qLW_lineAdd .SD8qLW_gutter{background:var(--gs-add-num,var(--gs-add-line))}.SD8qLW_lineDel .SD8qLW_lnOld,.SD8qLW_lineDel .SD8qLW_lnNew,.SD8qLW_lineDel .SD8qLW_gutter{background:var(--gs-del-num,var(--gs-del-line))}.SD8qLW_lineContext{color:var(--gs-fg-muted)}.SD8qLW_lineHunk{background:var(--gs-hunk)}.SD8qLW_lineHunk .SD8qLW_code{color:var(--gs-fg-dim)}.SD8qLW_lineHunk .SD8qLW_lnOld,.SD8qLW_lineHunk .SD8qLW_lnNew,.SD8qLW_lineHunk .SD8qLW_gutter{background:var(--gs-hunk-num,var(--gs-hunk))}.SD8qLW_signAdd{color:var(--gs-add)}.SD8qLW_signDel{color:var(--gs-del)}.SD8qLW_wordAdd{background:var(--gs-add-word);border-radius:2px}.SD8qLW_wordDel{background:var(--gs-del-word);border-radius:2px}.SD8qLW_sidePane{flex-direction:column;width:100%;min-width:0;height:100%;display:flex}.SD8qLW_sideScroll{flex:1 1 0;min-height:0;overflow:hidden auto}.SD8qLW_sideCols{align-items:stretch;min-height:100%;display:flex}.SD8qLW_sideCol{flex:none;min-width:0;overflow-x:auto}.SD8qLW_sideColRight{flex:1 1 0}.SD8qLW_sideColGrid{width:max-content;min-width:100%;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:var(--gs-t-dense);font-variant-ligatures:none;font-feature-settings:\"liga\" 0, \"calt\" 0;tab-size:4;grid-template-columns:3.2em 1fr;align-content:start;padding:8px 0 16px;font-weight:400;line-height:20px;display:grid}.SD8qLW_sideColGridBlame{grid-template-columns:13em 3.2em 1fr}.SD8qLW_blameCell{box-sizing:border-box;border-right:1px solid var(--gs-border-soft);color:var(--gs-fg-faint);font-size:var(--gs-t-meta);white-space:pre;text-overflow:ellipsis;user-select:none;padding:0 8px 0 10px;overflow:hidden}.SD8qLW_sideTabs{z-index:5;border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);flex:none;gap:16px;padding:6px 16px 0;display:flex}.SD8qLW_sideTab{font-family:inherit;font-size:var(--gs-t-meta);color:var(--gs-fg-dim);cursor:pointer;background:0 0;border:none;padding:2px 0 5px;font-weight:500;line-height:16px;position:relative}.SD8qLW_sideTab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.SD8qLW_sideTabActive{color:var(--gs-accent)}.SD8qLW_sideTabActive:after{background:var(--gs-accent)}.SD8qLW_sideNotice{border-bottom:1px solid var(--gs-border-soft);color:var(--gs-info);font-size:var(--gs-t-dense);flex:none;padding:8px 16px}.SD8qLW_sideNum{box-sizing:border-box;text-align:right;color:var(--gs-fg-fainter);user-select:none;font-variant-numeric:tabular-nums;padding:0 8px}.SD8qLW_sideNumAdd{background:var(--gs-add-num,var(--gs-add-line))}.SD8qLW_sideNumDel{background:var(--gs-del-num,var(--gs-del-line))}.SD8qLW_sideCode{white-space:pre;min-height:20px;padding:0 16px 0 10px}.SD8qLW_sideSpacer{grid-column:1/-1}.SD8qLW_diffSpacer{flex:none}.SD8qLW_sideCodeSame{color:var(--gs-fg-muted)}.SD8qLW_sideCodeAdd{background:var(--gs-add-line)}.SD8qLW_sideCodeDel{background:var(--gs-del-line)}.SD8qLW_sideCellBlock{position:relative}.SD8qLW_sideBlockHot{outline:1px solid var(--gs-accent);outline-offset:-1px}.SD8qLW_blockBar{z-index:4;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-surface-2,var(--gs-bg));box-shadow:0 4px 14px var(--gs-shadow);white-space:nowrap;gap:4px;padding:2px;display:flex;position:absolute;top:-21px;left:0}.SD8qLW_blockBtn{border:1px solid var(--gs-border);border-radius:var(--gs-r-pill);background:var(--gs-bg);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-meta);cursor:pointer;padding:0 8px;line-height:16px}.SD8qLW_blockBtn:hover:not(:disabled){color:var(--gs-fg);border-color:var(--gs-accent)}.SD8qLW_blockBtn:disabled{opacity:.45;cursor:default}.SD8qLW_blockBtnDanger{color:var(--gs-del);border-color:var(--gs-del-bg,var(--gs-border))}.SD8qLW_blockBtnDanger:hover:not(:disabled){color:var(--gs-del);border-color:var(--gs-del)}.SD8qLW_sideArmable{cursor:text}.SD8qLW_cmHost{position:relative}.SD8qLW_cmHost[data-editable]:before{content:\"\";background:var(--gs-accent);opacity:.32;pointer-events:none;border-radius:1px;width:2px;transition:opacity .14s;position:absolute;top:0;bottom:0;left:0}.SD8qLW_cmHost[data-editable]:focus-within:before{opacity:1}.SD8qLW_sideNav{align-items:center;gap:4px;margin-left:auto;padding:2px 0 5px;display:flex}.SD8qLW_sideNav .SD8qLW_blockBtn{padding-inline:6px;line-height:0}.SD8qLW_sideNavCount{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);white-space:nowrap}.SD8qLW_sideActions{align-items:flex-start;gap:4px;margin-left:auto;padding:2px 0 5px;display:flex}.SD8qLW_sideSaveReady{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_sideBanner{border-bottom:1px solid var(--gs-border-soft);background:var(--gs-del-bg,transparent);color:var(--gs-del);font-size:var(--gs-t-dense);flex-direction:column;flex:none;gap:6px;padding:8px 16px;display:flex}.SD8qLW_sideBannerTitle{font-weight:600}.SD8qLW_sideBannerActs{gap:4px;display:flex}.SD8qLW_sideEditCell{position:relative}.SD8qLW_empty{color:var(--gs-fg-faint);font-size:var(--gs-t-ui);padding:32px 24px}.SD8qLW_syncBar{padding:8px var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);background:var(--gs-surface-2);font-size:var(--gs-t-dense);color:var(--gs-fg-dim);flex-wrap:wrap;flex:none;align-items:center;gap:8px;display:flex}.SD8qLW_syncUpstream{white-space:nowrap;text-overflow:ellipsis;max-width:260px;color:var(--gs-fg-muted);font-variant-numeric:tabular-nums;overflow:hidden}.SD8qLW_syncLevel{color:var(--gs-fg-faint)}.SD8qLW_syncSpacer{flex:auto}.SD8qLW_btn:disabled,.SD8qLW_treeIcon:disabled,.SD8qLW_miniBtn:disabled,.SD8qLW_refButton:disabled,.SD8qLW_funnelButton:disabled{opacity:.45;cursor:default}.SD8qLW_btn[data-quiet]:disabled,.SD8qLW_refButton[data-quiet]:disabled{opacity:1}.SD8qLW_opBanner{padding:8px var(--gs-gutter);border-bottom:1px solid var(--gs-border-soft);font-size:var(--gs-t-dense);white-space:pre-wrap;overflow-wrap:anywhere;user-select:text;flex:none;line-height:18px}.SD8qLW_opBannerOk{background:var(--gs-add-bg);color:var(--gs-add)}.SD8qLW_opBannerBad{background:var(--gs-del-bg);color:var(--gs-del)}.SD8qLW_fileLi{align-items:stretch;display:flex}.SD8qLW_fileLi .SD8qLW_file{flex:auto;min-width:0}.SD8qLW_fileDiscard{width:22px;color:var(--gs-fg-faint);opacity:0;cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;transition:opacity .12s,color .12s;display:flex}.SD8qLW_fileLi:hover .SD8qLW_fileDiscard,.SD8qLW_fileDiscard:focus-visible{opacity:1}.SD8qLW_fileDiscard:hover{color:var(--gs-del)}.SD8qLW_fileDiscard:focus-visible{outline:2px solid var(--gs-accent);outline-offset:-2px;border-radius:var(--gs-r-control)}.SD8qLW_treeRow{align-items:stretch;display:flex}.SD8qLW_treeRow .SD8qLW_treeDir{flex:auto;min-width:0}.SD8qLW_checkBox{cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;width:22px;padding:0;display:flex}.SD8qLW_checkMark{box-sizing:border-box;border:1px solid var(--gs-fg-faint);background:var(--gs-bg);color:#0000;border-radius:3px;justify-content:center;align-items:center;width:14px;height:14px;font-size:10px;font-weight:700;line-height:1;transition:background .12s,border-color .12s;display:flex}.SD8qLW_checkBox:hover .SD8qLW_checkMark{border-color:var(--gs-accent)}.SD8qLW_checkBox:focus-visible{outline:none}.SD8qLW_checkBox:focus-visible .SD8qLW_checkMark{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_checkMarkOn,.SD8qLW_checkMarkPartial{border-color:var(--gs-accent);background:var(--gs-accent);color:var(--gs-on-accent)}.SD8qLW_commitBox{padding:8px var(--gs-gutter-pane) 10px;border-top:1px solid var(--gs-border);background:var(--gs-surface-2);flex-direction:column;flex:none;gap:6px;display:flex}.SD8qLW_commitMessage{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-control);background:var(--gs-bg);width:100%;min-height:46px;max-height:160px;color:var(--gs-fg);font-family:inherit;font-size:var(--gs-t-dense);resize:vertical;outline:none;padding:6px 8px;line-height:18px}.SD8qLW_commitMessage:focus{border-color:var(--gs-accent-border)}.SD8qLW_commitMessage::placeholder{color:var(--gs-fg-faint)}.SD8qLW_commitRow{align-items:center;gap:8px;display:flex}.SD8qLW_commitAmend{color:var(--gs-fg-dim);font-size:var(--gs-t-meta);cursor:pointer;align-items:center;gap:4px;display:inline-flex}.SD8qLW_commitAmend input{accent-color:var(--gs-accent);cursor:pointer}.SD8qLW_commitStaged{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);margin-left:auto}.SD8qLW_commitLead{color:var(--gs-fg-faint);font-size:var(--gs-t-meta);margin:0;line-height:15px}.SD8qLW_commitBtn{box-sizing:border-box;min-width:92px;height:var(--gs-h-control);border-radius:var(--gs-r-control);background:var(--gs-accent);color:var(--gs-on-accent);font-family:inherit;font-size:var(--gs-t-ui);white-space:nowrap;cursor:pointer;border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0 16px;font-weight:600;line-height:1;transition:filter .12s,opacity .12s;display:inline-flex}.SD8qLW_commitBtn:hover:not(:disabled){filter:brightness(1.1)}.SD8qLW_commitBtn:focus-visible{outline:2px solid var(--gs-accent);outline-offset:2px}.SD8qLW_commitBtn:disabled{background:var(--gs-raise);color:var(--gs-fg-faint);border-color:var(--gs-border);cursor:default}.SD8qLW_btn,.SD8qLW_miniBtn,.SD8qLW_treeIcon,.SD8qLW_commitCopy,.SD8qLW_scopeBtn,.SD8qLW_refButton,.SD8qLW_funnelButton,.SD8qLW_funnelPreset,.SD8qLW_layoutButton{box-sizing:border-box;height:var(--gs-h-control);padding:var(--gs-pad-control);border:1px solid var(--gs-border);border-radius:var(--gs-r-control);color:var(--gs-fg-dim);font-family:inherit;font-size:var(--gs-t-ui);white-space:nowrap;cursor:pointer;background:0 0;flex:none;justify-content:center;align-items:center;gap:6px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.SD8qLW_btn:hover,.SD8qLW_miniBtn:hover,.SD8qLW_treeIcon:hover,.SD8qLW_commitCopy:hover,.SD8qLW_scopeBtn:hover,.SD8qLW_refButton:hover,.SD8qLW_funnelButton:hover,.SD8qLW_funnelPreset:hover,.SD8qLW_layoutButton:hover{background:var(--gs-raise);color:var(--gs-fg);border-color:var(--gs-fg-fainter)}.SD8qLW_btn:focus-visible,.SD8qLW_miniBtn:focus-visible,.SD8qLW_treeIcon:focus-visible,.SD8qLW_commitCopy:focus-visible,.SD8qLW_scopeBtn:focus-visible,.SD8qLW_refButton:focus-visible,.SD8qLW_funnelPreset:focus-visible,.SD8qLW_layoutButton:focus-visible{outline:2px solid var(--gs-accent);outline-offset:1px}.SD8qLW_btn,.SD8qLW_refButton{border-radius:var(--gs-r-pill)}.SD8qLW_treeIcon,.SD8qLW_commitCopy,.SD8qLW_funnelPreset,.SD8qLW_layoutButton{height:var(--gs-h-compact);padding:var(--gs-pad-compact);font-size:var(--gs-t-dense)}.SD8qLW_treeIcon{width:var(--gs-h-compact);padding:0}.SD8qLW_layoutSwitch{flex:none;gap:2px;margin-left:auto;display:inline-flex}.SD8qLW_layoutButton{width:var(--gs-h-compact);padding:0}.SD8qLW_layoutButton.SD8qLW_layoutButtonOn{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_layoutGlyph{display:block}.SD8qLW_treeIcon.SD8qLW_treeIconOn{color:var(--gs-accent);border-color:var(--gs-accent)}.SD8qLW_treeIconGlyph{font-size:var(--gs-t-meta);line-height:1;display:block}.SD8qLW_treeIconDown{transform:rotate(90deg)}.SD8qLW_scopeBtn{flex:1 1 0}.SD8qLW_scopeBtnActive,.SD8qLW_miniBtnPrimary,.SD8qLW_segmentActive,.SD8qLW_refRowActive,.SD8qLW_paletteRowActive{border-color:var(--gs-accent-border);background:var(--gs-accent-bg);color:var(--gs-accent);font-weight:600}.SD8qLW_btnIcon{width:var(--gs-h-control);padding:0}.SD8qLW_btnIcon svg{display:block}.SD8qLW_btnClose:hover:not(:disabled){border-color:var(--gs-del);background:var(--gs-del-bg);color:var(--gs-del)}.SD8qLW_btnBehind{border-color:var(--gs-warn);background:var(--gs-warn-bg);color:var(--gs-warn);font-weight:600}.SD8qLW_btnBehind:hover:not(:disabled){background:var(--gs-warn-bg);color:var(--gs-warn);border-color:var(--gs-warn)}.SD8qLW_btnAhead{border-color:var(--gs-add);background:var(--gs-add-bg);color:var(--gs-add);font-weight:600}.SD8qLW_btnAhead:hover:not(:disabled){background:var(--gs-add-bg);color:var(--gs-add);border-color:var(--gs-add)}.SD8qLW_btnPrimary{border-color:var(--gs-accent);background:var(--gs-accent);color:var(--gs-on-accent,#fff);font-weight:600}.SD8qLW_btnPrimary:hover:not(:disabled){background:var(--gs-accent);color:var(--gs-on-accent,#fff);border-color:var(--gs-accent)}.SD8qLW_btnCount{font-variant-numeric:tabular-nums;opacity:.85;border-left:1px solid;margin-left:1px;padding-left:6px}.SD8qLW_pullGroup{flex:none;align-items:center;display:inline-flex}.SD8qLW_pullGroup>.SD8qLW_refPicker>.SD8qLW_refButton{border-right-color:#0000;border-top-right-radius:0;border-bottom-right-radius:0}.SD8qLW_pullGroup>.SD8qLW_btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.SD8qLW_drawer{scrollbar-width:thin;scrollbar-color:var(--gs-border) transparent}.SD8qLW_drawer ::-webkit-scrollbar{width:10px;height:10px}.SD8qLW_drawer ::-webkit-scrollbar-track,.SD8qLW_drawer ::-webkit-scrollbar-corner{background:0 0}.SD8qLW_drawer ::-webkit-scrollbar-thumb{background:var(--gs-border);background-clip:padding-box;border:3px solid #0000;border-radius:999px}.SD8qLW_drawer ::-webkit-scrollbar-thumb:hover{background:var(--gs-fg-faint);background-clip:padding-box}.SD8qLW_commitRefMore{border-radius:var(--gs-r-pill);background:var(--gs-neutral-bg);color:var(--gs-fg-dim);font-size:var(--gs-t-meta);cursor:default;flex:none;padding:0 5px;line-height:15px}.SD8qLW_confirmScrim{background:var(--gs-backdrop);justify-content:center;align-items:center;padding:24px;animation:.12s ease-out SD8qLW_gsFade;display:flex}.SD8qLW_confirmBox{box-sizing:border-box;border:1px solid var(--gs-border);border-radius:var(--gs-r-drawer);background:var(--gs-bg);width:min(440px,100%);box-shadow:0 18px 48px var(--gs-shadow);flex-direction:column;gap:10px;padding:18px;display:flex}.SD8qLW_confirmTitle{color:var(--gs-fg);font-size:var(--gs-t-ui);font-weight:600}.SD8qLW_confirmBody{color:var(--gs-fg-dim);font-size:var(--gs-t-dense);overflow-wrap:anywhere;line-height:1.55}.SD8qLW_confirmActions{flex-direction:row-reverse;gap:8px;margin-top:2px;display:flex}.SD8qLW_btn.SD8qLW_btnDanger{border-color:var(--gs-del);background:var(--gs-del);color:var(--gs-on-accent,#fff);font-weight:600}.SD8qLW_btn.SD8qLW_btnDanger:hover:not(:disabled){border-color:var(--gs-del);background:var(--gs-del);color:var(--gs-on-accent,#fff)}.SD8qLW_fbTree{min-width:var(--gs-min-tree);background:var(--gs-surface-2);flex-direction:column;flex:none;gap:4px;padding:6px;display:flex;overflow:auto}.SD8qLW_fbSearch{box-sizing:border-box;width:100%;font:inherit;font-size:var(--gs-t-meta);color:var(--gs-fg);background:var(--gs-surface);border:1px solid var(--gs-border);border-radius:4px;flex:none;padding:4px 6px}.SD8qLW_fbSearch:focus{border-color:var(--gs-accent);outline:none}.SD8qLW_fbNote{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);flex:none;padding:2px 4px}.SD8qLW_fbList{margin:0;padding:0;list-style:none}.SD8qLW_fbRow{width:100%;font:inherit;font-size:var(--gs-t-dense);color:var(--gs-fg-dim);text-align:left;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:3px;align-items:center;gap:4px;padding:2px 6px 2px 4px;display:flex;overflow:hidden}.SD8qLW_fbRow:hover{background:var(--gs-hover)}.SD8qLW_fbRowActive{background:var(--gs-selected);color:var(--gs-fg)}.SD8qLW_fbDirName,.SD8qLW_fbFileName{text-overflow:ellipsis;overflow:hidden}.SD8qLW_fbMain{min-width:var(--gs-min-diff);background:var(--gs-surface);flex-direction:column;flex:1 1 0;min-height:0;display:flex}.SD8qLW_fbHeader{border-bottom:1px solid var(--gs-border);flex:none;align-items:flex-start;gap:8px;padding:4px 8px 0;display:flex}.SD8qLW_fbPath{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);text-overflow:ellipsis;white-space:nowrap;padding:4px 0;overflow:hidden}.SD8qLW_fbBody{flex:1 1 0;min-height:0;padding:4px 8px;overflow:auto}.SD8qLW_fbCommit{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);background:var(--gs-surface-2);border-bottom:1px solid var(--gs-border);flex:none;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.SD8qLW_fbCommitLine{color:var(--gs-fg-faint);font-variant-numeric:tabular-nums;flex:none}.SD8qLW_fbCommitWho{color:var(--gs-fg);flex:none;font-weight:600}.SD8qLW_fbCommitWhen{font-variant-numeric:tabular-nums;flex:none}.SD8qLW_fbCommitHash{color:var(--gs-fg-faint);flex:none;font-family:inherit}.SD8qLW_fbCommitWhat{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--gs-fg);flex:auto;overflow:hidden}.SD8qLW_fbCommitHint{color:var(--gs-fg-faint)}.SD8qLW_fbMore{font-size:var(--gs-t-meta);color:var(--gs-fg-faint);padding:2px 6px 4px 4px;font-style:italic;display:block}.SD8qLW_imgPane{flex-direction:column;gap:8px;height:100%;min-height:0;display:flex}.SD8qLW_imgStage{border-radius:var(--gs-r-control);background-color:var(--gs-surface-2);background-image:linear-gradient(45deg, var(--gs-border-soft) 25%, transparent 25%, transparent 75%, var(--gs-border-soft) 75%), linear-gradient(45deg, var(--gs-border-soft) 25%, transparent 25%, transparent 75%, var(--gs-border-soft) 75%);background-position:0 0,8px 8px;background-size:16px 16px;flex:auto;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.SD8qLW_imgShot{object-fit:contain;image-rendering:auto;max-width:100%;max-height:100%}.SD8qLW_imgStage[data-actual]{justify-content:flex-start;align-items:flex-start}.SD8qLW_imgStage[data-actual] .SD8qLW_imgShot{object-fit:none;max-width:none;max-height:none}.SD8qLW_imgCaption{font-size:var(--gs-t-meta);color:var(--gs-fg-dim);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;display:flex}";
1143
1225
  const tagId = "@young1lin/dsh-ui-gitworkbench/GitWorkbenchPanel.module.css";
1144
1226
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
1145
1227
  const tag = document.createElement("style");
@@ -1149,330 +1231,332 @@ window.__ModuleLoader__.load({
1149
1231
  document.head.appendChild(tag);
1150
1232
  }
1151
1233
  var GitWorkbenchPanel_module_css_default = {
1152
- "treeLabel": "SD8qLW_treeLabel",
1153
- "lineContext": "SD8qLW_lineContext",
1154
- "filterChip": "SD8qLW_filterChip",
1155
- "cardDeleted": "SD8qLW_cardDeleted",
1156
- "commitSubjectRow": "SD8qLW_commitSubjectRow",
1157
- "fbMain": "SD8qLW_fbMain",
1158
- "chipLight": "SD8qLW_chipLight",
1159
- "funnelTabActive": "SD8qLW_funnelTabActive",
1160
- "funnelBoundBtn": "SD8qLW_funnelBoundBtn",
1161
- "diffNav": "SD8qLW_diffNav",
1162
- "fbCommit": "SD8qLW_fbCommit",
1163
- "themeGroup": "SD8qLW_themeGroup",
1164
- "overlay": "SD8qLW_overlay",
1165
- "sideActions": "SD8qLW_sideActions",
1166
- "filterChipRemove": "SD8qLW_filterChipRemove",
1167
- "funnelRow": "SD8qLW_funnelRow",
1168
- "cardFiles": "SD8qLW_cardFiles",
1169
- "funnelMore": "SD8qLW_funnelMore",
1170
- "refPicker": "SD8qLW_refPicker",
1171
- "calNav": "SD8qLW_calNav",
1172
- "btnClose": "SD8qLW_btnClose",
1173
- "pathDirGlyph": "SD8qLW_pathDirGlyph",
1234
+ "segmented": "SD8qLW_segmented",
1235
+ "commitActive": "SD8qLW_commitActive",
1236
+ "commitsSentinel": "SD8qLW_commitsSentinel",
1237
+ "refPop": "SD8qLW_refPop",
1238
+ "headerTotals": "SD8qLW_headerTotals",
1239
+ "refLabel": "SD8qLW_refLabel",
1174
1240
  "menuPop": "SD8qLW_menuPop",
1175
- "treeIconGlyph": "SD8qLW_treeIconGlyph",
1176
- "paneDividerY": "SD8qLW_paneDividerY",
1177
- "gutter": "SD8qLW_gutter",
1178
- "headerLeft": "SD8qLW_headerLeft",
1179
- "signDel": "SD8qLW_signDel",
1180
- "treeIconOn": "SD8qLW_treeIconOn",
1181
- "fbRowActive": "SD8qLW_fbRowActive",
1182
- "commitWhen": "SD8qLW_commitWhen",
1183
- "fileCountAdd": "SD8qLW_fileCountAdd",
1241
+ "renameLine": "SD8qLW_renameLine",
1242
+ "treeIcon": "SD8qLW_treeIcon",
1243
+ "layoutGlyph": "SD8qLW_layoutGlyph",
1244
+ "pathDirGlyph": "SD8qLW_pathDirGlyph",
1245
+ "checkMark": "SD8qLW_checkMark",
1246
+ "fbList": "SD8qLW_fbList",
1247
+ "body": "SD8qLW_body",
1248
+ "fbCommitLine": "SD8qLW_fbCommitLine",
1249
+ "refRowActive": "SD8qLW_refRowActive",
1250
+ "funnelBoundKey": "SD8qLW_funnelBoundKey",
1184
1251
  "treeDirActive": "SD8qLW_treeDirActive",
1185
- "wordAdd": "SD8qLW_wordAdd",
1186
- "opBannerBad": "SD8qLW_opBannerBad",
1187
- "fbNote": "SD8qLW_fbNote",
1188
- "sideColGridBlame": "SD8qLW_sideColGridBlame",
1189
- "funnelTabs": "SD8qLW_funnelTabs",
1190
- "paneDividerActive": "SD8qLW_paneDividerActive",
1191
- "sliderRow": "SD8qLW_sliderRow",
1192
- "paletteRow": "SD8qLW_paletteRow",
1193
- "funnelBounds": "SD8qLW_funnelBounds",
1194
- "calIn": "SD8qLW_calIn",
1195
- "commitHasBody": "SD8qLW_commitHasBody",
1196
- "treeLead": "SD8qLW_treeLead",
1197
- "commitPop": "SD8qLW_commitPop",
1198
- "treeDirCounts": "SD8qLW_treeDirCounts",
1199
- "lnNew": "SD8qLW_lnNew",
1200
1252
  "refRowSpacer": "SD8qLW_refRowSpacer",
1201
- "fbList": "SD8qLW_fbList",
1202
- "treeFilterClear": "SD8qLW_treeFilterClear",
1203
- "gsSlide": "SD8qLW_gsSlide",
1204
- "elideHead": "SD8qLW_elideHead",
1205
- "syncLevel": "SD8qLW_syncLevel",
1206
- "opBannerOk": "SD8qLW_opBannerOk",
1207
- "blockBar": "SD8qLW_blockBar",
1208
- "btnDanger": "SD8qLW_btnDanger",
1209
- "imgShot": "SD8qLW_imgShot",
1210
- "commitHash": "SD8qLW_commitHash",
1211
- "drawer": "SD8qLW_drawer",
1212
- "calOut": "SD8qLW_calOut",
1213
- "treeTools": "SD8qLW_treeTools",
1214
- "sideCols": "SD8qLW_sideCols",
1215
- "fileCounts": "SD8qLW_fileCounts",
1216
- "headerTotalsAdd": "SD8qLW_headerTotalsAdd",
1253
+ "sideCodeDel": "SD8qLW_sideCodeDel",
1254
+ "miniBtnPrimary": "SD8qLW_miniBtnPrimary",
1255
+ "fbFileName": "SD8qLW_fbFileName",
1256
+ "elideTail": "SD8qLW_elideTail",
1257
+ "cal": "SD8qLW_cal",
1258
+ "treeWrap": "SD8qLW_treeWrap",
1259
+ "sideCodeSame": "SD8qLW_sideCodeSame",
1217
1260
  "headerTotalsDim": "SD8qLW_headerTotalsDim",
1218
- "headerPicker": "SD8qLW_headerPicker",
1219
- "chevron": "SD8qLW_chevron",
1220
- "stDeleted": "SD8qLW_stDeleted",
1221
- "scopeRow": "SD8qLW_scopeRow",
1222
- "cardGlyph": "SD8qLW_cardGlyph",
1223
- "funnelCount": "SD8qLW_funnelCount",
1224
- "commitRef": "SD8qLW_commitRef",
1225
- "chevronOpen": "SD8qLW_chevronOpen",
1226
- "btnIcon": "SD8qLW_btnIcon",
1227
- "sideCol": "SD8qLW_sideCol",
1228
- "sideTabs": "SD8qLW_sideTabs",
1229
- "stRenamed": "SD8qLW_stRenamed",
1230
- "refButton": "SD8qLW_refButton",
1231
- "sideBlockHot": "SD8qLW_sideBlockHot",
1232
- "headerRight": "SD8qLW_headerRight",
1233
- "commitMeta": "SD8qLW_commitMeta",
1234
- "treeFilterInput": "SD8qLW_treeFilterInput",
1235
- "cardSep": "SD8qLW_cardSep",
1236
- "tabs": "SD8qLW_tabs",
1237
- "filePath": "SD8qLW_filePath",
1238
- "scopeBtn": "SD8qLW_scopeBtn",
1239
- "funnelFootClear": "SD8qLW_funnelFootClear",
1240
- "imgStage": "SD8qLW_imgStage",
1241
- "sideTabActive": "SD8qLW_sideTabActive",
1242
- "btnBehind": "SD8qLW_btnBehind",
1243
- "refPop": "SD8qLW_refPop",
1244
- "commitPopSubject": "SD8qLW_commitPopSubject",
1245
- "file": "SD8qLW_file",
1246
- "cardDetached": "SD8qLW_cardDetached",
1247
- "lineAdd": "SD8qLW_lineAdd",
1248
- "commitLead": "SD8qLW_commitLead",
1249
- "funnelBoundRows": "SD8qLW_funnelBoundRows",
1250
- "bgPreview": "SD8qLW_bgPreview",
1251
- "syncUpstream": "SD8qLW_syncUpstream",
1252
- "confirmBox": "SD8qLW_confirmBox",
1253
- "fbCommitWho": "SD8qLW_fbCommitWho",
1254
- "refList": "SD8qLW_refList",
1255
- "gsFade": "SD8qLW_gsFade",
1256
- "funnelBoundBtnActive": "SD8qLW_funnelBoundBtnActive",
1257
- "treeRow": "SD8qLW_treeRow",
1258
- "btnPrimary": "SD8qLW_btnPrimary",
1259
- "fbSearch": "SD8qLW_fbSearch",
1260
- "pathChildren": "SD8qLW_pathChildren",
1261
+ "treeCol": "SD8qLW_treeCol",
1262
+ "blameCell": "SD8qLW_blameCell",
1261
1263
  "cardBranch": "SD8qLW_cardBranch",
1262
- "refSearch": "SD8qLW_refSearch",
1264
+ "lineAdd": "SD8qLW_lineAdd",
1265
+ "commitMessage": "SD8qLW_commitMessage",
1266
+ "chipLight": "SD8qLW_chipLight",
1267
+ "commitAmend": "SD8qLW_commitAmend",
1268
+ "treeFilterClear": "SD8qLW_treeFilterClear",
1269
+ "cardAhead": "SD8qLW_cardAhead",
1263
1270
  "commitAuthor": "SD8qLW_commitAuthor",
1264
- "fileStatus": "SD8qLW_fileStatus",
1265
- "sideBannerTitle": "SD8qLW_sideBannerTitle",
1266
- "sideArmable": "SD8qLW_sideArmable",
1267
- "fbCommitHash": "SD8qLW_fbCommitHash",
1268
- "funnelChevron": "SD8qLW_funnelChevron",
1269
- "layoutSwitch": "SD8qLW_layoutSwitch",
1270
- "treeSub": "SD8qLW_treeSub",
1271
- "imgPane": "SD8qLW_imgPane",
1272
- "themeNote": "SD8qLW_themeNote",
1273
- "segmentChip": "SD8qLW_segmentChip",
1274
- "calTitle": "SD8qLW_calTitle",
1275
- "treeDir": "SD8qLW_treeDir",
1276
- "funnelPresets": "SD8qLW_funnelPresets",
1271
+ "refPicker": "SD8qLW_refPicker",
1277
1272
  "chipSystem": "SD8qLW_chipSystem",
1278
- "treeFilter": "SD8qLW_treeFilter",
1279
- "refLabel": "SD8qLW_refLabel",
1280
- "lineHunk": "SD8qLW_lineHunk",
1281
- "paneHead": "SD8qLW_paneHead",
1282
- "miniBtnPrimary": "SD8qLW_miniBtnPrimary",
1283
- "commitRefMore": "SD8qLW_commitRefMore",
1284
- "commitPopMeta": "SD8qLW_commitPopMeta",
1285
- "fbCommitHint": "SD8qLW_fbCommitHint",
1286
- "funnelBoundValSet": "SD8qLW_funnelBoundValSet",
1287
- "commitTop": "SD8qLW_commitTop",
1288
- "settingsPop": "SD8qLW_settingsPop",
1289
- "imgCaption": "SD8qLW_imgCaption",
1290
- "compareArrow": "SD8qLW_compareArrow",
1291
- "body": "SD8qLW_body",
1292
- "refRowActive": "SD8qLW_refRowActive",
1293
- "pullGroup": "SD8qLW_pullGroup",
1294
- "fbBody": "SD8qLW_fbBody",
1295
- "treeDirCount": "SD8qLW_treeDirCount",
1296
- "card": "SD8qLW_card",
1297
- "overlayMax": "SD8qLW_overlayMax",
1298
- "sideColRight": "SD8qLW_sideColRight",
1299
- "fileDiscard": "SD8qLW_fileDiscard",
1300
- "calGrid": "SD8qLW_calGrid",
1301
- "funnelName": "SD8qLW_funnelName",
1302
- "sideCode": "SD8qLW_sideCode",
1303
- "header": "SD8qLW_header",
1304
- "stAdded": "SD8qLW_stAdded",
1305
- "commitRow": "SD8qLW_commitRow",
1306
- "theme": "SD8qLW_theme",
1307
- "calMark": "SD8qLW_calMark",
1308
- "funnel": "SD8qLW_funnel",
1309
- "btnCount": "SD8qLW_btnCount",
1310
- "fbCommitWhen": "SD8qLW_fbCommitWhen",
1311
- "funnelTabCount": "SD8qLW_funnelTabCount",
1312
- "segment": "SD8qLW_segment",
1313
- "cardBehind": "SD8qLW_cardBehind",
1314
- "btn": "SD8qLW_btn",
1315
- "sideBanner": "SD8qLW_sideBanner",
1273
+ "sideCellBlock": "SD8qLW_sideCellBlock",
1274
+ "paletteRow": "SD8qLW_paletteRow",
1275
+ "imgPane": "SD8qLW_imgPane",
1276
+ "refCaret": "SD8qLW_refCaret",
1277
+ "diffWrap": "SD8qLW_diffWrap",
1278
+ "imgShot": "SD8qLW_imgShot",
1279
+ "headerTotalsDel": "SD8qLW_headerTotalsDel",
1280
+ "fbCommit": "SD8qLW_fbCommit",
1316
1281
  "confirmActions": "SD8qLW_confirmActions",
1317
- "sideBannerActs": "SD8qLW_sideBannerActs",
1282
+ "syncBar": "SD8qLW_syncBar",
1283
+ "headerRight": "SD8qLW_headerRight",
1284
+ "signDel": "SD8qLW_signDel",
1285
+ "fbBody": "SD8qLW_fbBody",
1286
+ "wtCurrent": "SD8qLW_wtCurrent",
1287
+ "sideColGridBlame": "SD8qLW_sideColGridBlame",
1288
+ "btnDanger": "SD8qLW_btnDanger",
1289
+ "funnelRow": "SD8qLW_funnelRow",
1318
1290
  "calHead": "SD8qLW_calHead",
1319
- "line": "SD8qLW_line",
1320
- "stModified": "SD8qLW_stModified",
1321
- "graphCell": "SD8qLW_graphCell",
1322
- "sliderValue": "SD8qLW_sliderValue",
1323
- "commitMessage": "SD8qLW_commitMessage",
1324
- "treeEmpty": "SD8qLW_treeEmpty",
1325
- "commitAmend": "SD8qLW_commitAmend",
1326
- "fileBinary": "SD8qLW_fileBinary",
1327
- "funnelButtonActive": "SD8qLW_funnelButtonActive",
1328
- "headerTotalsDel": "SD8qLW_headerTotalsDel",
1329
- "filterClear": "SD8qLW_filterClear",
1330
- "funnelBoundClear": "SD8qLW_funnelBoundClear",
1331
- "funnelFoot": "SD8qLW_funnelFoot",
1332
- "commit": "SD8qLW_commit",
1333
- "commitActive": "SD8qLW_commitActive",
1334
- "bodyRow": "SD8qLW_bodyRow",
1335
- "sideCellBlock": "SD8qLW_sideCellBlock",
1336
- "sideNumDel": "SD8qLW_sideNumDel",
1337
- "refValue": "SD8qLW_refValue",
1338
- "checkMarkOn": "SD8qLW_checkMarkOn",
1339
- "fbPath": "SD8qLW_fbPath",
1340
- "opBanner": "SD8qLW_opBanner",
1341
- "tabActive": "SD8qLW_tabActive",
1342
- "fbCommitWhat": "SD8qLW_fbCommitWhat",
1343
- "checkMark": "SD8qLW_checkMark",
1344
- "scopeBtnActive": "SD8qLW_scopeBtnActive",
1345
- "themeRowSplit": "SD8qLW_themeRowSplit",
1291
+ "sideArmable": "SD8qLW_sideArmable",
1292
+ "tabs": "SD8qLW_tabs",
1293
+ "diffNav": "SD8qLW_diffNav",
1294
+ "cardBranchName": "SD8qLW_cardBranchName",
1295
+ "tab": "SD8qLW_tab",
1346
1296
  "tree": "SD8qLW_tree",
1347
- "headerBranch": "SD8qLW_headerBranch",
1348
- "refFoot": "SD8qLW_refFoot",
1349
- "syncSpacer": "SD8qLW_syncSpacer",
1350
- "btnAhead": "SD8qLW_btnAhead",
1351
- "funnelPreset": "SD8qLW_funnelPreset",
1352
- "funnelPane": "SD8qLW_funnelPane",
1353
- "paneDivider": "SD8qLW_paneDivider",
1354
- "cardAdded": "SD8qLW_cardAdded",
1355
- "themeRail": "SD8qLW_themeRail",
1356
- "funnelFootCount": "SD8qLW_funnelFootCount",
1357
- "syncBar": "SD8qLW_syncBar",
1358
- "blameCell": "SD8qLW_blameCell",
1359
- "funnelButton": "SD8qLW_funnelButton",
1360
- "funnelSearch": "SD8qLW_funnelSearch",
1361
- "refCaret": "SD8qLW_refCaret",
1362
- "wordDel": "SD8qLW_wordDel",
1363
- "paletteRowActive": "SD8qLW_paletteRowActive",
1364
- "fbCommitLine": "SD8qLW_fbCommitLine",
1365
- "commitBox": "SD8qLW_commitBox",
1297
+ "commitsPane": "SD8qLW_commitsPane",
1298
+ "treeEmpty": "SD8qLW_treeEmpty",
1299
+ "calWeek": "SD8qLW_calWeek",
1300
+ "headerViewRef": "SD8qLW_headerViewRef",
1301
+ "funnelPresetActive": "SD8qLW_funnelPresetActive",
1366
1302
  "commitBtn": "SD8qLW_commitBtn",
1367
- "layoutGlyph": "SD8qLW_layoutGlyph",
1368
- "themeDirty": "SD8qLW_themeDirty",
1369
- "resizerActive": "SD8qLW_resizerActive",
1370
- "commitCopy": "SD8qLW_commitCopy",
1303
+ "commitRow": "SD8qLW_commitRow",
1304
+ "empty": "SD8qLW_empty",
1305
+ "cardAdded": "SD8qLW_cardAdded",
1306
+ "checkBox": "SD8qLW_checkBox",
1307
+ "fbRow": "SD8qLW_fbRow",
1308
+ "funnelMore": "SD8qLW_funnelMore",
1371
1309
  "fileLi": "SD8qLW_fileLi",
1372
- "cssArea": "SD8qLW_cssArea",
1373
- "sideScroll": "SD8qLW_sideScroll",
1374
1310
  "pathNode": "SD8qLW_pathNode",
1375
1311
  "bgEmpty": "SD8qLW_bgEmpty",
1376
- "headerView": "SD8qLW_headerView",
1377
- "refRow": "SD8qLW_refRow",
1378
- "sideCodeDel": "SD8qLW_sideCodeDel",
1312
+ "commitSubjectRow": "SD8qLW_commitSubjectRow",
1313
+ "fbCommitHash": "SD8qLW_fbCommitHash",
1379
1314
  "segmentActive": "SD8qLW_segmentActive",
1380
- "fbMore": "SD8qLW_fbMore",
1381
- "scopeHint": "SD8qLW_scopeHint",
1382
- "checkMarkPartial": "SD8qLW_checkMarkPartial",
1383
- "commitPopTop": "SD8qLW_commitPopTop",
1384
- "empty": "SD8qLW_empty",
1315
+ "commitPop": "SD8qLW_commitPop",
1385
1316
  "commitFilter": "SD8qLW_commitFilter",
1386
- "diffScroll": "SD8qLW_diffScroll",
1387
- "cardBranchName": "SD8qLW_cardBranchName",
1388
- "commitsPane": "SD8qLW_commitsPane",
1389
- "layoutButton": "SD8qLW_layoutButton",
1390
- "fbRow": "SD8qLW_fbRow",
1391
- "sideNav": "SD8qLW_sideNav",
1392
- "chipDark": "SD8qLW_chipDark",
1393
- "themeLabel": "SD8qLW_themeLabel",
1394
- "funnelPresetActive": "SD8qLW_funnelPresetActive",
1395
- "fbDirName": "SD8qLW_fbDirName",
1396
- "sideNotice": "SD8qLW_sideNotice",
1397
- "paneTitle": "SD8qLW_paneTitle",
1398
- "cardAhead": "SD8qLW_cardAhead",
1399
- "lineDel": "SD8qLW_lineDel",
1400
- "sideNavCount": "SD8qLW_sideNavCount",
1401
- "sideCodeAdd": "SD8qLW_sideCodeAdd",
1317
+ "funnelBoundClear": "SD8qLW_funnelBoundClear",
1318
+ "commitTop": "SD8qLW_commitTop",
1319
+ "lineHunk": "SD8qLW_lineHunk",
1320
+ "layoutButtonOn": "SD8qLW_layoutButtonOn",
1321
+ "fbMain": "SD8qLW_fbMain",
1322
+ "fileStatus": "SD8qLW_fileStatus",
1323
+ "commitLine": "SD8qLW_commitLine",
1324
+ "stModified": "SD8qLW_stModified",
1325
+ "blockBtnDanger": "SD8qLW_blockBtnDanger",
1326
+ "refSearch": "SD8qLW_refSearch",
1327
+ "headerTotalsAdd": "SD8qLW_headerTotalsAdd",
1328
+ "scopeBtn": "SD8qLW_scopeBtn",
1329
+ "refValue": "SD8qLW_refValue",
1330
+ "cardBehind": "SD8qLW_cardBehind",
1331
+ "gsFade": "SD8qLW_gsFade",
1332
+ "gsSlide": "SD8qLW_gsSlide",
1333
+ "fbCommitHint": "SD8qLW_fbCommitHint",
1334
+ "filterChipRemove": "SD8qLW_filterChipRemove",
1335
+ "resizer": "SD8qLW_resizer",
1336
+ "headerView": "SD8qLW_headerView",
1337
+ "cardSep": "SD8qLW_cardSep",
1338
+ "cmHost": "SD8qLW_cmHost",
1339
+ "commitRefMore": "SD8qLW_commitRefMore",
1340
+ "imgStage": "SD8qLW_imgStage",
1341
+ "calToday": "SD8qLW_calToday",
1342
+ "sideCol": "SD8qLW_sideCol",
1343
+ "syncLevel": "SD8qLW_syncLevel",
1402
1344
  "treeDirName": "SD8qLW_treeDirName",
1403
- "sideCodeSame": "SD8qLW_sideCodeSame",
1404
- "checkBox": "SD8qLW_checkBox",
1405
- "segmented": "SD8qLW_segmented",
1406
- "signAdd": "SD8qLW_signAdd",
1407
- "headerDetached": "SD8qLW_headerDetached",
1408
- "treeIcon": "SD8qLW_treeIcon",
1409
- "confirmBody": "SD8qLW_confirmBody",
1410
- "sideSaveReady": "SD8qLW_sideSaveReady",
1411
- "funnelPop": "SD8qLW_funnelPop",
1412
- "stUntracked": "SD8qLW_stUntracked",
1413
- "sideEditCell": "SD8qLW_sideEditCell",
1414
- "calWeek": "SD8qLW_calWeek",
1345
+ "scopeBtnActive": "SD8qLW_scopeBtnActive",
1346
+ "layoutSwitch": "SD8qLW_layoutSwitch",
1347
+ "paneDividerY": "SD8qLW_paneDividerY",
1348
+ "sidePane": "SD8qLW_sidePane",
1349
+ "overlay": "SD8qLW_overlay",
1350
+ "btnBehind": "SD8qLW_btnBehind",
1351
+ "funnelTabActive": "SD8qLW_funnelTabActive",
1352
+ "fileCountDel": "SD8qLW_fileCountDel",
1353
+ "wordDel": "SD8qLW_wordDel",
1415
1354
  "commits": "SD8qLW_commits",
1416
- "renameLine": "SD8qLW_renameLine",
1417
- "code": "SD8qLW_code",
1418
- "calToday": "SD8qLW_calToday",
1355
+ "treeLead": "SD8qLW_treeLead",
1356
+ "confirmScrim": "SD8qLW_confirmScrim",
1419
1357
  "diffPane": "SD8qLW_diffPane",
1420
- "treeCol": "SD8qLW_treeCol",
1421
- "elideTail": "SD8qLW_elideTail",
1422
- "treeWrap": "SD8qLW_treeWrap",
1358
+ "paneDivider": "SD8qLW_paneDivider",
1359
+ "sideColRight": "SD8qLW_sideColRight",
1360
+ "themeNote": "SD8qLW_themeNote",
1361
+ "sideTabs": "SD8qLW_sideTabs",
1362
+ "scopeHint": "SD8qLW_scopeHint",
1363
+ "commitBox": "SD8qLW_commitBox",
1364
+ "refButton": "SD8qLW_refButton",
1365
+ "btn": "SD8qLW_btn",
1366
+ "filterClear": "SD8qLW_filterClear",
1367
+ "funnelBounds": "SD8qLW_funnelBounds",
1368
+ "sideBanner": "SD8qLW_sideBanner",
1369
+ "segmentChip": "SD8qLW_segmentChip",
1370
+ "funnelPane": "SD8qLW_funnelPane",
1371
+ "refRow": "SD8qLW_refRow",
1372
+ "sideNav": "SD8qLW_sideNav",
1373
+ "header": "SD8qLW_header",
1374
+ "elideHead": "SD8qLW_elideHead",
1375
+ "scopeRow": "SD8qLW_scopeRow",
1376
+ "filterChipLabel": "SD8qLW_filterChipLabel",
1377
+ "lnNew": "SD8qLW_lnNew",
1378
+ "fbCommitWhen": "SD8qLW_fbCommitWhen",
1379
+ "theme": "SD8qLW_theme",
1380
+ "stDeleted": "SD8qLW_stDeleted",
1381
+ "funnelBoundRow": "SD8qLW_funnelBoundRow",
1382
+ "headerPicker": "SD8qLW_headerPicker",
1423
1383
  "filterChips": "SD8qLW_filterChips",
1424
- "commitLine": "SD8qLW_commitLine",
1425
- "funnelBoundKey": "SD8qLW_funnelBoundKey",
1426
- "elide": "SD8qLW_elide",
1427
- "funnelCaption": "SD8qLW_funnelCaption",
1428
- "headerViewRef": "SD8qLW_headerViewRef",
1384
+ "filePath": "SD8qLW_filePath",
1385
+ "refEmpty": "SD8qLW_refEmpty",
1386
+ "commitRef": "SD8qLW_commitRef",
1387
+ "sideCols": "SD8qLW_sideCols",
1388
+ "commitSubject": "SD8qLW_commitSubject",
1389
+ "pullGroup": "SD8qLW_pullGroup",
1390
+ "treeTools": "SD8qLW_treeTools",
1391
+ "funnelPop": "SD8qLW_funnelPop",
1392
+ "sliderRow": "SD8qLW_sliderRow",
1393
+ "funnelBoundBtn": "SD8qLW_funnelBoundBtn",
1429
1394
  "compareBar": "SD8qLW_compareBar",
1430
- "funnelBoundRow": "SD8qLW_funnelBoundRow",
1395
+ "sideNum": "SD8qLW_sideNum",
1396
+ "commitCopy": "SD8qLW_commitCopy",
1397
+ "cssArea": "SD8qLW_cssArea",
1398
+ "paletteRowActive": "SD8qLW_paletteRowActive",
1399
+ "commitPopTop": "SD8qLW_commitPopTop",
1400
+ "confirmBody": "SD8qLW_confirmBody",
1401
+ "signAdd": "SD8qLW_signAdd",
1402
+ "sideScroll": "SD8qLW_sideScroll",
1403
+ "funnelCount": "SD8qLW_funnelCount",
1404
+ "refFoot": "SD8qLW_refFoot",
1405
+ "gutter": "SD8qLW_gutter",
1406
+ "code": "SD8qLW_code",
1407
+ "blockBar": "SD8qLW_blockBar",
1431
1408
  "cardWt": "SD8qLW_cardWt",
1432
- "commitStaged": "SD8qLW_commitStaged",
1409
+ "chevron": "SD8qLW_chevron",
1410
+ "bodyRow": "SD8qLW_bodyRow",
1411
+ "sideCode": "SD8qLW_sideCode",
1412
+ "segment": "SD8qLW_segment",
1413
+ "headerBranch": "SD8qLW_headerBranch",
1414
+ "funnelPreset": "SD8qLW_funnelPreset",
1415
+ "sideColGrid": "SD8qLW_sideColGrid",
1416
+ "opBannerBad": "SD8qLW_opBannerBad",
1417
+ "fbCommitWho": "SD8qLW_fbCommitWho",
1418
+ "refRowName": "SD8qLW_refRowName",
1419
+ "funnelButtonActive": "SD8qLW_funnelButtonActive",
1420
+ "funnelFootClear": "SD8qLW_funnelFootClear",
1421
+ "treeFilterInput": "SD8qLW_treeFilterInput",
1422
+ "sideActions": "SD8qLW_sideActions",
1423
+ "btnClose": "SD8qLW_btnClose",
1424
+ "fileCounts": "SD8qLW_fileCounts",
1425
+ "lineContext": "SD8qLW_lineContext",
1426
+ "stRenamed": "SD8qLW_stRenamed",
1427
+ "diffSpacer": "SD8qLW_diffSpacer",
1433
1428
  "funnelBoundVal": "SD8qLW_funnelBoundVal",
1434
- "confirmScrim": "SD8qLW_confirmScrim",
1435
- "diffPre": "SD8qLW_diffPre",
1436
- "blockBtnDanger": "SD8qLW_blockBtnDanger",
1437
- "miniBtn": "SD8qLW_miniBtn",
1438
- "tab": "SD8qLW_tab",
1439
- "headerPathMain": "SD8qLW_headerPathMain",
1440
- "fbTree": "SD8qLW_fbTree",
1441
- "commitsFoot": "SD8qLW_commitsFoot",
1442
- "commitPopBody": "SD8qLW_commitPopBody",
1443
- "fileCountDel": "SD8qLW_fileCountDel",
1444
- "fbFileName": "SD8qLW_fbFileName",
1429
+ "stUntracked": "SD8qLW_stUntracked",
1430
+ "commitHasBody": "SD8qLW_commitHasBody",
1431
+ "funnelChevron": "SD8qLW_funnelChevron",
1432
+ "lineDel": "SD8qLW_lineDel",
1433
+ "treeIconOn": "SD8qLW_treeIconOn",
1434
+ "btnPrimary": "SD8qLW_btnPrimary",
1445
1435
  "funnelTab": "SD8qLW_funnelTab",
1446
- "refRowName": "SD8qLW_refRowName",
1447
- "blockBtn": "SD8qLW_blockBtn",
1448
- "sideTab": "SD8qLW_sideTab",
1449
- "commitsSentinel": "SD8qLW_commitsSentinel",
1436
+ "bgPreview": "SD8qLW_bgPreview",
1437
+ "treeFilter": "SD8qLW_treeFilter",
1438
+ "fbMore": "SD8qLW_fbMore",
1439
+ "resizerActive": "SD8qLW_resizerActive",
1440
+ "compareArrow": "SD8qLW_compareArrow",
1441
+ "commitMeta": "SD8qLW_commitMeta",
1442
+ "sliderValue": "SD8qLW_sliderValue",
1443
+ "sideSpacer": "SD8qLW_sideSpacer",
1444
+ "cardGlyph": "SD8qLW_cardGlyph",
1445
+ "layoutButton": "SD8qLW_layoutButton",
1446
+ "commitPopMeta": "SD8qLW_commitPopMeta",
1447
+ "elide": "SD8qLW_elide",
1448
+ "sideNotice": "SD8qLW_sideNotice",
1449
+ "fbDirName": "SD8qLW_fbDirName",
1450
+ "card": "SD8qLW_card",
1451
+ "fbRowActive": "SD8qLW_fbRowActive",
1452
+ "headerDetached": "SD8qLW_headerDetached",
1453
+ "themeRail": "SD8qLW_themeRail",
1454
+ "commitPopSubject": "SD8qLW_commitPopSubject",
1450
1455
  "fileActive": "SD8qLW_fileActive",
1451
- "refEmpty": "SD8qLW_refEmpty",
1452
- "sideNumAdd": "SD8qLW_sideNumAdd",
1453
- "treeActions": "SD8qLW_treeActions",
1454
- "funnelFootCountOn": "SD8qLW_funnelFootCountOn",
1455
- "sidePane": "SD8qLW_sidePane",
1456
- "swatch": "SD8qLW_swatch",
1457
- "headerTotals": "SD8qLW_headerTotals",
1458
- "funnelList": "SD8qLW_funnelList",
1459
- "wtCurrent": "SD8qLW_wtCurrent",
1460
- "filterChipLabel": "SD8qLW_filterChipLabel",
1461
- "treeDirLi": "SD8qLW_treeDirLi",
1462
- "cmHost": "SD8qLW_cmHost",
1463
- "treeIconDown": "SD8qLW_treeIconDown",
1456
+ "sideTab": "SD8qLW_sideTab",
1457
+ "themeDirty": "SD8qLW_themeDirty",
1458
+ "calOut": "SD8qLW_calOut",
1459
+ "cardDeleted": "SD8qLW_cardDeleted",
1460
+ "commitHash": "SD8qLW_commitHash",
1461
+ "treeDirCounts": "SD8qLW_treeDirCounts",
1462
+ "refList": "SD8qLW_refList",
1463
+ "checkMarkOn": "SD8qLW_checkMarkOn",
1464
+ "file": "SD8qLW_file",
1465
+ "fileCountAdd": "SD8qLW_fileCountAdd",
1466
+ "commitStaged": "SD8qLW_commitStaged",
1467
+ "sideNumDel": "SD8qLW_sideNumDel",
1468
+ "calIn": "SD8qLW_calIn",
1469
+ "drawer": "SD8qLW_drawer",
1470
+ "themeGroup": "SD8qLW_themeGroup",
1471
+ "calMark": "SD8qLW_calMark",
1472
+ "pathChildren": "SD8qLW_pathChildren",
1473
+ "chipDark": "SD8qLW_chipDark",
1474
+ "treeLabel": "SD8qLW_treeLabel",
1475
+ "tabActive": "SD8qLW_tabActive",
1476
+ "stAdded": "SD8qLW_stAdded",
1477
+ "headerPathMain": "SD8qLW_headerPathMain",
1478
+ "line": "SD8qLW_line",
1479
+ "sideBannerActs": "SD8qLW_sideBannerActs",
1480
+ "funnelFootCount": "SD8qLW_funnelFootCount",
1481
+ "opBannerOk": "SD8qLW_opBannerOk",
1482
+ "miniBtn": "SD8qLW_miniBtn",
1483
+ "calGrid": "SD8qLW_calGrid",
1484
+ "confirmBox": "SD8qLW_confirmBox",
1464
1485
  "fbHeader": "SD8qLW_fbHeader",
1465
- "diffWrap": "SD8qLW_diffWrap",
1466
- "cal": "SD8qLW_cal",
1486
+ "imgCaption": "SD8qLW_imgCaption",
1467
1487
  "lnOld": "SD8qLW_lnOld",
1468
- "resizer": "SD8qLW_resizer",
1469
- "layoutButtonOn": "SD8qLW_layoutButtonOn",
1470
- "confirmTitle": "SD8qLW_confirmTitle",
1471
- "sideNum": "SD8qLW_sideNum",
1488
+ "funnelTabCount": "SD8qLW_funnelTabCount",
1489
+ "treeIconGlyph": "SD8qLW_treeIconGlyph",
1490
+ "headerLeft": "SD8qLW_headerLeft",
1491
+ "commitPopBody": "SD8qLW_commitPopBody",
1492
+ "fbPath": "SD8qLW_fbPath",
1493
+ "funnelTabs": "SD8qLW_funnelTabs",
1494
+ "themeLabel": "SD8qLW_themeLabel",
1495
+ "paneHead": "SD8qLW_paneHead",
1472
1496
  "refGroup": "SD8qLW_refGroup",
1473
- "sideColGrid": "SD8qLW_sideColGrid",
1497
+ "calTitle": "SD8qLW_calTitle",
1498
+ "funnelBoundValSet": "SD8qLW_funnelBoundValSet",
1499
+ "sideTabActive": "SD8qLW_sideTabActive",
1500
+ "fbCommitWhat": "SD8qLW_fbCommitWhat",
1501
+ "fbSearch": "SD8qLW_fbSearch",
1502
+ "fbNote": "SD8qLW_fbNote",
1503
+ "funnelBoundBtnActive": "SD8qLW_funnelBoundBtnActive",
1504
+ "cardDetached": "SD8qLW_cardDetached",
1505
+ "commitsFoot": "SD8qLW_commitsFoot",
1506
+ "treeSub": "SD8qLW_treeSub",
1507
+ "themeRowSplit": "SD8qLW_themeRowSplit",
1508
+ "funnelFootCountOn": "SD8qLW_funnelFootCountOn",
1509
+ "treeDir": "SD8qLW_treeDir",
1510
+ "fbTree": "SD8qLW_fbTree",
1511
+ "checkMarkPartial": "SD8qLW_checkMarkPartial",
1512
+ "paneDividerActive": "SD8qLW_paneDividerActive",
1513
+ "treeDirLi": "SD8qLW_treeDirLi",
1514
+ "treeDirCount": "SD8qLW_treeDirCount",
1515
+ "fileBinary": "SD8qLW_fileBinary",
1516
+ "settingsPop": "SD8qLW_settingsPop",
1517
+ "diffScroll": "SD8qLW_diffScroll",
1518
+ "funnelButton": "SD8qLW_funnelButton",
1519
+ "confirmTitle": "SD8qLW_confirmTitle",
1520
+ "paneTitle": "SD8qLW_paneTitle",
1521
+ "overlayMax": "SD8qLW_overlayMax",
1522
+ "sideNavCount": "SD8qLW_sideNavCount",
1523
+ "funnelSearch": "SD8qLW_funnelSearch",
1524
+ "syncUpstream": "SD8qLW_syncUpstream",
1525
+ "calNav": "SD8qLW_calNav",
1526
+ "swatch": "SD8qLW_swatch",
1527
+ "funnelName": "SD8qLW_funnelName",
1528
+ "blockBtn": "SD8qLW_blockBtn",
1529
+ "funnelPresets": "SD8qLW_funnelPresets",
1530
+ "funnelFoot": "SD8qLW_funnelFoot",
1531
+ "opBanner": "SD8qLW_opBanner",
1532
+ "commitLead": "SD8qLW_commitLead",
1533
+ "chevronOpen": "SD8qLW_chevronOpen",
1534
+ "funnel": "SD8qLW_funnel",
1474
1535
  "pathFileGlyph": "SD8qLW_pathFileGlyph",
1475
- "commitSubject": "SD8qLW_commitSubject"
1536
+ "sideBannerTitle": "SD8qLW_sideBannerTitle",
1537
+ "sideSaveReady": "SD8qLW_sideSaveReady",
1538
+ "btnAhead": "SD8qLW_btnAhead",
1539
+ "sideEditCell": "SD8qLW_sideEditCell",
1540
+ "btnIcon": "SD8qLW_btnIcon",
1541
+ "sideNumAdd": "SD8qLW_sideNumAdd",
1542
+ "commit": "SD8qLW_commit",
1543
+ "fileDiscard": "SD8qLW_fileDiscard",
1544
+ "funnelList": "SD8qLW_funnelList",
1545
+ "syncSpacer": "SD8qLW_syncSpacer",
1546
+ "cardFiles": "SD8qLW_cardFiles",
1547
+ "treeActions": "SD8qLW_treeActions",
1548
+ "filterChip": "SD8qLW_filterChip",
1549
+ "diffPre": "SD8qLW_diffPre",
1550
+ "treeRow": "SD8qLW_treeRow",
1551
+ "btnCount": "SD8qLW_btnCount",
1552
+ "wordAdd": "SD8qLW_wordAdd",
1553
+ "funnelBoundRows": "SD8qLW_funnelBoundRows",
1554
+ "sideBlockHot": "SD8qLW_sideBlockHot",
1555
+ "funnelCaption": "SD8qLW_funnelCaption",
1556
+ "treeIconDown": "SD8qLW_treeIconDown",
1557
+ "graphCell": "SD8qLW_graphCell",
1558
+ "sideCodeAdd": "SD8qLW_sideCodeAdd",
1559
+ "commitWhen": "SD8qLW_commitWhen"
1476
1560
  };
1477
1561
  //#endregion
1478
1562
  //#region node_modules/.pnpm/@marijn+find-cluster-break@1.0.3/node_modules/@marijn/find-cluster-break/src/index.js
@@ -32596,33 +32680,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
32596
32680
  return PALETTE_THEMES[palette] ?? (palette.endsWith("light") ? "github-light-default" : "github-dark-default");
32597
32681
  }
32598
32682
  /**
32599
- * Tokenize a whole file into per-line runs. Undefined until a lazy grammar
32600
- * finishes loading (caller re-renders via {@link subscribeGrammarLoaded}).
32601
- *
32602
- * Diff reconstructions are not real files: a hunk often starts inside
32603
- * `export default {` or an unclosed `/*`, and Shiki then paints the following
32604
- * added statements as object keys or comments — keywords go missing. Comment
32605
- * lines keep the file-level pass (JSDoc ` * `); every other line is re-lexed
32606
- * on its own so `async` / `function` / `const` colour as they would at the
32607
- * top level.
32608
- * @param lines - source lines, no leading +/-.
32609
- * @param lang - from {@link shikiLangOf}.
32610
- * @param theme - from {@link shikiThemeOf}.
32611
- */
32612
- function highlightFile(lines, lang, theme = "github-dark-default") {
32613
- const fileTok = tokenizeLines(lines, lang, theme);
32614
- if (fileTok === void 0) return void 0;
32615
- return lines.map((line, i) => {
32616
- const together = fileTok[i] ?? [{
32617
- text: line,
32618
- color: void 0
32619
- }];
32620
- if (looksLikeCommentLine(line)) return together;
32621
- const solo = tokenizeLines([line], lang, theme)?.[0];
32622
- return solo !== void 0 && solo.length > 0 ? solo : together;
32623
- });
32624
- }
32625
- /**
32626
32683
  * Tokenize a file that really is one — the whole of it, in one pass.
32627
32684
  *
32628
32685
  * {@link highlightFile} re-lexes every non-comment line ON ITS OWN because a
@@ -32642,6 +32699,50 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
32642
32699
  function highlightWholeFile(lines, lang, theme = "github-dark-default") {
32643
32700
  return tokenizeLines(lines, lang, theme);
32644
32701
  }
32702
+ /**
32703
+ * Runs for the rows in a window, and nothing outside it.
32704
+ *
32705
+ * This is the pane's whole highlighting cost now, and it is proportional to the
32706
+ * viewport rather than to the file. Measured on a 4,000-line file with a
32707
+ * one-line change: whole-file passes plus per-line re-lexing froze the pane for
32708
+ * 1.4 seconds; the same file behind an extension no grammar claims cost 22ms of
32709
+ * script, which is what proved the entire remainder was Shiki.
32710
+ *
32711
+ * Both passes happen inside the window: the slice pass, which knows about
32712
+ * multi-line constructs within its reach, and the per-line re-lex that makes a
32713
+ * diff reconstruction colour as top-level code.
32714
+ *
32715
+ * @param lines - source lines, no leading +/-.
32716
+ * @param lang - from {@link shikiLangOf}.
32717
+ * @param theme - from {@link shikiThemeOf}.
32718
+ * @param from - first row in the window.
32719
+ * @param to - one past the last row in the window.
32720
+ * @returns an array indexed by ROW, filled only inside the window; undefined
32721
+ * when no grammar applies, which the caller already renders as plain text.
32722
+ */
32723
+ function highlightWindow(lines, lang, theme, from, to) {
32724
+ const first = Math.max(0, Math.trunc(from));
32725
+ const last = Math.min(lines.length, Math.trunc(to));
32726
+ if (last <= first) return void 0;
32727
+ const lead = Math.max(0, first - 240);
32728
+ const sliceTok = tokenizeLines(lines.slice(lead, last), lang, theme);
32729
+ if (sliceTok === void 0) return void 0;
32730
+ const out = new Array(lines.length);
32731
+ for (let i = first; i < last; i += 1) {
32732
+ const line = lines[i];
32733
+ const together = sliceTok[i - lead] ?? [{
32734
+ text: line,
32735
+ color: void 0
32736
+ }];
32737
+ if (looksLikeCommentLine(line)) {
32738
+ out[i] = together;
32739
+ continue;
32740
+ }
32741
+ const solo = tokenizeLines([line], lang, theme)?.[0];
32742
+ out[i] = solo !== void 0 && solo.length > 0 ? solo : together;
32743
+ }
32744
+ return out;
32745
+ }
32645
32746
  function looksLikeCommentLine(text) {
32646
32747
  const t = text.trimStart();
32647
32748
  return t.startsWith("//") || t.startsWith("/*") || t.startsWith("*") || t.startsWith("#");
@@ -32666,13 +32767,26 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
32666
32767
  return out.slice(0, lines.length);
32667
32768
  }
32668
32769
  /**
32669
- * Per-row Shiki runs for a unified diff: deletions from the old side,
32670
- * additions and context from the new side, each side highlighted as one file.
32770
+ * {@link highlightForRows} for the rows in a window, and nothing outside it.
32771
+ *
32772
+ * Same reason as {@link highlightWindow}, in the view History and Compare use:
32773
+ * a unified diff of a long file re-lexed every one of its rows, so opening one
32774
+ * froze the pane exactly as the side-by-side view did.
32775
+ *
32776
+ * The mapping from rows to the two sides' line arrays is built over ALL rows —
32777
+ * it is array bookkeeping with no Shiki in it, and a row's position on its side
32778
+ * depends on every row before it. Only the tokenizing is windowed, and because
32779
+ * a window of rows is contiguous, so is the span of lines it needs from each
32780
+ * side.
32781
+ *
32671
32782
  * @param rows - parsed unified-diff rows.
32672
32783
  * @param lang - from {@link shikiLangOf}.
32673
32784
  * @param theme - from {@link shikiThemeOf}.
32785
+ * @param from - first row in the window.
32786
+ * @param to - one past the last row in the window.
32787
+ * @returns an array indexed by ROW, filled only inside the window.
32674
32788
  */
32675
- function highlightForRows(rows, lang, theme = "github-dark-default") {
32789
+ function highlightForRowsWindow(rows, lang, theme, from, to) {
32676
32790
  const oldLines = [];
32677
32791
  const newLines = [];
32678
32792
  const oldAt = [];
@@ -32694,22 +32808,46 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
32694
32808
  oldAt.push(-1);
32695
32809
  newAt.push(-1);
32696
32810
  }
32697
- const oldTok = highlightFile(oldLines, lang, theme);
32698
- const newTok = highlightFile(newLines, lang, theme);
32699
- return rows.map((row, i) => {
32700
- if (row.kind === "del") return oldTok?.[oldAt[i]] ?? [{
32811
+ const first = Math.max(0, Math.trunc(from));
32812
+ const last = Math.min(rows.length, Math.trunc(to));
32813
+ const span = (at) => {
32814
+ let lo = -1;
32815
+ let hi = -1;
32816
+ for (let i = first; i < last; i += 1) {
32817
+ const j = at[i];
32818
+ if (j < 0) continue;
32819
+ if (lo < 0) lo = j;
32820
+ hi = j;
32821
+ }
32822
+ return lo < 0 ? {
32823
+ from: 0,
32824
+ to: 0
32825
+ } : {
32826
+ from: lo,
32827
+ to: hi + 1
32828
+ };
32829
+ };
32830
+ const oldSpan = span(oldAt);
32831
+ const newSpan = span(newAt);
32832
+ const oldTok = highlightWindow(oldLines, lang, theme, oldSpan.from, oldSpan.to);
32833
+ const newTok = highlightWindow(newLines, lang, theme, newSpan.from, newSpan.to);
32834
+ const out = new Array(rows.length);
32835
+ for (let i = first; i < last; i += 1) {
32836
+ const row = rows[i];
32837
+ if (row.kind === "del") out[i] = oldTok?.[oldAt[i]] ?? [{
32701
32838
  text: row.text,
32702
32839
  color: void 0
32703
32840
  }];
32704
- if (row.kind === "add" || row.kind === "context") return newTok?.[newAt[i]] ?? [{
32841
+ else if (row.kind === "add" || row.kind === "context") out[i] = newTok?.[newAt[i]] ?? [{
32705
32842
  text: row.text,
32706
32843
  color: void 0
32707
32844
  }];
32708
- return [{
32845
+ else out[i] = [{
32709
32846
  text: row.text,
32710
32847
  color: void 0
32711
32848
  }];
32712
- });
32849
+ }
32850
+ return out;
32713
32851
  }
32714
32852
  //#endregion
32715
32853
  //#region src/client/idle-value.ts
@@ -35048,13 +35186,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
35048
35186
  /** Per-file diff fetcher bound to the active view. Stable per view, so the
35049
35187
  * drawer's on-demand effect stops re-running on every render. */
35050
35188
  const fetchDiffForView = (0, react.useCallback)((path, signal) => {
35051
- if (tab === "compare") return Promise.resolve("");
35052
- return fetchFileDiff(statsPath, path, tab === "history" ? commitHash ?? void 0 : void 0, signal);
35189
+ return fetchFileDiff(statsPath, path, tab === "history" ? commitHash ?? void 0 : void 0, tab === "compare" ? {
35190
+ base: baseRef,
35191
+ head: headRef
35192
+ } : void 0, signal);
35053
35193
  }, [
35054
35194
  fetchFileDiff,
35055
35195
  statsPath,
35056
35196
  tab,
35057
- commitHash
35197
+ commitHash,
35198
+ baseRef,
35199
+ headRef
35058
35200
  ]);
35059
35201
  if (stats === null) return null;
35060
35202
  if (stats.error !== void 0 && !open) return null;
@@ -38906,16 +39048,21 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
38906
39048
  const grammarGen = (0, react.useSyncExternalStore)(subscribeGrammarLoaded, grammarLoadCount);
38907
39049
  const rowsWithWords = (0, react.useMemo)(() => attachWordRanges(parseRows(segment)), [segment]);
38908
39050
  const sides = (0, react.useMemo)(() => gutterSides(rowsWithWords), [rowsWithWords]);
38909
- const syntax = (0, react.useMemo)(() => highlightForRows(rowsWithWords, lang, shikiTheme), [
39051
+ const scrollRef = (0, react.useRef)(null);
39052
+ const win = useRowWindow(scrollRef, rowsWithWords.length);
39053
+ const syntax = (0, react.useMemo)(() => highlightForRowsWindow(rowsWithWords, lang, shikiTheme, win.start, win.end), [
38910
39054
  rowsWithWords,
38911
39055
  lang,
38912
39056
  shikiTheme,
39057
+ win.start,
39058
+ win.end,
38913
39059
  grammarGen
38914
39060
  ]);
38915
39061
  const blocks = (0, react.useMemo)(() => unifiedBlocks(rowsWithWords.map((row) => row.kind)), [rowsWithWords]);
38916
39062
  const changes = (0, react.useMemo)(() => countBlocks(blocks), [blocks]);
38917
- const scrollRef = (0, react.useRef)(null);
38918
- const { goToChange } = useChangeNav(scrollRef);
39063
+ const blocksForNav = (0, react.useRef)(blocks);
39064
+ blocksForNav.current = blocks;
39065
+ const { goToChange } = useChangeNav(scrollRef, (0, react.useCallback)(() => blockTopsFromRows(blocksForNav.current, 20, 8), []));
38919
39066
  const walk = (0, react.useRef)(goToChange);
38920
39067
  walk.current = goToChange;
38921
39068
  (0, react.useEffect)(() => {
@@ -38965,30 +39112,45 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
38965
39112
  ref: scrollRef,
38966
39113
  className: GitWorkbenchPanel_module_css_default.diffScroll,
38967
39114
  tabIndex: -1,
38968
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
39115
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("pre", {
38969
39116
  className: GitWorkbenchPanel_module_css_default.diffPre,
38970
- children: rowsWithWords.map((row, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38971
- className: `${GitWorkbenchPanel_module_css_default.line} ${rowClass(row.kind)}`,
38972
- "data-block": blocks[i] >= 0 ? blocks[i] : void 0,
38973
- children: [
38974
- sides.old ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38975
- className: GitWorkbenchPanel_module_css_default.lnOld,
38976
- children: row.kind === "add" || row.kind === "hunk" ? "" : row.oldL
38977
- }) : null,
38978
- sides.new ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38979
- className: GitWorkbenchPanel_module_css_default.lnNew,
38980
- children: row.kind === "del" || row.kind === "hunk" ? "" : row.newL
38981
- }) : null,
38982
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38983
- className: `${GitWorkbenchPanel_module_css_default.gutter} ${row.kind === "add" ? GitWorkbenchPanel_module_css_default.signAdd : row.kind === "del" ? GitWorkbenchPanel_module_css_default.signDel : ""}`,
38984
- children: row.kind === "add" ? "+" : row.kind === "del" ? "" : ""
38985
- }),
38986
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38987
- className: GitWorkbenchPanel_module_css_default.code,
38988
- children: renderCode(row, syntax[i] ?? [])
38989
- })
38990
- ]
38991
- }, i))
39117
+ children: [
39118
+ win.padTop > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39119
+ className: GitWorkbenchPanel_module_css_default.diffSpacer,
39120
+ style: { height: `${win.padTop}px` },
39121
+ "aria-hidden": "true"
39122
+ }) : null,
39123
+ rowsWithWords.slice(win.start, win.end).map((row, k) => {
39124
+ const i = win.start + k;
39125
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39126
+ className: `${GitWorkbenchPanel_module_css_default.line} ${rowClass(row.kind)}`,
39127
+ "data-block": blocks[i] >= 0 ? blocks[i] : void 0,
39128
+ children: [
39129
+ sides.old ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39130
+ className: GitWorkbenchPanel_module_css_default.lnOld,
39131
+ children: row.kind === "add" || row.kind === "hunk" ? "" : row.oldL
39132
+ }) : null,
39133
+ sides.new ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39134
+ className: GitWorkbenchPanel_module_css_default.lnNew,
39135
+ children: row.kind === "del" || row.kind === "hunk" ? "" : row.newL
39136
+ }) : null,
39137
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39138
+ className: `${GitWorkbenchPanel_module_css_default.gutter} ${row.kind === "add" ? GitWorkbenchPanel_module_css_default.signAdd : row.kind === "del" ? GitWorkbenchPanel_module_css_default.signDel : ""}`,
39139
+ children: row.kind === "add" ? "+" : row.kind === "del" ? "−" : ""
39140
+ }),
39141
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39142
+ className: GitWorkbenchPanel_module_css_default.code,
39143
+ children: renderCode(row, syntax[i] ?? [])
39144
+ })
39145
+ ]
39146
+ }, i);
39147
+ }),
39148
+ win.padBottom > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39149
+ className: GitWorkbenchPanel_module_css_default.diffSpacer,
39150
+ style: { height: `${win.padBottom}px` },
39151
+ "aria-hidden": "true"
39152
+ }) : null
39153
+ ]
38992
39154
  })
38993
39155
  })]
38994
39156
  });
@@ -39048,7 +39210,11 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
39048
39210
  const colsRef = (0, react.useRef)(null);
39049
39211
  /** The pane's one vertical scroller — what "next change" moves. */
39050
39212
  const scrollRef = (0, react.useRef)(null);
39051
- const { goToChange } = useChangeNav(scrollRef);
39213
+ /** Where the rows are, filled in below once they exist. A ref, because the
39214
+ * walk is set up here and the rows are decided further down; reading it
39215
+ * only when a key is pressed is what lets the two live apart. */
39216
+ const rowsForNav = (0, react.useRef)([]);
39217
+ const { goToChange } = useChangeNav(scrollRef, (0, react.useCallback)(() => blockTopsFromRows(rowsForNav.current, 20, 8), []));
39052
39218
  const [sides, setSides] = (0, react.useState)(null);
39053
39219
  const [failed, setFailed] = (0, react.useState)(false);
39054
39220
  const [hotBlock, setHotBlock] = (0, react.useState)(null);
@@ -39109,16 +39275,23 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
39109
39275
  const file = parsePatch(sides.diff);
39110
39276
  return file === null ? [] : alignRows(file);
39111
39277
  }, [sides]);
39112
- const leftSyntax = (0, react.useMemo)(() => highlightFile(rows.map((row) => row.left === null ? "" : row.left.text), lang, shikiTheme), [
39113
- rows,
39278
+ const win = useRowWindow(scrollRef, rows.length);
39279
+ const leftLines = (0, react.useMemo)(() => rows.map((row) => row.left === null ? "" : row.left.text), [rows]);
39280
+ const rightLines = (0, react.useMemo)(() => rows.map((row) => row.right === null ? "" : row.right.text), [rows]);
39281
+ const leftSyntax = (0, react.useMemo)(() => highlightWindow(leftLines, lang, shikiTheme, win.start, win.end), [
39282
+ leftLines,
39114
39283
  lang,
39115
39284
  shikiTheme,
39285
+ win.start,
39286
+ win.end,
39116
39287
  grammarGen
39117
39288
  ]);
39118
- const rightSyntax = (0, react.useMemo)(() => highlightFile(rows.map((row) => row.right === null ? "" : row.right.text), lang, shikiTheme), [
39119
- rows,
39289
+ const rightSyntax = (0, react.useMemo)(() => highlightWindow(rightLines, lang, shikiTheme, win.start, win.end), [
39290
+ rightLines,
39120
39291
  lang,
39121
39292
  shikiTheme,
39293
+ win.start,
39294
+ win.end,
39122
39295
  grammarGen
39123
39296
  ]);
39124
39297
  /** The editor half of the pane, present only on the unstaged layer. */
@@ -39150,6 +39323,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
39150
39323
  row,
39151
39324
  i
39152
39325
  })).filter((entry) => entry.row.left !== null), [rows]);
39326
+ const leftWin = useRowWindow(scrollRef, leftRows.length);
39327
+ rowsForNav.current = (0, react.useMemo)(() => rows.map((row) => row.block), [rows]);
39153
39328
  /** Arm the editor from the payload on screen; the unstaged tab, and only
39154
39329
  * for a payload `editableSides` accepts — armEdit itself refuses the rest,
39155
39330
  * so even a stray call cannot put CRLF text into the buffer. */
@@ -39535,31 +39710,41 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
39535
39710
  style: { flexBasis: `${split * 100}%` },
39536
39711
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39537
39712
  className: GitWorkbenchPanel_module_css_default.sideColGrid,
39538
- children: bodyState.kind === "editor" ? leftRows.map((entry, k) => {
39539
- const { row, i } = entry;
39540
- const hot = hotBlock !== null && row.block === hotBlock;
39541
- const hotClass = hot ? ` ${GitWorkbenchPanel_module_css_default.sideBlockHot}` : "";
39542
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39543
- className: `${sideNumClass(row, "left")}${hotClass}`,
39544
- children: row.left.line
39545
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39546
- className: `${GitWorkbenchPanel_module_css_default.sideCode} ${sideCodeClass(row, "left")}${hotClass}`,
39547
- "data-block": row.block >= 0 ? row.block : void 0,
39548
- children: [renderSideCode(row.left, leftSyntax?.[i]), hot && k === hotFirstLeft ? blockBar(row.block) : null]
39549
- })] }, `l${i}`);
39550
- }) : rows.map((row, i) => {
39551
- const hot = hotBlock !== null && row.block === hotBlock;
39552
- const hotClass = hot ? ` ${GitWorkbenchPanel_module_css_default.sideBlockHot}` : "";
39553
- const bar = hot && i === hotFirst && row.right === null ? blockBar(row.block) : null;
39554
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39555
- className: `${sideNumClass(row, "left")}${hotClass}`,
39556
- children: row.left === null ? "" : row.left.line
39557
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39558
- className: `${GitWorkbenchPanel_module_css_default.sideCode} ${sideCodeClass(row, "left")}${hotClass}`,
39559
- "data-block": row.block >= 0 ? row.block : void 0,
39560
- children: [renderSideCode(row.left, leftSyntax?.[i]), bar]
39561
- })] }, i);
39562
- })
39713
+ children: bodyState.kind === "editor" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
39714
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowSpacer, { height: leftWin.padTop }),
39715
+ leftRows.slice(leftWin.start, leftWin.end).map((entry, kk) => {
39716
+ const k = leftWin.start + kk;
39717
+ const { row, i } = entry;
39718
+ const hot = hotBlock !== null && row.block === hotBlock;
39719
+ const hotClass = hot ? ` ${GitWorkbenchPanel_module_css_default.sideBlockHot}` : "";
39720
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39721
+ className: `${sideNumClass(row, "left")}${hotClass}`,
39722
+ children: row.left.line
39723
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39724
+ className: `${GitWorkbenchPanel_module_css_default.sideCode} ${sideCodeClass(row, "left")}${hotClass}`,
39725
+ "data-block": row.block >= 0 ? row.block : void 0,
39726
+ children: [renderSideCode(row.left, leftSyntax?.[i]), hot && k === hotFirstLeft ? blockBar(row.block) : null]
39727
+ })] }, `l${i}`);
39728
+ }),
39729
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowSpacer, { height: leftWin.padBottom })
39730
+ ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
39731
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowSpacer, { height: win.padTop }),
39732
+ rows.slice(win.start, win.end).map((row, k) => {
39733
+ const i = win.start + k;
39734
+ const hot = hotBlock !== null && row.block === hotBlock;
39735
+ const hotClass = hot ? ` ${GitWorkbenchPanel_module_css_default.sideBlockHot}` : "";
39736
+ const bar = hot && i === hotFirst && row.right === null ? blockBar(row.block) : null;
39737
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39738
+ className: `${sideNumClass(row, "left")}${hotClass}`,
39739
+ children: row.left === null ? "" : row.left.line
39740
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39741
+ className: `${GitWorkbenchPanel_module_css_default.sideCode} ${sideCodeClass(row, "left")}${hotClass}`,
39742
+ "data-block": row.block >= 0 ? row.block : void 0,
39743
+ children: [renderSideCode(row.left, leftSyntax?.[i]), bar]
39744
+ })] }, i);
39745
+ }),
39746
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowSpacer, { height: win.padBottom })
39747
+ ] })
39563
39748
  })
39564
39749
  }),
39565
39750
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PaneDivider, {
@@ -39583,22 +39768,27 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
39583
39768
  onSave: () => {
39584
39769
  if (dirty && !saving) runSave(edit.baseSha);
39585
39770
  }
39586
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39771
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39587
39772
  className: GitWorkbenchPanel_module_css_default.sideColGrid,
39588
- children: rows.map((row, i) => {
39589
- const hot = hotBlock !== null && row.block === hotBlock;
39590
- const hotClass = hot ? ` ${GitWorkbenchPanel_module_css_default.sideBlockHot}` : "";
39591
- const bar = hot && i === hotFirst && row.right !== null ? blockBar(row.block) : null;
39592
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39593
- className: `${sideNumClass(row, "right")}${hotClass}`,
39594
- children: row.right === null ? "" : row.right.line
39595
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39596
- className: `${GitWorkbenchPanel_module_css_default.sideCode} ${sideCodeClass(row, "right")}${hotClass}${layer === "unstaged" && armable ? ` ${GitWorkbenchPanel_module_css_default.sideArmable}` : ""}`,
39597
- "data-block": row.block >= 0 ? row.block : void 0,
39598
- onClick: layer === "unstaged" && armable ? armFromCell : void 0,
39599
- children: [renderSideCode(row.right, rightSyntax?.[i]), bar]
39600
- })] }, i);
39601
- })
39773
+ children: [
39774
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowSpacer, { height: win.padTop }),
39775
+ rows.slice(win.start, win.end).map((row, k) => {
39776
+ const i = win.start + k;
39777
+ const hot = hotBlock !== null && row.block === hotBlock;
39778
+ const hotClass = hot ? ` ${GitWorkbenchPanel_module_css_default.sideBlockHot}` : "";
39779
+ const bar = hot && i === hotFirst && row.right !== null ? blockBar(row.block) : null;
39780
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39781
+ className: `${sideNumClass(row, "right")}${hotClass}`,
39782
+ children: row.right === null ? "" : row.right.line
39783
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39784
+ className: `${GitWorkbenchPanel_module_css_default.sideCode} ${sideCodeClass(row, "right")}${hotClass}${layer === "unstaged" && armable ? ` ${GitWorkbenchPanel_module_css_default.sideArmable}` : ""}`,
39785
+ "data-block": row.block >= 0 ? row.block : void 0,
39786
+ onClick: layer === "unstaged" && armable ? armFromCell : void 0,
39787
+ children: [renderSideCode(row.right, rightSyntax?.[i]), bar]
39788
+ })] }, i);
39789
+ }),
39790
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowSpacer, { height: win.padBottom })
39791
+ ]
39602
39792
  })
39603
39793
  })
39604
39794
  ]
@@ -39701,6 +39891,56 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
39701
39891
  children: tok.text
39702
39892
  }, i));
39703
39893
  }
39894
+ /**
39895
+ * The rows a diff actually has to put in the DOM, tracked against its scroller.
39896
+ *
39897
+ * Rendering a whole file cost the pane 3.9 seconds of main thread and a
39898
+ * 3.6-second frozen frame at 4,000 lines — for a one-line change, because the
39899
+ * side-by-side view draws every line of the file whether it changed or not.
39900
+ * This is the fix that removes the length from the cost rather than capping it.
39901
+ *
39902
+ * The window is held in state rather than the raw scroll offset so a scroll
39903
+ * that does not move it renders nothing: `start` only changes once a whole row
39904
+ * has passed under the viewport's edge.
39905
+ *
39906
+ * @param scrollRef - the element that scrolls the rows.
39907
+ * @param rowCount - how many rows the diff has.
39908
+ * @returns the rows to render and the spacer heights standing in for the rest.
39909
+ */
39910
+ function useRowWindow(scrollRef, rowCount) {
39911
+ const [win, setWin] = (0, react.useState)(() => rowWindow(0, 0, rowCount));
39912
+ (0, react.useEffect)(() => {
39913
+ const el = scrollRef.current;
39914
+ if (el === null) return;
39915
+ const read = () => {
39916
+ const next = rowWindow(el.scrollTop, el.clientHeight, rowCount);
39917
+ setWin((prev) => prev.start === next.start && prev.end === next.end ? prev : next);
39918
+ };
39919
+ read();
39920
+ el.addEventListener("scroll", read, { passive: true });
39921
+ const observer = new ResizeObserver(read);
39922
+ observer.observe(el);
39923
+ return () => {
39924
+ el.removeEventListener("scroll", read);
39925
+ observer.disconnect();
39926
+ };
39927
+ }, [scrollRef, rowCount]);
39928
+ return win;
39929
+ }
39930
+ /**
39931
+ * The spacer standing in for the rows above or below the window.
39932
+ *
39933
+ * It spans every column of the grid, so a blame gutter does not change it.
39934
+ * @param height - px of rows it stands in for; nothing is rendered for 0.
39935
+ */
39936
+ function RowSpacer({ height }) {
39937
+ if (height <= 0) return null;
39938
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39939
+ className: GitWorkbenchPanel_module_css_default.sideSpacer,
39940
+ style: { height: `${height}px` },
39941
+ "aria-hidden": "true"
39942
+ });
39943
+ }
39704
39944
  /** Split a combined `git diff` into path -> its segment text. */
39705
39945
  function splitDiff(diff) {
39706
39946
  const out = /* @__PURE__ */ new Map();
@@ -40207,11 +40447,15 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
40207
40447
  const result = await connection.rpc.call("/api", "gitWorkbench/stats", worktreePath === void 0 ? { args: {} } : { args: { worktreePath } }, signal);
40208
40448
  return result.ok ? result.value : null;
40209
40449
  },
40210
- fetchFileDiff: async (worktreePath, path, commit, signal) => {
40450
+ fetchFileDiff: async (worktreePath, path, commit, range, signal) => {
40211
40451
  const result = await connection.rpc.call("/api", "gitWorkbench/fileDiff", { args: {
40212
40452
  worktreePath: worktreePath ?? "",
40213
40453
  path,
40214
- ...commit === void 0 ? {} : { commit }
40454
+ ...commit === void 0 ? {} : { commit },
40455
+ ...range === void 0 ? {} : {
40456
+ base: range.base,
40457
+ head: range.head
40458
+ }
40215
40459
  } }, signal);
40216
40460
  return result.ok ? result.value.diff : "";
40217
40461
  },