@lemoncat7/dsh-ssh 1.1.2 → 1.1.6

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
@@ -6733,7 +6733,7 @@ var xterm_default = `/**
6733
6733
  `;
6734
6734
 
6735
6735
  // src/client.css
6736
- var client_default = '.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n.dsh-ssh-sidebar,\n.dsh-ssh-workspace,\n.dsh-ssh-activity-panel,\n.dsh-ssh-dialog-layer {\n --ssh-font-sans: "SF Pro Text", "SF Pro Display", -apple-system,\n BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;\n --ssh-font-mono: "SFMono-Regular", "Cascadia Code", "Roboto Mono",\n "Noto Sans Mono CJK SC", monospace;\n --ssh-canvas: var(--dsw-alias-bg-base, #f4f6f5);\n --ssh-panel: var(--dsw-alias-bg-layer-2, #fbfcfb);\n --ssh-text: var(--dsw-alias-label-primary, #17201e);\n --ssh-text-muted: var(--dsw-alias-label-secondary, #55615e);\n --ssh-text-subtle: var(--dsw-alias-label-tertiary, #7b8582);\n --ssh-host-border: var(--dsw-alias-border-l2, rgba(28, 43, 39, 0.14));\n --ssh-hover: color-mix(in srgb, var(--ssh-text) 6%, transparent);\n --ssh-control: color-mix(in srgb, var(--ssh-panel) 96%, var(--ssh-text) 4%);\n --ssh-accent: #58746f;\n --ssh-accent-strong: #405f5a;\n --ssh-danger: #9c504c;\n --ssh-warning: #927443;\n --ssh-surface: var(--ssh-canvas);\n --ssh-surface-raised: var(--ssh-panel);\n --ssh-activity-surface: var(--ssh-surface);\n --ssh-activity-surface-raised: var(--ssh-surface-raised);\n --ssh-border: color-mix(in srgb, var(--ssh-text) 11%, transparent);\n --ssh-focus-ring: color-mix(in srgb, var(--ssh-accent) 64%, transparent);\n --ssh-scrollbar-thumb: color-mix(in srgb, var(--ssh-text-muted) 44%, transparent);\n --ssh-scrollbar-hover: color-mix(in srgb, var(--ssh-text-muted) 68%, transparent);\n color: var(--ssh-text);\n font-family: var(--ssh-font-sans);\n font-size: 13px;\n line-height: 1.45;\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.dsh-ssh-sidebar {\n box-sizing: border-box;\n flex: none;\n margin: 0 8px 8px 2px;\n padding: 4px 0 6px;\n border-bottom: 1px solid\n color-mix(in srgb, var(--ssh-host-border) 62%, transparent);\n color: var(--ssh-text);\n}\n.dsh-ssh-sidebar.is-rail {\n width: 36px;\n margin: 0 0 8px;\n padding: 0;\n border: 0;\n}\n.dsh-ssh-sidebar-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 32px;\n padding: 0 4px 0 5px;\n}\n.dsh-ssh-sidebar-title {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 5px;\n height: 28px;\n padding: 0 5px;\n color: var(--ssh-text-muted);\n border: 0;\n background: transparent;\n border-radius: 7px;\n font: 600 12px/1 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-sidebar-title:hover,\n.dsh-ssh-icon-button:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-disclosure {\n display: grid;\n place-items: center;\n transition: transform 0.16s ease;\n}\n.dsh-ssh-disclosure[data-open="false"] {\n transform: rotate(-90deg);\n}\n.dsh-ssh-icon-button {\n display: inline-grid;\n place-items: center;\n flex: none;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 0;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n cursor: pointer;\n}\n.dsh-ssh-icon-button.is-danger {\n color: #a65d58;\n}\n.dsh-ssh-sidebar-list {\n display: grid;\n gap: 2px;\n padding: 2px 1px 0;\n}\n.dsh-ssh-sidebar-row,\n.dsh-ssh-sidebar-empty,\n.dsh-ssh-sidebar-more {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid transparent;\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.dsh-ssh-sidebar-row {\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) 18px;\n align-items: center;\n gap: 7px;\n min-height: 40px;\n padding: 4px 7px;\n border-radius: 10px;\n text-align: left;\n}\n.dsh-ssh-sidebar-row:hover {\n background: color-mix(\n in srgb,\n var(--ssh-hover) 70%,\n transparent\n );\n}\n.dsh-ssh-sidebar-row.is-active {\n background: color-mix(\n in srgb,\n var(--ssh-hover) 92%,\n transparent\n );\n border-color: color-mix(in srgb, var(--ssh-host-border) 50%, transparent);\n}\n.dsh-ssh-status-dot {\n display: block;\n width: 7px;\n height: 7px;\n margin: auto;\n border: 1px solid\n color-mix(in srgb, var(--ssh-text-muted) 62%, transparent);\n border-radius: 50%;\n}\n.dsh-ssh-status-dot.is-injected {\n border-color: #5b8f82;\n background: #5b8f82;\n box-shadow: 0 0 0 2px color-mix(in srgb, #5b8f82 14%, transparent);\n}\n.dsh-ssh-sidebar-copy {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-sidebar-copy strong,\n.dsh-ssh-sidebar-copy small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sidebar-copy strong {\n font-size: 13px;\n font-weight: 500;\n}\n.dsh-ssh-sidebar-copy small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-injected-mark {\n display: grid;\n place-items: center;\n color: #5b8f82;\n}\n.dsh-ssh-sidebar-empty,\n.dsh-ssh-sidebar-more {\n min-height: 34px;\n padding: 6px 10px;\n border-radius: 8px;\n color: var(--ssh-text-subtle);\n font-size: 12px;\n text-align: left;\n}\n.dsh-ssh-sidebar-empty:hover,\n.dsh-ssh-sidebar-more:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-rail-button {\n display: grid;\n place-items: center;\n width: 36px;\n height: 36px;\n padding: 0;\n border: 0;\n border-radius: 10px;\n color: var(--ssh-text);\n background: transparent;\n cursor: pointer;\n}\n.dsh-ssh-rail-button:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-server-glyph {\n display: inline-grid;\n place-items: center;\n color: currentColor;\n}\n.dsh-ssh-workspace,\n.dsh-ssh-activity-panel {\n --dpu-navigation-width: 248px;\n --dpu-inspector-width: 292px;\n --dpu-border: var(--ssh-border);\n --dpu-accent: var(--ssh-accent);\n --dpu-accent-strong: var(--ssh-accent-strong);\n --dpu-raised-surface: var(--ssh-surface-raised);\n --dpu-toolbar-surface: color-mix(in srgb, var(--ssh-surface-raised) 88%, transparent);\n}\n.dsh-ssh-workspace *,\n.dsh-ssh-workspace *::before,\n.dsh-ssh-workspace *::after,\n.dsh-ssh-activity-panel *,\n.dsh-ssh-activity-panel *::before,\n.dsh-ssh-activity-panel *::after,\n.dsh-ssh-dialog-layer *,\n.dsh-ssh-dialog-layer *::before,\n.dsh-ssh-dialog-layer *::after,\n.dsh-ssh-sidebar *,\n.dsh-ssh-sidebar *::before,\n.dsh-ssh-sidebar *::after {\n box-sizing: border-box;\n}\n.dsh-ssh-workspace :where(button, input, select, textarea),\n.dsh-ssh-activity-panel :where(button, input, select, textarea),\n.dsh-ssh-dialog :where(button, input, select, textarea),\n.dsh-ssh-sidebar :where(button, input, select, textarea) {\n margin: 0;\n font-family: var(--ssh-font-sans);\n font-size: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n}\n.dsh-ssh-workspace :where(button, input, select, textarea),\n.dsh-ssh-activity-panel :where(button, input, select, textarea),\n.dsh-ssh-dialog :where(button, input, select, textarea),\n.dsh-ssh-sidebar :where(button, input, select, textarea),\n.dsh-ssh-activity-trigger {\n -webkit-appearance: none;\n appearance: none;\n}\n.dsh-ssh-workspace :where(button, input, select, textarea):disabled,\n.dsh-ssh-activity-panel :where(button, input, select, textarea):disabled,\n.dsh-ssh-dialog :where(button, input, select, textarea):disabled,\n.dsh-ssh-sidebar :where(button, input, select, textarea):disabled {\n cursor: not-allowed;\n}\n.dsh-ssh-workspace :where(input, select, textarea)::placeholder,\n.dsh-ssh-activity-panel :where(input, select, textarea)::placeholder,\n.dsh-ssh-dialog :where(input, select, textarea)::placeholder {\n color: color-mix(in srgb, var(--ssh-text-subtle) 78%, transparent);\n opacity: 1;\n}\n.dsh-ssh-workspace :where(input, textarea):-webkit-autofill,\n.dsh-ssh-dialog :where(input, textarea):-webkit-autofill {\n border-color: var(--ssh-border);\n -webkit-text-fill-color: var(--ssh-text);\n box-shadow: 0 0 0 1000px var(--ssh-control) inset;\n caret-color: var(--ssh-text);\n}\n.dsh-ssh-workspace input[type="number"]::-webkit-inner-spin-button,\n.dsh-ssh-workspace input[type="number"]::-webkit-outer-spin-button,\n.dsh-ssh-dialog input[type="number"]::-webkit-inner-spin-button,\n.dsh-ssh-dialog input[type="number"]::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.dsh-ssh-workspace input[type="number"],\n.dsh-ssh-dialog input[type="number"] {\n -moz-appearance: textfield;\n}\n.dsh-ssh-workspace input[type="checkbox"],\n.dsh-ssh-dialog input[type="checkbox"] {\n position: relative;\n width: 34px;\n height: 20px;\n flex: none;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: var(--ssh-control);\n cursor: pointer;\n transition: background 160ms ease, border-color 160ms ease;\n}\n.dsh-ssh-workspace input[type="checkbox"]::after,\n.dsh-ssh-dialog input[type="checkbox"]::after {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background: var(--ssh-text-subtle);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--ssh-text) 18%, transparent);\n transition: transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1), background 160ms ease;\n content: "";\n}\n.dsh-ssh-workspace input[type="checkbox"]:checked,\n.dsh-ssh-dialog input[type="checkbox"]:checked {\n border-color: var(--ssh-accent-strong);\n background: var(--ssh-accent-strong);\n}\n.dsh-ssh-workspace input[type="checkbox"]:checked::after,\n.dsh-ssh-dialog input[type="checkbox"]:checked::after {\n background: #f7fbfa;\n transform: translateX(14px);\n}\n.dsh-ssh-workspace :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-activity-panel :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-dialog :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-sidebar :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-activity-trigger:focus-visible {\n outline: 2px solid var(--ssh-focus-ring, rgba(84, 125, 120, 0.62));\n outline-offset: 2px;\n}\n.dsh-ssh-scroll-surface {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n scrollbar-gutter: stable;\n}\n.dsh-ssh-scroll-surface:hover {\n scrollbar-color: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34)) transparent;\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar-track {\n background: transparent;\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar-thumb {\n border-radius: 999px;\n background: transparent;\n}\n.dsh-ssh-scroll-surface:hover::-webkit-scrollbar-thumb {\n background: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34));\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar-thumb:hover {\n background: var(--ssh-scrollbar-hover, rgba(112, 122, 119, 0.54));\n}\n.dsh-ssh-workspace {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n color: var(--ssh-text);\n background: var(--ssh-surface);\n font-family: var(--ssh-font-sans);\n}\n.dsh-ssh-toolbar {\n display: grid;\n grid-template-columns: minmax(180px, 1fr) auto minmax(180px, 1fr);\n align-items: center;\n gap: 16px;\n min-height: 62px;\n padding: 0 20px;\n border-bottom: 1px solid var(--ssh-border);\n background: color-mix(in srgb, var(--dpu-toolbar-surface) 96%, transparent);\n box-shadow: 0 1px 0 color-mix(in srgb, #fff 42%, transparent);\n}\n.dsh-ssh-brand {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.dsh-ssh-brand-glyph {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 22%, transparent);\n border-radius: 10px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 6%, transparent);\n}\n.dsh-ssh-brand > span:last-child {\n display: grid;\n gap: 1px;\n}\n.dsh-ssh-brand strong {\n font-size: 14px;\n font-weight: 650;\n}\n.dsh-ssh-brand small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-segments {\n display: flex;\n gap: 2px;\n padding: 3px;\n border: 1px solid color-mix(in srgb, var(--ssh-border) 80%, transparent);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-text) 3.5%, transparent);\n}\n.dsh-ssh-segments button {\n min-width: 74px;\n height: 28px;\n padding: 0 12px;\n border: 0;\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: transparent;\n font-size: 12px;\n cursor: pointer;\n}\n.dsh-ssh-segments button:hover {\n color: var(--ssh-text);\n}\n.dsh-ssh-segments button.is-active {\n color: var(--ssh-text);\n background: var(--ssh-surface-raised);\n box-shadow:\n 0 1px 2px color-mix(in srgb, var(--ssh-text) 8%, transparent),\n inset 0 0 0 1px color-mix(in srgb, #fff 32%, transparent);\n}\n.dsh-ssh-toolbar > .dsh-ssh-primary-button {\n justify-self: end;\n}\n.dsh-ssh-primary-button,\n.dsh-ssh-secondary-button,\n.dsh-ssh-danger-button,\n.dsh-ssh-small-primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 30px;\n padding: 0 12px;\n border-radius: 8px;\n font: 500 12px/1 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-primary-button,\n.dsh-ssh-small-primary {\n border: 1px solid\n color-mix(in srgb, var(--ssh-accent-strong) 64%, transparent);\n color: #f6fbf9;\n background: var(--ssh-accent-strong);\n}\n.dsh-ssh-primary-button:hover,\n.dsh-ssh-small-primary:hover {\n background: color-mix(in srgb, var(--ssh-accent-strong) 88%, #000);\n}\n.dsh-ssh-primary-button:disabled {\n opacity: 0.55;\n cursor: default;\n}\n.dsh-ssh-secondary-button {\n border: 1px solid var(--ssh-border);\n color: var(--ssh-text);\n background: var(--ssh-surface-raised);\n}\n.dsh-ssh-secondary-button:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-danger-button {\n border: 1px solid color-mix(in srgb, var(--ssh-danger) 28%, transparent);\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n}\n.dsh-ssh-small-primary {\n min-height: 26px;\n padding: 0 10px;\n}\n.dsh-ssh-profile-panel,\n.dsh-ssh-inspector {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n background: color-mix(in srgb, var(--ssh-surface-raised) 98%, var(--ssh-surface));\n}\n.dsh-ssh-profile-panel {\n border-right: 1px solid var(--ssh-border);\n}\n.dsh-ssh-inspector {\n border-left: 1px solid var(--ssh-border);\n}\n.dsh-ssh-main-panel {\n min-width: 0;\n min-height: 0;\n overflow: auto;\n background: color-mix(in srgb, var(--ssh-surface) 98%, var(--ssh-surface-raised));\n}\n.dsh-ssh-panel-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 60px;\n padding: 0 14px;\n border-bottom: 1px solid\n color-mix(in srgb, var(--ssh-border) 74%, transparent);\n}\n.dsh-ssh-panel-heading > span {\n display: grid;\n gap: 2px;\n}\n.dsh-ssh-panel-heading strong {\n font-size: 13px;\n font-weight: 650;\n}\n.dsh-ssh-panel-heading small {\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-search {\n padding: 10px 10px 6px;\n}\n.dsh-ssh-search input,\n.dsh-ssh-field input,\n.dsh-ssh-field select,\n.dsh-ssh-field textarea,\n.dsh-ssh-number-row input {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n outline: 0;\n color: var(--ssh-text);\n background: color-mix(in srgb, var(--ssh-surface-raised) 92%, transparent);\n font: 400 12px/1.35 var(--ssh-font-sans);\n}\n.dsh-ssh-search input {\n height: 30px;\n padding: 0 10px;\n}\n.dsh-ssh-search input:focus,\n.dsh-ssh-field input:focus,\n.dsh-ssh-field select:focus,\n.dsh-ssh-field textarea:focus,\n.dsh-ssh-number-row input:focus {\n border-color: color-mix(in srgb, var(--ssh-accent) 65%, transparent);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ssh-accent) 12%, transparent);\n}\n.dsh-ssh-profile-list {\n display: grid;\n align-content: start;\n gap: 3px;\n min-height: 0;\n overflow: auto;\n padding: 4px 7px 12px;\n}\n.dsh-ssh-profile-group {\n min-width: 0;\n}\n.dsh-ssh-profile-group-heading {\n display: grid;\n grid-template-columns: 14px 18px minmax(0, 1fr);\n align-items: center;\n gap: 5px;\n width: 100%;\n min-height: 34px;\n padding: 0 6px;\n border: 0;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n text-align: left;\n cursor: pointer;\n}\n.dsh-ssh-profile-group-heading:hover {\n color: var(--ssh-text);\n background: color-mix(\n in srgb,\n var(--ssh-hover) 58%,\n transparent\n );\n}\n.dsh-ssh-profile-group-chevron {\n display: grid;\n place-items: center;\n transition: transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n.dsh-ssh-profile-group-chevron[data-open="false"] {\n transform: rotate(-90deg);\n}\n.dsh-ssh-profile-group-folder {\n display: grid;\n place-items: center;\n color: color-mix(\n in srgb,\n var(--ssh-accent-strong) 72%,\n var(--ssh-text-muted)\n );\n}\n.dsh-ssh-profile-group-copy {\n display: flex;\n min-width: 0;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n.dsh-ssh-profile-group-copy strong {\n overflow: hidden;\n font-size: 11px;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-profile-group-copy small {\n display: grid;\n place-items: center;\n min-width: 16px;\n height: 16px;\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-profile-group-children {\n display: grid;\n gap: 1px;\n margin-left: 13px;\n padding-left: 6px;\n border-left: 1px solid color-mix(in srgb, var(--ssh-border) 66%, transparent);\n animation: dsh-ssh-group-open 140ms ease-out both;\n}\n.dsh-ssh-profile-empty {\n margin: 18px 8px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n text-align: center;\n}\n.dsh-ssh-profile-row {\n position: relative;\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 10px;\n align-items: center;\n gap: 10px;\n width: 100%;\n min-height: 48px;\n padding: 5px 7px;\n border: 1px solid transparent;\n border-radius: 10px;\n color: inherit;\n background: transparent;\n text-align: left;\n cursor: pointer;\n transition:\n background 140ms ease,\n border-color 140ms ease,\n transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n.dsh-ssh-profile-row::before {\n position: absolute;\n width: 2px;\n left: 0;\n top: 11px;\n bottom: 11px;\n border-radius: 2px;\n background: var(--ssh-accent);\n opacity: 0;\n transform: scaleY(0.45);\n transition:\n opacity 140ms ease,\n transform 170ms cubic-bezier(0.2, 0.8, 0.2, 1);\n content: "";\n}\n.dsh-ssh-profile-row:hover {\n background: color-mix(\n in srgb,\n var(--ssh-hover) 74%,\n transparent\n );\n}\n.dsh-ssh-profile-row.is-active {\n border-color: color-mix(in srgb, var(--ssh-accent) 16%, transparent);\n background: color-mix(in srgb, var(--ssh-accent) 7%, transparent);\n transform: translateX(2px);\n}\n.dsh-ssh-profile-row.is-active::before {\n opacity: 0.8;\n transform: scaleY(1);\n}\n.dsh-ssh-host-monogram {\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: var(--ssh-surface-raised);\n font-size: 11px;\n font-weight: 650;\n}\n.dsh-ssh-profile-row > span:nth-child(2) {\n display: grid;\n min-width: 0;\n gap: 3px;\n}\n.dsh-ssh-profile-row strong,\n.dsh-ssh-profile-row small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-profile-row strong {\n font-size: 12px;\n font-weight: 550;\n}\n.dsh-ssh-profile-row small {\n color: var(--ssh-text-subtle);\n font:\n 10px/1.2 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-credential-state {\n width: 6px;\n height: 6px;\n border: 1px solid var(--ssh-text-subtle);\n border-radius: 50%;\n}\n.dsh-ssh-credential-state.is-ready {\n border-color: #5c8a76;\n background: #5c8a76;\n}\n.dsh-ssh-terminal-pane,\n.dsh-ssh-forward-pane,\n.dsh-ssh-settings-pane {\n box-sizing: border-box;\n display: flex;\n min-width: 0;\n min-height: 100%;\n flex-direction: column;\n padding: 0 18px 18px;\n}\n.dsh-ssh-content-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 20px;\n min-height: 76px;\n}\n.dsh-ssh-content-heading h1 {\n margin: 0;\n font-size: 16px;\n font-weight: 650;\n letter-spacing: -0.01em;\n}\n.dsh-ssh-content-heading p {\n margin: 4px 0 0;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-heading-actions {\n display: flex;\n align-items: center;\n gap: 7px;\n}\n.dsh-ssh-title-line {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.dsh-ssh-live-dot {\n width: 7px;\n height: 7px;\n border: 1px solid var(--ssh-text-subtle);\n border-radius: 50%;\n}\n.dsh-ssh-live-dot.is-connected {\n border-color: #4d8d77;\n background: #4d8d77;\n box-shadow: 0 0 0 3px color-mix(in srgb, #4d8d77 12%, transparent);\n}\n.dsh-ssh-live-dot.is-connecting {\n border-color: #a27e45;\n background: #a27e45;\n}\n.dsh-ssh-live-dot.is-error {\n border-color: #a85a55;\n background: #a85a55;\n}\n.dsh-ssh-terminal-frame {\n display: flex;\n min-height: 360px;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid #283330;\n border-radius: 12px;\n background: #0c1212;\n box-shadow: 0 12px 30px color-mix(in srgb, #0d1513 12%, transparent);\n}\n.dsh-ssh-xterm {\n box-sizing: border-box;\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n padding: 12px 12px 15px;\n}\n.dsh-ssh-terminal-viewport {\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n}\n.dsh-ssh-terminal-viewport .xterm {\n height: 100%;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n scrollbar-gutter: stable;\n}\n.dsh-ssh-terminal-viewport:hover .xterm-viewport {\n scrollbar-color: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34)) transparent;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar {\n width: 5px;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar-track {\n background: transparent;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar-thumb {\n border-radius: 999px;\n background: transparent;\n}\n.dsh-ssh-terminal-viewport:hover .xterm-viewport::-webkit-scrollbar-thumb {\n background: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34));\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar-thumb:hover {\n background: var(--ssh-scrollbar-hover, rgba(112, 122, 119, 0.54));\n}\n.dsh-ssh-terminal-status {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 28px;\n padding: 0 11px;\n border-top: 1px solid #ffffff12;\n color: #879691;\n background: #0d1413;\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-banner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 8px 18px;\n border-bottom: 1px solid transparent;\n font-size: 11px;\n}\n.dsh-ssh-banner > span {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.dsh-ssh-banner code {\n font-family: var(--ssh-font-mono), monospace;\n}\n.dsh-ssh-banner button:not(.dsh-ssh-small-primary) {\n display: grid;\n place-items: center;\n border: 0;\n color: inherit;\n background: transparent;\n}\n.dsh-ssh-banner.is-error {\n border-color: color-mix(in srgb, var(--ssh-danger) 22%, transparent);\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, var(--ssh-surface));\n}\n.dsh-ssh-banner.is-warning {\n border-color: color-mix(in srgb, var(--ssh-warning) 22%, transparent);\n color: color-mix(\n in srgb,\n var(--ssh-warning) 85%,\n var(--ssh-text)\n );\n background: color-mix(in srgb, var(--ssh-warning) 8%, var(--ssh-surface));\n}\n.dsh-ssh-inline-error {\n margin: 0 0 10px;\n padding: 7px 10px;\n border-radius: 7px;\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n font-size: 11px;\n}\n.dsh-ssh-empty-state {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 100%;\n padding: 40px;\n text-align: center;\n}\n.dsh-ssh-empty-state > span {\n display: grid;\n place-items: center;\n width: 48px;\n height: 48px;\n margin-bottom: 14px;\n border: 1px solid var(--ssh-border);\n border-radius: 14px;\n color: var(--ssh-accent);\n background: var(--ssh-surface-raised);\n}\n.dsh-ssh-empty-state h1 {\n margin: 0;\n font-size: 16px;\n}\n.dsh-ssh-empty-state p {\n max-width: 420px;\n margin: 8px 0 18px;\n color: var(--ssh-text-muted);\n font-size: 12px;\n line-height: 1.6;\n}\n.dsh-ssh-inspector {\n overflow: auto;\n}\n.dsh-ssh-session-chip {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 12px 12px 4px;\n padding: 10px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 86%, transparent);\n}\n.dsh-ssh-session-chip > span:nth-child(2) {\n display: grid;\n gap: 2px;\n}\n.dsh-ssh-session-chip strong {\n font-size: 11px;\n}\n.dsh-ssh-session-chip small {\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-session-pulse {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--ssh-accent);\n}\n.dsh-ssh-fieldset {\n display: grid;\n gap: 3px;\n margin: 13px 12px 0;\n padding: 0;\n border: 0;\n}\n.dsh-ssh-fieldset legend {\n margin-bottom: 5px;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n font-weight: 600;\n}\n.dsh-ssh-check-row,\n.dsh-ssh-radio-row {\n display: flex;\n align-items: center;\n gap: 10px;\n min-height: 38px;\n padding: 3px 5px;\n border-radius: 8px;\n}\n.dsh-ssh-check-row:hover,\n.dsh-ssh-radio-row:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-check-row > input,\n.dsh-ssh-radio-row > input {\n position: absolute;\n width: 1px;\n height: 1px;\n opacity: 0;\n pointer-events: none;\n}\n.dsh-ssh-check-row > i,\n.dsh-ssh-radio-row > i {\n position: relative;\n display: grid;\n place-items: center;\n width: 16px;\n height: 16px;\n flex: none;\n border: 1px solid color-mix(in srgb, var(--ssh-text-muted) 54%, transparent);\n background: var(--ssh-control);\n transition: border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;\n}\n.dsh-ssh-check-row > i {\n border-radius: 5px;\n}\n.dsh-ssh-radio-row > i {\n border-radius: 50%;\n}\n.dsh-ssh-check-row > i::after {\n width: 7px;\n height: 4px;\n margin-top: -2px;\n border: solid #f7fbfa;\n border-width: 0 0 2px 2px;\n content: "";\n opacity: 0;\n transform: rotate(-45deg) scale(0.7);\n transition: opacity 120ms ease, transform 120ms ease;\n}\n.dsh-ssh-radio-row > i::after {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #f7fbfa;\n content: "";\n opacity: 0;\n transform: scale(0.55);\n transition: opacity 120ms ease, transform 120ms ease;\n}\n.dsh-ssh-check-row > input:checked + i,\n.dsh-ssh-radio-row > input:checked + i {\n border-color: var(--ssh-accent-strong);\n background: var(--ssh-accent-strong);\n}\n.dsh-ssh-check-row > input:checked + i::after,\n.dsh-ssh-radio-row > input:checked + i::after {\n opacity: 1;\n transform: rotate(-45deg) scale(1);\n}\n.dsh-ssh-radio-row > input:checked + i::after {\n transform: scale(1);\n}\n.dsh-ssh-check-row > input:focus-visible + i,\n.dsh-ssh-radio-row > input:focus-visible + i {\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--ssh-focus-ring) 34%, transparent);\n}\n.dsh-ssh-check-row > span,\n.dsh-ssh-radio-row > span {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-check-row strong,\n.dsh-ssh-radio-row strong {\n font-size: 11px;\n font-weight: 550;\n}\n.dsh-ssh-check-row small,\n.dsh-ssh-radio-row small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-switch-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 20px;\n min-height: 48px;\n margin: 13px 12px 0;\n padding: 7px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n}\n.dsh-ssh-switch-row > span {\n display: grid;\n gap: 3px;\n}\n.dsh-ssh-switch-row strong {\n font-size: 11px;\n font-weight: 550;\n}\n.dsh-ssh-switch-row small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n line-height: 1.35;\n}\n.dsh-ssh-switch-row input {\n width: 34px;\n height: 20px;\n}\n.dsh-ssh-inspector-hint,\n.dsh-ssh-save-state {\n margin: 10px 12px 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-inspector-empty {\n margin: 14px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n line-height: 1.55;\n}\n.dsh-ssh-forward-list {\n display: grid;\n align-content: start;\n gap: 5px;\n}\n.dsh-ssh-forward-row {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr) auto 28px auto 28px;\n align-items: center;\n gap: 8px;\n min-height: 54px;\n padding: 6px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 88%, transparent);\n}\n.dsh-ssh-forward-kind {\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n color: var(--ssh-accent-strong);\n font:\n 600 11px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-forward-copy {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n.dsh-ssh-forward-copy strong {\n font-size: 12px;\n}\n.dsh-ssh-forward-copy small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-state-label {\n padding: 3px 7px;\n border-radius: 999px;\n color: var(--ssh-text-subtle);\n background: color-mix(\n in srgb,\n var(--ssh-text) 5%,\n transparent\n );\n font-size: 10px;\n}\n.dsh-ssh-state-label.is-running {\n color: #497967;\n background: color-mix(in srgb, #5d957f 10%, transparent);\n}\n.dsh-ssh-state-label.is-error {\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 8%, transparent);\n}\n.dsh-ssh-table-empty {\n display: grid;\n place-items: center;\n min-height: 180px;\n border: 1px dashed var(--ssh-border);\n border-radius: 12px;\n color: var(--ssh-text-subtle);\n font-size: 12px;\n}\n.dsh-ssh-settings-group {\n display: grid;\n max-width: 680px;\n gap: 8px;\n}\n.dsh-ssh-settings-group .dsh-ssh-switch-row {\n margin: 0;\n}\n.dsh-ssh-number-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 120px 32px;\n align-items: center;\n gap: 8px;\n min-height: 60px;\n padding: 6px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 80%, transparent);\n}\n.dsh-ssh-number-row > span {\n display: grid;\n gap: 3px;\n}\n.dsh-ssh-number-row strong {\n font-size: 11px;\n}\n.dsh-ssh-number-row small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-number-row input {\n height: 30px;\n padding: 0 8px;\n}\n.dsh-ssh-number-row em {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n font-style: normal;\n}\n.dsh-ssh-dialog-layer {\n position: fixed;\n z-index: 1000;\n inset: 0;\n display: grid;\n place-items: center;\n padding: 28px;\n background: color-mix(in srgb, #111817 28%, transparent);\n backdrop-filter: blur(3px);\n}\n.dsh-ssh-dialog {\n box-sizing: border-box;\n width: min(620px, calc(100vw - 40px));\n max-height: min(760px, calc(100vh - 40px));\n overflow: auto;\n border: 1px solid\n color-mix(in srgb, var(--ssh-text) 15%, transparent);\n border-radius: 14px;\n color: var(--ssh-text);\n background: var(--ssh-surface);\n box-shadow: 0 24px 70px #07100d2e;\n}\n.dsh-ssh-dialog > header {\n position: sticky;\n z-index: 1;\n top: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 64px;\n padding: 0 18px;\n border-bottom: 1px solid\n var(\n --ssh-border,\n color-mix(in srgb, var(--ssh-text) 10%, transparent)\n );\n background: color-mix(\n in srgb,\n var(--ssh-surface) 94%,\n transparent\n );\n backdrop-filter: blur(12px);\n}\n.dsh-ssh-dialog h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 650;\n letter-spacing: -0.01em;\n}\n.dsh-ssh-dialog header p {\n margin: 3px 0 0;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-form {\n --ssh-border: color-mix(\n in srgb,\n var(--ssh-text) 11%,\n transparent\n );\n --ssh-accent: #547d78;\n --ssh-accent-strong: #406e67;\n --ssh-danger: #9c504c;\n display: grid;\n gap: 15px;\n padding: 20px 18px 18px;\n}\n.dsh-ssh-form-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n}\n.dsh-ssh-form-grid.is-host {\n grid-template-columns: minmax(0, 1fr) 110px;\n}\n.dsh-ssh-field {\n display: grid;\n gap: 5px;\n min-width: 0;\n color: var(--ssh-text-muted);\n font-size: 12px;\n font-weight: 600;\n}\n.dsh-ssh-field input,\n.dsh-ssh-field select {\n height: 38px;\n padding: 0 10px;\n font-size: 13px;\n}\n.dsh-ssh-field textarea {\n padding: 10px 10px;\n font-size: 13px;\n line-height: 1.5;\n resize: vertical;\n font-family: var(--ssh-font-mono), monospace;\n}\n.dsh-ssh-field small {\n color: var(--ssh-text-subtle);\n font-size: 11px;\n line-height: 1.4;\n font-weight: 400;\n}\n.dsh-ssh-form-divider {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 2px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n font-weight: 600;\n}\n.dsh-ssh-form-divider:after {\n height: 1px;\n flex: 1;\n background: var(--ssh-border);\n content: "";\n}\n.dsh-ssh-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 5px;\n}\n.dsh-ssh-dialog-actions .dsh-ssh-primary-button,\n.dsh-ssh-dialog-actions .dsh-ssh-secondary-button {\n min-height: 34px;\n font-size: 13px;\n}\n.dsh-ssh-form .dsh-ssh-switch-row {\n margin: 0;\n}\n.dsh-ssh-form .dsh-ssh-inline-error {\n margin: 0;\n}\n@container dpu-workspace (max-width: 1120px) {\n .dsh-ssh-toolbar {\n grid-template-columns: 1fr auto auto;\n }\n .dsh-ssh-brand small {\n display: none;\n }\n}\n@container dpu-workspace (max-width: 820px) {\n .dsh-ssh-toolbar {\n grid-template-columns: 1fr auto;\n gap: 8px;\n padding: 0 12px;\n }\n .dsh-ssh-segments {\n grid-row: 2;\n grid-column: 1/-1;\n margin-bottom: 8px;\n overflow-x: auto;\n scrollbar-width: none;\n }\n .dsh-ssh-segments::-webkit-scrollbar {\n display: none;\n }\n .dsh-ssh-segments button {\n min-width: 72px;\n height: 36px;\n flex: none;\n }\n .dsh-ssh-toolbar {\n padding-top: 8px;\n }\n .dsh-ssh-content-heading {\n align-items: flex-start;\n flex-direction: column;\n padding: 14px 0;\n }\n .dsh-ssh-heading-actions {\n flex-wrap: wrap;\n }\n .dsh-ssh-forward-row {\n grid-template-columns: 32px minmax(0, 1fr) auto;\n }\n .dsh-ssh-forward-row > .dsh-ssh-icon-button,\n .dsh-ssh-forward-row > .dsh-ssh-small-primary {\n display: none;\n }\n}\n@container dpu-workspace (max-width: 520px) {\n .dsh-ssh-toolbar {\n padding-right: max(10px, env(safe-area-inset-right));\n padding-left: max(10px, env(safe-area-inset-left));\n }\n .dsh-ssh-toolbar > .dsh-ssh-primary-button {\n width: 40px;\n min-height: 40px;\n padding: 0;\n }\n .dsh-ssh-toolbar > .dsh-ssh-primary-button span {\n display: none;\n }\n .dsh-ssh-terminal-pane,\n .dsh-ssh-forward-pane,\n .dsh-ssh-settings-pane,\n .dsh-ssh-vault-pane,\n .dsh-ssh-proxy-pane,\n .dsh-ssh-profile-sftp-pane {\n padding-right: 10px;\n padding-left: 10px;\n }\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns,\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n grid-template-columns: minmax(120px, 1fr) 64px;\n }\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns > :nth-child(3),\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row > :nth-child(3) {\n display: none;\n }\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n min-height: 44px;\n }\n .dsh-ssh-number-row {\n grid-template-columns: minmax(0, 1fr) 86px 28px;\n }\n}\n@media (max-width: 600px) {\n .dsh-ssh-dialog-layer {\n align-items: stretch;\n padding: 0;\n }\n .dsh-ssh-dialog {\n width: 100%;\n max-height: 100dvh;\n border: 0;\n border-radius: 0;\n }\n .dsh-ssh-form-grid,\n .dsh-ssh-form-grid.is-host {\n grid-template-columns: 1fr;\n }\n .dsh-ssh-dialog-actions {\n position: sticky;\n bottom: 0;\n flex-wrap: wrap;\n padding: 10px 0 max(10px, env(safe-area-inset-bottom));\n background: var(--ssh-surface);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .dsh-ssh-disclosure {\n transition: none;\n }\n}\n@media (prefers-reduced-transparency: reduce) {\n .dsh-ssh-dialog-layer {\n backdrop-filter: none;\n }\n .dsh-ssh-dialog > header {\n backdrop-filter: none;\n }\n}\n\n.dsh-ssh-activity-trigger {\n box-sizing: border-box;\n display: inline-grid;\n place-items: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n cursor: pointer;\n}\n.dsh-ssh-activity-trigger:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-activity-trigger.is-active {\n border-color: color-mix(in srgb, var(--ssh-accent, #547d78) 16%, transparent);\n color: var(--ssh-accent-strong, #406e67);\n background: color-mix(in srgb, var(--ssh-accent, #547d78) 8%, transparent);\n}\n.dsh-ssh-panel-right-icon {\n transform: rotate(180deg);\n}\n.dsh-ssh-activity-panel {\n --ssh-activity-border: color-mix(\n in srgb,\n var(--ssh-text) 10%,\n transparent\n );\n box-sizing: border-box;\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n color: var(--ssh-text);\n background: color-mix(in srgb, var(--ssh-activity-surface) 98%, var(--ssh-activity-surface-raised));\n font-family: var(--ssh-font-sans);\n animation: dsh-ssh-panel-enter 180ms cubic-bezier(0.2, 0.8, 0.2, 1) both;\n}\n.dsh-ssh-activity-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 64px;\n padding: 0 14px 0 16px;\n border-bottom: 1px solid var(--ssh-activity-border);\n background: color-mix(in srgb, var(--ssh-activity-surface-raised) 98%, var(--ssh-activity-surface));\n}\n.dsh-ssh-activity-title {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 10px;\n}\n.dsh-ssh-activity-title > span:last-child {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-activity-mark {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n flex: none;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 20%, transparent);\n border-radius: 10px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 5%, transparent);\n}\n.dsh-ssh-activity-header strong {\n font-size: 14px;\n font-weight: 650;\n}\n.dsh-ssh-activity-header small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1.25 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-activity-tabs {\n display: grid;\n grid-auto-columns: minmax(0, 1fr);\n grid-auto-flow: column;\n gap: 2px;\n margin: 12px 14px 0;\n padding: 3px;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 11px;\n background: color-mix(\n in srgb,\n var(--ssh-text) 3%,\n transparent\n );\n}\n.dsh-ssh-activity-tabs button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n min-width: 0;\n min-height: 32px;\n padding: 0 6px;\n border: 0;\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: transparent;\n font: 550 11px/1 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-activity-tabs button:hover {\n color: var(--ssh-text);\n}\n.dsh-ssh-activity-tabs button.is-active {\n color: var(--ssh-text);\n background: var(--ssh-activity-surface-raised);\n box-shadow: 0 1px 3px\n color-mix(in srgb, var(--ssh-text) 9%, transparent);\n}\n.dsh-ssh-activity-body {\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n padding: 14px 14px 16px;\n}\n.dsh-ssh-activity-body > * {\n width: 100%;\n}\n.dsh-ssh-activity-state {\n margin: 20px 4px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-sftp {\n display: flex;\n min-height: 100%;\n flex-direction: column;\n}\n.dsh-ssh-sftp-hostbar {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr);\n align-items: center;\n gap: 8px;\n padding: 0 2px 10px;\n}\n.dsh-ssh-sftp-hostbar label {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-sftp-hostbar select {\n min-width: 0;\n padding: 0;\n border: 0;\n outline: 0;\n color: var(--ssh-text);\n background: transparent;\n font: 600 11px/1.25 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-sftp-hostbar small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1.2 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sftp-pathbar {\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 30px;\n gap: 5px;\n margin-bottom: 10px;\n}\n.dsh-ssh-sftp-pathbar.has-upload {\n grid-template-columns: 30px minmax(0, 1fr) 30px auto;\n}\n.dsh-ssh-sftp-pathbar button,\n.dsh-ssh-sftp-pathbar input {\n box-sizing: border-box;\n height: 30px;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 8px;\n color: var(--ssh-text);\n background: var(--ssh-activity-surface-raised);\n}\n.dsh-ssh-sftp-pathbar button {\n display: grid;\n place-items: center;\n padding: 0;\n cursor: pointer;\n}\n.dsh-ssh-sftp-pathbar button:disabled {\n opacity: 0.35;\n cursor: default;\n}\n.dsh-ssh-sftp-pathbar input {\n min-width: 0;\n padding: 0 10px;\n outline: 0;\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-sftp-pathbar .dsh-ssh-sftp-upload-button {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 0 10px;\n color: #f6fbf9;\n background: var(--ssh-accent-strong, #406e67);\n font: 550 10px/1 var(--ssh-font-sans);\n}\n.dsh-ssh-directory-error {\n margin: 0 0 8px;\n padding: 7px 8px;\n border-radius: 7px;\n color: var(--ssh-danger, #9c504c);\n background: color-mix(in srgb, var(--ssh-danger, #9c504c) 7%, transparent);\n font-size: 10px;\n line-height: 1.4;\n}\n.dsh-ssh-sftp-table {\n min-height: 0;\n flex: 1;\n overflow: auto;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 11px;\n background: color-mix(in srgb, var(--ssh-activity-surface-raised) 99%, var(--ssh-activity-surface));\n box-shadow: 0 8px 24px color-mix(in srgb, var(--ssh-text) 3%, transparent);\n}\n.dsh-ssh-sftp-columns,\n.dsh-ssh-sftp-row {\n display: grid;\n grid-template-columns: minmax(120px, 1fr) 58px 72px;\n align-items: center;\n gap: 7px;\n}\n.dsh-ssh-sftp-columns {\n position: sticky;\n z-index: 1;\n top: 0;\n min-height: 32px;\n padding: 0 10px;\n border-bottom: 1px solid var(--ssh-activity-border);\n color: var(--ssh-text-subtle);\n background: var(--ssh-activity-surface);\n font-size: 10px;\n}\n.dsh-ssh-sftp-row {\n box-sizing: border-box;\n width: 100%;\n min-height: 38px;\n padding: 0 10px;\n border: 0;\n border-bottom: 1px solid\n color-mix(in srgb, var(--ssh-activity-border) 55%, transparent);\n color: var(--ssh-text);\n background: transparent;\n text-align: left;\n transition:\n background 120ms ease,\n transform 120ms ease;\n}\n.dsh-ssh-sftp-row:last-child {\n border-bottom: 0;\n}\n.dsh-ssh-sftp-row.is-directory {\n cursor: pointer;\n}\n.dsh-ssh-sftp-row.is-directory:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-sftp-row:disabled {\n opacity: 1;\n}\n.dsh-ssh-sftp-row > span {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 7px;\n}\n.dsh-ssh-sftp-row svg {\n flex: none;\n color: var(--ssh-text-muted);\n}\n.dsh-ssh-sftp-row.is-directory svg {\n color: var(--ssh-accent-strong, #406e67);\n}\n.dsh-ssh-sftp-row strong {\n overflow: hidden;\n font-size: 11px;\n font-weight: 500;\n line-height: 1.3;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sftp-row small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1.25 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sftp-state {\n display: grid;\n place-items: center;\n min-height: 160px;\n margin: 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-activity-empty {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 240px;\n padding: 24px;\n text-align: center;\n}\n.dsh-ssh-activity-empty > svg {\n margin-bottom: 10px;\n color: var(--ssh-text-subtle);\n}\n.dsh-ssh-activity-empty strong {\n font-size: 12px;\n}\n.dsh-ssh-activity-empty p {\n max-width: 260px;\n margin: 7px 0 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n line-height: 1.5;\n}\n.dsh-ssh-terminal-observer {\n display: flex;\n height: 100%;\n min-height: 280px;\n overflow: hidden;\n flex-direction: column;\n border: 1px solid #283330;\n border-radius: 12px;\n background: #0c1212;\n box-shadow: 0 10px 26px color-mix(in srgb, #08100e 12%, transparent);\n}\n.dsh-ssh-terminal-observer-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 48px;\n padding: 0 12px;\n border-bottom: 1px solid #ffffff12;\n color: #dce5e1;\n background: #0d1413;\n}\n.dsh-ssh-terminal-observer-heading > span:first-child {\n display: grid;\n min-width: 0;\n gap: 3px;\n}\n.dsh-ssh-terminal-observer-heading strong,\n.dsh-ssh-terminal-observer-heading small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-terminal-observer-heading strong {\n font-size: 12px;\n font-weight: 600;\n}\n.dsh-ssh-terminal-observer-heading small {\n color: #879691;\n font:\n 10px/1.2 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-terminal-state {\n flex: none;\n color: #879691;\n font-size: 10px;\n}\n.dsh-ssh-terminal-state.is-running {\n color: #8fc0af;\n}\n.dsh-ssh-terminal-screen {\n box-sizing: border-box;\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n padding: 11px 10px 15px;\n}\n.dsh-ssh-sftp-row:not(.is-directory) {\n cursor: pointer;\n}\n.dsh-ssh-file-preview {\n display: flex;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 10px;\n background: var(--ssh-activity-surface-raised);\n box-shadow: 0 8px 24px color-mix(in srgb, var(--ssh-text) 3%, transparent);\n}\n.dsh-ssh-file-preview > header {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr) 28px;\n align-items: center;\n gap: 7px;\n min-height: 42px;\n padding: 0 7px;\n border-bottom: 1px solid var(--ssh-activity-border);\n}\n.dsh-ssh-file-preview > header > span {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-file-preview > header strong,\n.dsh-ssh-file-preview > header small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-file-preview > header strong {\n font-size: 10px;\n}\n.dsh-ssh-file-preview > header small {\n color: var(--ssh-text-subtle);\n font-size: 8px;\n}\n.dsh-ssh-file-preview > header > a {\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n text-decoration: none;\n}\n.dsh-ssh-file-preview > header > a:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-file-preview-body {\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: auto;\n flex-direction: column;\n}\n.dsh-ssh-file-preview-body > pre {\n box-sizing: border-box;\n min-width: 100%;\n min-height: 100%;\n margin: 0;\n padding: 12px;\n color: var(--ssh-text);\n background: transparent;\n font:\n 10px/1.55 var(--ssh-font-mono),\n monospace;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n.dsh-ssh-markdown-preview {\n width: min(100%, 860px);\n margin: 0 auto;\n padding: 24px clamp(18px, 4vw, 44px) 48px;\n color: var(--ssh-text);\n font: 400 13px/1.72 var(--ssh-font-sans);\n overflow-wrap: anywhere;\n}\n.dsh-ssh-markdown-preview > :first-child {\n margin-top: 0;\n}\n.dsh-ssh-markdown-preview > :last-child {\n margin-bottom: 0;\n}\n.dsh-ssh-markdown-preview :where(h1, h2, h3, h4, h5, h6) {\n margin: 1.7em 0 0.62em;\n color: var(--ssh-text);\n font-weight: 650;\n line-height: 1.28;\n text-wrap: balance;\n}\n.dsh-ssh-markdown-preview h1 {\n padding-bottom: 0.42em;\n border-bottom: 1px solid var(--ssh-border);\n font-size: 22px;\n letter-spacing: -0.025em;\n}\n.dsh-ssh-markdown-preview h2 {\n font-size: 18px;\n letter-spacing: -0.018em;\n}\n.dsh-ssh-markdown-preview h3 {\n font-size: 15px;\n}\n.dsh-ssh-markdown-preview :where(h4, h5, h6) {\n font-size: 13px;\n}\n.dsh-ssh-markdown-preview :where(p, ul, ol, blockquote, pre, table) {\n margin: 0 0 1em;\n}\n.dsh-ssh-markdown-preview :where(ul, ol) {\n padding-left: 1.55em;\n}\n.dsh-ssh-markdown-preview li + li {\n margin-top: 0.28em;\n}\n.dsh-ssh-markdown-preview blockquote {\n padding: 0.2em 0 0.2em 1em;\n border-left: 3px solid color-mix(in srgb, var(--ssh-accent) 56%, transparent);\n color: var(--ssh-text-muted);\n}\n.dsh-ssh-markdown-preview :where(code, pre) {\n font-family: var(--ssh-font-mono);\n}\n.dsh-ssh-markdown-preview code {\n padding: 0.14em 0.34em;\n border-radius: 5px;\n background: color-mix(in srgb, var(--ssh-text) 7%, transparent);\n font-size: 0.9em;\n}\n.dsh-ssh-markdown-preview pre {\n overflow: auto;\n padding: 14px 16px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-text) 5%, var(--ssh-surface-raised));\n line-height: 1.55;\n}\n.dsh-ssh-markdown-preview pre code {\n padding: 0;\n background: transparent;\n font-size: 11px;\n}\n.dsh-ssh-markdown-preview a {\n color: var(--ssh-accent-strong);\n text-decoration-color: color-mix(in srgb, var(--ssh-accent) 44%, transparent);\n text-underline-offset: 0.18em;\n}\n.dsh-ssh-markdown-preview a:hover {\n text-decoration-color: currentColor;\n}\n.dsh-ssh-markdown-preview table {\n display: block;\n max-width: 100%;\n overflow: auto;\n border-collapse: collapse;\n font-size: 12px;\n}\n.dsh-ssh-markdown-preview :where(th, td) {\n padding: 7px 10px;\n border: 1px solid var(--ssh-border);\n text-align: left;\n white-space: nowrap;\n}\n.dsh-ssh-markdown-preview th {\n background: var(--ssh-control);\n font-weight: 600;\n}\n.dsh-ssh-markdown-preview hr {\n height: 1px;\n margin: 1.6em 0;\n border: 0;\n background: var(--ssh-border);\n}\n.dsh-ssh-markdown-preview img {\n max-width: 100%;\n height: auto;\n border-radius: 10px;\n}\n.dsh-ssh-file-preview-body > small {\n padding: 8px 12px;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-file-preview-body > img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n object-fit: contain;\n}\n.dsh-ssh-file-preview-body > iframe {\n width: 100%;\n height: 100%;\n min-height: 420px;\n border: 0;\n background: #fff;\n}\n.dsh-ssh-file-binary {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 240px;\n padding: 20px;\n text-align: center;\n}\n.dsh-ssh-file-binary > svg {\n margin-bottom: 10px;\n color: var(--ssh-text-subtle);\n}\n.dsh-ssh-file-binary strong {\n font-size: 11px;\n}\n.dsh-ssh-file-binary p {\n margin: 5px 0 12px;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-file-binary a {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 30px;\n padding: 0 10px;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 8px;\n color: var(--ssh-text);\n background: var(--ssh-control);\n font-size: 10px;\n text-decoration: none;\n}\n.dsh-ssh-terminal-workbench {\n display: flex;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 7px;\n}\n.dsh-ssh-terminal-switcher {\n display: flex;\n flex: none;\n gap: 3px;\n max-width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 1px 1px 5px;\n}\n.dsh-ssh-terminal-switcher button {\n display: flex;\n min-width: 0;\n max-width: 150px;\n align-items: center;\n gap: 6px;\n height: 30px;\n padding: 0 10px;\n border: 1px solid transparent;\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: transparent;\n font: 500 10px/1 var(--ssh-font-sans);\n white-space: nowrap;\n cursor: pointer;\n flex: 0 0 min(120px, 42%);\n overflow: hidden;\n transition:\n color 120ms ease,\n background 120ms ease,\n border-color 120ms ease,\n transform 120ms ease;\n}\n.dsh-ssh-terminal-switcher-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-terminal-switcher button:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-terminal-switcher button.is-active {\n border-color: var(--ssh-activity-border);\n color: var(--ssh-text);\n background: color-mix(in srgb, var(--ssh-accent, #547d78) 8%, transparent);\n box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 38%, transparent);\n}\n.dsh-ssh-terminal-state-dot {\n width: 5px;\n height: 5px;\n flex: none;\n border: 1px solid #75827e;\n border-radius: 50%;\n}\n.dsh-ssh-terminal-state-dot.is-running {\n border-color: #6ca08d;\n background: #6ca08d;\n}\n.dsh-ssh-terminal-workbench .dsh-ssh-terminal-observer {\n height: auto;\n min-height: 0;\n flex: 1;\n}\n.dsh-ssh-terminal-input-error {\n margin: 0;\n padding: 6px 8px;\n border-radius: 6px;\n color: #d98e88;\n background: #351c1a;\n font-size: 10px;\n}\n\n.dsh-ssh-profile-row:active,\n.dsh-ssh-sftp-row:active,\n.dsh-ssh-terminal-switcher button:active {\n transform: scale(0.985);\n}\n.dsh-ssh-file-preview-body {\n animation: dsh-ssh-content-enter 160ms ease-out both;\n}\n.dsh-ssh-vault-pane,\n.dsh-ssh-proxy-pane {\n box-sizing: border-box;\n display: flex;\n min-height: 100%;\n flex-direction: column;\n padding: 0 18px 18px;\n}\n.dsh-ssh-vault-list,\n.dsh-ssh-proxy-list {\n display: grid;\n align-content: start;\n gap: 5px;\n}\n.dsh-ssh-vault-row,\n.dsh-ssh-proxy-row {\n display: grid;\n grid-template-columns: 34px minmax(160px, 1fr) auto 70px 28px 28px;\n align-items: center;\n gap: 10px;\n min-height: 56px;\n padding: 5px 8px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 82%, transparent);\n transition:\n background 140ms ease,\n border-color 140ms ease,\n transform 150ms ease;\n}\n.dsh-ssh-vault-row:hover,\n.dsh-ssh-proxy-row:hover {\n border-color: color-mix(in srgb, var(--ssh-accent) 18%, var(--ssh-border));\n background: color-mix(in srgb, var(--ssh-surface-raised) 94%, transparent);\n transform: translateY(-1px);\n}\n.dsh-ssh-vault-glyph {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 18%, var(--ssh-border));\n border-radius: 10px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 7%, transparent);\n}\n.dsh-ssh-vault-row > span:nth-child(2),\n.dsh-ssh-proxy-row > span:nth-child(2) {\n display: grid;\n min-width: 0;\n gap: 3px;\n}\n.dsh-ssh-vault-row strong,\n.dsh-ssh-vault-row small,\n.dsh-ssh-proxy-row strong,\n.dsh-ssh-proxy-row small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-vault-row strong,\n.dsh-ssh-proxy-row strong {\n font-size: 12px;\n font-weight: 600;\n}\n.dsh-ssh-vault-row small,\n.dsh-ssh-proxy-row small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-proxy-kind {\n padding: 3px 7px;\n border-radius: 6px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n font: 600 10px/1 var(--ssh-font-mono), monospace;\n}\n.dsh-ssh-vault-state {\n padding: 3px 7px;\n border-radius: 6px;\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n font-size: 10px;\n}\n.dsh-ssh-vault-state.is-ready {\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n}\n.dsh-ssh-vault-empty {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 320px;\n text-align: center;\n}\n.dsh-ssh-vault-empty > span {\n display: grid;\n place-items: center;\n width: 46px;\n height: 46px;\n margin-bottom: 12px;\n border: 1px solid var(--ssh-border);\n border-radius: 14px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-surface-raised) 88%, transparent);\n box-shadow: 0 12px 30px\n color-mix(in srgb, var(--ssh-text) 5%, transparent);\n}\n.dsh-ssh-vault-empty strong {\n font-size: 13px;\n}\n.dsh-ssh-vault-empty p {\n max-width: 360px;\n margin: 7px 0 16px;\n color: var(--ssh-text-muted);\n font-size: 11px;\n line-height: 1.55;\n}\n.dsh-ssh-credential-reference {\n display: grid;\n grid-template-columns: 34px minmax(0, 1fr) auto;\n align-items: center;\n gap: 10px;\n min-height: 52px;\n padding: 5px 10px;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 18%, var(--ssh-border));\n border-radius: 10px;\n background: color-mix(\n in srgb,\n var(--ssh-accent) 6%,\n var(--ssh-surface-raised)\n );\n}\n.dsh-ssh-credential-reference > span:first-child {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border-radius: 8px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n}\n.dsh-ssh-credential-reference > span:nth-child(2) {\n display: grid;\n gap: 3px;\n}\n.dsh-ssh-credential-reference strong {\n font-size: 11px;\n}\n.dsh-ssh-credential-reference small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-credential-reference em {\n color: var(--ssh-accent-strong);\n font-size: 10px;\n font-style: normal;\n}\n.dsh-ssh-jump-chain {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 72%, transparent);\n}\n.dsh-ssh-jump-chain legend {\n padding: 0 5px;\n color: var(--ssh-text-muted);\n font-size: 10px;\n font-weight: 600;\n}\n.dsh-ssh-jump-chain > p {\n margin: 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-jump-chain > div {\n display: grid;\n gap: 5px;\n}\n.dsh-ssh-jump-row {\n display: grid;\n grid-template-columns: 22px minmax(0, 1fr) 28px 28px 28px;\n align-items: center;\n gap: 4px;\n}\n.dsh-ssh-jump-row > em {\n display: grid;\n place-items: center;\n width: 20px;\n height: 20px;\n border-radius: 6px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n font:\n 600 10px/1 var(--ssh-font-mono),\n monospace;\n font-style: normal;\n}\n.dsh-ssh-jump-row select {\n box-sizing: border-box;\n min-width: 0;\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n color: var(--ssh-text);\n background: var(--ssh-surface-raised);\n font-size: 10px;\n}\n.dsh-ssh-field select,\n.dsh-ssh-sftp-hostbar select,\n.dsh-ssh-jump-row select {\n appearance: none;\n padding-right: 28px;\n background-image:\n linear-gradient(\n 45deg,\n transparent 50%,\n color-mix(in srgb, currentColor 56%, transparent) 50%\n ),\n linear-gradient(\n 135deg,\n color-mix(in srgb, currentColor 56%, transparent) 50%,\n transparent 50%\n );\n background-position:\n calc(100% - 12px) 50%,\n calc(100% - 8px) 50%;\n background-repeat: no-repeat;\n background-size: 4px 4px;\n}\n.dsh-ssh-sftp-hostbar select {\n padding-right: 22px;\n}\n.dsh-ssh-jump-row .dsh-ssh-icon-button:disabled {\n opacity: 0.3;\n cursor: default;\n}\n.dsh-ssh-jump-empty {\n padding: 7px !important;\n border-radius: 7px;\n background: color-mix(in srgb, var(--ssh-warning) 7%, transparent);\n}\n.dsh-ssh-jump-chain > .dsh-ssh-secondary-button {\n justify-self: start;\n}\n@keyframes dsh-ssh-panel-enter {\n from {\n opacity: 0;\n transform: translateX(6px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes dsh-ssh-content-enter {\n from {\n opacity: 0;\n transform: translateY(3px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@keyframes dsh-ssh-group-open {\n from {\n opacity: 0;\n transform: translateY(-2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@media (max-width: 820px) {\n .dsh-ssh-vault-row,\n .dsh-ssh-proxy-row {\n grid-template-columns: 34px minmax(120px, 1fr) auto 28px;\n }\n .dsh-ssh-vault-row > small,\n .dsh-ssh-vault-row > .dsh-ssh-icon-button:last-child,\n .dsh-ssh-proxy-row > small,\n .dsh-ssh-proxy-row > .dsh-ssh-icon-button:last-child {\n display: none;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .dsh-ssh-activity-panel,\n .dsh-ssh-file-preview-body,\n .dsh-ssh-profile-group-children {\n animation: none;\n }\n .dsh-ssh-profile-row,\n .dsh-ssh-profile-row::before,\n .dsh-ssh-profile-group-chevron,\n .dsh-ssh-vault-row,\n .dsh-ssh-proxy-row,\n .dsh-ssh-sftp-row,\n .dsh-ssh-terminal-switcher button {\n transition: none;\n }\n}\n.dsh-ssh-sidebar-panel {\n display: flex;\n align-items: center;\n gap: 7px;\n min-height: 34px;\n padding: 0 10px;\n border: 1px solid transparent;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n font: 550 11px/1 var(--ssh-font-sans);\n text-align: left;\n cursor: pointer;\n}\n.dsh-ssh-sidebar-panel svg {\n color: #547d78;\n}\n.dsh-ssh-sidebar-panel:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-sidebar-panel:active {\n transform: scale(0.985);\n}\n.dsh-ssh-icon-button.is-active,\n.dsh-ssh-rail-button.is-active {\n color: #406e67;\n background: color-mix(in srgb, #547d78 9%, transparent);\n}\n.dsh-ssh-icon-button:disabled,\n.dsh-ssh-rail-button:disabled {\n opacity: 0.36;\n cursor: default;\n}\n.dsh-ssh-icon-button:disabled:hover,\n.dsh-ssh-rail-button:disabled:hover {\n color: var(--ssh-text-muted);\n background: transparent;\n}\n.dsh-ssh-test-button {\n margin-right: auto;\n}\n.dsh-ssh-test-result {\n box-sizing: border-box;\n margin: 0;\n border-radius: 10px;\n font-size: 10px;\n}\n.dsh-ssh-test-result.is-warning {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n padding: 10px 10px;\n border: 1px solid color-mix(in srgb, var(--ssh-warning) 22%, transparent);\n color: color-mix(\n in srgb,\n var(--ssh-warning) 82%,\n var(--ssh-text)\n );\n background: color-mix(in srgb, var(--ssh-warning) 7%, transparent);\n}\n.dsh-ssh-test-result.is-warning > span {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n.dsh-ssh-test-result.is-warning code {\n overflow: hidden;\n font:\n 10px/1.3 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-test-result.is-success {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 10px;\n color: #477565;\n background: color-mix(in srgb, #5c8a76 9%, transparent);\n}\n.dsh-ssh-sidebar-note {\n box-sizing: border-box;\n min-height: 32px;\n margin: 0;\n padding: 8px 10px;\n color: var(--ssh-text-subtle);\n font: 10px/1.4 var(--ssh-font-sans);\n}\n.dsh-ssh-profile-sftp-pane {\n box-sizing: border-box;\n display: flex;\n min-height: 100%;\n height: 100%;\n flex-direction: column;\n padding: 0 18px 18px;\n}\n.dsh-ssh-profile-sftp-pane > .dsh-ssh-content-heading {\n flex: none;\n}\n.dsh-ssh-sftp.is-workspace {\n --ssh-activity-border: var(--ssh-border);\n min-height: 0;\n flex: 1;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-pathbar {\n margin-bottom: 10px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns,\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n grid-template-columns: minmax(180px, 1fr) 90px 120px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns {\n min-height: 34px;\n padding: 0 12px;\n font-size: 10px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n min-height: 40px;\n padding: 0 12px;\n cursor: pointer;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row strong {\n font-size: 11px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row small {\n font-size: 10px;\n}\n.dsh-ssh-upload-conflict {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 10px;\n padding: 8px 10px;\n border: 1px solid\n color-mix(in srgb, var(--ssh-warning, #927443) 20%, transparent);\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: color-mix(in srgb, var(--ssh-warning, #927443) 7%, transparent);\n}\n.dsh-ssh-upload-conflict > span {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.dsh-ssh-upload-conflict > span:first-child {\n min-width: 0;\n}\n.dsh-ssh-upload-conflict strong {\n font-size: 10px;\n}\n.dsh-ssh-upload-conflict small {\n overflow: hidden;\n max-width: 240px;\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-upload-conflict button {\n min-height: 26px;\n padding: 0 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: var(--ssh-surface-raised);\n font-size: 10px;\n cursor: pointer;\n}\n.dsh-ssh-upload-conflict button.is-primary {\n border-color: color-mix(in srgb, var(--ssh-accent-strong) 56%, transparent);\n color: #f6fbf9;\n background: var(--ssh-accent-strong);\n}\n';
6736
+ var client_default = '.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n.dsh-ssh-sidebar,\n.dsh-ssh-workspace,\n.dsh-ssh-activity-panel,\n.dsh-ssh-dialog-layer {\n --ssh-font-sans: "SF Pro Text", "SF Pro Display", -apple-system,\n BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;\n --ssh-font-mono: "SFMono-Regular", "Cascadia Code", "Roboto Mono",\n "Noto Sans Mono CJK SC", monospace;\n --ssh-canvas: var(--dsw-alias-bg-base, #f4f6f5);\n --ssh-panel: var(--dsw-alias-bg-layer-2, #fbfcfb);\n --ssh-text: var(--dsw-alias-label-primary, #17201e);\n --ssh-text-muted: var(--dsw-alias-label-secondary, #55615e);\n --ssh-text-subtle: var(--dsw-alias-label-tertiary, #7b8582);\n --ssh-host-border: var(--dsw-alias-border-l2, rgba(28, 43, 39, 0.14));\n --ssh-hover: color-mix(in srgb, var(--ssh-text) 6%, transparent);\n --ssh-control: color-mix(in srgb, var(--ssh-panel) 96%, var(--ssh-text) 4%);\n --ssh-accent: #58746f;\n --ssh-accent-strong: #405f5a;\n --ssh-danger: #9c504c;\n --ssh-warning: #927443;\n --ssh-surface: var(--ssh-canvas);\n --ssh-surface-raised: var(--ssh-panel);\n --ssh-activity-surface: var(--ssh-surface);\n --ssh-activity-surface-raised: var(--ssh-surface-raised);\n --ssh-border: color-mix(in srgb, var(--ssh-text) 11%, transparent);\n --ssh-focus-ring: color-mix(in srgb, var(--ssh-accent) 64%, transparent);\n --ssh-scrollbar-thumb: color-mix(in srgb, var(--ssh-text-muted) 44%, transparent);\n --ssh-scrollbar-hover: color-mix(in srgb, var(--ssh-text-muted) 68%, transparent);\n color: var(--ssh-text);\n font-family: var(--ssh-font-sans);\n font-size: 13px;\n line-height: 1.45;\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.dsh-ssh-sidebar {\n box-sizing: border-box;\n flex: none;\n margin: 0 8px 8px 2px;\n padding: 4px 0 6px;\n border-bottom: 1px solid\n color-mix(in srgb, var(--ssh-host-border) 62%, transparent);\n color: var(--ssh-text);\n}\n.dsh-ssh-sidebar.is-rail {\n width: 36px;\n margin: 0 0 8px;\n padding: 0;\n border: 0;\n}\n.dsh-ssh-sidebar-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 32px;\n padding: 0 4px 0 5px;\n}\n.dsh-ssh-sidebar-title {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 5px;\n height: 28px;\n padding: 0 5px;\n color: var(--ssh-text-muted);\n border: 0;\n background: transparent;\n border-radius: 7px;\n font: 600 12px/1 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-sidebar-title:hover,\n.dsh-ssh-icon-button:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-disclosure {\n display: grid;\n place-items: center;\n transition: transform 0.16s ease;\n}\n.dsh-ssh-disclosure[data-open="false"] {\n transform: rotate(-90deg);\n}\n.dsh-ssh-icon-button {\n display: inline-grid;\n place-items: center;\n flex: none;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 0;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n cursor: pointer;\n}\n.dsh-ssh-icon-button.is-danger {\n color: #a65d58;\n}\n.dsh-ssh-sidebar-list {\n display: grid;\n gap: 2px;\n padding: 2px 1px 0;\n}\n.dsh-ssh-sidebar-row,\n.dsh-ssh-sidebar-empty,\n.dsh-ssh-sidebar-more {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid transparent;\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.dsh-ssh-sidebar-row {\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) 18px;\n align-items: center;\n gap: 7px;\n min-height: 40px;\n padding: 4px 7px;\n border-radius: 10px;\n text-align: left;\n}\n.dsh-ssh-sidebar-row:hover {\n background: color-mix(\n in srgb,\n var(--ssh-hover) 70%,\n transparent\n );\n}\n.dsh-ssh-sidebar-row.is-active {\n background: color-mix(\n in srgb,\n var(--ssh-hover) 92%,\n transparent\n );\n border-color: color-mix(in srgb, var(--ssh-host-border) 50%, transparent);\n}\n.dsh-ssh-status-dot {\n display: block;\n width: 7px;\n height: 7px;\n margin: auto;\n border: 1px solid\n color-mix(in srgb, var(--ssh-text-muted) 62%, transparent);\n border-radius: 50%;\n}\n.dsh-ssh-status-dot.is-injected {\n border-color: #5b8f82;\n background: #5b8f82;\n box-shadow: 0 0 0 2px color-mix(in srgb, #5b8f82 14%, transparent);\n}\n.dsh-ssh-sidebar-copy {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-sidebar-copy strong,\n.dsh-ssh-sidebar-copy small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sidebar-copy strong {\n font-size: 13px;\n font-weight: 500;\n}\n.dsh-ssh-sidebar-copy small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-injected-mark {\n display: grid;\n place-items: center;\n color: #5b8f82;\n}\n.dsh-ssh-sidebar-empty,\n.dsh-ssh-sidebar-more {\n min-height: 34px;\n padding: 6px 10px;\n border-radius: 8px;\n color: var(--ssh-text-subtle);\n font-size: 12px;\n text-align: left;\n}\n.dsh-ssh-sidebar-empty:hover,\n.dsh-ssh-sidebar-more:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-rail-button {\n display: grid;\n place-items: center;\n width: 36px;\n height: 36px;\n padding: 0;\n border: 0;\n border-radius: 10px;\n color: var(--ssh-text);\n background: transparent;\n cursor: pointer;\n}\n.dsh-ssh-rail-button:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-server-glyph {\n display: inline-grid;\n place-items: center;\n color: currentColor;\n}\n.dsh-ssh-workspace,\n.dsh-ssh-activity-panel {\n --dpu-navigation-width: 248px;\n --dpu-inspector-width: 292px;\n --dpu-border: var(--ssh-border);\n --dpu-accent: var(--ssh-accent);\n --dpu-accent-strong: var(--ssh-accent-strong);\n --dpu-raised-surface: var(--ssh-surface-raised);\n --dpu-toolbar-surface: color-mix(in srgb, var(--ssh-surface-raised) 88%, transparent);\n}\n.dsh-ssh-workspace *,\n.dsh-ssh-workspace *::before,\n.dsh-ssh-workspace *::after,\n.dsh-ssh-activity-panel *,\n.dsh-ssh-activity-panel *::before,\n.dsh-ssh-activity-panel *::after,\n.dsh-ssh-dialog-layer *,\n.dsh-ssh-dialog-layer *::before,\n.dsh-ssh-dialog-layer *::after,\n.dsh-ssh-sidebar *,\n.dsh-ssh-sidebar *::before,\n.dsh-ssh-sidebar *::after {\n box-sizing: border-box;\n}\n.dsh-ssh-workspace :where(button, input, select, textarea),\n.dsh-ssh-activity-panel :where(button, input, select, textarea),\n.dsh-ssh-dialog :where(button, input, select, textarea),\n.dsh-ssh-sidebar :where(button, input, select, textarea) {\n margin: 0;\n font-family: var(--ssh-font-sans);\n font-size: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n}\n.dsh-ssh-workspace :where(button, input, select, textarea),\n.dsh-ssh-activity-panel :where(button, input, select, textarea),\n.dsh-ssh-dialog :where(button, input, select, textarea),\n.dsh-ssh-sidebar :where(button, input, select, textarea),\n.dsh-ssh-activity-trigger {\n -webkit-appearance: none;\n appearance: none;\n}\n.dsh-ssh-workspace :where(button, input, select, textarea):disabled,\n.dsh-ssh-activity-panel :where(button, input, select, textarea):disabled,\n.dsh-ssh-dialog :where(button, input, select, textarea):disabled,\n.dsh-ssh-sidebar :where(button, input, select, textarea):disabled {\n cursor: not-allowed;\n}\n.dsh-ssh-workspace :where(input, select, textarea)::placeholder,\n.dsh-ssh-activity-panel :where(input, select, textarea)::placeholder,\n.dsh-ssh-dialog :where(input, select, textarea)::placeholder {\n color: color-mix(in srgb, var(--ssh-text-subtle) 78%, transparent);\n opacity: 1;\n}\n.dsh-ssh-workspace :where(input, textarea):-webkit-autofill,\n.dsh-ssh-dialog :where(input, textarea):-webkit-autofill {\n border-color: var(--ssh-border);\n -webkit-text-fill-color: var(--ssh-text);\n box-shadow: 0 0 0 1000px var(--ssh-control) inset;\n caret-color: var(--ssh-text);\n}\n.dsh-ssh-workspace input[type="number"]::-webkit-inner-spin-button,\n.dsh-ssh-workspace input[type="number"]::-webkit-outer-spin-button,\n.dsh-ssh-dialog input[type="number"]::-webkit-inner-spin-button,\n.dsh-ssh-dialog input[type="number"]::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.dsh-ssh-workspace input[type="number"],\n.dsh-ssh-dialog input[type="number"] {\n -moz-appearance: textfield;\n}\n.dsh-ssh-workspace input[type="checkbox"],\n.dsh-ssh-dialog input[type="checkbox"] {\n position: relative;\n width: 34px;\n height: 20px;\n flex: none;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: var(--ssh-control);\n cursor: pointer;\n transition: background 160ms ease, border-color 160ms ease;\n}\n.dsh-ssh-workspace input[type="checkbox"]::after,\n.dsh-ssh-dialog input[type="checkbox"]::after {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background: var(--ssh-text-subtle);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--ssh-text) 18%, transparent);\n transition: transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1), background 160ms ease;\n content: "";\n}\n.dsh-ssh-workspace input[type="checkbox"]:checked,\n.dsh-ssh-dialog input[type="checkbox"]:checked {\n border-color: var(--ssh-accent-strong);\n background: var(--ssh-accent-strong);\n}\n.dsh-ssh-workspace input[type="checkbox"]:checked::after,\n.dsh-ssh-dialog input[type="checkbox"]:checked::after {\n background: #f7fbfa;\n transform: translateX(14px);\n}\n.dsh-ssh-workspace :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-activity-panel :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-dialog :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-sidebar :where(button, input, select, textarea, a):focus-visible,\n.dsh-ssh-activity-trigger:focus-visible {\n outline: 2px solid var(--ssh-focus-ring, rgba(84, 125, 120, 0.62));\n outline-offset: 2px;\n}\n.dsh-ssh-scroll-surface {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n scrollbar-gutter: stable;\n}\n.dsh-ssh-scroll-surface:hover {\n scrollbar-color: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34)) transparent;\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar-track {\n background: transparent;\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar-thumb {\n border-radius: 999px;\n background: transparent;\n}\n.dsh-ssh-scroll-surface:hover::-webkit-scrollbar-thumb {\n background: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34));\n}\n.dsh-ssh-scroll-surface::-webkit-scrollbar-thumb:hover {\n background: var(--ssh-scrollbar-hover, rgba(112, 122, 119, 0.54));\n}\n.dsh-ssh-workspace {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n color: var(--ssh-text);\n background: var(--ssh-surface);\n font-family: var(--ssh-font-sans);\n}\n.dsh-ssh-toolbar {\n display: grid;\n grid-template-columns: minmax(180px, 1fr) auto minmax(180px, 1fr);\n align-items: center;\n gap: 16px;\n min-height: 62px;\n padding: 0 20px;\n border-bottom: 1px solid var(--ssh-border);\n background: color-mix(in srgb, var(--dpu-toolbar-surface) 96%, transparent);\n box-shadow: 0 1px 0 color-mix(in srgb, #fff 42%, transparent);\n}\n.dsh-ssh-brand {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.dsh-ssh-brand-glyph {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 22%, transparent);\n border-radius: 10px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 6%, transparent);\n}\n.dsh-ssh-brand > span:last-child {\n display: grid;\n gap: 1px;\n}\n.dsh-ssh-brand strong {\n font-size: 14px;\n font-weight: 650;\n}\n.dsh-ssh-brand small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-segments {\n display: flex;\n gap: 2px;\n padding: 3px;\n border: 1px solid color-mix(in srgb, var(--ssh-border) 80%, transparent);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-text) 3.5%, transparent);\n}\n.dsh-ssh-segments button {\n min-width: 74px;\n height: 28px;\n padding: 0 12px;\n border: 0;\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: transparent;\n font-size: 12px;\n cursor: pointer;\n}\n.dsh-ssh-segments button:hover {\n color: var(--ssh-text);\n}\n.dsh-ssh-segments button.is-active {\n color: var(--ssh-text);\n background: var(--ssh-surface-raised);\n box-shadow:\n 0 1px 2px color-mix(in srgb, var(--ssh-text) 8%, transparent),\n inset 0 0 0 1px color-mix(in srgb, #fff 32%, transparent);\n}\n.dsh-ssh-toolbar > .dsh-ssh-primary-button {\n justify-self: end;\n}\n.dsh-ssh-primary-button,\n.dsh-ssh-secondary-button,\n.dsh-ssh-danger-button,\n.dsh-ssh-small-primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 30px;\n padding: 0 12px;\n border-radius: 8px;\n font: 500 12px/1 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-primary-button,\n.dsh-ssh-small-primary {\n border: 1px solid\n color-mix(in srgb, var(--ssh-accent-strong) 64%, transparent);\n color: #f6fbf9;\n background: var(--ssh-accent-strong);\n}\n.dsh-ssh-primary-button:hover,\n.dsh-ssh-small-primary:hover {\n background: color-mix(in srgb, var(--ssh-accent-strong) 88%, #000);\n}\n.dsh-ssh-primary-button:disabled {\n opacity: 0.55;\n cursor: default;\n}\n.dsh-ssh-secondary-button {\n border: 1px solid var(--ssh-border);\n color: var(--ssh-text);\n background: var(--ssh-surface-raised);\n}\n.dsh-ssh-secondary-button:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-danger-button {\n border: 1px solid color-mix(in srgb, var(--ssh-danger) 28%, transparent);\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n}\n.dsh-ssh-danger-button:hover:not(:disabled) {\n border-color: color-mix(in srgb, var(--ssh-danger) 42%, transparent);\n background: color-mix(in srgb, var(--ssh-danger) 11%, transparent);\n}\n.dsh-ssh-danger-button:disabled { opacity: .5; cursor: not-allowed; }\n.dsh-ssh-small-primary {\n min-height: 26px;\n padding: 0 10px;\n}\n.dsh-ssh-profile-panel,\n.dsh-ssh-inspector {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n background: color-mix(in srgb, var(--ssh-surface-raised) 98%, var(--ssh-surface));\n}\n.dsh-ssh-profile-panel {\n border-right: 1px solid var(--ssh-border);\n}\n.dsh-ssh-inspector {\n border-left: 1px solid var(--ssh-border);\n}\n.dsh-ssh-main-panel {\n min-width: 0;\n min-height: 0;\n overflow: auto;\n background: color-mix(in srgb, var(--ssh-surface) 98%, var(--ssh-surface-raised));\n}\n.dsh-ssh-panel-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 60px;\n padding: 0 14px;\n border-bottom: 1px solid\n color-mix(in srgb, var(--ssh-border) 74%, transparent);\n}\n.dsh-ssh-panel-heading > span {\n display: grid;\n gap: 2px;\n}\n.dsh-ssh-panel-heading strong {\n font-size: 13px;\n font-weight: 650;\n}\n.dsh-ssh-panel-heading small {\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-search {\n padding: 10px 10px 6px;\n}\n.dsh-ssh-search input,\n.dsh-ssh-field input,\n.dsh-ssh-field select,\n.dsh-ssh-field textarea,\n.dsh-ssh-number-row input {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n outline: 0;\n color: var(--ssh-text);\n background: color-mix(in srgb, var(--ssh-surface-raised) 92%, transparent);\n font: 400 12px/1.35 var(--ssh-font-sans);\n}\n.dsh-ssh-search input {\n height: 30px;\n padding: 0 10px;\n}\n.dsh-ssh-search input:focus,\n.dsh-ssh-field input:focus,\n.dsh-ssh-field select:focus,\n.dsh-ssh-field textarea:focus,\n.dsh-ssh-number-row input:focus {\n border-color: color-mix(in srgb, var(--ssh-accent) 65%, transparent);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ssh-accent) 12%, transparent);\n}\n.dsh-ssh-profile-list {\n display: grid;\n align-content: start;\n gap: 3px;\n min-height: 0;\n overflow: auto;\n padding: 4px 7px 12px;\n}\n.dsh-ssh-profile-group {\n min-width: 0;\n}\n.dsh-ssh-profile-group-heading {\n display: grid;\n grid-template-columns: 14px 18px minmax(0, 1fr);\n align-items: center;\n gap: 5px;\n width: 100%;\n min-height: 34px;\n padding: 0 6px;\n border: 0;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n text-align: left;\n cursor: pointer;\n}\n.dsh-ssh-profile-group-heading:hover {\n color: var(--ssh-text);\n background: color-mix(\n in srgb,\n var(--ssh-hover) 58%,\n transparent\n );\n}\n.dsh-ssh-profile-group-chevron {\n display: grid;\n place-items: center;\n transition: transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n.dsh-ssh-profile-group-chevron[data-open="false"] {\n transform: rotate(-90deg);\n}\n.dsh-ssh-profile-group-folder {\n display: grid;\n place-items: center;\n color: color-mix(\n in srgb,\n var(--ssh-accent-strong) 72%,\n var(--ssh-text-muted)\n );\n}\n.dsh-ssh-profile-group-copy {\n display: flex;\n min-width: 0;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n.dsh-ssh-profile-group-copy strong {\n overflow: hidden;\n font-size: 11px;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-profile-group-copy small {\n display: grid;\n place-items: center;\n min-width: 16px;\n height: 16px;\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-profile-group-children {\n display: grid;\n gap: 1px;\n margin-left: 13px;\n padding-left: 6px;\n border-left: 1px solid color-mix(in srgb, var(--ssh-border) 66%, transparent);\n animation: dsh-ssh-group-open 140ms ease-out both;\n}\n.dsh-ssh-profile-empty {\n margin: 18px 8px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n text-align: center;\n}\n.dsh-ssh-profile-row {\n position: relative;\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 10px;\n align-items: center;\n gap: 10px;\n width: 100%;\n min-height: 48px;\n padding: 5px 7px;\n border: 1px solid transparent;\n border-radius: 10px;\n color: inherit;\n background: transparent;\n text-align: left;\n cursor: pointer;\n transition:\n background 140ms ease,\n border-color 140ms ease,\n transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n.dsh-ssh-profile-row::before {\n position: absolute;\n width: 2px;\n left: 0;\n top: 11px;\n bottom: 11px;\n border-radius: 2px;\n background: var(--ssh-accent);\n opacity: 0;\n transform: scaleY(0.45);\n transition:\n opacity 140ms ease,\n transform 170ms cubic-bezier(0.2, 0.8, 0.2, 1);\n content: "";\n}\n.dsh-ssh-profile-row:hover {\n background: color-mix(\n in srgb,\n var(--ssh-hover) 74%,\n transparent\n );\n}\n.dsh-ssh-profile-row.is-active {\n border-color: color-mix(in srgb, var(--ssh-accent) 16%, transparent);\n background: color-mix(in srgb, var(--ssh-accent) 7%, transparent);\n transform: translateX(2px);\n}\n.dsh-ssh-profile-row.is-active::before {\n opacity: 0.8;\n transform: scaleY(1);\n}\n.dsh-ssh-host-monogram {\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: var(--ssh-surface-raised);\n font-size: 11px;\n font-weight: 650;\n}\n.dsh-ssh-profile-row > span:nth-child(2) {\n display: grid;\n min-width: 0;\n gap: 3px;\n}\n.dsh-ssh-profile-row strong,\n.dsh-ssh-profile-row small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-profile-row strong {\n font-size: 12px;\n font-weight: 550;\n}\n.dsh-ssh-profile-row small {\n color: var(--ssh-text-subtle);\n font:\n 10px/1.2 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-credential-state {\n width: 6px;\n height: 6px;\n border: 1px solid var(--ssh-text-subtle);\n border-radius: 50%;\n}\n.dsh-ssh-credential-state.is-ready {\n border-color: #5c8a76;\n background: #5c8a76;\n}\n.dsh-ssh-terminal-pane,\n.dsh-ssh-forward-pane,\n.dsh-ssh-settings-pane {\n box-sizing: border-box;\n display: flex;\n min-width: 0;\n min-height: 100%;\n flex-direction: column;\n padding: 0 18px 18px;\n}\n.dsh-ssh-content-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 20px;\n min-height: 76px;\n}\n.dsh-ssh-content-heading h1 {\n margin: 0;\n font-size: 16px;\n font-weight: 650;\n letter-spacing: -0.01em;\n}\n.dsh-ssh-content-heading p {\n margin: 4px 0 0;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-heading-actions {\n display: flex;\n align-items: center;\n gap: 7px;\n}\n.dsh-ssh-title-line {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.dsh-ssh-live-dot {\n width: 7px;\n height: 7px;\n border: 1px solid var(--ssh-text-subtle);\n border-radius: 50%;\n}\n.dsh-ssh-live-dot.is-connected {\n border-color: #4d8d77;\n background: #4d8d77;\n box-shadow: 0 0 0 3px color-mix(in srgb, #4d8d77 12%, transparent);\n}\n.dsh-ssh-live-dot.is-connecting {\n border-color: #a27e45;\n background: #a27e45;\n}\n.dsh-ssh-live-dot.is-error {\n border-color: #a85a55;\n background: #a85a55;\n}\n.dsh-ssh-terminal-frame {\n display: flex;\n min-height: 360px;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid #283330;\n border-radius: 12px;\n background: #0c1212;\n box-shadow: 0 12px 30px color-mix(in srgb, #0d1513 12%, transparent);\n}\n.dsh-ssh-xterm {\n box-sizing: border-box;\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n padding: 12px 12px 15px;\n}\n.dsh-ssh-terminal-viewport {\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n}\n.dsh-ssh-terminal-viewport .xterm {\n height: 100%;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n scrollbar-gutter: stable;\n}\n.dsh-ssh-terminal-viewport:hover .xterm-viewport {\n scrollbar-color: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34)) transparent;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar {\n width: 5px;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar-track {\n background: transparent;\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar-thumb {\n border-radius: 999px;\n background: transparent;\n}\n.dsh-ssh-terminal-viewport:hover .xterm-viewport::-webkit-scrollbar-thumb {\n background: var(--ssh-scrollbar-thumb, rgba(112, 122, 119, 0.34));\n}\n.dsh-ssh-terminal-viewport .xterm-viewport::-webkit-scrollbar-thumb:hover {\n background: var(--ssh-scrollbar-hover, rgba(112, 122, 119, 0.54));\n}\n.dsh-ssh-terminal-status {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 28px;\n padding: 0 11px;\n border-top: 1px solid #ffffff12;\n color: #879691;\n background: #0d1413;\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-banner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 8px 18px;\n border-bottom: 1px solid transparent;\n font-size: 11px;\n}\n.dsh-ssh-banner > span {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.dsh-ssh-banner code {\n font-family: var(--ssh-font-mono), monospace;\n}\n.dsh-ssh-banner button:not(.dsh-ssh-small-primary) {\n display: grid;\n place-items: center;\n border: 0;\n color: inherit;\n background: transparent;\n}\n.dsh-ssh-banner.is-error {\n border-color: color-mix(in srgb, var(--ssh-danger) 22%, transparent);\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, var(--ssh-surface));\n}\n.dsh-ssh-banner.is-warning {\n border-color: color-mix(in srgb, var(--ssh-warning) 22%, transparent);\n color: color-mix(\n in srgb,\n var(--ssh-warning) 85%,\n var(--ssh-text)\n );\n background: color-mix(in srgb, var(--ssh-warning) 8%, var(--ssh-surface));\n}\n.dsh-ssh-inline-error {\n margin: 0 0 10px;\n padding: 7px 10px;\n border-radius: 7px;\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n font-size: 11px;\n}\n.dsh-ssh-empty-state {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 100%;\n padding: 40px;\n text-align: center;\n}\n.dsh-ssh-empty-state > span {\n display: grid;\n place-items: center;\n width: 48px;\n height: 48px;\n margin-bottom: 14px;\n border: 1px solid var(--ssh-border);\n border-radius: 14px;\n color: var(--ssh-accent);\n background: var(--ssh-surface-raised);\n}\n.dsh-ssh-empty-state h1 {\n margin: 0;\n font-size: 16px;\n}\n.dsh-ssh-empty-state p {\n max-width: 420px;\n margin: 8px 0 18px;\n color: var(--ssh-text-muted);\n font-size: 12px;\n line-height: 1.6;\n}\n.dsh-ssh-inspector {\n overflow: auto;\n}\n.dsh-ssh-session-chip {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 12px 12px 4px;\n padding: 10px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 86%, transparent);\n}\n.dsh-ssh-session-chip > span:nth-child(2) {\n display: grid;\n gap: 2px;\n}\n.dsh-ssh-session-chip strong {\n font-size: 11px;\n}\n.dsh-ssh-session-chip small {\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-session-pulse {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--ssh-accent);\n}\n.dsh-ssh-fieldset {\n display: grid;\n gap: 3px;\n margin: 13px 12px 0;\n padding: 0;\n border: 0;\n}\n.dsh-ssh-fieldset legend {\n margin-bottom: 5px;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n font-weight: 600;\n}\n.dsh-ssh-check-row,\n.dsh-ssh-radio-row {\n display: flex;\n align-items: center;\n gap: 10px;\n min-height: 38px;\n padding: 3px 5px;\n border-radius: 8px;\n}\n.dsh-ssh-check-row:hover,\n.dsh-ssh-radio-row:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-check-row > input,\n.dsh-ssh-radio-row > input {\n position: absolute;\n width: 1px;\n height: 1px;\n opacity: 0;\n pointer-events: none;\n}\n.dsh-ssh-check-row > i,\n.dsh-ssh-radio-row > i {\n position: relative;\n display: grid;\n place-items: center;\n width: 16px;\n height: 16px;\n flex: none;\n border: 1px solid color-mix(in srgb, var(--ssh-text-muted) 54%, transparent);\n background: var(--ssh-control);\n transition: border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;\n}\n.dsh-ssh-check-row > i {\n border-radius: 5px;\n}\n.dsh-ssh-radio-row > i {\n border-radius: 50%;\n}\n.dsh-ssh-check-row > i::after {\n width: 7px;\n height: 4px;\n margin-top: -2px;\n border: solid #f7fbfa;\n border-width: 0 0 2px 2px;\n content: "";\n opacity: 0;\n transform: rotate(-45deg) scale(0.7);\n transition: opacity 120ms ease, transform 120ms ease;\n}\n.dsh-ssh-radio-row > i::after {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #f7fbfa;\n content: "";\n opacity: 0;\n transform: scale(0.55);\n transition: opacity 120ms ease, transform 120ms ease;\n}\n.dsh-ssh-check-row > input:checked + i,\n.dsh-ssh-radio-row > input:checked + i {\n border-color: var(--ssh-accent-strong);\n background: var(--ssh-accent-strong);\n}\n.dsh-ssh-check-row > input:checked + i::after,\n.dsh-ssh-radio-row > input:checked + i::after {\n opacity: 1;\n transform: rotate(-45deg) scale(1);\n}\n.dsh-ssh-radio-row > input:checked + i::after {\n transform: scale(1);\n}\n.dsh-ssh-check-row > input:focus-visible + i,\n.dsh-ssh-radio-row > input:focus-visible + i {\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--ssh-focus-ring) 34%, transparent);\n}\n.dsh-ssh-check-row > span,\n.dsh-ssh-radio-row > span {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-check-row strong,\n.dsh-ssh-radio-row strong {\n font-size: 11px;\n font-weight: 550;\n}\n.dsh-ssh-check-row small,\n.dsh-ssh-radio-row small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-switch-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 20px;\n min-height: 48px;\n margin: 13px 12px 0;\n padding: 7px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n}\n.dsh-ssh-switch-row > span {\n display: grid;\n gap: 3px;\n}\n.dsh-ssh-switch-row strong {\n font-size: 11px;\n font-weight: 550;\n}\n.dsh-ssh-switch-row small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n line-height: 1.35;\n}\n.dsh-ssh-switch-row input {\n width: 34px;\n height: 20px;\n}\n.dsh-ssh-inspector-hint,\n.dsh-ssh-save-state {\n margin: 10px 12px 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-inspector-empty {\n margin: 14px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n line-height: 1.55;\n}\n.dsh-ssh-forward-list {\n display: grid;\n align-content: start;\n gap: 5px;\n}\n.dsh-ssh-forward-row {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr) auto 28px auto 28px;\n align-items: center;\n gap: 8px;\n min-height: 54px;\n padding: 6px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 88%, transparent);\n}\n.dsh-ssh-forward-kind {\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n color: var(--ssh-accent-strong);\n font:\n 600 11px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-forward-copy {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n.dsh-ssh-forward-copy strong {\n font-size: 12px;\n}\n.dsh-ssh-forward-copy small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-state-label {\n padding: 3px 7px;\n border-radius: 999px;\n color: var(--ssh-text-subtle);\n background: color-mix(\n in srgb,\n var(--ssh-text) 5%,\n transparent\n );\n font-size: 10px;\n}\n.dsh-ssh-state-label.is-running {\n color: #497967;\n background: color-mix(in srgb, #5d957f 10%, transparent);\n}\n.dsh-ssh-state-label.is-error {\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 8%, transparent);\n}\n.dsh-ssh-table-empty {\n display: grid;\n place-items: center;\n min-height: 180px;\n border: 1px dashed var(--ssh-border);\n border-radius: 12px;\n color: var(--ssh-text-subtle);\n font-size: 12px;\n}\n.dsh-ssh-settings-group {\n display: grid;\n max-width: 680px;\n gap: 8px;\n}\n.dsh-ssh-settings-group .dsh-ssh-switch-row {\n margin: 0;\n}\n.dsh-ssh-number-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 120px 32px;\n align-items: center;\n gap: 8px;\n min-height: 60px;\n padding: 6px 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 80%, transparent);\n}\n.dsh-ssh-number-row > span {\n display: grid;\n gap: 3px;\n}\n.dsh-ssh-number-row strong {\n font-size: 11px;\n}\n.dsh-ssh-number-row small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-number-row input {\n height: 30px;\n padding: 0 8px;\n}\n.dsh-ssh-number-row em {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n font-style: normal;\n}\n.dsh-ssh-dialog-layer {\n position: fixed;\n z-index: 1000;\n inset: 0;\n display: grid;\n place-items: center;\n padding: 28px;\n background: color-mix(in srgb, #111817 28%, transparent);\n backdrop-filter: blur(3px);\n}\n.dsh-ssh-dialog {\n box-sizing: border-box;\n width: min(620px, calc(100vw - 40px));\n max-height: min(760px, calc(100vh - 40px));\n overflow: auto;\n border: 1px solid\n color-mix(in srgb, var(--ssh-text) 15%, transparent);\n border-radius: 14px;\n color: var(--ssh-text);\n background: var(--ssh-surface);\n box-shadow: 0 24px 70px #07100d2e;\n}\n.dsh-ssh-dialog > header {\n position: sticky;\n z-index: 1;\n top: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 64px;\n padding: 0 18px;\n border-bottom: 1px solid\n var(\n --ssh-border,\n color-mix(in srgb, var(--ssh-text) 10%, transparent)\n );\n background: color-mix(\n in srgb,\n var(--ssh-surface) 94%,\n transparent\n );\n backdrop-filter: blur(12px);\n}\n.dsh-ssh-dialog h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 650;\n letter-spacing: -0.01em;\n}\n.dsh-ssh-dialog header p {\n margin: 3px 0 0;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-form {\n --ssh-border: color-mix(\n in srgb,\n var(--ssh-text) 11%,\n transparent\n );\n --ssh-accent: #547d78;\n --ssh-accent-strong: #406e67;\n --ssh-danger: #9c504c;\n display: grid;\n gap: 15px;\n padding: 20px 18px 18px;\n}\n.dsh-ssh-form-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n}\n.dsh-ssh-form-grid.is-host {\n grid-template-columns: minmax(0, 1fr) 110px;\n}\n.dsh-ssh-field {\n display: grid;\n gap: 5px;\n min-width: 0;\n color: var(--ssh-text-muted);\n font-size: 12px;\n font-weight: 600;\n}\n.dsh-ssh-field input,\n.dsh-ssh-field select {\n height: 38px;\n padding: 0 10px;\n font-size: 13px;\n}\n.dsh-ssh-field textarea {\n padding: 10px 10px;\n font-size: 13px;\n line-height: 1.5;\n resize: vertical;\n font-family: var(--ssh-font-mono), monospace;\n}\n.dsh-ssh-field small {\n color: var(--ssh-text-subtle);\n font-size: 11px;\n line-height: 1.4;\n font-weight: 400;\n}\n.dsh-ssh-form-divider {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 2px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n font-weight: 600;\n}\n.dsh-ssh-form-divider:after {\n height: 1px;\n flex: 1;\n background: var(--ssh-border);\n content: "";\n}\n.dsh-ssh-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 5px;\n}\n.dsh-ssh-dialog-actions .dsh-ssh-primary-button,\n.dsh-ssh-dialog-actions .dsh-ssh-secondary-button,\n.dsh-ssh-dialog-actions .dsh-ssh-danger-button {\n min-height: 34px;\n font-size: 13px;\n}\n.dsh-ssh-delete-profile {\n display: grid;\n grid-template-columns: 38px minmax(0, 1fr);\n gap: 10px 12px;\n padding: 20px 18px 18px;\n}\n.dsh-ssh-delete-profile-mark {\n display: grid;\n place-items: center;\n width: 38px;\n height: 38px;\n border: 1px solid color-mix(in srgb, var(--ssh-danger) 22%, transparent);\n border-radius: 11px;\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n}\n.dsh-ssh-delete-profile > div:nth-child(2) { min-width: 0; }\n.dsh-ssh-delete-profile > div:nth-child(2) strong { font-size: 13px; }\n.dsh-ssh-delete-profile > div:nth-child(2) p,\n.dsh-ssh-delete-profile-block p { margin: 4px 0 0; color: var(--ssh-text-subtle); font-size: 11px; line-height: 1.55; }\n.dsh-ssh-delete-profile-block,\n.dsh-ssh-delete-profile > .dsh-ssh-inline-error,\n.dsh-ssh-delete-profile > .dsh-ssh-dialog-actions { grid-column: 1 / -1; }\n.dsh-ssh-delete-profile-block {\n border: 1px solid color-mix(in srgb, var(--ssh-warning) 24%, transparent);\n border-radius: 9px;\n padding: 10px 11px;\n background: color-mix(in srgb, var(--ssh-warning) 7%, transparent);\n}\n.dsh-ssh-delete-profile-block strong { color: color-mix(in srgb, var(--ssh-warning) 82%, var(--ssh-text)); font-size: 11px; }\n.dsh-ssh-form .dsh-ssh-switch-row {\n margin: 0;\n}\n.dsh-ssh-form .dsh-ssh-inline-error {\n margin: 0;\n}\n@container dpu-workspace (max-width: 1120px) {\n .dsh-ssh-toolbar {\n grid-template-columns: 1fr auto auto;\n }\n .dsh-ssh-brand small {\n display: none;\n }\n}\n@container dpu-workspace (max-width: 820px) {\n .dsh-ssh-toolbar {\n grid-template-columns: 1fr auto;\n gap: 8px;\n padding: 0 12px;\n }\n .dsh-ssh-segments {\n grid-row: 2;\n grid-column: 1/-1;\n margin-bottom: 8px;\n overflow-x: auto;\n scrollbar-width: none;\n }\n .dsh-ssh-segments::-webkit-scrollbar {\n display: none;\n }\n .dsh-ssh-segments button {\n min-width: 72px;\n height: 36px;\n flex: none;\n }\n .dsh-ssh-toolbar {\n padding-top: 8px;\n }\n .dsh-ssh-content-heading {\n align-items: flex-start;\n flex-direction: column;\n padding: 14px 0;\n }\n .dsh-ssh-heading-actions {\n flex-wrap: wrap;\n }\n .dsh-ssh-forward-row {\n grid-template-columns: 32px minmax(0, 1fr) auto;\n }\n .dsh-ssh-forward-row > .dsh-ssh-icon-button,\n .dsh-ssh-forward-row > .dsh-ssh-small-primary {\n display: none;\n }\n}\n@container dpu-workspace (max-width: 520px) {\n .dsh-ssh-toolbar {\n padding-right: max(10px, env(safe-area-inset-right));\n padding-left: max(10px, env(safe-area-inset-left));\n }\n .dsh-ssh-toolbar > .dsh-ssh-primary-button {\n width: 40px;\n min-height: 40px;\n padding: 0;\n }\n .dsh-ssh-toolbar > .dsh-ssh-primary-button span {\n display: none;\n }\n .dsh-ssh-terminal-pane,\n .dsh-ssh-forward-pane,\n .dsh-ssh-settings-pane,\n .dsh-ssh-vault-pane,\n .dsh-ssh-proxy-pane,\n .dsh-ssh-profile-sftp-pane {\n padding-right: 10px;\n padding-left: 10px;\n }\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns,\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n grid-template-columns: minmax(120px, 1fr) 64px;\n }\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns > :nth-child(3),\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row > :nth-child(3) {\n display: none;\n }\n .dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n min-height: 44px;\n }\n .dsh-ssh-number-row {\n grid-template-columns: minmax(0, 1fr) 86px 28px;\n }\n}\n@media (max-width: 600px) {\n .dsh-ssh-dialog-layer {\n align-items: stretch;\n padding: 0;\n }\n .dsh-ssh-dialog {\n width: 100%;\n max-height: 100dvh;\n border: 0;\n border-radius: 0;\n }\n .dsh-ssh-form-grid,\n .dsh-ssh-form-grid.is-host {\n grid-template-columns: 1fr;\n }\n .dsh-ssh-dialog-actions {\n position: sticky;\n bottom: 0;\n flex-wrap: wrap;\n padding: 10px 0 max(10px, env(safe-area-inset-bottom));\n background: var(--ssh-surface);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .dsh-ssh-disclosure {\n transition: none;\n }\n}\n@media (prefers-reduced-transparency: reduce) {\n .dsh-ssh-dialog-layer {\n backdrop-filter: none;\n }\n .dsh-ssh-dialog > header {\n backdrop-filter: none;\n }\n}\n\n.dsh-ssh-activity-trigger {\n box-sizing: border-box;\n display: inline-grid;\n place-items: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n cursor: pointer;\n}\n.dsh-ssh-activity-trigger:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-activity-trigger.is-active {\n border-color: color-mix(in srgb, var(--ssh-accent, #547d78) 16%, transparent);\n color: var(--ssh-accent-strong, #406e67);\n background: color-mix(in srgb, var(--ssh-accent, #547d78) 8%, transparent);\n}\n.dsh-ssh-panel-right-icon {\n transform: rotate(180deg);\n}\n.dsh-ssh-activity-panel {\n --ssh-activity-border: color-mix(\n in srgb,\n var(--ssh-text) 10%,\n transparent\n );\n box-sizing: border-box;\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n color: var(--ssh-text);\n background: color-mix(in srgb, var(--ssh-activity-surface) 98%, var(--ssh-activity-surface-raised));\n font-family: var(--ssh-font-sans);\n animation: dsh-ssh-panel-enter 180ms cubic-bezier(0.2, 0.8, 0.2, 1) both;\n}\n.dsh-ssh-activity-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 64px;\n padding: 0 14px 0 16px;\n border-bottom: 1px solid var(--ssh-activity-border);\n background: color-mix(in srgb, var(--ssh-activity-surface-raised) 98%, var(--ssh-activity-surface));\n}\n.dsh-ssh-activity-title {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 10px;\n}\n.dsh-ssh-activity-title > span:last-child {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-activity-mark {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n flex: none;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 20%, transparent);\n border-radius: 10px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 5%, transparent);\n}\n.dsh-ssh-activity-header strong {\n font-size: 14px;\n font-weight: 650;\n}\n.dsh-ssh-activity-header small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1.25 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-activity-tabs {\n display: grid;\n grid-auto-columns: minmax(0, 1fr);\n grid-auto-flow: column;\n gap: 2px;\n margin: 12px 14px 0;\n padding: 3px;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 11px;\n background: color-mix(\n in srgb,\n var(--ssh-text) 3%,\n transparent\n );\n}\n.dsh-ssh-activity-tabs button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n min-width: 0;\n min-height: 32px;\n padding: 0 6px;\n border: 0;\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: transparent;\n font: 550 11px/1 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-activity-tabs button:hover {\n color: var(--ssh-text);\n}\n.dsh-ssh-activity-tabs button.is-active {\n color: var(--ssh-text);\n background: var(--ssh-activity-surface-raised);\n box-shadow: 0 1px 3px\n color-mix(in srgb, var(--ssh-text) 9%, transparent);\n}\n.dsh-ssh-activity-body {\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n padding: 14px 14px 16px;\n}\n.dsh-ssh-activity-body > * {\n width: 100%;\n}\n.dsh-ssh-activity-state {\n margin: 20px 4px;\n color: var(--ssh-text-subtle);\n font-size: 11px;\n}\n.dsh-ssh-sftp {\n display: flex;\n min-height: 100%;\n flex-direction: column;\n}\n.dsh-ssh-sftp-hostbar {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr);\n align-items: center;\n gap: 8px;\n padding: 0 2px 10px;\n}\n.dsh-ssh-sftp-hostbar label {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-sftp-hostbar select {\n min-width: 0;\n padding: 0;\n border: 0;\n outline: 0;\n color: var(--ssh-text);\n background: transparent;\n font: 600 11px/1.25 var(--ssh-font-sans);\n cursor: pointer;\n}\n.dsh-ssh-sftp-hostbar small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1.2 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sftp-pathbar {\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 30px;\n gap: 5px;\n margin-bottom: 10px;\n}\n.dsh-ssh-sftp-pathbar.has-upload {\n grid-template-columns: 30px minmax(0, 1fr) 30px auto;\n}\n.dsh-ssh-sftp-pathbar button,\n.dsh-ssh-sftp-pathbar input {\n box-sizing: border-box;\n height: 30px;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 8px;\n color: var(--ssh-text);\n background: var(--ssh-activity-surface-raised);\n}\n.dsh-ssh-sftp-pathbar button {\n display: grid;\n place-items: center;\n padding: 0;\n cursor: pointer;\n}\n.dsh-ssh-sftp-pathbar button:disabled {\n opacity: 0.35;\n cursor: default;\n}\n.dsh-ssh-sftp-pathbar input {\n min-width: 0;\n padding: 0 10px;\n outline: 0;\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-sftp-pathbar .dsh-ssh-sftp-upload-button {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 0 10px;\n color: #f6fbf9;\n background: var(--ssh-accent-strong, #406e67);\n font: 550 10px/1 var(--ssh-font-sans);\n}\n.dsh-ssh-directory-error {\n margin: 0 0 8px;\n padding: 7px 8px;\n border-radius: 7px;\n color: var(--ssh-danger, #9c504c);\n background: color-mix(in srgb, var(--ssh-danger, #9c504c) 7%, transparent);\n font-size: 10px;\n line-height: 1.4;\n}\n.dsh-ssh-sftp-table {\n min-height: 0;\n flex: 1;\n overflow: auto;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 11px;\n background: color-mix(in srgb, var(--ssh-activity-surface-raised) 99%, var(--ssh-activity-surface));\n box-shadow: 0 8px 24px color-mix(in srgb, var(--ssh-text) 3%, transparent);\n}\n.dsh-ssh-sftp-columns,\n.dsh-ssh-sftp-row {\n display: grid;\n grid-template-columns: minmax(120px, 1fr) 58px 72px;\n align-items: center;\n gap: 7px;\n}\n.dsh-ssh-sftp-columns {\n position: sticky;\n z-index: 1;\n top: 0;\n min-height: 32px;\n padding: 0 10px;\n border-bottom: 1px solid var(--ssh-activity-border);\n color: var(--ssh-text-subtle);\n background: var(--ssh-activity-surface);\n font-size: 10px;\n}\n.dsh-ssh-sftp-row {\n box-sizing: border-box;\n width: 100%;\n min-height: 38px;\n padding: 0 10px;\n border: 0;\n border-bottom: 1px solid\n color-mix(in srgb, var(--ssh-activity-border) 55%, transparent);\n color: var(--ssh-text);\n background: transparent;\n text-align: left;\n transition:\n background 120ms ease,\n transform 120ms ease;\n}\n.dsh-ssh-sftp-row:last-child {\n border-bottom: 0;\n}\n.dsh-ssh-sftp-row.is-directory {\n cursor: pointer;\n}\n.dsh-ssh-sftp-row.is-directory:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-sftp-row:disabled {\n opacity: 1;\n}\n.dsh-ssh-sftp-row > span {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 7px;\n}\n.dsh-ssh-sftp-row svg {\n flex: none;\n color: var(--ssh-text-muted);\n}\n.dsh-ssh-sftp-row.is-directory svg {\n color: var(--ssh-accent-strong, #406e67);\n}\n.dsh-ssh-sftp-row strong {\n overflow: hidden;\n font-size: 11px;\n font-weight: 500;\n line-height: 1.3;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sftp-row small {\n overflow: hidden;\n color: var(--ssh-text-subtle);\n font:\n 10px/1.25 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-sftp-state {\n display: grid;\n place-items: center;\n min-height: 160px;\n margin: 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-activity-empty {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 240px;\n padding: 24px;\n text-align: center;\n}\n.dsh-ssh-activity-empty > svg {\n margin-bottom: 10px;\n color: var(--ssh-text-subtle);\n}\n.dsh-ssh-activity-empty strong {\n font-size: 12px;\n}\n.dsh-ssh-activity-empty p {\n max-width: 260px;\n margin: 7px 0 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n line-height: 1.5;\n}\n.dsh-ssh-terminal-observer {\n display: flex;\n height: 100%;\n min-height: 280px;\n overflow: hidden;\n flex-direction: column;\n border: 1px solid #283330;\n border-radius: 12px;\n background: #0c1212;\n box-shadow: 0 10px 26px color-mix(in srgb, #08100e 12%, transparent);\n}\n.dsh-ssh-terminal-observer-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 48px;\n padding: 0 12px;\n border-bottom: 1px solid #ffffff12;\n color: #dce5e1;\n background: #0d1413;\n}\n.dsh-ssh-terminal-observer-heading > span:first-child {\n display: grid;\n min-width: 0;\n gap: 3px;\n}\n.dsh-ssh-terminal-observer-heading strong,\n.dsh-ssh-terminal-observer-heading small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-terminal-observer-heading strong {\n font-size: 12px;\n font-weight: 600;\n}\n.dsh-ssh-terminal-observer-heading small {\n color: #879691;\n font:\n 10px/1.2 var(--ssh-font-mono),\n monospace;\n}\n.dsh-ssh-terminal-state {\n flex: none;\n color: #879691;\n font-size: 10px;\n}\n.dsh-ssh-terminal-state.is-running {\n color: #8fc0af;\n}\n.dsh-ssh-terminal-observer-actions {\n display: flex;\n flex: none;\n align-items: center;\n gap: 9px;\n}\n.dsh-ssh-terminal-close {\n display: inline-flex;\n min-width: 0;\n height: 28px;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 0 7px;\n border: 1px solid #ffffff14;\n border-radius: 7px;\n color: #9caaa5;\n background: #ffffff05;\n font: 550 9px/1 var(--ssh-font-sans);\n cursor: pointer;\n transition: color 120ms ease, border-color 120ms ease, background 120ms ease, transform 120ms ease;\n}\n.dsh-ssh-terminal-close:hover:not(:disabled) {\n border-color: color-mix(in srgb, #d98e88 28%, transparent);\n color: #e2a49f;\n background: color-mix(in srgb, #d98e88 8%, transparent);\n}\n.dsh-ssh-terminal-close:active:not(:disabled) { transform: scale(.97); }\n.dsh-ssh-terminal-close:disabled { opacity: .48; cursor: wait; }\n.dsh-ssh-terminal-screen {\n box-sizing: border-box;\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n padding: 11px 10px 15px;\n}\n.dsh-ssh-sftp-row:not(.is-directory) {\n cursor: pointer;\n}\n.dsh-ssh-file-preview {\n display: flex;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 10px;\n background: var(--ssh-activity-surface-raised);\n box-shadow: 0 8px 24px color-mix(in srgb, var(--ssh-text) 3%, transparent);\n}\n.dsh-ssh-file-preview > header {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr) 28px;\n align-items: center;\n gap: 7px;\n min-height: 42px;\n padding: 0 7px;\n border-bottom: 1px solid var(--ssh-activity-border);\n}\n.dsh-ssh-file-preview > header > span {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n.dsh-ssh-file-preview > header strong,\n.dsh-ssh-file-preview > header small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-file-preview > header strong {\n font-size: 10px;\n}\n.dsh-ssh-file-preview > header small {\n color: var(--ssh-text-subtle);\n font-size: 8px;\n}\n.dsh-ssh-file-preview > header > a {\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n text-decoration: none;\n}\n.dsh-ssh-file-preview > header > a:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-file-preview-body {\n display: flex;\n min-height: 0;\n flex: 1;\n overflow: auto;\n flex-direction: column;\n}\n.dsh-ssh-file-preview-body > pre {\n box-sizing: border-box;\n min-width: 100%;\n min-height: 100%;\n margin: 0;\n padding: 12px;\n color: var(--ssh-text);\n background: transparent;\n font:\n 10px/1.55 var(--ssh-font-mono),\n monospace;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n.dsh-ssh-markdown-preview {\n width: min(100%, 860px);\n margin: 0 auto;\n padding: 24px clamp(18px, 4vw, 44px) 48px;\n color: var(--ssh-text);\n font: 400 13px/1.72 var(--ssh-font-sans);\n overflow-wrap: anywhere;\n}\n.dsh-ssh-markdown-preview > :first-child {\n margin-top: 0;\n}\n.dsh-ssh-markdown-preview > :last-child {\n margin-bottom: 0;\n}\n.dsh-ssh-markdown-preview :where(h1, h2, h3, h4, h5, h6) {\n margin: 1.7em 0 0.62em;\n color: var(--ssh-text);\n font-weight: 650;\n line-height: 1.28;\n text-wrap: balance;\n}\n.dsh-ssh-markdown-preview h1 {\n padding-bottom: 0.42em;\n border-bottom: 1px solid var(--ssh-border);\n font-size: 22px;\n letter-spacing: -0.025em;\n}\n.dsh-ssh-markdown-preview h2 {\n font-size: 18px;\n letter-spacing: -0.018em;\n}\n.dsh-ssh-markdown-preview h3 {\n font-size: 15px;\n}\n.dsh-ssh-markdown-preview :where(h4, h5, h6) {\n font-size: 13px;\n}\n.dsh-ssh-markdown-preview :where(p, ul, ol, blockquote, pre, table) {\n margin: 0 0 1em;\n}\n.dsh-ssh-markdown-preview :where(ul, ol) {\n padding-left: 1.55em;\n}\n.dsh-ssh-markdown-preview li + li {\n margin-top: 0.28em;\n}\n.dsh-ssh-markdown-preview blockquote {\n padding: 0.2em 0 0.2em 1em;\n border-left: 3px solid color-mix(in srgb, var(--ssh-accent) 56%, transparent);\n color: var(--ssh-text-muted);\n}\n.dsh-ssh-markdown-preview :where(code, pre) {\n font-family: var(--ssh-font-mono);\n}\n.dsh-ssh-markdown-preview code {\n padding: 0.14em 0.34em;\n border-radius: 5px;\n background: color-mix(in srgb, var(--ssh-text) 7%, transparent);\n font-size: 0.9em;\n}\n.dsh-ssh-markdown-preview pre {\n overflow: auto;\n padding: 14px 16px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-text) 5%, var(--ssh-surface-raised));\n line-height: 1.55;\n}\n.dsh-ssh-markdown-preview pre code {\n padding: 0;\n background: transparent;\n font-size: 11px;\n}\n.dsh-ssh-markdown-preview a {\n color: var(--ssh-accent-strong);\n text-decoration-color: color-mix(in srgb, var(--ssh-accent) 44%, transparent);\n text-underline-offset: 0.18em;\n}\n.dsh-ssh-markdown-preview a:hover {\n text-decoration-color: currentColor;\n}\n.dsh-ssh-markdown-preview table {\n display: block;\n max-width: 100%;\n overflow: auto;\n border-collapse: collapse;\n font-size: 12px;\n}\n.dsh-ssh-markdown-preview :where(th, td) {\n padding: 7px 10px;\n border: 1px solid var(--ssh-border);\n text-align: left;\n white-space: nowrap;\n}\n.dsh-ssh-markdown-preview th {\n background: var(--ssh-control);\n font-weight: 600;\n}\n.dsh-ssh-markdown-preview hr {\n height: 1px;\n margin: 1.6em 0;\n border: 0;\n background: var(--ssh-border);\n}\n.dsh-ssh-markdown-preview img {\n max-width: 100%;\n height: auto;\n border-radius: 10px;\n}\n.dsh-ssh-file-preview-body > small {\n padding: 8px 12px;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-file-preview-body > img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n object-fit: contain;\n}\n.dsh-ssh-file-preview-body > iframe {\n width: 100%;\n height: 100%;\n min-height: 420px;\n border: 0;\n background: #fff;\n}\n.dsh-ssh-file-binary {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 240px;\n padding: 20px;\n text-align: center;\n}\n.dsh-ssh-file-binary > svg {\n margin-bottom: 10px;\n color: var(--ssh-text-subtle);\n}\n.dsh-ssh-file-binary strong {\n font-size: 11px;\n}\n.dsh-ssh-file-binary p {\n margin: 5px 0 12px;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-file-binary a {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 30px;\n padding: 0 10px;\n border: 1px solid var(--ssh-activity-border);\n border-radius: 8px;\n color: var(--ssh-text);\n background: var(--ssh-control);\n font-size: 10px;\n text-decoration: none;\n}\n.dsh-ssh-terminal-workbench {\n display: flex;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 7px;\n}\n.dsh-ssh-terminal-switcher {\n display: flex;\n flex: none;\n gap: 3px;\n max-width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 1px 1px 5px;\n}\n.dsh-ssh-terminal-switcher button {\n display: flex;\n min-width: 0;\n max-width: 150px;\n align-items: center;\n gap: 6px;\n height: 30px;\n padding: 0 10px;\n border: 1px solid transparent;\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: transparent;\n font: 500 10px/1 var(--ssh-font-sans);\n white-space: nowrap;\n cursor: pointer;\n flex: 0 0 min(120px, 42%);\n overflow: hidden;\n transition:\n color 120ms ease,\n background 120ms ease,\n border-color 120ms ease,\n transform 120ms ease;\n}\n.dsh-ssh-terminal-switcher-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-terminal-switcher button:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-terminal-switcher button.is-active {\n border-color: var(--ssh-activity-border);\n color: var(--ssh-text);\n background: color-mix(in srgb, var(--ssh-accent, #547d78) 8%, transparent);\n box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 38%, transparent);\n}\n.dsh-ssh-terminal-state-dot {\n width: 5px;\n height: 5px;\n flex: none;\n border: 1px solid #75827e;\n border-radius: 50%;\n}\n.dsh-ssh-terminal-state-dot.is-running {\n border-color: #6ca08d;\n background: #6ca08d;\n}\n.dsh-ssh-terminal-workbench .dsh-ssh-terminal-observer {\n height: auto;\n min-height: 0;\n flex: 1;\n}\n.dsh-ssh-terminal-input-error {\n margin: 0;\n padding: 6px 8px;\n border-radius: 6px;\n color: #d98e88;\n background: #351c1a;\n font-size: 10px;\n}\n\n.dsh-ssh-profile-row:active,\n.dsh-ssh-sftp-row:active,\n.dsh-ssh-terminal-switcher button:active {\n transform: scale(0.985);\n}\n.dsh-ssh-file-preview-body {\n animation: dsh-ssh-content-enter 160ms ease-out both;\n}\n.dsh-ssh-vault-pane,\n.dsh-ssh-proxy-pane {\n box-sizing: border-box;\n display: flex;\n min-height: 100%;\n flex-direction: column;\n padding: 0 18px 18px;\n}\n.dsh-ssh-vault-list,\n.dsh-ssh-proxy-list {\n display: grid;\n align-content: start;\n gap: 5px;\n}\n.dsh-ssh-vault-row,\n.dsh-ssh-proxy-row {\n display: grid;\n grid-template-columns: 34px minmax(160px, 1fr) auto 70px 28px 28px;\n align-items: center;\n gap: 10px;\n min-height: 56px;\n padding: 5px 8px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 82%, transparent);\n transition:\n background 140ms ease,\n border-color 140ms ease,\n transform 150ms ease;\n}\n.dsh-ssh-vault-row:hover,\n.dsh-ssh-proxy-row:hover {\n border-color: color-mix(in srgb, var(--ssh-accent) 18%, var(--ssh-border));\n background: color-mix(in srgb, var(--ssh-surface-raised) 94%, transparent);\n transform: translateY(-1px);\n}\n.dsh-ssh-vault-glyph {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 18%, var(--ssh-border));\n border-radius: 10px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 7%, transparent);\n}\n.dsh-ssh-vault-row > span:nth-child(2),\n.dsh-ssh-proxy-row > span:nth-child(2) {\n display: grid;\n min-width: 0;\n gap: 3px;\n}\n.dsh-ssh-vault-row strong,\n.dsh-ssh-vault-row small,\n.dsh-ssh-proxy-row strong,\n.dsh-ssh-proxy-row small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-vault-row strong,\n.dsh-ssh-proxy-row strong {\n font-size: 12px;\n font-weight: 600;\n}\n.dsh-ssh-vault-row small,\n.dsh-ssh-proxy-row small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-proxy-kind {\n padding: 3px 7px;\n border-radius: 6px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n font: 600 10px/1 var(--ssh-font-mono), monospace;\n}\n.dsh-ssh-vault-state {\n padding: 3px 7px;\n border-radius: 6px;\n color: var(--ssh-danger);\n background: color-mix(in srgb, var(--ssh-danger) 7%, transparent);\n font-size: 10px;\n}\n.dsh-ssh-vault-state.is-ready {\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n}\n.dsh-ssh-vault-empty {\n display: grid;\n place-items: center;\n align-content: center;\n min-height: 320px;\n text-align: center;\n}\n.dsh-ssh-vault-empty > span {\n display: grid;\n place-items: center;\n width: 46px;\n height: 46px;\n margin-bottom: 12px;\n border: 1px solid var(--ssh-border);\n border-radius: 14px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-surface-raised) 88%, transparent);\n box-shadow: 0 12px 30px\n color-mix(in srgb, var(--ssh-text) 5%, transparent);\n}\n.dsh-ssh-vault-empty strong {\n font-size: 13px;\n}\n.dsh-ssh-vault-empty p {\n max-width: 360px;\n margin: 7px 0 16px;\n color: var(--ssh-text-muted);\n font-size: 11px;\n line-height: 1.55;\n}\n.dsh-ssh-credential-reference {\n display: grid;\n grid-template-columns: 34px minmax(0, 1fr) auto;\n align-items: center;\n gap: 10px;\n min-height: 52px;\n padding: 5px 10px;\n border: 1px solid color-mix(in srgb, var(--ssh-accent) 18%, var(--ssh-border));\n border-radius: 10px;\n background: color-mix(\n in srgb,\n var(--ssh-accent) 6%,\n var(--ssh-surface-raised)\n );\n}\n.dsh-ssh-credential-reference > span:first-child {\n display: grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border-radius: 8px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n}\n.dsh-ssh-credential-reference > span:nth-child(2) {\n display: grid;\n gap: 3px;\n}\n.dsh-ssh-credential-reference strong {\n font-size: 11px;\n}\n.dsh-ssh-credential-reference small {\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-credential-reference em {\n color: var(--ssh-accent-strong);\n font-size: 10px;\n font-style: normal;\n}\n.dsh-ssh-jump-chain {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 10px;\n background: color-mix(in srgb, var(--ssh-surface-raised) 72%, transparent);\n}\n.dsh-ssh-jump-chain legend {\n padding: 0 5px;\n color: var(--ssh-text-muted);\n font-size: 10px;\n font-weight: 600;\n}\n.dsh-ssh-jump-chain > p {\n margin: 0;\n color: var(--ssh-text-subtle);\n font-size: 10px;\n}\n.dsh-ssh-jump-chain > div {\n display: grid;\n gap: 5px;\n}\n.dsh-ssh-jump-row {\n display: grid;\n grid-template-columns: 22px minmax(0, 1fr) 28px 28px 28px;\n align-items: center;\n gap: 4px;\n}\n.dsh-ssh-jump-row > em {\n display: grid;\n place-items: center;\n width: 20px;\n height: 20px;\n border-radius: 6px;\n color: var(--ssh-accent-strong);\n background: color-mix(in srgb, var(--ssh-accent) 9%, transparent);\n font:\n 600 10px/1 var(--ssh-font-mono),\n monospace;\n font-style: normal;\n}\n.dsh-ssh-jump-row select {\n box-sizing: border-box;\n min-width: 0;\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--ssh-border);\n border-radius: 8px;\n color: var(--ssh-text);\n background: var(--ssh-surface-raised);\n font-size: 10px;\n}\n.dsh-ssh-field select,\n.dsh-ssh-sftp-hostbar select,\n.dsh-ssh-jump-row select {\n appearance: none;\n padding-right: 28px;\n background-image:\n linear-gradient(\n 45deg,\n transparent 50%,\n color-mix(in srgb, currentColor 56%, transparent) 50%\n ),\n linear-gradient(\n 135deg,\n color-mix(in srgb, currentColor 56%, transparent) 50%,\n transparent 50%\n );\n background-position:\n calc(100% - 12px) 50%,\n calc(100% - 8px) 50%;\n background-repeat: no-repeat;\n background-size: 4px 4px;\n}\n.dsh-ssh-sftp-hostbar select {\n padding-right: 22px;\n}\n.dsh-ssh-jump-row .dsh-ssh-icon-button:disabled {\n opacity: 0.3;\n cursor: default;\n}\n.dsh-ssh-jump-empty {\n padding: 7px !important;\n border-radius: 7px;\n background: color-mix(in srgb, var(--ssh-warning) 7%, transparent);\n}\n.dsh-ssh-jump-chain > .dsh-ssh-secondary-button {\n justify-self: start;\n}\n@keyframes dsh-ssh-panel-enter {\n from {\n opacity: 0;\n transform: translateX(6px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes dsh-ssh-content-enter {\n from {\n opacity: 0;\n transform: translateY(3px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@keyframes dsh-ssh-group-open {\n from {\n opacity: 0;\n transform: translateY(-2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@media (max-width: 820px) {\n .dsh-ssh-vault-row,\n .dsh-ssh-proxy-row {\n grid-template-columns: 34px minmax(120px, 1fr) auto 28px;\n }\n .dsh-ssh-vault-row > small,\n .dsh-ssh-vault-row > .dsh-ssh-icon-button:last-child,\n .dsh-ssh-proxy-row > small,\n .dsh-ssh-proxy-row > .dsh-ssh-icon-button:last-child {\n display: none;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .dsh-ssh-activity-panel,\n .dsh-ssh-file-preview-body,\n .dsh-ssh-profile-group-children {\n animation: none;\n }\n .dsh-ssh-profile-row,\n .dsh-ssh-profile-row::before,\n .dsh-ssh-profile-group-chevron,\n .dsh-ssh-vault-row,\n .dsh-ssh-proxy-row,\n .dsh-ssh-sftp-row,\n .dsh-ssh-terminal-switcher button {\n transition: none;\n }\n}\n.dsh-ssh-sidebar-panel {\n display: flex;\n align-items: center;\n gap: 7px;\n min-height: 34px;\n padding: 0 10px;\n border: 1px solid transparent;\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: transparent;\n font: 550 11px/1 var(--ssh-font-sans);\n text-align: left;\n cursor: pointer;\n}\n.dsh-ssh-sidebar-panel svg {\n color: #547d78;\n}\n.dsh-ssh-sidebar-panel:hover {\n color: var(--ssh-text);\n background: var(--ssh-hover);\n}\n.dsh-ssh-sidebar-panel:active {\n transform: scale(0.985);\n}\n.dsh-ssh-icon-button.is-active,\n.dsh-ssh-rail-button.is-active {\n color: #406e67;\n background: color-mix(in srgb, #547d78 9%, transparent);\n}\n.dsh-ssh-icon-button:disabled,\n.dsh-ssh-rail-button:disabled {\n opacity: 0.36;\n cursor: default;\n}\n.dsh-ssh-icon-button:disabled:hover,\n.dsh-ssh-rail-button:disabled:hover {\n color: var(--ssh-text-muted);\n background: transparent;\n}\n.dsh-ssh-test-button {\n margin-right: auto;\n}\n.dsh-ssh-test-result {\n box-sizing: border-box;\n margin: 0;\n border-radius: 10px;\n font-size: 10px;\n}\n.dsh-ssh-test-result.is-warning {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n padding: 10px 10px;\n border: 1px solid color-mix(in srgb, var(--ssh-warning) 22%, transparent);\n color: color-mix(\n in srgb,\n var(--ssh-warning) 82%,\n var(--ssh-text)\n );\n background: color-mix(in srgb, var(--ssh-warning) 7%, transparent);\n}\n.dsh-ssh-test-result.is-warning > span {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n.dsh-ssh-test-result.is-warning code {\n overflow: hidden;\n font:\n 10px/1.3 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-test-result.is-success {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 10px;\n color: #477565;\n background: color-mix(in srgb, #5c8a76 9%, transparent);\n}\n.dsh-ssh-sidebar-note {\n box-sizing: border-box;\n min-height: 32px;\n margin: 0;\n padding: 8px 10px;\n color: var(--ssh-text-subtle);\n font: 10px/1.4 var(--ssh-font-sans);\n}\n.dsh-ssh-profile-sftp-pane {\n box-sizing: border-box;\n display: flex;\n min-height: 100%;\n height: 100%;\n flex-direction: column;\n padding: 0 18px 18px;\n}\n.dsh-ssh-profile-sftp-pane > .dsh-ssh-content-heading {\n flex: none;\n}\n.dsh-ssh-sftp.is-workspace {\n --ssh-activity-border: var(--ssh-border);\n min-height: 0;\n flex: 1;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-pathbar {\n margin-bottom: 10px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns,\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n grid-template-columns: minmax(180px, 1fr) 90px 120px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-columns {\n min-height: 34px;\n padding: 0 12px;\n font-size: 10px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row {\n min-height: 40px;\n padding: 0 12px;\n cursor: pointer;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row:hover {\n background: var(--ssh-hover);\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row strong {\n font-size: 11px;\n}\n.dsh-ssh-sftp.is-workspace .dsh-ssh-sftp-row small {\n font-size: 10px;\n}\n.dsh-ssh-upload-conflict {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 10px;\n padding: 8px 10px;\n border: 1px solid\n color-mix(in srgb, var(--ssh-warning, #927443) 20%, transparent);\n border-radius: 8px;\n color: var(--ssh-text-muted);\n background: color-mix(in srgb, var(--ssh-warning, #927443) 7%, transparent);\n}\n.dsh-ssh-upload-conflict > span {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.dsh-ssh-upload-conflict > span:first-child {\n min-width: 0;\n}\n.dsh-ssh-upload-conflict strong {\n font-size: 10px;\n}\n.dsh-ssh-upload-conflict small {\n overflow: hidden;\n max-width: 240px;\n color: var(--ssh-text-subtle);\n font:\n 10px/1 var(--ssh-font-mono),\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-ssh-upload-conflict button {\n min-height: 26px;\n padding: 0 10px;\n border: 1px solid var(--ssh-border);\n border-radius: 7px;\n color: var(--ssh-text-muted);\n background: var(--ssh-surface-raised);\n font-size: 10px;\n cursor: pointer;\n}\n.dsh-ssh-upload-conflict button.is-primary {\n border-color: color-mix(in srgb, var(--ssh-accent-strong) 56%, transparent);\n color: #f6fbf9;\n background: var(--ssh-accent-strong);\n}\n';
6737
6737
 
6738
6738
  // src/client-api.ts
6739
6739
  var SSH_API = "/ssh-local/v1";
@@ -6852,6 +6852,12 @@ function browserTerminalStreamUrl(terminalId, cursor = 0) {
6852
6852
  function resizeActivityTerminal(sessionId, terminalId, cols, rows) {
6853
6853
  return api(`/activity/terminals/${encodeURIComponent(terminalId)}/resize`, { method: "POST", body: JSON.stringify({ sessionId, cols, rows }) });
6854
6854
  }
6855
+ function closeActivityTerminal(sessionId, terminalId) {
6856
+ return api(`/activity/terminals/${encodeURIComponent(terminalId)}/close`, {
6857
+ method: "POST",
6858
+ body: JSON.stringify({ sessionId })
6859
+ });
6860
+ }
6855
6861
  function updateActivityDirectory(sessionId, profileId, cwd2) {
6856
6862
  return api("/activity/directory", { method: "PUT", body: JSON.stringify({ sessionId, profileId, cwd: cwd2 }) });
6857
6863
  }
@@ -20170,7 +20176,7 @@ function SshActivityPanel(props) {
20170
20176
  ] })
20171
20177
  ] }),
20172
20178
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-activity-body", children: [
20173
- activity === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "dsh-ssh-activity-state", children: "\u6B63\u5728\u8BFB\u53D6 SSH \u4F1A\u8BDD\u2026" }) : view === "local-directory" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LocalWorkspaceBrowser, { sessionId }) : view === "remote-directory" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RemoteDirectoryActivity, { sessionId, profiles: activity.profiles, selectedProfileId: props.controller.selected(sessionId), onProfile: (profileId) => props.controller.open(sessionId, profileId, "remote-directory"), onSaved: refresh }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TerminalActivity, { sessionId, terminals: activity.terminals }),
20179
+ activity === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "dsh-ssh-activity-state", children: "\u6B63\u5728\u8BFB\u53D6 SSH \u4F1A\u8BDD\u2026" }) : view === "local-directory" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LocalWorkspaceBrowser, { sessionId }) : view === "remote-directory" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RemoteDirectoryActivity, { sessionId, profiles: activity.profiles, selectedProfileId: props.controller.selected(sessionId), onProfile: (profileId) => props.controller.open(sessionId, profileId, "remote-directory"), onSaved: refresh }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TerminalActivity, { sessionId, terminals: activity.terminals, onClosed: refresh }),
20174
20180
  error && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "dsh-ssh-inline-error", role: "alert", children: error })
20175
20181
  ] })
20176
20182
  ] });
@@ -20184,9 +20190,10 @@ function RemoteDirectoryActivity({ sessionId, profiles, selectedProfileId, onPro
20184
20190
  ] });
20185
20191
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActivitySftpBrowser, { sessionId, profile, profiles, onProfile, onSaved }, profile.id);
20186
20192
  }
20187
- function TerminalActivity({ sessionId, terminals }) {
20193
+ function TerminalActivity({ sessionId, terminals, onClosed }) {
20188
20194
  const preferred = [...terminals].reverse().find((item) => item.status.kind === "running") ?? terminals.at(-1);
20189
20195
  const [selectedId, setSelectedId] = (0, import_react5.useState)(preferred?.terminalId);
20196
+ const [closingId, setClosingId] = (0, import_react5.useState)();
20190
20197
  const [error, setError] = (0, import_react5.useState)();
20191
20198
  const terminal = terminals.find((item) => item.terminalId === selectedId) ?? preferred;
20192
20199
  (0, import_react5.useEffect)(() => {
@@ -20197,6 +20204,20 @@ function TerminalActivity({ sessionId, terminals }) {
20197
20204
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: "\u8FD8\u6CA1\u6709\u6253\u5F00\u7684\u7EC8\u7AEF" }),
20198
20205
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: "AI \u6253\u5F00\u4EA4\u4E92\u7EC8\u7AEF\u540E\uFF0C\u4F1A\u76F4\u63A5\u663E\u793A\u5728\u8FD9\u91CC\u3002" })
20199
20206
  ] });
20207
+ const closeSelectedTerminal = async () => {
20208
+ if (closingId !== void 0) return;
20209
+ setClosingId(terminal.terminalId);
20210
+ setError(void 0);
20211
+ try {
20212
+ await closeActivityTerminal(sessionId, terminal.terminalId);
20213
+ await onClosed();
20214
+ } catch (reason) {
20215
+ setError(message(reason));
20216
+ } finally {
20217
+ setClosingId(void 0);
20218
+ }
20219
+ };
20220
+ const closeLabel = terminal.status.kind === "running" ? "\u7ED3\u675F" : "\u79FB\u9664";
20200
20221
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-terminal-workbench", children: [
20201
20222
  terminals.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("nav", { className: "dsh-ssh-terminal-switcher dsh-ssh-scroll-surface", "aria-label": "SSH \u7EC8\u7AEF", children: terminals.map((item, index2) => {
20202
20223
  const label = item.name || `\u7EC8\u7AEF ${index2 + 1}`;
@@ -20211,7 +20232,15 @@ function TerminalActivity({ sessionId, terminals }) {
20211
20232
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: terminal.name }),
20212
20233
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("small", { children: terminal.cwd })
20213
20234
  ] }),
20214
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: `dsh-ssh-terminal-state is-${terminal.status.kind}`, children: terminal.status.kind === "running" ? "\u8FD0\u884C\u4E2D" : "\u5DF2\u9000\u51FA" })
20235
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-terminal-observer-actions", children: [
20236
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: `dsh-ssh-terminal-state is-${terminal.status.kind}`, children: terminal.status.kind === "running" ? "\u8FD0\u884C\u4E2D" : "\u5DF2\u9000\u51FA" }),
20237
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { type: "button", className: "dsh-ssh-terminal-close", disabled: closingId !== void 0, "aria-label": `${closeLabel}\u7EC8\u7AEF ${terminal.name}`, title: terminal.status.kind === "running" ? "\u7ED3\u675F\u5E76\u5173\u95ED\u8FD9\u4E2A\u7EC8\u7AEF" : "\u4ECE\u6D3B\u52A8\u9762\u677F\u79FB\u9664\u8FD9\u4E2A\u7EC8\u7AEF", onClick: () => {
20238
+ void closeSelectedTerminal();
20239
+ }, children: [
20240
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives2.IconCloseOutline16, { size: 14 }),
20241
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: closingId === terminal.terminalId ? "\u5904\u7406\u4E2D" : closeLabel })
20242
+ ] })
20243
+ ] })
20215
20244
  ] }),
20216
20245
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InteractiveTerminal, { sessionId, terminal, onError: setError }, terminal.terminalId)
20217
20246
  ] }),
@@ -20352,6 +20381,7 @@ function RemoteWorkspace(props) {
20352
20381
  const [selectedId, setSelectedId] = (0, import_react5.useState)(props.controller.selected());
20353
20382
  const [view, setView] = (0, import_react5.useState)("terminal");
20354
20383
  const [editing, setEditing] = (0, import_react5.useState)();
20384
+ const [deleting, setDeleting] = (0, import_react5.useState)();
20355
20385
  const [refreshKey, setRefreshKey] = (0, import_react5.useState)(0);
20356
20386
  const [error, setError] = (0, import_react5.useState)();
20357
20387
  const openedSessionRef = (0, import_react5.useRef)(sessionId);
@@ -20427,12 +20457,17 @@ function RemoteWorkspace(props) {
20427
20457
  inspectorLabel: "\u4F1A\u8BDD\u6388\u6743",
20428
20458
  inspectorIcon: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives2.IconUserOutline16, { size: 15 }),
20429
20459
  inspector: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InjectionInspector, { sessionId: sessionId === void 0 ? void 0 : String(sessionId), profiles, selected }),
20430
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("section", { className: "dsh-ssh-main-panel dsh-ssh-scroll-surface", children: view === "vault" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(VaultPane, { entries: vaultEntries, onChanged: () => setRefreshKey((value) => value + 1) }) : view === "proxies" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ProxyPane, { entries: proxyEntries, onChanged: () => setRefreshKey((value) => value + 1) }) : selected === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EmptyState, { onNew: () => setEditing("new") }) : view === "terminal" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TerminalPane, { profile: selected, onEdit: () => setEditing(selected) }) : view === "sftp" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ProfileSftpPane, { profile: selected }, selected.id) : view === "forwards" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ForwardPane, { profiles, selected }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SettingsPane, {}) })
20460
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("section", { className: "dsh-ssh-main-panel dsh-ssh-scroll-surface", children: view === "vault" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(VaultPane, { entries: vaultEntries, onChanged: () => setRefreshKey((value) => value + 1) }) : view === "proxies" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ProxyPane, { entries: proxyEntries, onChanged: () => setRefreshKey((value) => value + 1) }) : selected === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EmptyState, { onNew: () => setEditing("new") }) : view === "terminal" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TerminalPane, { profile: selected, onEdit: () => setEditing(selected), onDelete: () => setDeleting(selected) }) : view === "sftp" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ProfileSftpPane, { profile: selected }, selected.id) : view === "forwards" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ForwardPane, { profiles, selected }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SettingsPane, {}) })
20431
20461
  }
20432
20462
  ),
20433
20463
  editing !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ProfileEditor, { profile: editing === "new" ? void 0 : editing, profiles, vaultEntries, proxyEntries, onClose: () => setEditing(void 0), onSaved: () => {
20434
20464
  setEditing(void 0);
20435
20465
  setRefreshKey((value) => value + 1);
20466
+ } }),
20467
+ deleting !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ProfileDeleteDialog, { profile: deleting, dependents: profiles.filter((profile) => profile.id !== deleting.id && profile.proxy.type === "jump" && profile.proxy.profileIds.includes(deleting.id)), onClose: () => setDeleting(void 0), onDeleted: () => {
20468
+ setDeleting(void 0);
20469
+ setEditing(void 0);
20470
+ setRefreshKey((value) => value + 1);
20436
20471
  } })
20437
20472
  ] });
20438
20473
  }
@@ -20515,7 +20550,7 @@ function ProfileGroup({ group, open, selectedId, onToggle, onSelect }) {
20515
20550
  ] }, profile.id)) })
20516
20551
  ] });
20517
20552
  }
20518
- function TerminalPane({ profile, onEdit }) {
20553
+ function TerminalPane({ profile, onEdit, onDelete }) {
20519
20554
  const hostRef = (0, import_react5.useRef)(null);
20520
20555
  const terminalRef = (0, import_react5.useRef)();
20521
20556
  const fitRef = (0, import_react5.useRef)();
@@ -20629,6 +20664,7 @@ function TerminalPane({ profile, onEdit }) {
20629
20664
  ] })
20630
20665
  ] }),
20631
20666
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-heading-actions", children: [
20667
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "dsh-ssh-icon-button is-danger", "aria-label": `\u5220\u9664\u4E3B\u673A ${profile.name}`, title: "\u5220\u9664\u4E3B\u673A", onClick: onDelete, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives2.IconTrashOutline16, { size: 16 }) }),
20632
20668
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: onEdit, children: [
20633
20669
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives2.IconEditOutline16, { size: 16 }),
20634
20670
  "\u7F16\u8F91"
@@ -20656,6 +20692,45 @@ function TerminalPane({ profile, onEdit }) {
20656
20692
  ] })
20657
20693
  ] });
20658
20694
  }
20695
+ function ProfileDeleteDialog({ profile, dependents, onClose, onDeleted }) {
20696
+ const [deleting, setDeleting] = (0, import_react5.useState)(false);
20697
+ const [error, setError] = (0, import_react5.useState)();
20698
+ const remove = async () => {
20699
+ if (deleting || dependents.length > 0) return;
20700
+ setDeleting(true);
20701
+ setError(void 0);
20702
+ try {
20703
+ await api(`/profiles/${encodeURIComponent(profile.id)}`, { method: "DELETE" });
20704
+ onDeleted();
20705
+ } catch (reason) {
20706
+ setError(message(reason));
20707
+ } finally {
20708
+ setDeleting(false);
20709
+ }
20710
+ };
20711
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Dialog, { title: `\u5220\u9664 ${profile.name}`, subtitle: profileAddress(profile), onClose, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-delete-profile", children: [
20712
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dsh-ssh-delete-profile-mark", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives2.IconTrashOutline16, { size: 19 }) }),
20713
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
20714
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: "\u8FD9\u4E2A\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500" }),
20715
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: "\u8FDE\u63A5\u914D\u7F6E\u3001\u8BE5\u4E3B\u673A\u7684\u72EC\u7ACB\u51ED\u636E\u548C\u5173\u8054\u7AEF\u53E3\u8F6C\u53D1\u4F1A\u4E00\u5E76\u5220\u9664\uFF1B\u5B83\u4E5F\u4F1A\u4ECE\u6240\u6709\u4F1A\u8BDD\u6388\u6743\u4E2D\u79FB\u9664\u3002\u5BC6\u94A5\u5E93\u4E2D\u7684\u5171\u4EAB\u51ED\u636E\u4E0D\u4F1A\u5220\u9664\u3002" })
20716
+ ] }),
20717
+ dependents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-delete-profile-block", role: "alert", children: [
20718
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: "\u6682\u65F6\u4E0D\u80FD\u5220\u9664" }),
20719
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { children: [
20720
+ "\u4EE5\u4E0B\u8FDE\u63A5\u4ECD\u5C06\u5B83\u4F5C\u4E3A SSH \u8DF3\u677F\uFF1A",
20721
+ dependents.map((item) => item.name).join("\u3001"),
20722
+ "\u3002\u8BF7\u5148\u4FEE\u6539\u8FD9\u4E9B\u8FDE\u63A5\u7684\u8DF3\u677F\u94FE\u3002"
20723
+ ] })
20724
+ ] }),
20725
+ error && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }),
20726
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-ssh-dialog-actions", children: [
20727
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: deleting, onClick: onClose, children: "\u53D6\u6D88" }),
20728
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "dsh-ssh-danger-button", disabled: deleting || dependents.length > 0, onClick: () => {
20729
+ void remove();
20730
+ }, children: deleting ? "\u6B63\u5728\u5220\u9664\u2026" : "\u5220\u9664\u4E3B\u673A" })
20731
+ ] })
20732
+ ] }) });
20733
+ }
20659
20734
  function InjectionInspector({ sessionId, profiles, selected }) {
20660
20735
  const [value, setValue] = (0, import_react5.useState)(null);
20661
20736
  const [saving, setSaving] = (0, import_react5.useState)(false);