dsh-diff-approval 0.23.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -21,7 +21,7 @@ window.__ModuleLoader__.load({
21
21
  let react_dom = require("react-dom");
22
22
  let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
23
23
  //#region \0dsh-css:/home/runner/work/dsh-diff-approval/dsh-diff-approval/src/client/PendingPanel.module.css.mjs
24
- const css = ".F1KBNa_panelFailure{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:16px;display:flex}.F1KBNa_panelFailureText{min-width:0}.F1KBNa_panelFailureRetry{border:1px solid var(--dsw-alias-border-l2);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;margin-left:auto;padding:2px 8px}.F1KBNa_panelFailureRetry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_layer{box-sizing:border-box;flex:none;align-items:center;width:calc(100% + 4px);height:42px;margin:4px -2px;display:flex;position:relative}.F1KBNa_headerEntry{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:6px;display:inline-flex;position:relative}.F1KBNa_headerEntry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_headerEntry[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}.F1KBNa_headerEntry:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_headerEntryCount{box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);min-width:14px;height:14px;color:var(--dsw-alias-label-primary-foreground);text-align:center;font-variant-numeric:tabular-nums;pointer-events:none;border-radius:7px;padding:0 3px;font-size:10px;line-height:14px;position:absolute;top:-1px;right:-1px}.F1KBNa_headerEntry svg{display:block}.F1KBNa_footerButtons{align-items:center;width:100%;display:flex}.F1KBNa_badge{box-sizing:border-box;width:100%;height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}.F1KBNa_badge:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_badge:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.F1KBNa_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.F1KBNa_layer.F1KBNa_rail{width:36px;height:36px;margin:8px 0 10px}.F1KBNa_rail .F1KBNa_badge{border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.F1KBNa_rail .F1KBNa_badgeLabel{display:none}.F1KBNa_rail .F1KBNa_badgeCount{box-sizing:border-box;background:var(--dsw-alias-state-business-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-foreground);font-variant-numeric:tabular-nums;border-radius:9px;justify-content:center;align-items:center;padding:0 4px;font-size:11px;line-height:18px;display:flex;position:absolute;top:-3px;right:-7px}.F1KBNa_coverBackdrop{z-index:29;background:var(--dsw-specific-sidebar-fill);position:fixed;inset:0}.F1KBNa_panel{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:none;box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px;flex-direction:column;display:flex;position:fixed;inset:8px 8px 128px;overflow:hidden}.F1KBNa_panelDocked{width:100%;max-width:none;height:100%;box-shadow:none;border:none;border-radius:0;position:static;inset:auto}.F1KBNa_dockHost{flex-direction:column;min-height:0;display:flex;position:absolute;inset:0}.F1KBNa_header{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.F1KBNa_headerActions{align-items:center;gap:2px;display:flex}.F1KBNa_settingsPage{padding:8px 12px}.F1KBNa_settingsGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupHeader{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsGroupText{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.F1KBNa_settingsGroupTitle{font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsGroupDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsGroupChevron{margin-left:auto;transition:transform .15s}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupChevron{transform:rotate(180deg)}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupHeader{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupBody{flex-direction:column;display:flex}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow{padding-left:16px}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow:last-child,.F1KBNa_settingsPage>.F1KBNa_settingsRow:last-child{border-bottom:none}.F1KBNa_settingsRow{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsRowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.F1KBNa_settingsRowTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsRowDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsSelector{background:var(--dsw-alias-bg-module-platform);min-width:72px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.F1KBNa_settingsSelector:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_settingsSelector[data-recording]{box-shadow:inset 0 0 0 1px var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-secondary)}.F1KBNa_settingsReset{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;margin-left:6px;padding:0;display:inline-flex}.F1KBNa_settingsReset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_settingsReset:disabled{opacity:.4;cursor:default}.F1KBNa_colorPicker{position:relative}.F1KBNa_colorPickerTrigger{background:var(--dsw-alias-bg-module-platform);width:120px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_colorPickerTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_colorSwatch{border:1px solid var(--dsw-alias-border-l2);border-radius:50%;flex:none;width:24px;height:24px}.F1KBNa_colorValue{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.F1KBNa_colorPickerChevron{flex:none}.F1KBNa_colorBackdrop{z-index:40;position:fixed;inset:0}.F1KBNa_colorPickerPopover{z-index:41;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:10px;padding:10px;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_colorPickerPanel{flex-direction:column;gap:8px;display:flex}.F1KBNa_colorPickerInputRow{align-items:center;gap:8px;display:flex}.F1KBNa_colorPickerPreview{border:1px solid var(--dsw-alias-border-l2);border-radius:6px;flex:none;width:22px;height:22px}.F1KBNa_colorPickerInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-module-platform);min-width:0;height:30px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 8px;font-size:12px;line-height:28px}.F1KBNa_colorPickerInput:focus{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.F1KBNa_colorSv{border:1px solid var(--dsw-alias-border-l1);cursor:crosshair;touch-action:none;border-radius:8px;height:140px;position:relative}.F1KBNa_colorSvCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_colorHue{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;touch-action:none;border-radius:7px;height:14px;position:relative}.F1KBNa_colorHueCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:16px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_diffPreview{z-index:2;border:1px solid var(--dsw-alias-border-l1);font:var(--dsw-font-markdown-code-block);background:var(--dsw-alias-markdown-code-block);border-radius:8px;margin:16px 0 8px;padding:8px;position:sticky;top:0;overflow:hidden}.F1KBNa_diffPreviewTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:6px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_diffPreviewScroll{height:132px;overflow-y:auto}.F1KBNa_mdPreviewWrap{isolation:isolate;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_mdPreviewBody{min-width:0;min-height:0;color:var(--dsw-alias-label-primary);flex:1;padding:12px 16px;position:relative;overflow:auto}.F1KBNa_mdPreviewContent{width:100%;min-width:0;margin:0 auto}.F1KBNa_mdPreviewSingle{display:block}.F1KBNa_mdPreviewDouble{display:flex}.F1KBNa_mdPreviewBody .mdBlock{border-radius:4px;margin-bottom:12px;padding:2px 6px}.F1KBNa_mdPreviewBody .mdAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_mdPreviewBody .mdDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_mdPreviewBody .mdWordDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdWordAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdDouble{flex-direction:column;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleRow{align-items:flex-start;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleCol{flex:1;min-width:0}.F1KBNa_mdPreviewBody .mdDoubleRule{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:0 12px}.F1KBNa_mdPreviewFallback{font-family:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 16px;font-size:12px;line-height:18px}.F1KBNa_mdPreviewBody{word-break:break-word;font-size:13px;line-height:20px}.F1KBNa_mdPreviewBody>:first-child{margin-top:0}.F1KBNa_mdPreviewBody>:last-child{margin-bottom:0}.F1KBNa_mdPreviewBody h1,.F1KBNa_mdPreviewBody h2,.F1KBNa_mdPreviewBody h3,.F1KBNa_mdPreviewBody h4,.F1KBNa_mdPreviewBody h5,.F1KBNa_mdPreviewBody h6{margin:16px 0 8px;font-weight:600;line-height:1.3}.F1KBNa_mdPreviewBody h1{font-size:22px}.F1KBNa_mdPreviewBody h2{font-size:19px}.F1KBNa_mdPreviewBody h3{font-size:16px}.F1KBNa_mdPreviewBody h4{font-size:15px}.F1KBNa_mdPreviewBody h5{font-size:14px}.F1KBNa_mdPreviewBody h6{font-size:13px}.F1KBNa_mdPreviewBody p{margin:8px 0}.F1KBNa_mdPreviewBody ul,.F1KBNa_mdPreviewBody ol{margin:8px 0;padding-left:22px}.F1KBNa_mdPreviewBody li{margin:2px 0}.F1KBNa_mdPreviewBody a{color:var(--dsw-alias-state-business-primary);text-decoration:none}.F1KBNa_mdPreviewBody a:hover{text-decoration:underline}.F1KBNa_mdPreviewBody code{font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:4px;padding:1px 5px;font-size:12.5px}.F1KBNa_mdPreviewBody pre{border:1px solid var(--dsw-alias-border-l1);font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:8px;margin:8px 0;padding:10px 12px;font-size:12.5px;line-height:18px;overflow:auto}.F1KBNa_mdPreviewBody pre code{background:0 0;padding:0}.F1KBNa_mdPreviewBody blockquote{border-left:3px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);margin:8px 0;padding:0 12px}.F1KBNa_mdPreviewBody hr{background:var(--dsw-alias-border-l1);border:none;height:1px;margin:16px 0}.F1KBNa_mdPreviewBody table{border-collapse:collapse;margin:8px 0}.F1KBNa_mdPreviewBody th,.F1KBNa_mdPreviewBody td{border:1px solid var(--dsw-alias-border-l1);padding:4px 10px}.F1KBNa_mdPreviewBody img{max-width:100%}.F1KBNa_mdPreviewBody .mdImageFallback{border:1px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-markdown-code-block) 45%, transparent);width:100%;min-height:120px;color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-markdown-code-block);text-align:center;white-space:pre-wrap;word-break:break-all;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:8px 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_toggle{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:18px;flex:none;width:60px;height:36px;padding:0;position:relative}.F1KBNa_toggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_toggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.F1KBNa_toggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleOn:hover{background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleThumb{background:var(--dsw-alias-label-primary);border-radius:50%;width:28px;height:28px;transition:left .12s;position:absolute;top:3px;left:3px}.F1KBNa_toggleOn .F1KBNa_toggleThumb{background:#fff;left:27px}.F1KBNa_stepper{align-items:center;gap:6px;display:inline-flex}.F1KBNa_stepperButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);width:32px;height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;padding:0;position:relative}.F1KBNa_stepperButton:before,.F1KBNa_stepperButton:after{content:\"\";background:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_stepperButton:before{width:10px;height:1px}.F1KBNa_stepperButton:after{width:1px;height:10px;display:none}.F1KBNa_stepperButtonUp:after{display:block}.F1KBNa_stepperButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_stepperButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_stepperValue{text-align:center;min-width:2ch;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:14px;line-height:22px}.F1KBNa_states{flex-direction:column;flex:1;min-height:0;padding:4px 12px 12px;display:flex;overflow-y:auto}.F1KBNa_split{flex:1;align-items:stretch;min-height:0;display:flex;position:relative}.F1KBNa_fileListKnob{z-index:39;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;box-shadow:var(--dsw-elevation-prominent);border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.F1KBNa_fileListKnob[data-open]{box-shadow:none;opacity:0}.F1KBNa_fileListKnob:not([data-open]){animation:.32s ease-in-out .5s both F1KBNa_fileListKnobIn}@keyframes F1KBNa_fileListKnobIn{0%{opacity:0}to{opacity:1}}.F1KBNa_fileListKnob:hover,.F1KBNa_fileListKnob:focus-visible{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-interactive-bg-hover), var(--dsw-alias-interactive-bg-hover))}.F1KBNa_fileListFloat{z-index:40;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);box-shadow:none;transform-origin:0 0;border-radius:12px;flex-direction:column;padding:6px 8px 10px;display:flex;position:absolute;overflow:hidden}.F1KBNa_fileListFloatClosing{pointer-events:none;animation:.14s ease-in forwards F1KBNa_fileListShrink}@keyframes F1KBNa_fileListShrink{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.F1KBNa_fileList{box-sizing:border-box;border-right:1px solid var(--dsw-alias-border-l2);flex-direction:column;flex:none;width:240px;min-height:0;padding:4px 8px 12px;display:flex}.F1KBNa_listScroll{flex:1;min-height:0;overflow-y:scroll}.F1KBNa_bulkActions{flex:none;gap:6px;padding:8px 8px 0 0;display:flex}.F1KBNa_bulkActions .F1KBNa_action{text-align:center;flex:1}.F1KBNa_resizeHandle{cursor:col-resize;touch-action:none;background:0 0;flex:none;width:5px;margin:0 -2px}.F1KBNa_resizeHandle:hover{background:var(--dsw-alias-border-l2)}.F1KBNa_floatResizeHandle{z-index:41;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border-radius:4px;position:absolute}.F1KBNa_floatResizeHandle:hover{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-border-l2), var(--dsw-alias-border-l2))}.F1KBNa_detail{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.F1KBNa_detailEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;margin:0;padding:24px;font-size:12px;line-height:18px;display:flex}.F1KBNa_confirmBackdrop{z-index:55;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.F1KBNa_confirmCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:340px;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}.F1KBNa_confirmText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;line-height:1.5}.F1KBNa_confirmActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;display:flex}.F1KBNa_pickerCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:420px;max-width:100%;height:70%;max-height:100%;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:8px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.F1KBNa_pickerTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}.F1KBNa_pickerClose{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:10px;right:10px}.F1KBNa_pickerClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_pickerForm{flex:none;gap:8px;display:flex}.F1KBNa_pickerInput{border:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;flex:auto;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_pickerInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_tree{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex:auto;min-height:0;padding:4px 2px 4px 4px;overflow:auto scroll}.F1KBNa_treeRow{border-radius:6px;align-items:center;gap:2px;padding-right:4px;display:flex}.F1KBNa_treeRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_treeRow[data-selected]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.F1KBNa_treeCaret{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_treeCaret:hover{color:var(--dsw-alias-label-primary)}.F1KBNa_treeName{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:auto;align-items:center;gap:6px;padding:2px 4px;font-family:inherit;font-size:12px;line-height:18px;display:flex}.F1KBNa_treeName:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_treeNote{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.F1KBNa_pickerIcon{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_pickerName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_pickerNote{color:var(--dsw-alias-label-tertiary);flex:none;margin:0;font-size:12px;line-height:18px}.F1KBNa_pickerCheck{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-right:auto;font-size:12px;line-height:18px;display:flex}.F1KBNa_title{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}.F1KBNa_note,.F1KBNa_readError,.F1KBNa_hint{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.F1KBNa_noteCentered{text-align:center;margin:auto}.F1KBNa_emptyState{flex-direction:column;align-items:center;gap:10px;margin:auto;display:flex}.F1KBNa_importButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:5px 14px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_importButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_importButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_importNote{color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:12px;line-height:18px}.F1KBNa_readError{color:var(--dsw-alias-state-error-primary)}.F1KBNa_group{color:var(--dsw-alias-label-tertiary);margin:8px 0 4px;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_groupHead{align-items:center;gap:4px;margin:8px 0 4px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton{box-sizing:border-box;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;min-height:0;padding:0;display:inline-flex}.F1KBNa_groupHead>.F1KBNa_group{margin:0}.F1KBNa_emptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.F1KBNa_rows{margin:0;padding:0;list-style:none}.F1KBNa_row{border:1px solid #0000;border-radius:10px;margin:2px 0}.F1KBNa_rowHead{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_rowHead:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_rowHead[data-selected]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_rowPath{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:hidden}.F1KBNa_kindTag{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_kindHint{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:16px}.F1KBNa_divergedHint,.F1KBNa_missingHint{border-bottom:1px solid var(--dsw-alias-border-l2);margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missing{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary));white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_rowFailed{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_actionError{border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missingHint{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary))}.F1KBNa_rowMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;gap:6px;margin-left:auto;font-size:12px;line-height:16px;display:inline-flex}.F1KBNa_addCount{color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_delCount{color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_diff{background:var(--dsw-alias-markdown-code-block);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffHeader{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_panelDocked .F1KBNa_diffHeader{background:var(--dsw-alias-bg-base)}.F1KBNa_diffPath{white-space:nowrap;scrollbar-width:none;min-width:0;color:var(--dsw-alias-label-primary);-webkit-user-select:text;user-select:text;flex:1;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:auto hidden}.F1KBNa_diffPath::-webkit-scrollbar{display:none}.F1KBNa_diffActions{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_diffStats{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:16px}.F1KBNa_flexSpacer{flex:1}.F1KBNa_divider{background:var(--dsw-alias-border-l1);align-self:stretch;width:1px;margin:2px 0}.F1KBNa_action{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_action:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_actionPrimary{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_actionPrimary:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_actionPrimary:disabled{background:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:.55}.F1KBNa_actionQuietDisabled:disabled{cursor:pointer;color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l1);background:0 0}.F1KBNa_actionPrimary.F1KBNa_actionQuietDisabled:disabled{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:1}.F1KBNa_iconAction{justify-content:center;align-items:center;min-height:25px;padding:4px 6px;display:inline-flex}.F1KBNa_close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expand{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expandExpanded svg{transform:rotate(180deg)}.F1KBNa_diffBodyWrap{isolation:isolate;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBody{min-width:0;font:var(--dsw-font-markdown-code-block);-webkit-text-size-adjust:100%;text-size-adjust:100%;cursor:text;outline:none;flex:1;padding:0;position:relative;overflow:auto}.F1KBNa_diffBody::-webkit-scrollbar,.F1KBNa_diffBody::-webkit-scrollbar-track,.F1KBNa_diffBody::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_blockActions{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);z-index:2;border-radius:10px;align-items:center;gap:9px;padding:5px;display:flex;position:absolute;right:8px}.F1KBNa_blockActionsDivider{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:2px 0}.F1KBNa_blockPosition{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;margin-left:7px;font-size:12px;line-height:16px}.F1KBNa_searchBar{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);border-radius:10px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:8px;right:8px}.F1KBNa_searchInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:150px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_searchInput:focus{border-color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchCount{text-align:center;min-width:34px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:16px}.F1KBNa_searchToggle{border:1px solid var(--dsw-alias-border-l1);min-height:25px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:4px 6px;display:inline-flex}.F1KBNa_searchToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_searchToggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchMatch{color:inherit;background-color:#facc1542;border-radius:2px}.F1KBNa_searchMatchCurrent{color:inherit;background-color:#facc1599;border-radius:2px}.F1KBNa_blockFlash{z-index:1;box-sizing:border-box;border:2px solid var(--dsw-alias-state-business-primary);pointer-events:none;border-radius:4px;animation:1s ease-out forwards F1KBNa_diffFlashFade;position:absolute;left:0;right:0}.F1KBNa_blockFlashShake{animation:.7s ease-out forwards F1KBNa_diffFlashShake}.F1KBNa_discussionRow{background:var(--dsw-alias-bg-base);display:table-row}.F1KBNa_discussionCell{display:table-cell}.F1KBNa_discussionPin{width:0;height:0;position:sticky;left:0}.F1KBNa_discussion{z-index:2;box-sizing:border-box;border-left:3px solid var(--dsw-alias-label-secondary);background:0 0;flex-direction:column;display:flex;position:absolute;top:0;left:0;overflow:hidden}.F1KBNa_discussionHead,.F1KBNa_discussionBody{font:var(--dsw-font-markdown-code-block)}.F1KBNa_discussionBody{flex-direction:column;flex:auto;min-height:0;padding:0 12px;display:flex;overflow:hidden}.F1KBNa_discussion[data-lost]{border-left-color:var(--dsw-alias-state-warn-primary,var(--dsw-alias-label-tertiary))}.F1KBNa_discussion[data-lost] .F1KBNa_discussionAnswer{color:var(--dsw-alias-label-secondary)}.F1KBNa_discussionAnswer{color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionUser{padding:calc(var(--dsh-diff-line-height,22px) * .2) calc(var(--dsh-diff-line-height,22px) * .5);margin:calc(var(--dsh-diff-line-height,22px) * .3) 0 calc(var(--dsh-diff-line-height,22px) * .3) auto;box-sizing:border-box;background:var(--dsw-specific-bubble,var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover)));width:fit-content;max-width:82%;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionNote[data-diff-discussion-hidden]{color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionHead{box-sizing:border-box;height:var(--dsh-diff-line-height,22px);flex:none;align-items:center;gap:8px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;height:calc(var(--dsh-diff-line-height,22px) * 2);flex:none;align-items:center;gap:8px;margin:0 -6px;padding:0;display:flex}.F1KBNa_discussionInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));border-radius:6px;flex:auto;padding:3px 8px;line-height:18px}.F1KBNa_discussionToggle{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_discussionToggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_discussionRangeWrap{font:var(--dsw-font-markdown-code-block);flex:none}.F1KBNa_discussionRange{color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1))}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput::placeholder{font-family:inherit;font-size:inherit;color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionSend{box-sizing:border-box;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;padding-left:9px;padding-right:9px;display:inline-flex}.F1KBNa_rowDiscussed{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent))}@keyframes F1KBNa_diffFlashFade{0%{opacity:1}to{opacity:0}}@keyframes F1KBNa_diffFlashShake{0%{opacity:1;transform:translateY(0)}10%{transform:translateY(1px)}20%{transform:translateY(-1px)}30%{transform:translateY(1px)}40%{transform:translateY(-1px)}50%{transform:translateY(1px)}60%{transform:translateY(-1px)}70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(0)}}.F1KBNa_overviewRuler{pointer-events:none;opacity:.5;width:4px;position:absolute;top:0;bottom:0;right:0}.F1KBNa_overviewMarker{border-radius:2px;width:100%;min-height:2px;position:absolute;right:0}.F1KBNa_markerDel{background-color:var(--dsw-alias-state-error-primary)}.F1KBNa_markerAdd{background-color:var(--dsw-alias-state-success-primary)}.F1KBNa_lines{border-spacing:0;width:max-content;min-width:100%;font-size:calc(1em * var(--dsh-diff-font-scale,1));display:table}.F1KBNa_line{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);-webkit-user-select:none;user-select:none;display:table-row}.F1KBNa_vSpacer{display:table-row}.F1KBNa_gutter{box-sizing:border-box;text-align:right;width:44px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;cursor:default;padding-right:10px;display:table-cell}.F1KBNa_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_add{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_statusBar{box-sizing:border-box;border-top:1px solid var(--dsw-alias-border-l2);height:34px;color:var(--dsw-alias-label-tertiary);font-family:var(--dsw-font-markdown-code-block);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.F1KBNa_statusAction{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_statusAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langSelect{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:4px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_langSelect:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langLabel{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.F1KBNa_presentationSelect{cursor:pointer;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_presentationSelect:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_chip{justify-content:flex-end;align-items:center;gap:5px;min-width:0;padding-right:14px;display:inline-flex}.F1KBNa_chipLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_coverHost{align-items:center;display:inline-flex;position:relative}.F1KBNa_coverCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:12px;align-items:center;gap:4px;padding:6px;display:flex}.F1KBNa_coverPopover{z-index:50;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_coverNotice{z-index:80;pointer-events:none;animation:1.25s ease-out forwards F1KBNa_coverNoticeFade;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_coverNoticeCard{gap:4px;padding:6px 8px}@keyframes F1KBNa_coverNoticeFade{0%,78%{opacity:1}to{opacity:0}}.F1KBNa_coverNoticeGlyph{width:44px;height:44px;color:var(--dsw-alias-label-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_coverNoticeGlyph[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_coverNoticeGlyph[data-changed]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_coverNoticeText{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.F1KBNa_coverButton{width:32px;height:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_coverButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_coverButton[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_presentationHost{align-items:center;display:inline-flex}.F1KBNa_chipPresentation{min-width:36px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:20px;flex:none;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_chipPresentation:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_mirrored{transform:scaleX(-1)}.F1KBNa_notice{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:360px;box-shadow:var(--dsw-shadow-lv3);border-radius:10px;align-items:flex-start;gap:12px;padding:12px 14px;display:flex;position:fixed;bottom:24px;right:24px}.F1KBNa_noticeText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);flex:1;margin:0;line-height:1.45}.F1KBNa_noticeButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font:var(--dsw-font-caption);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px}.F1KBNa_noticeButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_wrap .F1KBNa_line{height:auto;min-height:var(--dsh-diff-line-height,22px)}.F1KBNa_subline{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);white-space:pre;display:block;overflow:hidden}.F1KBNa_wrapActive{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_wrapActive:hover{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_splitRoot{isolation:isolate;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBodySplit{flex:1;min-height:0;overflow-x:hidden}.F1KBNa_splitCols{width:100%;min-width:0;display:flex}.F1KBNa_splitCol{box-sizing:border-box;flex:1 1 0;min-width:0;overflow:hidden}.F1KBNa_splitDivider{background:var(--dsw-alias-border-l2);flex:0 0 1px}.F1KBNa_splitCol .F1KBNa_gutter,.F1KBNa_splitCol .F1KBNa_code{vertical-align:top}.F1KBNa_splitHScrollRow{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;width:100%;min-width:0;display:flex}.F1KBNa_splitHScroll{min-width:0;height:var(--dsh-scrollbar-width,8px);flex:1 1 0;overflow:auto hidden}.F1KBNa_splitHScroll::-webkit-scrollbar{height:var(--dsh-scrollbar-width,8px)}.F1KBNa_splitHScroll::-webkit-scrollbar-track{cursor:default}.F1KBNa_splitHScroll::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_splitHScrollFill{height:1px}.F1KBNa_splitLdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 26%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 24%, transparent)}";
24
+ const css = ".F1KBNa_panelFailure{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:16px;display:flex}.F1KBNa_panelFailureText{min-width:0}.F1KBNa_panelFailureRetry{border:1px solid var(--dsw-alias-border-l2);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;margin-left:auto;padding:2px 8px}.F1KBNa_panelFailureRetry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_layer{box-sizing:border-box;flex:none;align-items:center;width:calc(100% + 4px);height:42px;margin:4px -2px;display:flex;position:relative}.F1KBNa_headerEntry{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:6px;display:inline-flex;position:relative}.F1KBNa_headerEntry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_headerEntry[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}.F1KBNa_headerEntry:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_headerEntryCount{box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);min-width:14px;height:14px;color:var(--dsw-alias-label-primary-foreground);text-align:center;font-variant-numeric:tabular-nums;pointer-events:none;border-radius:7px;padding:0 3px;font-size:10px;line-height:14px;position:absolute;top:-1px;right:-1px}.F1KBNa_headerEntry svg{display:block}.F1KBNa_footerButtons{align-items:center;width:100%;display:flex}.F1KBNa_badge{box-sizing:border-box;width:100%;height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}.F1KBNa_badge:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_badge:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.F1KBNa_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.F1KBNa_layer.F1KBNa_rail{width:36px;height:36px;margin:8px 0 10px}.F1KBNa_rail .F1KBNa_badge{border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.F1KBNa_rail .F1KBNa_badgeLabel{display:none}.F1KBNa_rail .F1KBNa_badgeCount{box-sizing:border-box;background:var(--dsw-alias-state-business-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-foreground);font-variant-numeric:tabular-nums;border-radius:9px;justify-content:center;align-items:center;padding:0 4px;font-size:11px;line-height:18px;display:flex;position:absolute;top:-3px;right:-7px}.F1KBNa_coverBackdrop{z-index:29;background:var(--dsw-specific-sidebar-fill);position:fixed;inset:0}.F1KBNa_panel{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:none;box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);-webkit-user-select:none;user-select:none;border-radius:12px;flex-direction:column;display:flex;position:fixed;inset:8px 8px 128px;overflow:hidden}.F1KBNa_panel .F1KBNa_code,.F1KBNa_panel .F1KBNa_mdPreviewBody,.F1KBNa_panel .F1KBNa_discussionUser,.F1KBNa_panel .F1KBNa_discussionAnswer,.F1KBNa_panel .F1KBNa_quoteText,.F1KBNa_panel .F1KBNa_diffPath,.F1KBNa_panel .F1KBNa_rowPath,.F1KBNa_panel input,.F1KBNa_panel textarea,.F1KBNa_panel [contenteditable]{-webkit-user-select:text;user-select:text}.F1KBNa_panelDocked{width:100%;max-width:none;height:100%;box-shadow:none;border:none;border-radius:0;position:static;inset:auto}.F1KBNa_dockHost{flex-direction:column;min-height:0;display:flex;position:absolute;inset:0}.F1KBNa_header{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.F1KBNa_headerActions{align-items:center;gap:2px;display:flex}.F1KBNa_settingsPage{padding:8px 12px}.F1KBNa_settingsGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupHeader{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsGroupText{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.F1KBNa_settingsGroupTitle{font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsGroupDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsGroupChevron{margin-left:auto;transition:transform .15s}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupChevron{transform:rotate(180deg)}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupHeader{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupBody{flex-direction:column;display:flex}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow{padding-left:16px}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow:last-child,.F1KBNa_settingsPage>.F1KBNa_settingsRow:last-child{border-bottom:none}.F1KBNa_settingsRow{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsRowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.F1KBNa_settingsRowTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsRowDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsSelector{background:var(--dsw-alias-bg-module-platform);min-width:72px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.F1KBNa_settingsSelector:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_settingsSelector[data-recording]{box-shadow:inset 0 0 0 1px var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-secondary)}.F1KBNa_settingsReset{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;margin-left:6px;padding:0;display:inline-flex}.F1KBNa_settingsReset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_settingsReset:disabled{opacity:.4;cursor:default}.F1KBNa_colorPicker{position:relative}.F1KBNa_colorPickerTrigger{background:var(--dsw-alias-bg-module-platform);width:120px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_colorPickerTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_colorSwatch{border:1px solid var(--dsw-alias-border-l2);border-radius:50%;flex:none;width:24px;height:24px}.F1KBNa_colorValue{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.F1KBNa_colorPickerChevron{flex:none}.F1KBNa_colorBackdrop{z-index:40;position:fixed;inset:0}.F1KBNa_colorPickerPopover{z-index:41;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:10px;padding:10px;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_colorPickerPanel{flex-direction:column;gap:8px;display:flex}.F1KBNa_colorPickerInputRow{align-items:center;gap:8px;display:flex}.F1KBNa_colorPickerPreview{border:1px solid var(--dsw-alias-border-l2);border-radius:6px;flex:none;width:22px;height:22px}.F1KBNa_colorPickerInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-module-platform);min-width:0;height:30px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 8px;font-size:12px;line-height:28px}.F1KBNa_colorPickerInput:focus{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.F1KBNa_colorSv{border:1px solid var(--dsw-alias-border-l1);cursor:crosshair;touch-action:none;border-radius:8px;height:140px;position:relative}.F1KBNa_colorSvCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_colorHue{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;touch-action:none;border-radius:7px;height:14px;position:relative}.F1KBNa_colorHueCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:16px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_diffPreview{z-index:2;border:1px solid var(--dsw-alias-border-l1);font:var(--dsw-font-markdown-code-block);background:var(--dsw-alias-markdown-code-block);border-radius:8px;margin:16px 0 8px;padding:8px;position:sticky;top:0;overflow:hidden}.F1KBNa_diffPreviewTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:6px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_diffPreviewScroll{height:132px;overflow-y:auto}.F1KBNa_mdPreviewWrap{isolation:isolate;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_mdPreviewBody{min-width:0;min-height:0;color:var(--dsw-alias-label-primary);flex:1;padding:12px 16px;position:relative;overflow:auto}.F1KBNa_mdPreviewContent{width:100%;min-width:0;margin:0 auto}.F1KBNa_mdPreviewSingle{display:block}.F1KBNa_mdPreviewDouble{display:flex}.F1KBNa_mdPreviewBody .mdBlock{border-radius:4px;margin-bottom:12px;padding:2px 6px}.F1KBNa_mdPreviewBody .mdAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_mdPreviewBody .mdDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_mdPreviewBody .mdWordDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdWordAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdDouble{flex-direction:column;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleRow{align-items:flex-start;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleCol{flex:1;min-width:0}.F1KBNa_mdPreviewBody .mdDoubleRule{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:0 12px}.F1KBNa_mdPreviewFallback{font-family:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 16px;font-size:12px;line-height:18px}.F1KBNa_mdPreviewBody{word-break:break-word;font-size:13px;line-height:20px}.F1KBNa_mdPreviewBody>:first-child{margin-top:0}.F1KBNa_mdPreviewBody>:last-child{margin-bottom:0}.F1KBNa_mdPreviewBody h1,.F1KBNa_mdPreviewBody h2,.F1KBNa_mdPreviewBody h3,.F1KBNa_mdPreviewBody h4,.F1KBNa_mdPreviewBody h5,.F1KBNa_mdPreviewBody h6{margin:16px 0 8px;font-weight:600;line-height:1.3}.F1KBNa_mdPreviewBody h1{font-size:22px}.F1KBNa_mdPreviewBody h2{font-size:19px}.F1KBNa_mdPreviewBody h3{font-size:16px}.F1KBNa_mdPreviewBody h4{font-size:15px}.F1KBNa_mdPreviewBody h5{font-size:14px}.F1KBNa_mdPreviewBody h6{font-size:13px}.F1KBNa_mdPreviewBody p{margin:8px 0}.F1KBNa_mdPreviewBody ul,.F1KBNa_mdPreviewBody ol{margin:8px 0;padding-left:22px}.F1KBNa_mdPreviewBody li{margin:2px 0}.F1KBNa_mdPreviewBody a{color:var(--dsw-alias-state-business-primary);text-decoration:none}.F1KBNa_mdPreviewBody a:hover{text-decoration:underline}.F1KBNa_mdPreviewBody code{font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:4px;padding:1px 5px;font-size:12.5px}.F1KBNa_mdPreviewBody pre{border:1px solid var(--dsw-alias-border-l1);font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:8px;margin:8px 0;padding:10px 12px;font-size:12.5px;line-height:18px;overflow:auto}.F1KBNa_mdPreviewBody pre code{background:0 0;padding:0}.F1KBNa_mdPreviewBody blockquote{border-left:3px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);margin:8px 0;padding:0 12px}.F1KBNa_mdPreviewBody hr{background:var(--dsw-alias-border-l1);border:none;height:1px;margin:16px 0}.F1KBNa_mdPreviewBody table{border-collapse:collapse;margin:8px 0}.F1KBNa_mdPreviewBody th,.F1KBNa_mdPreviewBody td{border:1px solid var(--dsw-alias-border-l1);padding:4px 10px}.F1KBNa_mdPreviewBody img{max-width:100%}.F1KBNa_mdPreviewBody .mdImageFallback{border:1px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-markdown-code-block) 45%, transparent);width:100%;min-height:120px;color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-markdown-code-block);text-align:center;white-space:pre-wrap;word-break:break-all;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:8px 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_toggle{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:18px;flex:none;width:60px;height:36px;padding:0;position:relative}.F1KBNa_toggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_toggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.F1KBNa_toggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleOn:hover{background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleThumb{background:var(--dsw-alias-label-primary);border-radius:50%;width:28px;height:28px;transition:left .12s;position:absolute;top:3px;left:3px}.F1KBNa_toggleOn .F1KBNa_toggleThumb{background:#fff;left:27px}.F1KBNa_stepper{align-items:center;gap:6px;display:inline-flex}.F1KBNa_stepperButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);width:32px;height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;padding:0;position:relative}.F1KBNa_stepperButton:before,.F1KBNa_stepperButton:after{content:\"\";background:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_stepperButton:before{width:10px;height:1px}.F1KBNa_stepperButton:after{width:1px;height:10px;display:none}.F1KBNa_stepperButtonUp:after{display:block}.F1KBNa_stepperButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_stepperButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_stepperValue{text-align:center;min-width:2ch;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:14px;line-height:22px}.F1KBNa_states{flex-direction:column;flex:1;min-height:0;padding:4px 12px 12px;display:flex;overflow-y:auto}.F1KBNa_split{flex:1;align-items:stretch;min-height:0;display:flex;position:relative}.F1KBNa_fileListKnob{z-index:39;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;box-shadow:var(--dsw-elevation-prominent);border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.F1KBNa_fileListKnob[data-open]{box-shadow:none;opacity:0}.F1KBNa_fileListKnob:not([data-open]){animation:.32s ease-in-out .5s both F1KBNa_fileListKnobIn}@keyframes F1KBNa_fileListKnobIn{0%{opacity:0}to{opacity:1}}.F1KBNa_fileListKnob:hover,.F1KBNa_fileListKnob:focus-visible{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-interactive-bg-hover), var(--dsw-alias-interactive-bg-hover))}.F1KBNa_fileListFloat{z-index:40;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);box-shadow:none;transform-origin:0 0;border-radius:12px;flex-direction:column;padding:6px 0 10px 8px;display:flex;position:absolute;overflow:hidden}.F1KBNa_fileListFloatClosing{pointer-events:none;animation:.14s ease-in forwards F1KBNa_fileListShrink}@keyframes F1KBNa_fileListShrink{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.F1KBNa_fileList{box-sizing:border-box;border-right:1px solid var(--dsw-alias-border-l2);flex-direction:column;flex:none;width:240px;min-height:0;padding:4px 8px 12px;display:flex}.F1KBNa_listScroll{flex:1;min-height:0;overflow-y:scroll}.F1KBNa_bulkActions{flex:none;gap:6px;padding:8px 8px 0 0;display:flex}.F1KBNa_bulkActions .F1KBNa_action{text-align:center;flex:1}.F1KBNa_resizeHandle{cursor:col-resize;touch-action:none;background:0 0;flex:none;width:5px;margin:0 -2px}.F1KBNa_resizeHandle:hover{background:var(--dsw-alias-border-l2)}.F1KBNa_floatResizeHandle{z-index:41;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border-radius:4px;position:absolute}.F1KBNa_floatResizeHandle:hover{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-border-l2), var(--dsw-alias-border-l2))}.F1KBNa_detail{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.F1KBNa_detailEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;margin:0;padding:24px;font-size:12px;line-height:18px;display:flex}.F1KBNa_confirmBackdrop{z-index:55;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.F1KBNa_confirmCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:340px;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}.F1KBNa_confirmText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;line-height:1.5}.F1KBNa_confirmActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;display:flex}.F1KBNa_pickerCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:420px;max-width:100%;height:70%;max-height:100%;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:8px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.F1KBNa_pickerTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}.F1KBNa_pickerClose{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:10px;right:10px}.F1KBNa_pickerClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_pickerForm{flex:none;gap:8px;display:flex}.F1KBNa_pickerInput{border:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;flex:auto;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_pickerInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_tree{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex:auto;min-height:0;padding:4px 2px 4px 4px;overflow:auto scroll}.F1KBNa_treeRow{border-radius:6px;align-items:center;gap:2px;padding-right:4px;display:flex}.F1KBNa_treeRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_treeRow[data-selected]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.F1KBNa_treeCaret{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_treeCaret:hover{color:var(--dsw-alias-label-primary)}.F1KBNa_treeName{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:auto;align-items:center;gap:6px;padding:2px 4px;font-family:inherit;font-size:12px;line-height:18px;display:flex}.F1KBNa_treeName:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_treeNote{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.F1KBNa_pickerIcon{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_pickerName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_pickerNote{color:var(--dsw-alias-label-tertiary);flex:none;margin:0;font-size:12px;line-height:18px}.F1KBNa_pickerCheck{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-right:auto;font-size:12px;line-height:18px;display:flex}.F1KBNa_title{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}.F1KBNa_note,.F1KBNa_readError,.F1KBNa_hint{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.F1KBNa_noteCentered{text-align:center;margin:auto}.F1KBNa_emptyState{flex-direction:column;align-items:center;gap:10px;margin:auto;display:flex}.F1KBNa_importButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:5px 14px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_importButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_importButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_importNote{color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:12px;line-height:18px}.F1KBNa_readError{color:var(--dsw-alias-state-error-primary)}.F1KBNa_group{color:var(--dsw-alias-label-tertiary);margin:8px 0 4px;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_groupHead{align-items:center;gap:4px;margin:8px 0 4px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton{box-sizing:border-box;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;min-height:0;padding:0;display:inline-flex}.F1KBNa_groupHead>.F1KBNa_group{margin:0}.F1KBNa_emptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.F1KBNa_rows{margin:0;padding:0;list-style:none}.F1KBNa_row{border:1px solid #0000;border-radius:10px;margin:2px 0}.F1KBNa_rowHead{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_rowHead:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_rowHead[data-selected]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_rowPath{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-left:4px;font-size:12px;line-height:18px;overflow:hidden}.F1KBNa_kindTag{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_kindHint{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:16px}.F1KBNa_divergedHint,.F1KBNa_missingHint{border-bottom:1px solid var(--dsw-alias-border-l2);margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missing{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary));white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_rowFailed{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_actionError{border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missingHint{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary))}.F1KBNa_rowMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;gap:6px;margin-left:auto;font-size:12px;line-height:16px;display:inline-flex}.F1KBNa_addCount{color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_delCount{color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_diff{background:var(--dsw-alias-markdown-code-block);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffHeader{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_panelDocked .F1KBNa_diffHeader{background:var(--dsw-alias-bg-base)}.F1KBNa_diffPath{white-space:nowrap;scrollbar-width:none;min-width:0;color:var(--dsw-alias-label-primary);flex:1;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:auto hidden}.F1KBNa_diffPath::-webkit-scrollbar{display:none}.F1KBNa_diffActions{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_diffStats{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:16px}.F1KBNa_flexSpacer{flex:1}.F1KBNa_divider{background:var(--dsw-alias-border-l1);align-self:stretch;width:1px;margin:2px 0}.F1KBNa_action{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_action:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_actionChord{color:var(--dsw-alias-label-tertiary);margin-left:6px;font-size:11px}.F1KBNa_actionPrimary{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_actionPrimary:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_actionPrimary:disabled{background:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:.55}.F1KBNa_actionQuietDisabled:disabled{cursor:pointer;color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l1);background:0 0}.F1KBNa_actionPrimary.F1KBNa_actionQuietDisabled:disabled{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:1}.F1KBNa_iconAction{justify-content:center;align-items:center;min-height:25px;padding:4px 6px;display:inline-flex}.F1KBNa_close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expand{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expandExpanded svg{transform:rotate(180deg)}.F1KBNa_diffBodyWrap{isolation:isolate;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBody{min-width:0;font:var(--dsw-font-markdown-code-block);-webkit-text-size-adjust:100%;text-size-adjust:100%;cursor:text;outline:none;flex:1;padding:0;position:relative;overflow:auto}.F1KBNa_diffBody::-webkit-scrollbar,.F1KBNa_diffBody::-webkit-scrollbar-track,.F1KBNa_diffBody::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_blockActions{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);z-index:2;border-radius:10px;align-items:center;gap:9px;padding:5px;display:flex;position:absolute;right:8px}.F1KBNa_blockActionsDivider{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:2px 0}.F1KBNa_blockPosition{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;margin-left:7px;font-size:12px;line-height:16px}.F1KBNa_searchBar{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);border-radius:10px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:8px;right:8px}.F1KBNa_searchInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:150px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_searchInput:focus{border-color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchCount{text-align:center;min-width:34px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:16px}.F1KBNa_searchToggle{border:1px solid var(--dsw-alias-border-l1);min-height:25px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:4px 6px;display:inline-flex}.F1KBNa_searchToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_searchToggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchMatch{color:inherit;background-color:#facc1542;border-radius:2px}.F1KBNa_searchMatchCurrent{color:inherit;background-color:#facc1599;border-radius:2px}.F1KBNa_blockFlash{z-index:1;box-sizing:border-box;border:2px solid var(--dsw-alias-state-business-primary);pointer-events:none;border-radius:4px;animation:1s ease-out forwards F1KBNa_diffFlashFade;position:absolute;left:0;right:0}.F1KBNa_blockFlashShake{animation:.7s ease-out forwards F1KBNa_diffFlashShake}.F1KBNa_discussionRow{background:var(--dsw-alias-bg-base);display:table-row}.F1KBNa_discussionCell{display:table-cell}.F1KBNa_discussionPin{width:0;height:0;position:sticky;left:0}.F1KBNa_discussion{z-index:2;box-sizing:border-box;border-left:3px solid var(--dsw-alias-label-secondary);cursor:default;background:0 0;flex-direction:column;display:flex;position:absolute;top:0;left:0;overflow:hidden}.F1KBNa_discussionHead,.F1KBNa_discussionBody{font:var(--dsw-font-markdown-code-block)}.F1KBNa_discussionBody{flex-direction:column;flex:auto;min-height:0;padding:0 12px;display:flex;overflow:hidden}.F1KBNa_discussionAnswer{color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionUser{padding:calc(var(--dsh-diff-line-height,22px) * .2) calc(var(--dsh-diff-line-height,22px) * .5);margin:calc(var(--dsh-diff-line-height,22px) * .3) 0 calc(var(--dsh-diff-line-height,22px) * .3) auto;box-sizing:border-box;background:var(--dsw-specific-bubble,var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover)));width:fit-content;max-width:82%;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px 0 8px 8px}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionNote[data-diff-discussion-hidden]{color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionDots{margin-left:1px}.F1KBNa_discussionDots>span{animation:1.2s ease-in-out infinite F1KBNa_discussionDot}.F1KBNa_discussionDots>span:nth-child(2){animation-delay:.15s}.F1KBNa_discussionDots>span:nth-child(3){animation-delay:.3s}@keyframes F1KBNa_discussionDot{0%,60%,to{opacity:.25}30%{opacity:1}}.F1KBNa_quoteLines{table-layout:fixed;border-spacing:0;width:calc(100% + 27px);min-width:0;color:var(--dsw-alias-label-primary);font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);margin:0 -12px 0 -15px;display:table}.F1KBNa_quoteLine{height:var(--dsh-diff-line-height,22px);display:table-row}.F1KBNa_quoteCode{display:table-cell}.F1KBNa_quoteText{white-space:pre-wrap;overflow-wrap:anywhere;display:block}.F1KBNa_quoteNoWrap .F1KBNa_quoteText{white-space:pre;overflow-wrap:normal;overflow:hidden}.F1KBNa_discussionOutdated{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:16px}.F1KBNa_discussionHead{box-sizing:border-box;height:var(--dsh-diff-line-height,22px);flex:none;align-items:center;gap:8px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;height:calc(var(--dsh-diff-line-height,22px) * 2);flex:none;align-items:center;gap:8px;margin:0 -6px;padding:0;display:flex}.F1KBNa_discussionInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));cursor:text;border-radius:6px;flex:auto;padding:3px 8px;line-height:18px}.F1KBNa_discussionToggle{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_discussionToggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_discussionRangeWrap{font:var(--dsw-font-markdown-code-block);flex:none}.F1KBNa_discussionRange{color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1))}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput:disabled{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_discussionInput::placeholder{font-family:inherit;font-size:inherit;color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionSend{box-sizing:border-box;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;padding-left:9px;padding-right:9px;display:inline-flex}.F1KBNa_rowDiscussed{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent))}@keyframes F1KBNa_diffFlashFade{0%{opacity:1}to{opacity:0}}@keyframes F1KBNa_diffFlashShake{0%{opacity:1;transform:translateY(0)}10%{transform:translateY(1px)}20%{transform:translateY(-1px)}30%{transform:translateY(1px)}40%{transform:translateY(-1px)}50%{transform:translateY(1px)}60%{transform:translateY(-1px)}70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(0)}}.F1KBNa_overviewRuler{pointer-events:none;opacity:.5;width:4px;position:absolute;top:0;bottom:0;right:0}.F1KBNa_overviewMarker{border-radius:2px;width:100%;min-height:2px;position:absolute;right:0}.F1KBNa_markerDel{background-color:var(--dsw-alias-state-error-primary)}.F1KBNa_markerAdd{background-color:var(--dsw-alias-state-success-primary)}.F1KBNa_lines{border-spacing:0;width:max-content;min-width:100%;font-size:calc(1em * var(--dsh-diff-font-scale,1));display:table}.F1KBNa_line{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);-webkit-user-select:none;user-select:none;display:table-row}.F1KBNa_vSpacer{display:table-row}.F1KBNa_gutter{box-sizing:border-box;text-align:right;width:44px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;cursor:default;padding-right:10px;display:table-cell}.F1KBNa_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_add{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_statusBar{box-sizing:border-box;border-top:1px solid var(--dsw-alias-border-l2);height:34px;color:var(--dsw-alias-label-tertiary);font-family:var(--dsw-font-markdown-code-block);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.F1KBNa_statusAction{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_statusAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langSelect{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:4px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_langSelect:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langLabel{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.F1KBNa_presentationSelect{cursor:pointer;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_presentationSelect:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_chip{justify-content:flex-end;align-items:center;gap:5px;min-width:0;padding-right:14px;display:inline-flex}.F1KBNa_chipLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_coverHost{align-items:center;display:inline-flex;position:relative}.F1KBNa_coverCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:12px;align-items:center;gap:4px;padding:6px;display:flex}.F1KBNa_coverPopover{z-index:50;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_coverNotice{z-index:80;pointer-events:none;animation:1.25s ease-out forwards F1KBNa_coverNoticeFade;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_coverNoticeCard{gap:4px;padding:6px 8px}@keyframes F1KBNa_coverNoticeFade{0%,78%{opacity:1}to{opacity:0}}.F1KBNa_coverNoticeGlyph{width:44px;height:44px;color:var(--dsw-alias-label-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_coverNoticeGlyph[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_coverNoticeGlyph[data-changed]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_coverNoticeText{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.F1KBNa_coverButton{width:32px;height:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_coverButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_coverButton[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_presentationHost{align-items:center;display:inline-flex}.F1KBNa_chipPresentation{min-width:36px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:20px;flex:none;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_chipPresentation:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_mirrored{transform:scaleX(-1)}.F1KBNa_notice{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:360px;box-shadow:var(--dsw-shadow-lv3);border-radius:10px;align-items:flex-start;gap:12px;padding:12px 14px;display:flex;position:fixed;bottom:24px;right:24px}.F1KBNa_noticeText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);flex:1;margin:0;line-height:1.45}.F1KBNa_noticeButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font:var(--dsw-font-caption);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px}.F1KBNa_noticeButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_wrap .F1KBNa_line{height:auto;min-height:var(--dsh-diff-line-height,22px)}.F1KBNa_subline{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);white-space:pre;display:block;overflow:hidden}.F1KBNa_wrapActive{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_wrapActive:hover{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_splitRoot{isolation:isolate;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBodySplit{flex:1;min-height:0;overflow-x:hidden}.F1KBNa_splitCols{width:100%;min-width:0;display:flex}.F1KBNa_splitCol{box-sizing:border-box;flex:1 1 0;min-width:0;overflow:hidden}.F1KBNa_splitDivider{background:var(--dsw-alias-border-l2);flex:0 0 1px}.F1KBNa_splitCol .F1KBNa_gutter,.F1KBNa_splitCol .F1KBNa_code{vertical-align:top}.F1KBNa_splitHScrollRow{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;width:100%;min-width:0;display:flex}.F1KBNa_splitHScroll{min-width:0;height:var(--dsh-scrollbar-width,8px);flex:1 1 0;overflow:auto hidden}.F1KBNa_splitHScroll::-webkit-scrollbar{height:var(--dsh-scrollbar-width,8px)}.F1KBNa_splitHScroll::-webkit-scrollbar-track{cursor:default}.F1KBNa_splitHScroll::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_splitHScrollFill{height:1px}.F1KBNa_splitLdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 26%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 24%, transparent)}";
25
25
  const tagId = "dsh-diff-approval/PendingPanel.module.css";
26
26
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
27
27
  const tag = document.createElement("style");
@@ -31,223 +31,232 @@ window.__ModuleLoader__.load({
31
31
  document.head.appendChild(tag);
32
32
  }
33
33
  var PendingPanel_module_css_default = {
34
- "treeRow": "F1KBNa_treeRow",
35
- "listScroll": "F1KBNa_listScroll",
34
+ "settingsSelector": "F1KBNa_settingsSelector",
35
+ "notice": "F1KBNa_notice",
36
+ "toggle": "F1KBNa_toggle",
37
+ "quoteCode": "F1KBNa_quoteCode",
38
+ "noticeText": "F1KBNa_noticeText",
39
+ "readError": "F1KBNa_readError",
40
+ "intraAdd": "F1KBNa_intraAdd",
41
+ "pickerTitle": "F1KBNa_pickerTitle",
42
+ "colorSv": "F1KBNa_colorSv",
36
43
  "splitCol": "F1KBNa_splitCol",
37
- "panelFailure": "F1KBNa_panelFailure",
38
- "badge": "F1KBNa_badge",
39
- "treeName": "F1KBNa_treeName",
40
- "diffPath": "F1KBNa_diffPath",
41
- "diffFlashShake": "F1KBNa_diffFlashShake",
42
- "colorPicker": "F1KBNa_colorPicker",
43
- "discussionCell": "F1KBNa_discussionCell",
44
- "panelFailureText": "F1KBNa_panelFailureText",
45
- "settingsRow": "F1KBNa_settingsRow",
46
- "discussionToggle": "F1KBNa_discussionToggle",
47
- "splitLdel": "F1KBNa_splitLdel",
48
- "states": "F1KBNa_states",
49
- "overviewRuler": "F1KBNa_overviewRuler",
50
- "panelDocked": "F1KBNa_panelDocked",
44
+ "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
45
+ "searchMatch": "F1KBNa_searchMatch",
51
46
  "rowDiscussed": "F1KBNa_rowDiscussed",
52
- "settingsPage": "F1KBNa_settingsPage",
53
- "gutter": "F1KBNa_gutter",
54
- "colorPickerPanel": "F1KBNa_colorPickerPanel",
55
- "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
56
- "line": "F1KBNa_line",
57
- "noticeButton": "F1KBNa_noticeButton",
58
- "statusAction": "F1KBNa_statusAction",
59
- "splitCols": "F1KBNa_splitCols",
60
- "close": "F1KBNa_close",
61
- "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
62
- "pickerInput": "F1KBNa_pickerInput",
63
- "note": "F1KBNa_note",
64
- "diff": "F1KBNa_diff",
65
- "fileListShrink": "F1KBNa_fileListShrink",
66
- "discussionHead": "F1KBNa_discussionHead",
67
- "diffBodyWrap": "F1KBNa_diffBodyWrap",
68
- "settingsRowTitle": "F1KBNa_settingsRowTitle",
69
47
  "colorPickerPopover": "F1KBNa_colorPickerPopover",
48
+ "discussionCompose": "F1KBNa_discussionCompose",
49
+ "toggleOn": "F1KBNa_toggleOn",
50
+ "fileList": "F1KBNa_fileList",
51
+ "diffBodySplit": "F1KBNa_diffBodySplit",
52
+ "mdPreviewBody": "F1KBNa_mdPreviewBody",
53
+ "overviewRuler": "F1KBNa_overviewRuler",
54
+ "confirmBackdrop": "F1KBNa_confirmBackdrop",
55
+ "stepperButtonUp": "F1KBNa_stepperButtonUp",
56
+ "confirmCard": "F1KBNa_confirmCard",
57
+ "colorPicker": "F1KBNa_colorPicker",
58
+ "diffActions": "F1KBNa_diffActions",
59
+ "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
60
+ "headerEntry": "F1KBNa_headerEntry",
61
+ "layer": "F1KBNa_layer",
70
62
  "split": "F1KBNa_split",
71
- "resizeHandle": "F1KBNa_resizeHandle",
72
- "discussion": "F1KBNa_discussion",
73
- "colorPickerInput": "F1KBNa_colorPickerInput",
74
- "blockPosition": "F1KBNa_blockPosition",
75
- "colorHue": "F1KBNa_colorHue",
76
- "confirmActions": "F1KBNa_confirmActions",
77
- "importButton": "F1KBNa_importButton",
78
- "pickerTitle": "F1KBNa_pickerTitle",
63
+ "code": "F1KBNa_code",
64
+ "treeRow": "F1KBNa_treeRow",
79
65
  "colorValue": "F1KBNa_colorValue",
80
- "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
81
- "layer": "F1KBNa_layer",
82
- "stepperValue": "F1KBNa_stepperValue",
83
- "divergedHint": "F1KBNa_divergedHint",
84
- "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
85
- "diffFlashFade": "F1KBNa_diffFlashFade",
86
- "discussionNote": "F1KBNa_discussionNote",
87
- "confirmText": "F1KBNa_confirmText",
88
- "rowHead": "F1KBNa_rowHead",
89
- "markerAdd": "F1KBNa_markerAdd",
90
- "discussionAnswer": "F1KBNa_discussionAnswer",
91
- "statusBar": "F1KBNa_statusBar",
92
- "pickerName": "F1KBNa_pickerName",
93
- "searchToggleOn": "F1KBNa_searchToggleOn",
66
+ "actionError": "F1KBNa_actionError",
67
+ "statusAction": "F1KBNa_statusAction",
94
68
  "headerActions": "F1KBNa_headerActions",
95
- "diffActions": "F1KBNa_diffActions",
96
- "treeCaret": "F1KBNa_treeCaret",
97
- "divider": "F1KBNa_divider",
98
- "langLabel": "F1KBNa_langLabel",
99
- "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
100
- "wrapActive": "F1KBNa_wrapActive",
101
- "splitLadd": "F1KBNa_splitLadd",
102
- "discussionCompose": "F1KBNa_discussionCompose",
103
- "header": "F1KBNa_header",
104
- "pickerCard": "F1KBNa_pickerCard",
105
- "tree": "F1KBNa_tree",
106
- "pickerClose": "F1KBNa_pickerClose",
69
+ "searchToggleOn": "F1KBNa_searchToggleOn",
70
+ "presentationSelect": "F1KBNa_presentationSelect",
71
+ "splitHScrollRow": "F1KBNa_splitHScrollRow",
107
72
  "mdPreviewContent": "F1KBNa_mdPreviewContent",
108
- "diffStats": "F1KBNa_diffStats",
109
- "coverPopover": "F1KBNa_coverPopover",
110
- "splitRoot": "F1KBNa_splitRoot",
111
- "fileListKnob": "F1KBNa_fileListKnob",
112
- "intraAdd": "F1KBNa_intraAdd",
113
- "missing": "F1KBNa_missing",
114
- "overviewMarker": "F1KBNa_overviewMarker",
115
- "settingsGroupText": "F1KBNa_settingsGroupText",
73
+ "dockHost": "F1KBNa_dockHost",
74
+ "diffPath": "F1KBNa_diffPath",
75
+ "coverNotice": "F1KBNa_coverNotice",
76
+ "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
116
77
  "noteCentered": "F1KBNa_noteCentered",
117
- "action": "F1KBNa_action",
118
- "settingsReset": "F1KBNa_settingsReset",
119
- "actionError": "F1KBNa_actionError",
78
+ "diff": "F1KBNa_diff",
79
+ "discussionAnswer": "F1KBNa_discussionAnswer",
80
+ "pickerForm": "F1KBNa_pickerForm",
81
+ "detailEmpty": "F1KBNa_detailEmpty",
82
+ "pickerCheck": "F1KBNa_pickerCheck",
120
83
  "diffBody": "F1KBNa_diffBody",
121
- "searchInput": "F1KBNa_searchInput",
122
- "settingsGroupBody": "F1KBNa_settingsGroupBody",
123
- "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
84
+ "searchBar": "F1KBNa_searchBar",
85
+ "langLabel": "F1KBNa_langLabel",
86
+ "discussionToggle": "F1KBNa_discussionToggle",
87
+ "fileListKnob": "F1KBNa_fileListKnob",
88
+ "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
89
+ "del": "F1KBNa_del",
90
+ "fileListFloat": "F1KBNa_fileListFloat",
91
+ "settingsGroup": "F1KBNa_settingsGroup",
92
+ "discussionDot": "F1KBNa_discussionDot",
93
+ "tree": "F1KBNa_tree",
94
+ "colorPickerInput": "F1KBNa_colorPickerInput",
95
+ "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
96
+ "discussionBody": "F1KBNa_discussionBody",
97
+ "discussionNote": "F1KBNa_discussionNote",
98
+ "blockActions": "F1KBNa_blockActions",
99
+ "badgeCount": "F1KBNa_badgeCount",
100
+ "row": "F1KBNa_row",
101
+ "discussionSend": "F1KBNa_discussionSend",
102
+ "wrap": "F1KBNa_wrap",
103
+ "panelFailureRetry": "F1KBNa_panelFailureRetry",
104
+ "pickerIcon": "F1KBNa_pickerIcon",
105
+ "discussionInput": "F1KBNa_discussionInput",
124
106
  "subline": "F1KBNa_subline",
125
- "pickerCheck": "F1KBNa_pickerCheck",
126
- "coverNoticeFade": "F1KBNa_coverNoticeFade",
107
+ "group": "F1KBNa_group",
108
+ "stepperButton": "F1KBNa_stepperButton",
109
+ "title": "F1KBNa_title",
110
+ "coverCard": "F1KBNa_coverCard",
111
+ "panel": "F1KBNa_panel",
112
+ "presentationHost": "F1KBNa_presentationHost",
113
+ "blockFlash": "F1KBNa_blockFlash",
114
+ "settingsRowText": "F1KBNa_settingsRowText",
115
+ "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
116
+ "missingHint": "F1KBNa_missingHint",
117
+ "detail": "F1KBNa_detail",
118
+ "splitCols": "F1KBNa_splitCols",
119
+ "splitRadd": "F1KBNa_splitRadd",
120
+ "fileListShrink": "F1KBNa_fileListShrink",
121
+ "discussionUser": "F1KBNa_discussionUser",
122
+ "discussion": "F1KBNa_discussion",
123
+ "addButton": "F1KBNa_addButton",
124
+ "footerButtons": "F1KBNa_footerButtons",
125
+ "settingsGroupText": "F1KBNa_settingsGroupText",
126
+ "wrapActive": "F1KBNa_wrapActive",
127
+ "blockActionsDivider": "F1KBNa_blockActionsDivider",
128
+ "coverPopover": "F1KBNa_coverPopover",
129
+ "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
127
130
  "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
131
+ "quoteNoWrap": "F1KBNa_quoteNoWrap",
132
+ "addCount": "F1KBNa_addCount",
133
+ "searchInput": "F1KBNa_searchInput",
134
+ "importNote": "F1KBNa_importNote",
128
135
  "splitHScroll": "F1KBNa_splitHScroll",
129
- "splitHScrollFill": "F1KBNa_splitHScrollFill",
130
- "rows": "F1KBNa_rows",
131
- "colorSwatch": "F1KBNa_colorSwatch",
132
- "splitRadd": "F1KBNa_splitRadd",
133
- "groupHead": "F1KBNa_groupHead",
134
- "badgeCount": "F1KBNa_badgeCount",
135
- "hint": "F1KBNa_hint",
136
- "flexSpacer": "F1KBNa_flexSpacer",
137
- "actionPrimary": "F1KBNa_actionPrimary",
138
- "stepper": "F1KBNa_stepper",
139
- "readError": "F1KBNa_readError",
140
- "del": "F1KBNa_del",
141
- "presentationHost": "F1KBNa_presentationHost",
142
- "emptyActions": "F1KBNa_emptyActions",
143
- "vSpacer": "F1KBNa_vSpacer",
144
- "searchCount": "F1KBNa_searchCount",
145
- "code": "F1KBNa_code",
146
- "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
147
- "coverNoticeCard": "F1KBNa_coverNoticeCard",
148
- "coverNoticeText": "F1KBNa_coverNoticeText",
149
- "diffPreview": "F1KBNa_diffPreview",
136
+ "pickerClose": "F1KBNa_pickerClose",
137
+ "chipPresentation": "F1KBNa_chipPresentation",
150
138
  "rail": "F1KBNa_rail",
151
- "row": "F1KBNa_row",
152
- "searchMatch": "F1KBNa_searchMatch",
153
- "blockFlashShake": "F1KBNa_blockFlashShake",
154
- "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
139
+ "rowFailed": "F1KBNa_rowFailed",
140
+ "diffStats": "F1KBNa_diffStats",
141
+ "expandExpanded": "F1KBNa_expandExpanded",
142
+ "diffHeader": "F1KBNa_diffHeader",
143
+ "colorHue": "F1KBNa_colorHue",
144
+ "treeCaret": "F1KBNa_treeCaret",
145
+ "quoteLine": "F1KBNa_quoteLine",
146
+ "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
147
+ "splitLadd": "F1KBNa_splitLadd",
148
+ "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
149
+ "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
155
150
  "colorPickerChevron": "F1KBNa_colorPickerChevron",
156
- "settingsRowText": "F1KBNa_settingsRowText",
157
- "bulkActions": "F1KBNa_bulkActions",
151
+ "colorBackdrop": "F1KBNa_colorBackdrop",
158
152
  "colorPickerPreview": "F1KBNa_colorPickerPreview",
159
- "colorSv": "F1KBNa_colorSv",
160
- "rowPath": "F1KBNa_rowPath",
161
- "toggleOn": "F1KBNa_toggleOn",
162
- "settingsSelector": "F1KBNa_settingsSelector",
163
- "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
164
- "rowFailed": "F1KBNa_rowFailed",
165
- "blockActions": "F1KBNa_blockActions",
166
- "expand": "F1KBNa_expand",
167
- "blockActionsDivider": "F1KBNa_blockActionsDivider",
168
- "headerEntryCount": "F1KBNa_headerEntryCount",
169
153
  "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
170
- "discussionInput": "F1KBNa_discussionInput",
171
- "delCount": "F1KBNa_delCount",
154
+ "settingsRow": "F1KBNa_settingsRow",
155
+ "importButton": "F1KBNa_importButton",
156
+ "markerAdd": "F1KBNa_markerAdd",
157
+ "toggleThumb": "F1KBNa_toggleThumb",
158
+ "settingsPage": "F1KBNa_settingsPage",
159
+ "colorHueCursor": "F1KBNa_colorHueCursor",
160
+ "headerEntryCount": "F1KBNa_headerEntryCount",
172
161
  "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
173
- "context": "F1KBNa_context",
174
- "headerEntry": "F1KBNa_headerEntry",
175
- "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
176
- "coverBackdrop": "F1KBNa_coverBackdrop",
177
- "detail": "F1KBNa_detail",
178
- "importNote": "F1KBNa_importNote",
179
- "searchToggle": "F1KBNa_searchToggle",
180
- "lines": "F1KBNa_lines",
181
- "stepperButton": "F1KBNa_stepperButton",
182
- "discussionRange": "F1KBNa_discussionRange",
162
+ "pickerInput": "F1KBNa_pickerInput",
183
163
  "settingsRowDesc": "F1KBNa_settingsRowDesc",
184
- "colorSvCursor": "F1KBNa_colorSvCursor",
185
- "coverCard": "F1KBNa_coverCard",
186
- "searchBar": "F1KBNa_searchBar",
187
- "coverNotice": "F1KBNa_coverNotice",
188
- "mirrored": "F1KBNa_mirrored",
189
- "notice": "F1KBNa_notice",
190
- "treeNote": "F1KBNa_treeNote",
191
- "pickerIcon": "F1KBNa_pickerIcon",
192
- "colorBackdrop": "F1KBNa_colorBackdrop",
193
- "presentationSelect": "F1KBNa_presentationSelect",
194
- "langSelect": "F1KBNa_langSelect",
195
- "noticeText": "F1KBNa_noticeText",
196
- "wrap": "F1KBNa_wrap",
197
- "diffHeader": "F1KBNa_diffHeader",
198
- "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
164
+ "overviewMarker": "F1KBNa_overviewMarker",
165
+ "actionPrimary": "F1KBNa_actionPrimary",
199
166
  "chipLabel": "F1KBNa_chipLabel",
200
- "diffBodySplit": "F1KBNa_diffBodySplit",
201
- "missingHint": "F1KBNa_missingHint",
167
+ "rows": "F1KBNa_rows",
168
+ "panelDocked": "F1KBNa_panelDocked",
169
+ "coverButton": "F1KBNa_coverButton",
170
+ "lines": "F1KBNa_lines",
171
+ "kindTag": "F1KBNa_kindTag",
202
172
  "badgeLabel": "F1KBNa_badgeLabel",
203
- "dockHost": "F1KBNa_dockHost",
204
- "stepperButtonUp": "F1KBNa_stepperButtonUp",
205
- "toggleThumb": "F1KBNa_toggleThumb",
206
- "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
207
- "blockFlash": "F1KBNa_blockFlash",
208
- "discussionRow": "F1KBNa_discussionRow",
209
- "pickerForm": "F1KBNa_pickerForm",
210
- "group": "F1KBNa_group",
211
- "coverHost": "F1KBNa_coverHost",
173
+ "states": "F1KBNa_states",
212
174
  "iconAction": "F1KBNa_iconAction",
213
- "expandExpanded": "F1KBNa_expandExpanded",
214
- "kindHint": "F1KBNa_kindHint",
215
- "colorHueCursor": "F1KBNa_colorHueCursor",
216
- "fileList": "F1KBNa_fileList",
217
- "rowMeta": "F1KBNa_rowMeta",
218
- "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
219
- "addButton": "F1KBNa_addButton",
220
- "toggle": "F1KBNa_toggle",
221
- "pickerNote": "F1KBNa_pickerNote",
222
- "settingsGroup": "F1KBNa_settingsGroup",
223
- "chip": "F1KBNa_chip",
175
+ "splitHScrollFill": "F1KBNa_splitHScrollFill",
176
+ "rowPath": "F1KBNa_rowPath",
177
+ "coverNoticeFade": "F1KBNa_coverNoticeFade",
224
178
  "discussionPin": "F1KBNa_discussionPin",
225
- "fileListKnobIn": "F1KBNa_fileListKnobIn",
226
- "intraDel": "F1KBNa_intraDel",
179
+ "pickerNote": "F1KBNa_pickerNote",
227
180
  "emptyState": "F1KBNa_emptyState",
228
- "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
229
- "splitDivider": "F1KBNa_splitDivider",
230
- "mdPreviewBody": "F1KBNa_mdPreviewBody",
231
- "detailEmpty": "F1KBNa_detailEmpty",
232
- "title": "F1KBNa_title",
233
- "floatResizeHandle": "F1KBNa_floatResizeHandle",
234
- "splitRdel": "F1KBNa_splitRdel",
235
- "discussionBody": "F1KBNa_discussionBody",
236
- "footerButtons": "F1KBNa_footerButtons",
237
- "confirmCard": "F1KBNa_confirmCard",
238
- "fileListFloat": "F1KBNa_fileListFloat",
181
+ "gutter": "F1KBNa_gutter",
182
+ "panelFailureText": "F1KBNa_panelFailureText",
183
+ "confirmText": "F1KBNa_confirmText",
184
+ "header": "F1KBNa_header",
185
+ "close": "F1KBNa_close",
186
+ "discussionDots": "F1KBNa_discussionDots",
187
+ "quoteText": "F1KBNa_quoteText",
188
+ "confirmActions": "F1KBNa_confirmActions",
189
+ "action": "F1KBNa_action",
190
+ "discussionCell": "F1KBNa_discussionCell",
191
+ "splitLdel": "F1KBNa_splitLdel",
192
+ "vSpacer": "F1KBNa_vSpacer",
193
+ "intraDel": "F1KBNa_intraDel",
194
+ "note": "F1KBNa_note",
195
+ "searchCount": "F1KBNa_searchCount",
196
+ "statusBar": "F1KBNa_statusBar",
197
+ "coverNoticeCard": "F1KBNa_coverNoticeCard",
198
+ "fileListKnobIn": "F1KBNa_fileListKnobIn",
199
+ "bulkActions": "F1KBNa_bulkActions",
200
+ "flexSpacer": "F1KBNa_flexSpacer",
201
+ "settingsGroupBody": "F1KBNa_settingsGroupBody",
202
+ "colorSvCursor": "F1KBNa_colorSvCursor",
203
+ "settingsRowTitle": "F1KBNa_settingsRowTitle",
204
+ "rowHead": "F1KBNa_rowHead",
205
+ "colorPickerPanel": "F1KBNa_colorPickerPanel",
206
+ "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
207
+ "stepperValue": "F1KBNa_stepperValue",
208
+ "missing": "F1KBNa_missing",
209
+ "discussionOutdated": "F1KBNa_discussionOutdated",
239
210
  "markerDel": "F1KBNa_markerDel",
240
- "confirmBackdrop": "F1KBNa_confirmBackdrop",
241
- "kindTag": "F1KBNa_kindTag",
242
- "addCount": "F1KBNa_addCount",
243
- "discussionSend": "F1KBNa_discussionSend",
244
- "panel": "F1KBNa_panel",
245
- "coverButton": "F1KBNa_coverButton",
246
- "panelFailureRetry": "F1KBNa_panelFailureRetry",
247
- "discussionUser": "F1KBNa_discussionUser",
248
- "splitHScrollRow": "F1KBNa_splitHScrollRow",
211
+ "hint": "F1KBNa_hint",
212
+ "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
213
+ "blockFlashShake": "F1KBNa_blockFlashShake",
214
+ "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
215
+ "emptyActions": "F1KBNa_emptyActions",
216
+ "coverHost": "F1KBNa_coverHost",
217
+ "langSelect": "F1KBNa_langSelect",
218
+ "diffFlashFade": "F1KBNa_diffFlashFade",
219
+ "splitRoot": "F1KBNa_splitRoot",
220
+ "splitRdel": "F1KBNa_splitRdel",
221
+ "diffBodyWrap": "F1KBNa_diffBodyWrap",
222
+ "discussionRow": "F1KBNa_discussionRow",
223
+ "discussionRange": "F1KBNa_discussionRange",
224
+ "expand": "F1KBNa_expand",
225
+ "pickerCard": "F1KBNa_pickerCard",
249
226
  "add": "F1KBNa_add",
250
- "chipPresentation": "F1KBNa_chipPresentation"
227
+ "kindHint": "F1KBNa_kindHint",
228
+ "stepper": "F1KBNa_stepper",
229
+ "splitDivider": "F1KBNa_splitDivider",
230
+ "diffPreview": "F1KBNa_diffPreview",
231
+ "blockPosition": "F1KBNa_blockPosition",
232
+ "discussionHead": "F1KBNa_discussionHead",
233
+ "chip": "F1KBNa_chip",
234
+ "treeNote": "F1KBNa_treeNote",
235
+ "coverNoticeText": "F1KBNa_coverNoticeText",
236
+ "diffFlashShake": "F1KBNa_diffFlashShake",
237
+ "resizeHandle": "F1KBNa_resizeHandle",
238
+ "noticeButton": "F1KBNa_noticeButton",
239
+ "actionChord": "F1KBNa_actionChord",
240
+ "badge": "F1KBNa_badge",
241
+ "colorSwatch": "F1KBNa_colorSwatch",
242
+ "settingsReset": "F1KBNa_settingsReset",
243
+ "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
244
+ "delCount": "F1KBNa_delCount",
245
+ "context": "F1KBNa_context",
246
+ "pickerName": "F1KBNa_pickerName",
247
+ "floatResizeHandle": "F1KBNa_floatResizeHandle",
248
+ "listScroll": "F1KBNa_listScroll",
249
+ "groupHead": "F1KBNa_groupHead",
250
+ "mirrored": "F1KBNa_mirrored",
251
+ "divider": "F1KBNa_divider",
252
+ "line": "F1KBNa_line",
253
+ "divergedHint": "F1KBNa_divergedHint",
254
+ "panelFailure": "F1KBNa_panelFailure",
255
+ "searchToggle": "F1KBNa_searchToggle",
256
+ "coverBackdrop": "F1KBNa_coverBackdrop",
257
+ "treeName": "F1KBNa_treeName",
258
+ "quoteLines": "F1KBNa_quoteLines",
259
+ "rowMeta": "F1KBNa_rowMeta"
251
260
  };
252
261
  //#endregion
253
262
  //#region lib/types/client/PathPicker.js
@@ -2808,47 +2817,143 @@ window.__ModuleLoader__.load({
2808
2817
  * annotation at most, so a selection that touches an existing block offers no
2809
2818
  * second one - otherwise two blocks would describe the same line.
2810
2819
  *
2820
+ * An outdated thread owns no rows: the code under its numbers is no longer what the
2821
+ * comment was written about, so it cannot hold the range against a new annotation of the
2822
+ * code that is there now. Nothing marks those rows for it either (see the panel's band),
2823
+ * which is the same rule seen from the other side: a thread that no longer matches is
2824
+ * kept for its quote and its turns, not for its position.
2825
+ *
2811
2826
  * @param discussions - the blocks currently attached to this file.
2812
2827
  * @param anchor - the candidate range.
2813
2828
  * @returns the overlapping discussion, or `undefined`.
2814
2829
  */
2815
2830
  function discussionOverlapping(discussions, anchor) {
2816
- return discussions.find((entry) => entry.anchor.start <= anchor.end && anchor.start <= entry.anchor.end);
2831
+ return discussions.find((entry) => entry.lost !== true && entry.anchor.start <= anchor.end && anchor.start <= entry.anchor.end);
2817
2832
  }
2818
2833
  /**
2819
- * Re-anchor one discussion against the current rows: the rows whose new-file line
2820
- * falls inside the annotation's line range. When no line matches any more, the
2821
- * block keeps the rows it last matched and is marked lost, so it stays where the
2822
- * user last saw it and can only be deleted.
2834
+ * The same thread, marked as no longer sitting on the code it was written about.
2835
+ *
2836
+ * Overdue for nothing but the mark: the anchor, the quote and the turns all stay, so the
2837
+ * reader can still see what the comment meant. What goes is the writing row and the ownership
2838
+ * of the rows — there is no current code for an answer to be about.
2839
+ *
2840
+ * @param discussion - the block to mark.
2841
+ * @returns the marked block (the same object when it already carried the mark).
2842
+ */
2843
+ function markOutdated(discussion) {
2844
+ return discussion.lost === true ? discussion : {
2845
+ ...discussion,
2846
+ lost: true
2847
+ };
2848
+ }
2849
+ /**
2850
+ * The same thread with the outdated mark cleared, once the code it names holds its quote
2851
+ * again (a revert followed by a keep brings the lines back).
2852
+ *
2853
+ * @param discussion - the block to clear.
2854
+ * @returns the cleared block (the same object when it carried no mark).
2855
+ */
2856
+ function clearOutdated(discussion) {
2857
+ if (discussion.lost !== true) return discussion;
2858
+ const next = { ...discussion };
2859
+ delete next.lost;
2860
+ return next;
2861
+ }
2862
+ /**
2863
+ * Re-anchor one discussion against the current rows.
2864
+ *
2865
+ * The anchor's new-file line numbers are what a rebuild moves; the quote the thread carries
2866
+ * is what says whether they still hold the code the comment was written about. When they do
2867
+ * not — the lines were edited under it, or the hunk moved — the quote is looked for elsewhere
2868
+ * in the model and the thread follows it, nearest occurrence first when the same code shows up
2869
+ * more than once. When nothing matches, the block keeps the rows it last matched and is marked
2870
+ * outdated: it says so and keeps its quote for the reader, rather than being silently moved
2871
+ * onto whatever took those lines. Only when the whole range is gone from the model does the
2872
+ * block move, and then by line number, back to where the range used to be (see `gone`). The mark
2873
+ * is derived, not sticky — the lines coming back with their quote clears it (GitHub recomputes
2874
+ * `isOutdated` the same way).
2823
2875
  *
2824
2876
  * @param discussion - the block to re-anchor.
2825
2877
  * @param lineOf - the new-file line number of a row, or `undefined` for a row that has none.
2878
+ * @param textOf - the text of a row, for the quote comparison.
2826
2879
  * @param rowCount - how many rows the current model has.
2827
2880
  * @returns the re-anchored discussion (the same object when nothing moved).
2828
2881
  */
2829
- function remapDiscussion(discussion, lineOf, rowCount) {
2830
- if (discussion.lost === true) return discussion;
2882
+ function remapDiscussion(discussion, lineOf, textOf, rowCount) {
2883
+ const { startLine, endLine } = discussion.anchor;
2831
2884
  let start = -1;
2832
2885
  let end = -1;
2886
+ let before = -1;
2833
2887
  for (let row = 0; row < rowCount; row++) {
2834
2888
  const line = lineOf(row);
2835
- if (line === void 0 || line < discussion.anchor.startLine || line > discussion.anchor.endLine) continue;
2889
+ if (line === void 0) continue;
2890
+ if (line < startLine) {
2891
+ before = row;
2892
+ continue;
2893
+ }
2894
+ if (line > endLine) continue;
2836
2895
  if (start === -1) start = row;
2837
2896
  end = row;
2838
2897
  }
2839
- if (start === -1) return {
2840
- ...discussion,
2841
- lost: true
2898
+ const quote = discussion.quote;
2899
+ const span = Math.max(0, endLine - startLine);
2900
+ const textAt = (row) => {
2901
+ const parts = [];
2902
+ for (let index = row; index <= row + span; index++) parts.push(index < rowCount ? textOf(index) : "");
2903
+ return parts.join("\n");
2842
2904
  };
2843
- if (start === discussion.anchor.start && end === discussion.anchor.end) return discussion;
2844
- return {
2905
+ /**
2906
+ * The block with no row of its range left in the model: marked outdated, and hung where the
2907
+ * range used to be — just below the last row that still reads before its first line.
2908
+ *
2909
+ * The row index it last matched is not used for that: it is a row index, so every edit above
2910
+ * the block shifts what it points at, and the panel clamps it to the file's last row once the
2911
+ * file is shorter than it — which is how a comment ends up at the bottom of the file with
2912
+ * nothing to do with where it was written. The line numbers stay exactly as they were: they are
2913
+ * the original position, and the header keeps showing them.
2914
+ *
2915
+ * @returns the block, marked and re-hung (the same object when it was already there).
2916
+ */
2917
+ const gone = () => {
2918
+ const row = Math.max(0, before);
2919
+ if (discussion.lost === true && discussion.anchor.start === row && discussion.anchor.end === row) return discussion;
2920
+ return markOutdated({
2921
+ ...discussion,
2922
+ anchor: {
2923
+ ...discussion.anchor,
2924
+ start: row,
2925
+ end: row
2926
+ }
2927
+ });
2928
+ };
2929
+ if (quote === void 0 || quote === "" || start !== -1 && textAt(start) === quote) {
2930
+ if (start === -1) return gone();
2931
+ if (start === discussion.anchor.start && end === discussion.anchor.end) return clearOutdated(discussion);
2932
+ return clearOutdated({
2933
+ ...discussion,
2934
+ anchor: {
2935
+ ...discussion.anchor,
2936
+ start,
2937
+ end
2938
+ }
2939
+ });
2940
+ }
2941
+ let found = -1;
2942
+ for (let row = 0; row + span < rowCount; row++) {
2943
+ if (textAt(row) !== quote) continue;
2944
+ if (found === -1 || Math.abs(row - start) < Math.abs(found - start)) found = row;
2945
+ }
2946
+ if (found === -1) return start === -1 ? gone() : markOutdated(discussion);
2947
+ return clearOutdated({
2845
2948
  ...discussion,
2846
2949
  anchor: {
2847
2950
  ...discussion.anchor,
2848
- start,
2849
- end
2951
+ start: found,
2952
+ end: found + span,
2953
+ startLine: lineOf(found) ?? startLine,
2954
+ endLine: lineOf(found + span) ?? endLine
2850
2955
  }
2851
- };
2956
+ });
2852
2957
  }
2853
2958
  /**
2854
2959
  * Decide the selection frame's contents.
@@ -19198,6 +19303,34 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19198
19303
  * @module dsh-diff-approval/client/panel-memory
19199
19304
  */
19200
19305
  const views = /* @__PURE__ */ new Map();
19306
+ /**
19307
+ * One session's comment threads, by pending entry id.
19308
+ *
19309
+ * A thread is not a preference and not the host's to keep: it is what this visit put on the
19310
+ * diff, and the panel unmounts whenever it is closed or its presentation changes (the
19311
+ * floating overlay and the docked tab are two mounts). Module state gives them one memory,
19312
+ * so the threads are still there when the panel comes back, and a page reload starts clean -
19313
+ * which is the lifetime the comments are supposed to have.
19314
+ */
19315
+ const threads = /* @__PURE__ */ new Map();
19316
+ /**
19317
+ * The comment threads a session's panel is holding.
19318
+ * @param sessionId - the session, if any.
19319
+ * @returns the threads by pending entry id; empty when there are none.
19320
+ */
19321
+ function rememberedDiscussions(sessionId) {
19322
+ return sessionId === void 0 ? {} : threads.get(sessionId) ?? {};
19323
+ }
19324
+ /**
19325
+ * Remember the comment threads a session's panel holds. Called on every change, so a mount
19326
+ * that appears later (another presentation, or the panel reopened) starts from them.
19327
+ * @param sessionId - the session the panel is reviewing; nothing is recorded without one.
19328
+ * @param byFile - the threads, by pending entry id.
19329
+ */
19330
+ function rememberDiscussions(sessionId, byFile) {
19331
+ if (sessionId === void 0) return;
19332
+ threads.set(sessionId, byFile);
19333
+ }
19201
19334
  /** This session's record, created on first use. */
19202
19335
  function viewOf(sessionId) {
19203
19336
  let view = views.get(sessionId);
@@ -19904,6 +20037,73 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19904
20037
  }
19905
20038
  return nodes.length === 0 ? "\xA0" : nodes;
19906
20039
  }
20040
+ /**
20041
+ * The code an outdated thread was written about.
20042
+ *
20043
+ * Laid out as the file's own rows are: the same two 44px gutters — with the numbers the lines
20044
+ * had — then the code column, so the quote sits on the file's columns rather than in a box of
20045
+ * its own. Highlighted with the same highlighter the rows use, on the language the file is read
20046
+ * in: a quote of code that renders as grey prose three rows under coloured code reads as a
20047
+ * different kind of thing. No search hits either — those belong to the file, and the quote is
20048
+ * not in it. The tokenize is memoised per quote and language, and the window is exactly the
20049
+ * quote, so a long one is one bounded job; an unknown language comes back plain.
20050
+ *
20051
+ * @param props.quote - the code, one line per `\n`.
20052
+ * @param props.lines - each line's gutter pair, in the same order.
20053
+ * @param props.lang - the grammar id the file is read in, or `undefined` for plain text.
20054
+ * @param props.wrap - the code view's wrap setting: off, the quote is one line per quoted line,
20055
+ * as the file renders it.
20056
+ */
20057
+ function DiscussionQuote({ quote, lines, lang, wrap }) {
20058
+ const rows = (0, react.useMemo)(() => {
20059
+ const texts = quote.split("\n");
20060
+ const runs = highlightWindow(texts, lang, 0, texts.length)?.runs;
20061
+ return texts.map((text, index) => {
20062
+ const lineRuns = runs?.[index];
20063
+ const content = [];
20064
+ if (lineRuns === void 0) content.push(text);
20065
+ else for (const run of lineRuns) content.push((0, react_jsx_runtime.jsx)("span", {
20066
+ style: run.style,
20067
+ children: run.text
20068
+ }, content.length));
20069
+ return {
20070
+ content,
20071
+ gutter: lines?.[index]
20072
+ };
20073
+ });
20074
+ }, [
20075
+ quote,
20076
+ lines,
20077
+ lang
20078
+ ]);
20079
+ return (0, react_jsx_runtime.jsx)("div", {
20080
+ className: `${PendingPanel_module_css_default.quoteLines}${wrap ? "" : " " + PendingPanel_module_css_default.quoteNoWrap}`,
20081
+ "data-diff-discussion-quote": true,
20082
+ children: rows.map((row, index) => (0, react_jsx_runtime.jsxs)("div", {
20083
+ className: PendingPanel_module_css_default.quoteLine,
20084
+ children: [
20085
+ (0, react_jsx_runtime.jsx)("span", {
20086
+ className: PendingPanel_module_css_default.gutter,
20087
+ "data-diff-quote-gutter": true,
20088
+ children: row.gutter?.old ?? ""
20089
+ }),
20090
+ (0, react_jsx_runtime.jsx)("span", {
20091
+ className: PendingPanel_module_css_default.gutter,
20092
+ "data-diff-quote-gutter": true,
20093
+ children: row.gutter?.new ?? ""
20094
+ }),
20095
+ (0, react_jsx_runtime.jsx)("span", {
20096
+ className: PendingPanel_module_css_default.quoteCode,
20097
+ children: (0, react_jsx_runtime.jsx)("span", {
20098
+ className: PendingPanel_module_css_default.quoteText,
20099
+ "data-diff-quote-text": true,
20100
+ children: row.content
20101
+ })
20102
+ })
20103
+ ]
20104
+ }, index))
20105
+ });
20106
+ }
19907
20107
  /** Chip styling for each intra-line run: removed chars and added chars stand out. */
19908
20108
  const INTRA_CLASS = {
19909
20109
  same: void 0,
@@ -21366,7 +21566,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21366
21566
  const [hoveredBlock, setHoveredBlock] = (0, react.useState)(void 0);
21367
21567
  const [selection, setSelection] = (0, react.useState)(void 0);
21368
21568
  const [commentMode, setCommentMode] = (0, react.useState)(commentModeEnabled);
21369
- const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)({});
21569
+ const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)(() => rememberedDiscussions(file.sessionId));
21370
21570
  const discussions = discussionsByFile[file.id] ?? EMPTY_DISCUSSIONS;
21371
21571
  const setDiscussions = (update) => {
21372
21572
  setDiscussionsByFile((all) => ({
@@ -21378,7 +21578,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21378
21578
  const [discussionMenuFor, setDiscussionMenuFor] = (0, react.useState)(void 0);
21379
21579
  const discussionMenuItems = (0, react.useMemo)(() => [{
21380
21580
  id: "delete",
21381
- label: t("action.delete")
21581
+ label: t("action.discussionEnd")
21382
21582
  }], [t]);
21383
21583
  /** The session's chat, watched so a discussion can show the answer it asked for. */
21384
21584
  const [chat, setChat] = (0, react.useState)({
@@ -21957,16 +22157,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21957
22157
  *
21958
22158
  * @param text - the message text.
21959
22159
  * @param role - who said it: the two sides wrap at different widths.
22160
+ * @param widthPx - the exact width the text wraps in, when the caller lays it out somewhere
22161
+ * other than the thread's own column (the quote's code cell, which sits behind the file's two
22162
+ * gutters). Omitted, the turn's own column is used — and a bubble ignores it, since a bubble
22163
+ * wraps at its own percentage regardless.
21960
22164
  * @returns the occupied row count (whole: a bubble's chrome is a whole row).
21961
22165
  */
21962
- const messageRowsOf = (0, react.useCallback)((text, role) => {
22166
+ const messageRowsOf = (0, react.useCallback)((text, role, widthPx) => {
21963
22167
  const lines = text.split("\n");
21964
22168
  const bubble = role === "user";
21965
22169
  const chrome = bubble ? 1 : 0;
21966
22170
  const measure = makeMeasurer(codeFontOf());
21967
22171
  if (measure === void 0 || bodyWidth === 0) return lines.length + chrome;
21968
22172
  const body = Math.max(0, bodyWidth - discussionRightInsetPx - 3 - 24);
21969
- const wrapping = (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * ROW_HEIGHT_PX : body) - measure("0");
22173
+ const wrapping = (widthPx ?? (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * ROW_HEIGHT_PX : body)) - measure("0");
21970
22174
  if (wrapping <= 0) return lines.length + chrome;
21971
22175
  const tabPx = tabWidthSpaces * measure(" ");
21972
22176
  return chrome + lines.reduce((rows, line) => rows + Math.max(1, wrapInto(line, wrapping, measure, tabPx).length), 0);
@@ -21976,6 +22180,25 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21976
22180
  discussionRightInsetPx
21977
22181
  ]);
21978
22182
  /**
22183
+ * How many rows the quote of an outdated thread occupies: the code as it wraps in its own
22184
+ * code cell, which is the block's full width less the two gutters the quote lays out in. It
22185
+ * carries no chrome of its own — no box, no padding — so the count is the wrapped lines.
22186
+ *
22187
+ * @param quote - the code the thread was written about.
22188
+ * @param wrap - the code view's wrap setting: off, no line wraps, so the quote is exactly one
22189
+ * row per quoted line whatever the width.
22190
+ * @returns the occupied row count (whole).
22191
+ */
22192
+ const quoteRowsOf = (0, react.useCallback)((quote, wrap) => {
22193
+ if (!wrap) return quote.split("\n").length;
22194
+ const width = Math.max(0, bodyWidth - discussionRightInsetPx) - WRAP_GUTTERS_PX;
22195
+ return messageRowsOf(quote, "assistant", width);
22196
+ }, [
22197
+ bodyWidth,
22198
+ discussionRightInsetPx,
22199
+ messageRowsOf
22200
+ ]);
22201
+ /**
21979
22202
  * The size one rendered message needs in code rows: its wrapped lines plus its own
21980
22203
  * padding — which for a bubble is exactly one row (half a row above, half below).
21981
22204
  * Every turn is therefore a whole number of rows and the thread stays on the code's
@@ -21990,7 +22213,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21990
22213
  /**
21991
22214
  * The thread as the block will render it, plus the body height that follows from
21992
22215
  * it: the newest turns that fit the cap, an optional "older" note, the answer in
21993
- * flight (or the failure note), and the compose row the user writes in.
22216
+ * flight (or the failure note), and the compose row the user writes in. An outdated
22217
+ * block's note and quote count as part of the trailing piece, above the turns.
21994
22218
  *
21995
22219
  * @param discussion - the block to lay out.
21996
22220
  * @returns the messages to render, the hidden count, and the body height.
@@ -21998,18 +22222,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21998
22222
  const layoutDiscussion = (0, react.useCallback)((discussion) => {
21999
22223
  const answer = discussion.reply === void 0 ? void 0 : stripBlankLines(discussion.reply);
22000
22224
  const stoppedNote = discussion.stopped === true && (answer === void 0 || answer === "") && discussion.failed !== true;
22001
- const trailing = discussion.lost === true ? 1 : answer !== void 0 && answer !== "" ? messageSizeOf({
22225
+ const trailing = (discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" ? 1 + quoteRowsOf(discussion.quote, langWrap) : 0) + (answer !== void 0 && answer !== "" ? messageSizeOf({
22002
22226
  role: "assistant",
22003
22227
  text: answer
22004
- }) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0);
22005
- const tailCap = 12 - trailing - (discussion.lost === true ? 1 : 0);
22228
+ }) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0));
22229
+ const tailCap = 12 - trailing;
22006
22230
  const tail = discussionTail(discussion.messages, messageSizeOf, Math.max(1, tailCap));
22007
22231
  return {
22008
22232
  messages: tail.messages,
22009
22233
  hidden: tail.hidden,
22010
22234
  rows: Math.ceil(tail.rows + trailing)
22011
22235
  };
22012
- }, [messageSizeOf]);
22236
+ }, [
22237
+ langWrap,
22238
+ quoteRowsOf,
22239
+ messageSizeOf
22240
+ ]);
22013
22241
  /**
22014
22242
  * The discussions as the render will draw them: the body height the measurement
22015
22243
  * above arrived at, the turns it kept, and the text those turns actually show.
@@ -22044,11 +22272,18 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22044
22272
  /**
22045
22273
  * The rows a discussion annotates. They carry their own wash, so the mark scrolls with
22046
22274
  * the code in both axes with no positioning at all — the overlay this replaces had to
22047
- * be counter-translated on every horizontal scroll and trailed the text.
22275
+ * be counter-translated on every horizontal scroll and trailed the text. An outdated
22276
+ * block washes nothing: the rows under its numbers are no longer the code the comment
22277
+ * was written about, so a band there would claim them as annotated (GitHub drops the
22278
+ * position of an outdated thread the same way). It says it is outdated and shows the
22279
+ * code it was about instead.
22048
22280
  */
22049
22281
  const discussedRows = (0, react.useMemo)(() => {
22050
22282
  const set = /* @__PURE__ */ new Set();
22051
- for (const discussion of laidDiscussions) for (let row = Math.max(0, discussion.anchor.start); row <= Math.min(discussion.anchor.end, rowCount - 1); row++) set.add(row);
22283
+ for (const discussion of laidDiscussions) {
22284
+ if (discussion.lost === true) continue;
22285
+ for (let row = Math.max(0, discussion.anchor.start); row <= Math.min(discussion.anchor.end, rowCount - 1); row++) set.add(row);
22286
+ }
22052
22287
  return set;
22053
22288
  }, [laidDiscussions, rowCount]);
22054
22289
  const rowHeights = (0, react.useMemo)(() => {
@@ -22101,6 +22336,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22101
22336
  body.scrollTop += shift;
22102
22337
  setScrollTop(body.scrollTop);
22103
22338
  }, [discussions]);
22339
+ (0, react.useEffect)(() => {
22340
+ rememberDiscussions(file.sessionId, discussionsByFile);
22341
+ }, [file.sessionId, discussionsByFile]);
22104
22342
  /** Patch one discussion in place, without touching the others or the file key. */
22105
22343
  const updateDiscussion = (0, react.useCallback)((id, patch) => {
22106
22344
  setDiscussionsByFile((all) => {
@@ -22114,6 +22352,21 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22114
22352
  };
22115
22353
  });
22116
22354
  }, [file.id]);
22355
+ (0, react.useEffect)(() => {
22356
+ if (pendingAskRef.current !== void 0) return;
22357
+ const waiting = discussions.filter((entry) => entry.asking === true).at(-1);
22358
+ if (waiting === void 0) return;
22359
+ const baseline = waiting.baseline;
22360
+ if (baseline === void 0) return;
22361
+ const question = [...waiting.messages].reverse().find((message) => message.role === "user");
22362
+ if (question === void 0) return;
22363
+ const marker = `${t("discussion.marker")} (${discussionLineRange(waiting.anchor)})`;
22364
+ pendingAskRef.current = {
22365
+ id: waiting.id,
22366
+ baseline,
22367
+ needle: `${marker}\n${question.text.split("\n")[0] ?? ""}`
22368
+ };
22369
+ }, []);
22117
22370
  const watchChatRef = (0, react.useRef)(watchChat);
22118
22371
  watchChatRef.current = watchChat;
22119
22372
  (0, react.useEffect)(() => {
@@ -22204,7 +22457,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22204
22457
  if (!ours) {
22205
22458
  updateDiscussion(pending.id, {
22206
22459
  asking: true,
22207
- queued: true,
22460
+ queued: held !== false,
22208
22461
  failed: false,
22209
22462
  reply: ""
22210
22463
  });
@@ -22212,7 +22465,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22212
22465
  }
22213
22466
  clearRelease();
22214
22467
  const streaming = chat.partial !== "" ? chat.partial : settled;
22215
- if (streaming !== "") updateDiscussion(pending.id, {
22468
+ updateDiscussion(pending.id, {
22216
22469
  asking: true,
22217
22470
  queued: false,
22218
22471
  failed: false,
@@ -22267,9 +22520,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22267
22520
  ]);
22268
22521
  /**
22269
22522
  * Re-anchor every block whenever the rows are rebuilt (a keep/revert or an edit
22270
- * rewrites them). The anchor's new-file lines are what survive; a block whose
22271
- * lines are all gone keeps the rows it last matched and is marked lost, so it
22272
- * stays where the user last saw it.
22523
+ * rewrites them). The anchor's new-file lines are what survive, and the block's quote
22524
+ * is what says whether they still hold the code it was written about: when they do
22525
+ * not, the thread follows the quote instead, and when even that finds nothing it is
22526
+ * marked outdated — it stays where the user last saw it, says so, and keeps the quote.
22273
22527
  */
22274
22528
  (0, react.useEffect)(() => {
22275
22529
  setDiscussionsByFile((all) => {
@@ -22277,7 +22531,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22277
22531
  const next = list.map((discussion) => remapDiscussion(discussion, (row) => {
22278
22532
  const entry = model.diff.rows[row];
22279
22533
  return entry?.newLine ?? entry?.oldLine;
22280
- }, model.diff.rows.length));
22534
+ }, (row) => model.diff.rows[row]?.text ?? "", model.diff.rows.length));
22281
22535
  return next.some((discussion, index) => discussion !== list[index]) ? {
22282
22536
  ...all,
22283
22537
  [file.id]: next
@@ -22341,6 +22595,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22341
22595
  const body = bodyRef.current;
22342
22596
  if (body !== null && offsetOf(selection.start) - body.scrollTop < 0) pendingScrollShiftRef.current += 3 * ROW_HEIGHT_PX;
22343
22597
  const id = `discussion-${Date.now().toString(36)}-${discussions.length}`;
22598
+ const quoted = model.diff.rows.slice(selection.start, selection.end + 1);
22599
+ const quote = quoted.map((row) => row.text).join("\n");
22600
+ const quoteLines = quoted.map((row) => ({
22601
+ old: row.oldLine,
22602
+ new: row.newLine
22603
+ }));
22344
22604
  setDiscussions((current) => [...current, {
22345
22605
  id,
22346
22606
  anchor: {
@@ -22349,6 +22609,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22349
22609
  startLine,
22350
22610
  endLine
22351
22611
  },
22612
+ quote,
22613
+ quoteLines,
22352
22614
  messages: [],
22353
22615
  draft: "",
22354
22616
  collapsed: false
@@ -22431,7 +22693,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22431
22693
  queued: false,
22432
22694
  failed: false,
22433
22695
  reply: "",
22434
- collapsed: false
22696
+ collapsed: false,
22697
+ baseline: chat.nodes.length
22435
22698
  } : entry));
22436
22699
  };
22437
22700
  /** Discard one block, keeping the code the user is reading in place. */
@@ -22814,6 +23077,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22814
23077
  }) : void 0;
22815
23078
  const selectionCommentOffered = commentMode && frameForSelection?.comment === true;
22816
23079
  const selectionFrameVisible = frameForSelection !== void 0 && (frameForSelection.keepRevert || selectionCommentOffered);
23080
+ const commentChord = chordLabel$1("addComment");
22817
23081
  (0, react.useEffect)(() => {
22818
23082
  if (!selectionCommentOffered) return;
22819
23083
  const onKeyDown = (event) => {
@@ -23521,13 +23785,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23521
23785
  },
23522
23786
  children: discussion.collapsed ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { size: 12 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutline14, { size: 12 })
23523
23787
  }),
23524
- (0, react_jsx_runtime.jsx)("span", {
23788
+ (0, react_jsx_runtime.jsxs)("span", {
23525
23789
  className: PendingPanel_module_css_default.discussionRangeWrap,
23526
- children: (0, react_jsx_runtime.jsx)("span", {
23790
+ children: [(0, react_jsx_runtime.jsx)("span", {
23527
23791
  className: PendingPanel_module_css_default.discussionRange,
23528
23792
  "data-diff-discussion-range": true,
23529
23793
  children: discussionLineRange(discussion.anchor)
23530
- })
23794
+ }), discussion.lost === true && (0, react_jsx_runtime.jsx)("span", {
23795
+ className: PendingPanel_module_css_default.discussionOutdated,
23796
+ "data-diff-discussion-outdated": true,
23797
+ children: t("discussion.outdated")
23798
+ })]
23531
23799
  }),
23532
23800
  (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
23533
23801
  (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
@@ -23558,11 +23826,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23558
23826
  }), !discussion.collapsed && (0, react_jsx_runtime.jsxs)("div", {
23559
23827
  className: PendingPanel_module_css_default.discussionBody,
23560
23828
  children: [
23561
- discussion.lost === true && (0, react_jsx_runtime.jsx)("p", {
23829
+ discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("p", {
23562
23830
  className: PendingPanel_module_css_default.discussionNote,
23563
- "data-diff-discussion-lost": true,
23564
- children: t("discussion.lost")
23565
- }),
23831
+ "data-diff-discussion-quote-label": true,
23832
+ children: t("discussion.quote")
23833
+ }), (0, react_jsx_runtime.jsx)(DiscussionQuote, {
23834
+ quote: discussion.quote,
23835
+ lines: discussion.quoteLines,
23836
+ lang,
23837
+ wrap: langWrap
23838
+ })] }),
23566
23839
  discussion.hidden !== void 0 && discussion.hidden > 0 && (0, react_jsx_runtime.jsx)("p", {
23567
23840
  className: PendingPanel_module_css_default.discussionNote,
23568
23841
  "data-diff-discussion-hidden": true,
@@ -23586,25 +23859,35 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23586
23859
  className: PendingPanel_module_css_default.discussionAnswer,
23587
23860
  "data-diff-discussion-reply": true,
23588
23861
  children: discussion.reply
23589
- }) : discussion.lost === true ? null : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
23862
+ }) : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
23590
23863
  className: PendingPanel_module_css_default.discussionNote,
23591
23864
  "data-diff-discussion-failed": true,
23592
23865
  children: t("discussion.failed")
23593
- }) : discussion.asking === true ? (0, react_jsx_runtime.jsx)("p", {
23866
+ }) : discussion.asking === true ? (0, react_jsx_runtime.jsxs)("p", {
23594
23867
  className: PendingPanel_module_css_default.discussionNote,
23595
23868
  "data-diff-discussion-asking": true,
23596
- children: discussion.queued === true ? t("discussion.queued") : t("discussion.thinking")
23869
+ children: [discussion.queued === true ? t("discussion.queued") : t("discussion.thinking"), (0, react_jsx_runtime.jsxs)("span", {
23870
+ className: PendingPanel_module_css_default.discussionDots,
23871
+ "data-diff-discussion-dots": true,
23872
+ "aria-hidden": "true",
23873
+ children: [
23874
+ (0, react_jsx_runtime.jsx)("span", { children: "." }),
23875
+ (0, react_jsx_runtime.jsx)("span", { children: "." }),
23876
+ (0, react_jsx_runtime.jsx)("span", { children: "." })
23877
+ ]
23878
+ })]
23597
23879
  }) : (0, react_jsx_runtime.jsxs)("div", {
23598
23880
  className: PendingPanel_module_css_default.discussionCompose,
23599
23881
  children: [(0, react_jsx_runtime.jsx)("input", {
23600
23882
  className: PendingPanel_module_css_default.discussionInput,
23601
23883
  "data-diff-discussion-input": true,
23884
+ disabled: discussion.lost === true,
23602
23885
  ref: (element) => {
23603
23886
  if (element === null) discussionInputEls.current.delete(discussion.id);
23604
23887
  else discussionInputEls.current.set(discussion.id, element);
23605
23888
  },
23606
23889
  value: discussion.draft,
23607
- placeholder: t("discussion.placeholder"),
23890
+ placeholder: t(discussion.lost === true ? "discussion.placeholderOutdated" : "discussion.placeholder"),
23608
23891
  onChange: (event) => {
23609
23892
  const value = event.target.value;
23610
23893
  setDiscussions((current) => current.map((entry) => entry.id === discussion.id ? {
@@ -23622,6 +23905,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23622
23905
  type: "button",
23623
23906
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.discussionSend}`,
23624
23907
  "data-diff-discussion-send": true,
23908
+ disabled: discussion.lost === true,
23625
23909
  onClick: () => {
23626
23910
  sendDiscussion(discussion.id);
23627
23911
  },
@@ -23678,17 +23962,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23678
23962
  "data-diff-selection-divider": true,
23679
23963
  "aria-hidden": "true"
23680
23964
  }),
23681
- selectionCommentOffered && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
23682
- label: withChord(t("action.comment"), "addComment"),
23683
- side: "bottom",
23684
- delayMs: 500,
23685
- children: (0, react_jsx_runtime.jsx)("button", {
23686
- type: "button",
23687
- className: PendingPanel_module_css_default.action,
23688
- "data-diff-selection-comment": true,
23689
- onClick: addDiscussion,
23690
- children: t("action.comment")
23691
- })
23965
+ selectionCommentOffered && (0, react_jsx_runtime.jsxs)("button", {
23966
+ type: "button",
23967
+ className: PendingPanel_module_css_default.action,
23968
+ "data-diff-selection-comment": true,
23969
+ onClick: addDiscussion,
23970
+ children: [t("action.comment"), commentChord !== "" && (0, react_jsx_runtime.jsx)("span", {
23971
+ className: PendingPanel_module_css_default.actionChord,
23972
+ "data-diff-selection-comment-chord": true,
23973
+ children: commentChord
23974
+ })]
23692
23975
  })
23693
23976
  ]
23694
23977
  }) : hoveredBlock !== void 0 && model.blocks[hoveredBlock] !== void 0 ? (0, react_jsx_runtime.jsxs)("div", {
@@ -24101,16 +24384,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24101
24384
  const toggleForceFloat = () => {
24102
24385
  startListOpenRef.current = false;
24103
24386
  const next = !forceFloat;
24104
- const apply = () => {
24105
- setForceFloat(next);
24106
- setFileListFloat(next);
24107
- if (next) setFloatOpen(false);
24108
- };
24109
- if (next && floatOpen) {
24110
- foldCardAway(apply);
24111
- return;
24112
- }
24113
- apply();
24387
+ setForceFloat(next);
24388
+ setFileListFloat(next);
24389
+ if (next) setFloatOpen(true);
24114
24390
  };
24115
24391
  (0, react.useEffect)(() => {
24116
24392
  const onResize = () => {
@@ -24800,6 +25076,19 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24800
25076
  closeDock,
24801
25077
  collapseSidebar
24802
25078
  ]);
25079
+ (0, react.useEffect)(() => {
25080
+ const onMouseUp = (event) => {
25081
+ const target = event.target;
25082
+ const panel = panelRef.current;
25083
+ if (panel === null || !(target instanceof Node) || !panel.contains(target)) return;
25084
+ if (target instanceof Element && target.closest("input, textarea, [contenteditable]") !== null) return;
25085
+ event.preventDefault();
25086
+ };
25087
+ window.addEventListener("mouseup", onMouseUp, true);
25088
+ return () => {
25089
+ window.removeEventListener("mouseup", onMouseUp, true);
25090
+ };
25091
+ }, []);
24803
25092
  (0, react.useEffect)(() => {
24804
25093
  if (!open || docked) return;
24805
25094
  const onKeyDown = (event) => {
@@ -25848,7 +26137,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25848
26137
  const [delColor, setDelColorState] = (0, react.useState)(() => diffDelColor() ?? currentDiffDelColor());
25849
26138
  const addDefault = currentDiffAddColor();
25850
26139
  const delDefault = currentDiffDelColor();
25851
- const [diffOpen, setDiffOpen] = (0, react.useState)(true);
26140
+ const [diffOpen, setDiffOpen] = (0, react.useState)(false);
25852
26141
  const [cover, setCoverState] = (0, react.useState)(panelCover);
25853
26142
  const [coverOpen, setCoverOpen] = (0, react.useState)(false);
25854
26143
  (0, react.useEffect)(() => {
@@ -27241,17 +27530,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27241
27530
  "action.discussionExpand": "展开",
27242
27531
  "action.discussionCollapse": "收起",
27243
27532
  "discussion.placeholder": "写下你的评论…",
27533
+ "discussion.placeholderOutdated": "代码已过期,无法继续评论",
27244
27534
  "discussion.marker": "[评论]",
27245
27535
  "discussion.promptRule": "(回答只针对这几行,不超过 3 行;行与行之间不要留空行;用纯文本,不要 Markdown 装饰;要求详细时不受长度限制。细则见 dsh-diff-approval-comment skill。)",
27246
27536
  "discussion.promptRuleSkill": "(这是一条代码批注:先加载 {skill} skill,按它的规则回答。)",
27247
- "discussion.thinking": "思考中…",
27248
- "discussion.queued": "排队等待中…",
27249
- "discussion.lost": "这段代码已经改动,批注的锚点找不到了(不能再评论,可删除)。",
27537
+ "discussion.thinking": "思考中",
27538
+ "discussion.queued": "排队等待中",
27539
+ "discussion.outdated": "(已过期)",
27540
+ "discussion.quote": "评论代码:",
27250
27541
  "discussion.hidden": "更早的 {count} 条已省略",
27251
27542
  "discussion.failed": "这次提问失败了,可以再试一次。",
27252
27543
  "discussion.stopped": "这次回答被停掉了,可以再问一次。",
27253
27544
  "action.revert": "回退",
27254
27545
  "action.delete": "删除",
27546
+ "action.discussionEnd": "结束评论",
27255
27547
  "action.keepAll": "全部保留",
27256
27548
  "action.revertAll": "全部回退",
27257
27549
  "action.openFile": "打开文件",
@@ -27323,7 +27615,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27323
27615
  "panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移除?",
27324
27616
  "panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移除?",
27325
27617
  "panel.confirmFileRemove": "处理整文件后询问是否移出列表",
27326
- "panel.confirmFileRemoveDesc": "对单个文件执行整文件 Keep/Revert 后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响批量 Keep All / Revert All)。",
27618
+ "panel.confirmFileRemoveDesc": "对单个文件执行整文件保留 / 回退后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响全部保留 / 全部回退)。",
27327
27619
  "action.refreshVcs": "刷新差异",
27328
27620
  "action.matchCase": "区分大小写",
27329
27621
  "action.matchWholeWord": "全字匹配",
@@ -27442,17 +27734,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27442
27734
  "action.discussionExpand": "Expand",
27443
27735
  "action.discussionCollapse": "Collapse",
27444
27736
  "discussion.placeholder": "Write your comment…",
27737
+ "discussion.placeholderOutdated": "This code is outdated; commenting is off",
27445
27738
  "discussion.marker": "[Review]",
27446
27739
  "discussion.promptRule": "(Answer only about these lines, in at most 3 lines, with no blank line between them, as plain text without Markdown decoration; ignore the length limit if my annotation asks for detail. Full rules: the dsh-diff-approval-comment skill.)",
27447
27740
  "discussion.promptRuleSkill": "(This is a comment on a few diff lines: load the {skill} skill first and answer by its rules.)",
27448
- "discussion.thinking": "Thinking…",
27449
- "discussion.queued": "Queued…",
27450
- "discussion.lost": "This code has changed and the annotation no longer anchors to it (it cannot be commented on again; delete it if it is done).",
27741
+ "discussion.thinking": "Thinking",
27742
+ "discussion.queued": "Queued",
27743
+ "discussion.outdated": " (Outdated)",
27744
+ "discussion.quote": "Commented code:",
27451
27745
  "discussion.hidden": "{count} earlier turns omitted",
27452
27746
  "discussion.failed": "That question failed; you can try again.",
27453
27747
  "discussion.stopped": "That answer was stopped; you can ask again.",
27454
27748
  "action.revert": "Revert",
27455
27749
  "action.delete": "Delete",
27750
+ "action.discussionEnd": "End comment",
27456
27751
  "action.keepAll": "Keep all",
27457
27752
  "action.revertAll": "Revert all",
27458
27753
  "action.openFile": "Open file",