dsh-diff-approval 0.23.2 → 0.24.1

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",
36
- "splitCol": "F1KBNa_splitCol",
34
+ "pickerNote": "F1KBNa_pickerNote",
35
+ "coverButton": "F1KBNa_coverButton",
36
+ "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
37
+ "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
38
+ "colorPicker": "F1KBNa_colorPicker",
39
+ "emptyState": "F1KBNa_emptyState",
40
+ "coverNotice": "F1KBNa_coverNotice",
41
+ "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
42
+ "blockActionsDivider": "F1KBNa_blockActionsDivider",
43
+ "discussion": "F1KBNa_discussion",
37
44
  "panelFailure": "F1KBNa_panelFailure",
38
- "badge": "F1KBNa_badge",
39
- "treeName": "F1KBNa_treeName",
40
45
  "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",
46
+ "wrapActive": "F1KBNa_wrapActive",
47
+ "resizeHandle": "F1KBNa_resizeHandle",
48
+ "stepperButtonUp": "F1KBNa_stepperButtonUp",
49
+ "stepperValue": "F1KBNa_stepperValue",
50
+ "fileListKnob": "F1KBNa_fileListKnob",
51
+ "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
52
+ "expandExpanded": "F1KBNa_expandExpanded",
53
+ "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
54
+ "tree": "F1KBNa_tree",
55
+ "discussionPin": "F1KBNa_discussionPin",
56
+ "emptyActions": "F1KBNa_emptyActions",
57
+ "coverCard": "F1KBNa_coverCard",
58
+ "importButton": "F1KBNa_importButton",
59
+ "settingsRowDesc": "F1KBNa_settingsRowDesc",
50
60
  "panelDocked": "F1KBNa_panelDocked",
51
- "rowDiscussed": "F1KBNa_rowDiscussed",
52
- "settingsPage": "F1KBNa_settingsPage",
53
- "gutter": "F1KBNa_gutter",
54
- "colorPickerPanel": "F1KBNa_colorPickerPanel",
55
- "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
56
- "line": "F1KBNa_line",
61
+ "treeName": "F1KBNa_treeName",
62
+ "blockFlash": "F1KBNa_blockFlash",
63
+ "coverPopover": "F1KBNa_coverPopover",
57
64
  "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
- "colorPickerPopover": "F1KBNa_colorPickerPopover",
70
- "split": "F1KBNa_split",
71
- "resizeHandle": "F1KBNa_resizeHandle",
72
- "discussion": "F1KBNa_discussion",
73
- "colorPickerInput": "F1KBNa_colorPickerInput",
65
+ "intraAdd": "F1KBNa_intraAdd",
66
+ "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
67
+ "expand": "F1KBNa_expand",
74
68
  "blockPosition": "F1KBNa_blockPosition",
75
- "colorHue": "F1KBNa_colorHue",
76
- "confirmActions": "F1KBNa_confirmActions",
77
- "importButton": "F1KBNa_importButton",
78
- "pickerTitle": "F1KBNa_pickerTitle",
79
- "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",
69
+ "overviewRuler": "F1KBNa_overviewRuler",
70
+ "badge": "F1KBNa_badge",
71
+ "line": "F1KBNa_line",
72
+ "states": "F1KBNa_states",
73
+ "quoteCode": "F1KBNa_quoteCode",
87
74
  "confirmText": "F1KBNa_confirmText",
88
- "rowHead": "F1KBNa_rowHead",
89
- "markerAdd": "F1KBNa_markerAdd",
90
- "discussionAnswer": "F1KBNa_discussionAnswer",
91
- "statusBar": "F1KBNa_statusBar",
92
- "pickerName": "F1KBNa_pickerName",
75
+ "dockHost": "F1KBNa_dockHost",
76
+ "searchInput": "F1KBNa_searchInput",
77
+ "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
78
+ "discussionDots": "F1KBNa_discussionDots",
79
+ "vSpacer": "F1KBNa_vSpacer",
80
+ "splitCols": "F1KBNa_splitCols",
81
+ "colorSvCursor": "F1KBNa_colorSvCursor",
82
+ "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
83
+ "diffHeader": "F1KBNa_diffHeader",
84
+ "actionError": "F1KBNa_actionError",
85
+ "colorHueCursor": "F1KBNa_colorHueCursor",
86
+ "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
87
+ "mdPreviewBody": "F1KBNa_mdPreviewBody",
88
+ "badgeLabel": "F1KBNa_badgeLabel",
89
+ "wrap": "F1KBNa_wrap",
90
+ "kindHint": "F1KBNa_kindHint",
93
91
  "searchToggleOn": "F1KBNa_searchToggleOn",
92
+ "splitHScroll": "F1KBNa_splitHScroll",
93
+ "panel": "F1KBNa_panel",
94
+ "detailEmpty": "F1KBNa_detailEmpty",
95
+ "searchToggle": "F1KBNa_searchToggle",
94
96
  "headerActions": "F1KBNa_headerActions",
95
- "diffActions": "F1KBNa_diffActions",
96
- "treeCaret": "F1KBNa_treeCaret",
97
- "divider": "F1KBNa_divider",
98
- "langLabel": "F1KBNa_langLabel",
97
+ "notice": "F1KBNa_notice",
98
+ "quoteNoWrap": "F1KBNa_quoteNoWrap",
99
+ "pickerCheck": "F1KBNa_pickerCheck",
100
+ "intraDel": "F1KBNa_intraDel",
101
+ "quoteLine": "F1KBNa_quoteLine",
102
+ "splitLdel": "F1KBNa_splitLdel",
103
+ "searchCount": "F1KBNa_searchCount",
104
+ "footerButtons": "F1KBNa_footerButtons",
105
+ "confirmCard": "F1KBNa_confirmCard",
106
+ "discussionUser": "F1KBNa_discussionUser",
107
+ "noteCentered": "F1KBNa_noteCentered",
108
+ "discussionInput": "F1KBNa_discussionInput",
109
+ "fileListFloat": "F1KBNa_fileListFloat",
110
+ "mdPreviewContent": "F1KBNa_mdPreviewContent",
111
+ "diffFlashShake": "F1KBNa_diffFlashShake",
112
+ "title": "F1KBNa_title",
113
+ "diffFlashFade": "F1KBNa_diffFlashFade",
114
+ "layer": "F1KBNa_layer",
115
+ "bulkActions": "F1KBNa_bulkActions",
116
+ "presentationHost": "F1KBNa_presentationHost",
99
117
  "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
100
- "wrapActive": "F1KBNa_wrapActive",
101
- "splitLadd": "F1KBNa_splitLadd",
102
- "discussionCompose": "F1KBNa_discussionCompose",
118
+ "treeNote": "F1KBNa_treeNote",
119
+ "discussionHead": "F1KBNa_discussionHead",
120
+ "headerEntryCount": "F1KBNa_headerEntryCount",
121
+ "chipLabel": "F1KBNa_chipLabel",
103
122
  "header": "F1KBNa_header",
104
- "pickerCard": "F1KBNa_pickerCard",
105
- "tree": "F1KBNa_tree",
106
- "pickerClose": "F1KBNa_pickerClose",
107
- "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",
116
- "noteCentered": "F1KBNa_noteCentered",
117
- "action": "F1KBNa_action",
118
- "settingsReset": "F1KBNa_settingsReset",
119
- "actionError": "F1KBNa_actionError",
120
- "diffBody": "F1KBNa_diffBody",
121
- "searchInput": "F1KBNa_searchInput",
122
- "settingsGroupBody": "F1KBNa_settingsGroupBody",
123
- "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
124
- "subline": "F1KBNa_subline",
125
- "pickerCheck": "F1KBNa_pickerCheck",
126
- "coverNoticeFade": "F1KBNa_coverNoticeFade",
127
- "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
128
- "splitHScroll": "F1KBNa_splitHScroll",
129
- "splitHScrollFill": "F1KBNa_splitHScrollFill",
130
- "rows": "F1KBNa_rows",
131
- "colorSwatch": "F1KBNa_colorSwatch",
132
- "splitRadd": "F1KBNa_splitRadd",
133
- "groupHead": "F1KBNa_groupHead",
123
+ "discussionCell": "F1KBNa_discussionCell",
124
+ "confirmActions": "F1KBNa_confirmActions",
125
+ "lines": "F1KBNa_lines",
126
+ "rail": "F1KBNa_rail",
127
+ "colorPickerPanel": "F1KBNa_colorPickerPanel",
128
+ "settingsGroup": "F1KBNa_settingsGroup",
129
+ "rowMeta": "F1KBNa_rowMeta",
134
130
  "badgeCount": "F1KBNa_badgeCount",
131
+ "pickerClose": "F1KBNa_pickerClose",
135
132
  "hint": "F1KBNa_hint",
136
- "flexSpacer": "F1KBNa_flexSpacer",
137
- "actionPrimary": "F1KBNa_actionPrimary",
133
+ "splitDivider": "F1KBNa_splitDivider",
134
+ "close": "F1KBNa_close",
135
+ "settingsReset": "F1KBNa_settingsReset",
136
+ "coverBackdrop": "F1KBNa_coverBackdrop",
137
+ "kindTag": "F1KBNa_kindTag",
138
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",
139
+ "stepperButton": "F1KBNa_stepperButton",
140
+ "note": "F1KBNa_note",
141
+ "discussionBody": "F1KBNa_discussionBody",
142
+ "gutter": "F1KBNa_gutter",
143
+ "add": "F1KBNa_add",
144
+ "colorPickerPreview": "F1KBNa_colorPickerPreview",
145
+ "pickerInput": "F1KBNa_pickerInput",
146
+ "markerDel": "F1KBNa_markerDel",
147
+ "addCount": "F1KBNa_addCount",
148
+ "colorSv": "F1KBNa_colorSv",
149
149
  "diffPreview": "F1KBNa_diffPreview",
150
- "rail": "F1KBNa_rail",
150
+ "discussionRow": "F1KBNa_discussionRow",
151
+ "markerAdd": "F1KBNa_markerAdd",
152
+ "fileList": "F1KBNa_fileList",
153
+ "coverNoticeCard": "F1KBNa_coverNoticeCard",
154
+ "colorPickerInput": "F1KBNa_colorPickerInput",
155
+ "treeRow": "F1KBNa_treeRow",
156
+ "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
157
+ "discussionDot": "F1KBNa_discussionDot",
158
+ "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
151
159
  "row": "F1KBNa_row",
152
- "searchMatch": "F1KBNa_searchMatch",
160
+ "discussionSend": "F1KBNa_discussionSend",
161
+ "flexSpacer": "F1KBNa_flexSpacer",
162
+ "settingsGroupText": "F1KBNa_settingsGroupText",
163
+ "panelFailureRetry": "F1KBNa_panelFailureRetry",
164
+ "discussionCompose": "F1KBNa_discussionCompose",
153
165
  "blockFlashShake": "F1KBNa_blockFlashShake",
154
- "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
155
- "colorPickerChevron": "F1KBNa_colorPickerChevron",
166
+ "diffActions": "F1KBNa_diffActions",
167
+ "splitRdel": "F1KBNa_splitRdel",
168
+ "importNote": "F1KBNa_importNote",
156
169
  "settingsRowText": "F1KBNa_settingsRowText",
157
- "bulkActions": "F1KBNa_bulkActions",
158
- "colorPickerPreview": "F1KBNa_colorPickerPreview",
159
- "colorSv": "F1KBNa_colorSv",
160
- "rowPath": "F1KBNa_rowPath",
161
170
  "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
- "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
170
- "discussionInput": "F1KBNa_discussionInput",
171
- "delCount": "F1KBNa_delCount",
172
- "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
171
+ "divider": "F1KBNa_divider",
172
+ "diffBodyWrap": "F1KBNa_diffBodyWrap",
173
+ "coverHost": "F1KBNa_coverHost",
174
+ "action": "F1KBNa_action",
173
175
  "context": "F1KBNa_context",
174
- "headerEntry": "F1KBNa_headerEntry",
175
- "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
176
- "coverBackdrop": "F1KBNa_coverBackdrop",
176
+ "pickerIcon": "F1KBNa_pickerIcon",
177
+ "diffBody": "F1KBNa_diffBody",
178
+ "iconAction": "F1KBNa_iconAction",
179
+ "rowFailed": "F1KBNa_rowFailed",
180
+ "settingsPage": "F1KBNa_settingsPage",
181
+ "colorValue": "F1KBNa_colorValue",
182
+ "discussionNote": "F1KBNa_discussionNote",
177
183
  "detail": "F1KBNa_detail",
178
- "importNote": "F1KBNa_importNote",
179
- "searchToggle": "F1KBNa_searchToggle",
180
- "lines": "F1KBNa_lines",
181
- "stepperButton": "F1KBNa_stepperButton",
182
- "discussionRange": "F1KBNa_discussionRange",
183
- "settingsRowDesc": "F1KBNa_settingsRowDesc",
184
- "colorSvCursor": "F1KBNa_colorSvCursor",
185
- "coverCard": "F1KBNa_coverCard",
184
+ "coverNoticeText": "F1KBNa_coverNoticeText",
185
+ "pickerForm": "F1KBNa_pickerForm",
186
+ "del": "F1KBNa_del",
187
+ "splitLadd": "F1KBNa_splitLadd",
188
+ "pickerTitle": "F1KBNa_pickerTitle",
189
+ "toggleThumb": "F1KBNa_toggleThumb",
190
+ "pickerName": "F1KBNa_pickerName",
191
+ "code": "F1KBNa_code",
192
+ "statusAction": "F1KBNa_statusAction",
193
+ "confirmBackdrop": "F1KBNa_confirmBackdrop",
194
+ "overviewMarker": "F1KBNa_overviewMarker",
195
+ "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
196
+ "splitCol": "F1KBNa_splitCol",
197
+ "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
198
+ "rows": "F1KBNa_rows",
199
+ "chip": "F1KBNa_chip",
200
+ "groupHead": "F1KBNa_groupHead",
201
+ "colorHue": "F1KBNa_colorHue",
202
+ "splitRoot": "F1KBNa_splitRoot",
203
+ "group": "F1KBNa_group",
204
+ "discussionOutdated": "F1KBNa_discussionOutdated",
205
+ "colorPickerPopover": "F1KBNa_colorPickerPopover",
186
206
  "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",
207
+ "discussionAnswer": "F1KBNa_discussionAnswer",
208
+ "quoteText": "F1KBNa_quoteText",
209
+ "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
210
+ "readError": "F1KBNa_readError",
211
+ "missing": "F1KBNa_missing",
212
+ "actionChord": "F1KBNa_actionChord",
213
+ "headerEntry": "F1KBNa_headerEntry",
214
+ "statusBar": "F1KBNa_statusBar",
215
+ "panelFailureText": "F1KBNa_panelFailureText",
216
+ "diffStats": "F1KBNa_diffStats",
194
217
  "langSelect": "F1KBNa_langSelect",
218
+ "rowDiscussed": "F1KBNa_rowDiscussed",
195
219
  "noticeText": "F1KBNa_noticeText",
196
- "wrap": "F1KBNa_wrap",
197
- "diffHeader": "F1KBNa_diffHeader",
198
- "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
199
- "chipLabel": "F1KBNa_chipLabel",
220
+ "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
221
+ "diff": "F1KBNa_diff",
222
+ "coverNoticeFade": "F1KBNa_coverNoticeFade",
223
+ "actionPrimary": "F1KBNa_actionPrimary",
224
+ "chipPresentation": "F1KBNa_chipPresentation",
200
225
  "diffBodySplit": "F1KBNa_diffBodySplit",
201
- "missingHint": "F1KBNa_missingHint",
202
- "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",
212
- "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",
226
+ "colorPickerChevron": "F1KBNa_colorPickerChevron",
220
227
  "toggle": "F1KBNa_toggle",
221
- "pickerNote": "F1KBNa_pickerNote",
222
- "settingsGroup": "F1KBNa_settingsGroup",
223
- "chip": "F1KBNa_chip",
224
- "discussionPin": "F1KBNa_discussionPin",
225
- "fileListKnobIn": "F1KBNa_fileListKnobIn",
226
- "intraDel": "F1KBNa_intraDel",
227
- "emptyState": "F1KBNa_emptyState",
228
- "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
229
- "splitDivider": "F1KBNa_splitDivider",
230
- "mdPreviewBody": "F1KBNa_mdPreviewBody",
231
- "detailEmpty": "F1KBNa_detailEmpty",
232
- "title": "F1KBNa_title",
228
+ "fileListShrink": "F1KBNa_fileListShrink",
229
+ "pickerCard": "F1KBNa_pickerCard",
230
+ "split": "F1KBNa_split",
231
+ "discussionRange": "F1KBNa_discussionRange",
232
+ "presentationSelect": "F1KBNa_presentationSelect",
233
+ "delCount": "F1KBNa_delCount",
234
+ "addButton": "F1KBNa_addButton",
235
+ "treeCaret": "F1KBNa_treeCaret",
236
+ "quoteLines": "F1KBNa_quoteLines",
233
237
  "floatResizeHandle": "F1KBNa_floatResizeHandle",
234
- "splitRdel": "F1KBNa_splitRdel",
235
- "discussionBody": "F1KBNa_discussionBody",
236
- "footerButtons": "F1KBNa_footerButtons",
237
- "confirmCard": "F1KBNa_confirmCard",
238
- "fileListFloat": "F1KBNa_fileListFloat",
239
- "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",
238
+ "settingsRow": "F1KBNa_settingsRow",
239
+ "missingHint": "F1KBNa_missingHint",
240
+ "mirrored": "F1KBNa_mirrored",
241
+ "rowPath": "F1KBNa_rowPath",
248
242
  "splitHScrollRow": "F1KBNa_splitHScrollRow",
249
- "add": "F1KBNa_add",
250
- "chipPresentation": "F1KBNa_chipPresentation"
243
+ "listScroll": "F1KBNa_listScroll",
244
+ "splitHScrollFill": "F1KBNa_splitHScrollFill",
245
+ "settingsSelector": "F1KBNa_settingsSelector",
246
+ "settingsGroupBody": "F1KBNa_settingsGroupBody",
247
+ "subline": "F1KBNa_subline",
248
+ "rowHead": "F1KBNa_rowHead",
249
+ "fileListKnobIn": "F1KBNa_fileListKnobIn",
250
+ "discussionToggle": "F1KBNa_discussionToggle",
251
+ "splitRadd": "F1KBNa_splitRadd",
252
+ "colorBackdrop": "F1KBNa_colorBackdrop",
253
+ "colorSwatch": "F1KBNa_colorSwatch",
254
+ "searchMatch": "F1KBNa_searchMatch",
255
+ "langLabel": "F1KBNa_langLabel",
256
+ "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
257
+ "settingsRowTitle": "F1KBNa_settingsRowTitle",
258
+ "divergedHint": "F1KBNa_divergedHint",
259
+ "blockActions": "F1KBNa_blockActions"
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);
2832
+ }
2833
+ /**
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;
2817
2861
  }
2818
2862
  /**
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.
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);
@@ -19431,6 +19564,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19431
19564
  const MAX_LIST_WIDTH_PX = 560;
19432
19565
  /** Inset of the floating file-list card from the code scroll box, in px. */
19433
19566
  const FLOAT_LIST_MARGIN_PX = 12;
19567
+ /** How far the list's rows sit from the right edge of whichever card holds them, in px — a fixed
19568
+ * number on every platform, which is why the scroller's own padding makes up whatever the
19569
+ * platform's scrollbar has already taken (see `applyListInset`). */
19570
+ const LIST_RIGHT_INSET_PX = 8;
19434
19571
  /** The folded card's width grip: how wide its hit strip is, and how much of it
19435
19572
  * lies over the card (the rest overhangs the code view, so the card's own
19436
19573
  * scrollbar strip stays clear). */
@@ -19904,6 +20041,73 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19904
20041
  }
19905
20042
  return nodes.length === 0 ? "\xA0" : nodes;
19906
20043
  }
20044
+ /**
20045
+ * The code an outdated thread was written about.
20046
+ *
20047
+ * Laid out as the file's own rows are: the same two 44px gutters — with the numbers the lines
20048
+ * had — then the code column, so the quote sits on the file's columns rather than in a box of
20049
+ * its own. Highlighted with the same highlighter the rows use, on the language the file is read
20050
+ * in: a quote of code that renders as grey prose three rows under coloured code reads as a
20051
+ * different kind of thing. No search hits either — those belong to the file, and the quote is
20052
+ * not in it. The tokenize is memoised per quote and language, and the window is exactly the
20053
+ * quote, so a long one is one bounded job; an unknown language comes back plain.
20054
+ *
20055
+ * @param props.quote - the code, one line per `\n`.
20056
+ * @param props.lines - each line's gutter pair, in the same order.
20057
+ * @param props.lang - the grammar id the file is read in, or `undefined` for plain text.
20058
+ * @param props.wrap - the code view's wrap setting: off, the quote is one line per quoted line,
20059
+ * as the file renders it.
20060
+ */
20061
+ function DiscussionQuote({ quote, lines, lang, wrap }) {
20062
+ const rows = (0, react.useMemo)(() => {
20063
+ const texts = quote.split("\n");
20064
+ const runs = highlightWindow(texts, lang, 0, texts.length)?.runs;
20065
+ return texts.map((text, index) => {
20066
+ const lineRuns = runs?.[index];
20067
+ const content = [];
20068
+ if (lineRuns === void 0) content.push(text);
20069
+ else for (const run of lineRuns) content.push((0, react_jsx_runtime.jsx)("span", {
20070
+ style: run.style,
20071
+ children: run.text
20072
+ }, content.length));
20073
+ return {
20074
+ content,
20075
+ gutter: lines?.[index]
20076
+ };
20077
+ });
20078
+ }, [
20079
+ quote,
20080
+ lines,
20081
+ lang
20082
+ ]);
20083
+ return (0, react_jsx_runtime.jsx)("div", {
20084
+ className: `${PendingPanel_module_css_default.quoteLines}${wrap ? "" : " " + PendingPanel_module_css_default.quoteNoWrap}`,
20085
+ "data-diff-discussion-quote": true,
20086
+ children: rows.map((row, index) => (0, react_jsx_runtime.jsxs)("div", {
20087
+ className: PendingPanel_module_css_default.quoteLine,
20088
+ children: [
20089
+ (0, react_jsx_runtime.jsx)("span", {
20090
+ className: PendingPanel_module_css_default.gutter,
20091
+ "data-diff-quote-gutter": true,
20092
+ children: row.gutter?.old ?? ""
20093
+ }),
20094
+ (0, react_jsx_runtime.jsx)("span", {
20095
+ className: PendingPanel_module_css_default.gutter,
20096
+ "data-diff-quote-gutter": true,
20097
+ children: row.gutter?.new ?? ""
20098
+ }),
20099
+ (0, react_jsx_runtime.jsx)("span", {
20100
+ className: PendingPanel_module_css_default.quoteCode,
20101
+ children: (0, react_jsx_runtime.jsx)("span", {
20102
+ className: PendingPanel_module_css_default.quoteText,
20103
+ "data-diff-quote-text": true,
20104
+ children: row.content
20105
+ })
20106
+ })
20107
+ ]
20108
+ }, index))
20109
+ });
20110
+ }
19907
20111
  /** Chip styling for each intra-line run: removed chars and added chars stand out. */
19908
20112
  const INTRA_CLASS = {
19909
20113
  same: void 0,
@@ -21366,7 +21570,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21366
21570
  const [hoveredBlock, setHoveredBlock] = (0, react.useState)(void 0);
21367
21571
  const [selection, setSelection] = (0, react.useState)(void 0);
21368
21572
  const [commentMode, setCommentMode] = (0, react.useState)(commentModeEnabled);
21369
- const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)({});
21573
+ const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)(() => rememberedDiscussions(file.sessionId));
21370
21574
  const discussions = discussionsByFile[file.id] ?? EMPTY_DISCUSSIONS;
21371
21575
  const setDiscussions = (update) => {
21372
21576
  setDiscussionsByFile((all) => ({
@@ -21378,7 +21582,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21378
21582
  const [discussionMenuFor, setDiscussionMenuFor] = (0, react.useState)(void 0);
21379
21583
  const discussionMenuItems = (0, react.useMemo)(() => [{
21380
21584
  id: "delete",
21381
- label: t("action.delete")
21585
+ label: t("action.discussionEnd")
21382
21586
  }], [t]);
21383
21587
  /** The session's chat, watched so a discussion can show the answer it asked for. */
21384
21588
  const [chat, setChat] = (0, react.useState)({
@@ -21957,16 +22161,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21957
22161
  *
21958
22162
  * @param text - the message text.
21959
22163
  * @param role - who said it: the two sides wrap at different widths.
22164
+ * @param widthPx - the exact width the text wraps in, when the caller lays it out somewhere
22165
+ * other than the thread's own column (the quote's code cell, which sits behind the file's two
22166
+ * gutters). Omitted, the turn's own column is used — and a bubble ignores it, since a bubble
22167
+ * wraps at its own percentage regardless.
21960
22168
  * @returns the occupied row count (whole: a bubble's chrome is a whole row).
21961
22169
  */
21962
- const messageRowsOf = (0, react.useCallback)((text, role) => {
22170
+ const messageRowsOf = (0, react.useCallback)((text, role, widthPx) => {
21963
22171
  const lines = text.split("\n");
21964
22172
  const bubble = role === "user";
21965
22173
  const chrome = bubble ? 1 : 0;
21966
22174
  const measure = makeMeasurer(codeFontOf());
21967
22175
  if (measure === void 0 || bodyWidth === 0) return lines.length + chrome;
21968
22176
  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");
22177
+ const wrapping = (widthPx ?? (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * ROW_HEIGHT_PX : body)) - measure("0");
21970
22178
  if (wrapping <= 0) return lines.length + chrome;
21971
22179
  const tabPx = tabWidthSpaces * measure(" ");
21972
22180
  return chrome + lines.reduce((rows, line) => rows + Math.max(1, wrapInto(line, wrapping, measure, tabPx).length), 0);
@@ -21976,6 +22184,25 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21976
22184
  discussionRightInsetPx
21977
22185
  ]);
21978
22186
  /**
22187
+ * How many rows the quote of an outdated thread occupies: the code as it wraps in its own
22188
+ * code cell, which is the block's full width less the two gutters the quote lays out in. It
22189
+ * carries no chrome of its own — no box, no padding — so the count is the wrapped lines.
22190
+ *
22191
+ * @param quote - the code the thread was written about.
22192
+ * @param wrap - the code view's wrap setting: off, no line wraps, so the quote is exactly one
22193
+ * row per quoted line whatever the width.
22194
+ * @returns the occupied row count (whole).
22195
+ */
22196
+ const quoteRowsOf = (0, react.useCallback)((quote, wrap) => {
22197
+ if (!wrap) return quote.split("\n").length;
22198
+ const width = Math.max(0, bodyWidth - discussionRightInsetPx) - WRAP_GUTTERS_PX;
22199
+ return messageRowsOf(quote, "assistant", width);
22200
+ }, [
22201
+ bodyWidth,
22202
+ discussionRightInsetPx,
22203
+ messageRowsOf
22204
+ ]);
22205
+ /**
21979
22206
  * The size one rendered message needs in code rows: its wrapped lines plus its own
21980
22207
  * padding — which for a bubble is exactly one row (half a row above, half below).
21981
22208
  * Every turn is therefore a whole number of rows and the thread stays on the code's
@@ -21990,7 +22217,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21990
22217
  /**
21991
22218
  * The thread as the block will render it, plus the body height that follows from
21992
22219
  * 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.
22220
+ * flight (or the failure note), and the compose row the user writes in. An outdated
22221
+ * block's note and quote count as part of the trailing piece, above the turns.
21994
22222
  *
21995
22223
  * @param discussion - the block to lay out.
21996
22224
  * @returns the messages to render, the hidden count, and the body height.
@@ -21998,18 +22226,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21998
22226
  const layoutDiscussion = (0, react.useCallback)((discussion) => {
21999
22227
  const answer = discussion.reply === void 0 ? void 0 : stripBlankLines(discussion.reply);
22000
22228
  const stoppedNote = discussion.stopped === true && (answer === void 0 || answer === "") && discussion.failed !== true;
22001
- const trailing = discussion.lost === true ? 1 : answer !== void 0 && answer !== "" ? messageSizeOf({
22229
+ const trailing = (discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" ? 1 + quoteRowsOf(discussion.quote, langWrap) : 0) + (answer !== void 0 && answer !== "" ? messageSizeOf({
22002
22230
  role: "assistant",
22003
22231
  text: answer
22004
- }) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0);
22005
- const tailCap = 12 - trailing - (discussion.lost === true ? 1 : 0);
22232
+ }) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0));
22233
+ const tailCap = 12 - trailing;
22006
22234
  const tail = discussionTail(discussion.messages, messageSizeOf, Math.max(1, tailCap));
22007
22235
  return {
22008
22236
  messages: tail.messages,
22009
22237
  hidden: tail.hidden,
22010
22238
  rows: Math.ceil(tail.rows + trailing)
22011
22239
  };
22012
- }, [messageSizeOf]);
22240
+ }, [
22241
+ langWrap,
22242
+ quoteRowsOf,
22243
+ messageSizeOf
22244
+ ]);
22013
22245
  /**
22014
22246
  * The discussions as the render will draw them: the body height the measurement
22015
22247
  * above arrived at, the turns it kept, and the text those turns actually show.
@@ -22044,11 +22276,18 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22044
22276
  /**
22045
22277
  * The rows a discussion annotates. They carry their own wash, so the mark scrolls with
22046
22278
  * 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.
22279
+ * be counter-translated on every horizontal scroll and trailed the text. An outdated
22280
+ * block washes nothing: the rows under its numbers are no longer the code the comment
22281
+ * was written about, so a band there would claim them as annotated (GitHub drops the
22282
+ * position of an outdated thread the same way). It says it is outdated and shows the
22283
+ * code it was about instead.
22048
22284
  */
22049
22285
  const discussedRows = (0, react.useMemo)(() => {
22050
22286
  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);
22287
+ for (const discussion of laidDiscussions) {
22288
+ if (discussion.lost === true) continue;
22289
+ for (let row = Math.max(0, discussion.anchor.start); row <= Math.min(discussion.anchor.end, rowCount - 1); row++) set.add(row);
22290
+ }
22052
22291
  return set;
22053
22292
  }, [laidDiscussions, rowCount]);
22054
22293
  const rowHeights = (0, react.useMemo)(() => {
@@ -22101,6 +22340,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22101
22340
  body.scrollTop += shift;
22102
22341
  setScrollTop(body.scrollTop);
22103
22342
  }, [discussions]);
22343
+ (0, react.useEffect)(() => {
22344
+ rememberDiscussions(file.sessionId, discussionsByFile);
22345
+ }, [file.sessionId, discussionsByFile]);
22104
22346
  /** Patch one discussion in place, without touching the others or the file key. */
22105
22347
  const updateDiscussion = (0, react.useCallback)((id, patch) => {
22106
22348
  setDiscussionsByFile((all) => {
@@ -22114,6 +22356,21 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22114
22356
  };
22115
22357
  });
22116
22358
  }, [file.id]);
22359
+ (0, react.useEffect)(() => {
22360
+ if (pendingAskRef.current !== void 0) return;
22361
+ const waiting = discussions.filter((entry) => entry.asking === true).at(-1);
22362
+ if (waiting === void 0) return;
22363
+ const baseline = waiting.baseline;
22364
+ if (baseline === void 0) return;
22365
+ const question = [...waiting.messages].reverse().find((message) => message.role === "user");
22366
+ if (question === void 0) return;
22367
+ const marker = `${t("discussion.marker")} (${discussionLineRange(waiting.anchor)})`;
22368
+ pendingAskRef.current = {
22369
+ id: waiting.id,
22370
+ baseline,
22371
+ needle: `${marker}\n${question.text.split("\n")[0] ?? ""}`
22372
+ };
22373
+ }, []);
22117
22374
  const watchChatRef = (0, react.useRef)(watchChat);
22118
22375
  watchChatRef.current = watchChat;
22119
22376
  (0, react.useEffect)(() => {
@@ -22204,7 +22461,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22204
22461
  if (!ours) {
22205
22462
  updateDiscussion(pending.id, {
22206
22463
  asking: true,
22207
- queued: true,
22464
+ queued: held !== false,
22208
22465
  failed: false,
22209
22466
  reply: ""
22210
22467
  });
@@ -22212,7 +22469,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22212
22469
  }
22213
22470
  clearRelease();
22214
22471
  const streaming = chat.partial !== "" ? chat.partial : settled;
22215
- if (streaming !== "") updateDiscussion(pending.id, {
22472
+ updateDiscussion(pending.id, {
22216
22473
  asking: true,
22217
22474
  queued: false,
22218
22475
  failed: false,
@@ -22267,9 +22524,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22267
22524
  ]);
22268
22525
  /**
22269
22526
  * 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.
22527
+ * rewrites them). The anchor's new-file lines are what survive, and the block's quote
22528
+ * is what says whether they still hold the code it was written about: when they do
22529
+ * not, the thread follows the quote instead, and when even that finds nothing it is
22530
+ * marked outdated — it stays where the user last saw it, says so, and keeps the quote.
22273
22531
  */
22274
22532
  (0, react.useEffect)(() => {
22275
22533
  setDiscussionsByFile((all) => {
@@ -22277,7 +22535,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22277
22535
  const next = list.map((discussion) => remapDiscussion(discussion, (row) => {
22278
22536
  const entry = model.diff.rows[row];
22279
22537
  return entry?.newLine ?? entry?.oldLine;
22280
- }, model.diff.rows.length));
22538
+ }, (row) => model.diff.rows[row]?.text ?? "", model.diff.rows.length));
22281
22539
  return next.some((discussion, index) => discussion !== list[index]) ? {
22282
22540
  ...all,
22283
22541
  [file.id]: next
@@ -22341,6 +22599,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22341
22599
  const body = bodyRef.current;
22342
22600
  if (body !== null && offsetOf(selection.start) - body.scrollTop < 0) pendingScrollShiftRef.current += 3 * ROW_HEIGHT_PX;
22343
22601
  const id = `discussion-${Date.now().toString(36)}-${discussions.length}`;
22602
+ const quoted = model.diff.rows.slice(selection.start, selection.end + 1);
22603
+ const quote = quoted.map((row) => row.text).join("\n");
22604
+ const quoteLines = quoted.map((row) => ({
22605
+ old: row.oldLine,
22606
+ new: row.newLine
22607
+ }));
22344
22608
  setDiscussions((current) => [...current, {
22345
22609
  id,
22346
22610
  anchor: {
@@ -22349,6 +22613,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22349
22613
  startLine,
22350
22614
  endLine
22351
22615
  },
22616
+ quote,
22617
+ quoteLines,
22352
22618
  messages: [],
22353
22619
  draft: "",
22354
22620
  collapsed: false
@@ -22431,7 +22697,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22431
22697
  queued: false,
22432
22698
  failed: false,
22433
22699
  reply: "",
22434
- collapsed: false
22700
+ collapsed: false,
22701
+ baseline: chat.nodes.length
22435
22702
  } : entry));
22436
22703
  };
22437
22704
  /** Discard one block, keeping the code the user is reading in place. */
@@ -22814,6 +23081,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22814
23081
  }) : void 0;
22815
23082
  const selectionCommentOffered = commentMode && frameForSelection?.comment === true;
22816
23083
  const selectionFrameVisible = frameForSelection !== void 0 && (frameForSelection.keepRevert || selectionCommentOffered);
23084
+ const commentChord = chordLabel$1("addComment");
22817
23085
  (0, react.useEffect)(() => {
22818
23086
  if (!selectionCommentOffered) return;
22819
23087
  const onKeyDown = (event) => {
@@ -23521,13 +23789,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23521
23789
  },
23522
23790
  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
23791
  }),
23524
- (0, react_jsx_runtime.jsx)("span", {
23792
+ (0, react_jsx_runtime.jsxs)("span", {
23525
23793
  className: PendingPanel_module_css_default.discussionRangeWrap,
23526
- children: (0, react_jsx_runtime.jsx)("span", {
23794
+ children: [(0, react_jsx_runtime.jsx)("span", {
23527
23795
  className: PendingPanel_module_css_default.discussionRange,
23528
23796
  "data-diff-discussion-range": true,
23529
23797
  children: discussionLineRange(discussion.anchor)
23530
- })
23798
+ }), discussion.lost === true && (0, react_jsx_runtime.jsx)("span", {
23799
+ className: PendingPanel_module_css_default.discussionOutdated,
23800
+ "data-diff-discussion-outdated": true,
23801
+ children: t("discussion.outdated")
23802
+ })]
23531
23803
  }),
23532
23804
  (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
23533
23805
  (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
@@ -23558,11 +23830,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23558
23830
  }), !discussion.collapsed && (0, react_jsx_runtime.jsxs)("div", {
23559
23831
  className: PendingPanel_module_css_default.discussionBody,
23560
23832
  children: [
23561
- discussion.lost === true && (0, react_jsx_runtime.jsx)("p", {
23833
+ 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
23834
  className: PendingPanel_module_css_default.discussionNote,
23563
- "data-diff-discussion-lost": true,
23564
- children: t("discussion.lost")
23565
- }),
23835
+ "data-diff-discussion-quote-label": true,
23836
+ children: t("discussion.quote")
23837
+ }), (0, react_jsx_runtime.jsx)(DiscussionQuote, {
23838
+ quote: discussion.quote,
23839
+ lines: discussion.quoteLines,
23840
+ lang,
23841
+ wrap: langWrap
23842
+ })] }),
23566
23843
  discussion.hidden !== void 0 && discussion.hidden > 0 && (0, react_jsx_runtime.jsx)("p", {
23567
23844
  className: PendingPanel_module_css_default.discussionNote,
23568
23845
  "data-diff-discussion-hidden": true,
@@ -23586,25 +23863,35 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23586
23863
  className: PendingPanel_module_css_default.discussionAnswer,
23587
23864
  "data-diff-discussion-reply": true,
23588
23865
  children: discussion.reply
23589
- }) : discussion.lost === true ? null : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
23866
+ }) : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
23590
23867
  className: PendingPanel_module_css_default.discussionNote,
23591
23868
  "data-diff-discussion-failed": true,
23592
23869
  children: t("discussion.failed")
23593
- }) : discussion.asking === true ? (0, react_jsx_runtime.jsx)("p", {
23870
+ }) : discussion.asking === true ? (0, react_jsx_runtime.jsxs)("p", {
23594
23871
  className: PendingPanel_module_css_default.discussionNote,
23595
23872
  "data-diff-discussion-asking": true,
23596
- children: discussion.queued === true ? t("discussion.queued") : t("discussion.thinking")
23873
+ children: [discussion.queued === true ? t("discussion.queued") : t("discussion.thinking"), (0, react_jsx_runtime.jsxs)("span", {
23874
+ className: PendingPanel_module_css_default.discussionDots,
23875
+ "data-diff-discussion-dots": true,
23876
+ "aria-hidden": "true",
23877
+ children: [
23878
+ (0, react_jsx_runtime.jsx)("span", { children: "." }),
23879
+ (0, react_jsx_runtime.jsx)("span", { children: "." }),
23880
+ (0, react_jsx_runtime.jsx)("span", { children: "." })
23881
+ ]
23882
+ })]
23597
23883
  }) : (0, react_jsx_runtime.jsxs)("div", {
23598
23884
  className: PendingPanel_module_css_default.discussionCompose,
23599
23885
  children: [(0, react_jsx_runtime.jsx)("input", {
23600
23886
  className: PendingPanel_module_css_default.discussionInput,
23601
23887
  "data-diff-discussion-input": true,
23888
+ disabled: discussion.lost === true,
23602
23889
  ref: (element) => {
23603
23890
  if (element === null) discussionInputEls.current.delete(discussion.id);
23604
23891
  else discussionInputEls.current.set(discussion.id, element);
23605
23892
  },
23606
23893
  value: discussion.draft,
23607
- placeholder: t("discussion.placeholder"),
23894
+ placeholder: t(discussion.lost === true ? "discussion.placeholderOutdated" : "discussion.placeholder"),
23608
23895
  onChange: (event) => {
23609
23896
  const value = event.target.value;
23610
23897
  setDiscussions((current) => current.map((entry) => entry.id === discussion.id ? {
@@ -23622,6 +23909,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23622
23909
  type: "button",
23623
23910
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.discussionSend}`,
23624
23911
  "data-diff-discussion-send": true,
23912
+ disabled: discussion.lost === true,
23625
23913
  onClick: () => {
23626
23914
  sendDiscussion(discussion.id);
23627
23915
  },
@@ -23678,17 +23966,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23678
23966
  "data-diff-selection-divider": true,
23679
23967
  "aria-hidden": "true"
23680
23968
  }),
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
- })
23969
+ selectionCommentOffered && (0, react_jsx_runtime.jsxs)("button", {
23970
+ type: "button",
23971
+ className: PendingPanel_module_css_default.action,
23972
+ "data-diff-selection-comment": true,
23973
+ onClick: addDiscussion,
23974
+ children: [t("action.comment"), commentChord !== "" && (0, react_jsx_runtime.jsx)("span", {
23975
+ className: PendingPanel_module_css_default.actionChord,
23976
+ "data-diff-selection-comment-chord": true,
23977
+ children: commentChord
23978
+ })]
23692
23979
  })
23693
23980
  ]
23694
23981
  }) : hoveredBlock !== void 0 && model.blocks[hoveredBlock] !== void 0 ? (0, react_jsx_runtime.jsxs)("div", {
@@ -24101,16 +24388,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24101
24388
  const toggleForceFloat = () => {
24102
24389
  startListOpenRef.current = false;
24103
24390
  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();
24391
+ setForceFloat(next);
24392
+ setFileListFloat(next);
24393
+ if (next) setFloatOpen(true);
24114
24394
  };
24115
24395
  (0, react.useEffect)(() => {
24116
24396
  const onResize = () => {
@@ -24203,6 +24483,29 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24203
24483
  panelWidth,
24204
24484
  selected
24205
24485
  ]);
24486
+ const applyListInset = (0, react.useCallback)((scroller) => {
24487
+ if (scroller === null) return;
24488
+ const bar = Math.max(0, scroller.offsetWidth - scroller.clientWidth);
24489
+ scroller.style.paddingRight = `${Math.max(0, LIST_RIGHT_INSET_PX - bar)}px`;
24490
+ }, []);
24491
+ /** The scroller, for the re-measure below; the inset itself is applied on attach. */
24492
+ const listScrollRef = (0, react.useRef)(null);
24493
+ const attachListScroll = (0, react.useCallback)((scroller) => {
24494
+ listScrollRef.current = scroller;
24495
+ applyListInset(scroller);
24496
+ }, [applyListInset]);
24497
+ (0, react.useLayoutEffect)(() => {
24498
+ applyListInset(listScrollRef.current);
24499
+ }, [
24500
+ applyListInset,
24501
+ open,
24502
+ docked,
24503
+ floatMode,
24504
+ floatOpen,
24505
+ listWidth,
24506
+ panelWidth,
24507
+ snapshot.files.length
24508
+ ]);
24206
24509
  (0, react.useEffect)(() => {
24207
24510
  if (!open || !snapshot.redoCleared) return;
24208
24511
  onAckRedoCleared();
@@ -24648,6 +24951,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24648
24951
  (0, react_jsx_runtime.jsx)("div", {
24649
24952
  className: PendingPanel_module_css_default.listScroll,
24650
24953
  "data-diff-list-scroll": true,
24954
+ ref: attachListScroll,
24651
24955
  children: files.length > 0 && (0, react_jsx_runtime.jsx)("ul", {
24652
24956
  className: PendingPanel_module_css_default.rows,
24653
24957
  children: files.map(renderEntry)
@@ -24800,6 +25104,19 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24800
25104
  closeDock,
24801
25105
  collapseSidebar
24802
25106
  ]);
25107
+ (0, react.useEffect)(() => {
25108
+ const onMouseUp = (event) => {
25109
+ const target = event.target;
25110
+ const panel = panelRef.current;
25111
+ if (panel === null || !(target instanceof Node) || !panel.contains(target)) return;
25112
+ if (target instanceof Element && target.closest("input, textarea, [contenteditable]") !== null) return;
25113
+ event.preventDefault();
25114
+ };
25115
+ window.addEventListener("mouseup", onMouseUp, true);
25116
+ return () => {
25117
+ window.removeEventListener("mouseup", onMouseUp, true);
25118
+ };
25119
+ }, []);
24803
25120
  (0, react.useEffect)(() => {
24804
25121
  if (!open || docked) return;
24805
25122
  const onKeyDown = (event) => {
@@ -25848,7 +26165,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25848
26165
  const [delColor, setDelColorState] = (0, react.useState)(() => diffDelColor() ?? currentDiffDelColor());
25849
26166
  const addDefault = currentDiffAddColor();
25850
26167
  const delDefault = currentDiffDelColor();
25851
- const [diffOpen, setDiffOpen] = (0, react.useState)(true);
26168
+ const [diffOpen, setDiffOpen] = (0, react.useState)(false);
25852
26169
  const [cover, setCoverState] = (0, react.useState)(panelCover);
25853
26170
  const [coverOpen, setCoverOpen] = (0, react.useState)(false);
25854
26171
  (0, react.useEffect)(() => {
@@ -27241,17 +27558,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27241
27558
  "action.discussionExpand": "展开",
27242
27559
  "action.discussionCollapse": "收起",
27243
27560
  "discussion.placeholder": "写下你的评论…",
27561
+ "discussion.placeholderOutdated": "代码已过期,无法继续评论",
27244
27562
  "discussion.marker": "[评论]",
27245
27563
  "discussion.promptRule": "(回答只针对这几行,不超过 3 行;行与行之间不要留空行;用纯文本,不要 Markdown 装饰;要求详细时不受长度限制。细则见 dsh-diff-approval-comment skill。)",
27246
27564
  "discussion.promptRuleSkill": "(这是一条代码批注:先加载 {skill} skill,按它的规则回答。)",
27247
- "discussion.thinking": "思考中…",
27248
- "discussion.queued": "排队等待中…",
27249
- "discussion.lost": "这段代码已经改动,批注的锚点找不到了(不能再评论,可删除)。",
27565
+ "discussion.thinking": "思考中",
27566
+ "discussion.queued": "排队等待中",
27567
+ "discussion.outdated": "(已过期)",
27568
+ "discussion.quote": "评论代码:",
27250
27569
  "discussion.hidden": "更早的 {count} 条已省略",
27251
27570
  "discussion.failed": "这次提问失败了,可以再试一次。",
27252
27571
  "discussion.stopped": "这次回答被停掉了,可以再问一次。",
27253
27572
  "action.revert": "回退",
27254
27573
  "action.delete": "删除",
27574
+ "action.discussionEnd": "结束评论",
27255
27575
  "action.keepAll": "全部保留",
27256
27576
  "action.revertAll": "全部回退",
27257
27577
  "action.openFile": "打开文件",
@@ -27323,7 +27643,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27323
27643
  "panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移除?",
27324
27644
  "panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移除?",
27325
27645
  "panel.confirmFileRemove": "处理整文件后询问是否移出列表",
27326
- "panel.confirmFileRemoveDesc": "对单个文件执行整文件 Keep/Revert 后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响批量 Keep All / Revert All)。",
27646
+ "panel.confirmFileRemoveDesc": "对单个文件执行整文件保留 / 回退后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响全部保留 / 全部回退)。",
27327
27647
  "action.refreshVcs": "刷新差异",
27328
27648
  "action.matchCase": "区分大小写",
27329
27649
  "action.matchWholeWord": "全字匹配",
@@ -27442,17 +27762,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27442
27762
  "action.discussionExpand": "Expand",
27443
27763
  "action.discussionCollapse": "Collapse",
27444
27764
  "discussion.placeholder": "Write your comment…",
27765
+ "discussion.placeholderOutdated": "This code is outdated; commenting is off",
27445
27766
  "discussion.marker": "[Review]",
27446
27767
  "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
27768
  "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).",
27769
+ "discussion.thinking": "Thinking",
27770
+ "discussion.queued": "Queued",
27771
+ "discussion.outdated": " (Outdated)",
27772
+ "discussion.quote": "Commented code:",
27451
27773
  "discussion.hidden": "{count} earlier turns omitted",
27452
27774
  "discussion.failed": "That question failed; you can try again.",
27453
27775
  "discussion.stopped": "That answer was stopped; you can ask again.",
27454
27776
  "action.revert": "Revert",
27455
27777
  "action.delete": "Delete",
27778
+ "action.discussionEnd": "End comment",
27456
27779
  "action.keepAll": "Keep all",
27457
27780
  "action.revertAll": "Revert all",
27458
27781
  "action.openFile": "Open file",