diff --git a/client/src/App.vue b/client/src/App.vue
index 596602c..0656811 100644
--- a/client/src/App.vue
+++ b/client/src/App.vue
@@ -511,24 +511,24 @@
-
@@ -971,6 +971,7 @@ import HelpCenter from './components/help/HelpCenter.vue';
import ParticleBackdrop from './components/ParticleBackdrop.vue';
import BaseModal from './components/ui/BaseModal.vue';
import ResourceTable from './components/ui/ResourceTable.vue';
+import TargetBrowser from './components/ui/TargetBrowser.vue';
import ScriptExplorer from './components/scripts/ScriptExplorer.vue';
import ScriptTestRunModal from './components/scripts/ScriptTestRunModal.vue';
import VariableEditorModal from './components/scripts/VariableEditorModal.vue';
diff --git a/client/src/components/ui/TargetBrowser.vue b/client/src/components/ui/TargetBrowser.vue
new file mode 100644
index 0000000..11b8025
--- /dev/null
+++ b/client/src/components/ui/TargetBrowser.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ filteredItems.length }} matching {{ itemLabel }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/src/style.css b/client/src/style.css
index 3e5d3ea..0b5ecb1 100644
--- a/client/src/style.css
+++ b/client/src/style.css
@@ -2818,6 +2818,7 @@ textarea:focus {
.psadt-function-list button {
min-width: 0;
+ overflow: hidden;
padding: 10px;
border: 1px solid rgba(156, 199, 232, .1);
border-radius: 11px;
@@ -2833,14 +2834,22 @@ textarea:focus {
}
.psadt-function-list code {
+ display: block;
+ max-width: 100%;
min-width: 0;
color: var(--cyan);
font: 800 10px "SFMono-Regular", Consolas, monospace;
overflow: hidden;
text-overflow: ellipsis;
+ white-space: nowrap;
}
.psadt-function-list span {
+ display: block;
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
color: var(--subtle);
font: 800 8px "SFMono-Regular", Consolas, monospace;
text-transform: uppercase;
@@ -4771,6 +4780,10 @@ body {
align-items: end;
}
+.member-toolbar.target-browser-toolbar-compact {
+ grid-template-columns: minmax(280px, 1fr) auto;
+}
+
.member-toolbar label,
.member-pagination label {
display: grid;
@@ -4878,6 +4891,8 @@ body {
.member-table th button {
width: 100%;
+ min-height: 30px;
+ padding: 6px 0;
display: inline-flex;
align-items: center;
justify-content: flex-start;
@@ -6896,6 +6911,94 @@ input:read-only {
min-width: 118px;
}
+.form-modal .toggle,
+.modal-form .toggle,
+.grid-form .toggle {
+ min-height: 58px;
+ display: flex !important;
+ align-items: center;
+ gap: 12px;
+ padding: 11px 12px !important;
+ border: 1px solid rgba(156, 199, 232, .14) !important;
+ border-radius: 15px !important;
+ background:
+ linear-gradient(135deg, rgba(255, 255, 255, .055), rgba(88, 221, 255, .025)),
+ rgba(5, 13, 28, .46) !important;
+}
+
+.form-modal .toggle input[type="checkbox"],
+.modal-form .toggle input[type="checkbox"],
+.grid-form .toggle input[type="checkbox"] {
+ appearance: none;
+ position: relative;
+ flex: 0 0 42px;
+ width: 42px !important;
+ min-width: 42px !important;
+ max-width: 42px !important;
+ height: 24px !important;
+ min-height: 24px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ border: 1px solid rgba(156, 199, 232, .24) !important;
+ border-radius: 999px !important;
+ background: rgba(3, 9, 20, .8) !important;
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .34);
+ cursor: pointer;
+}
+
+.form-modal .toggle input[type="checkbox"]::after,
+.modal-form .toggle input[type="checkbox"]::after,
+.grid-form .toggle input[type="checkbox"]::after {
+ content: "";
+ position: absolute;
+ top: 3px;
+ left: 3px;
+ width: 16px;
+ height: 16px;
+ border-radius: 999px;
+ background: rgba(218, 236, 255, .78);
+ box-shadow: 0 4px 10px rgba(0, 0, 0, .32);
+ transition: transform .18s ease, background .18s ease;
+}
+
+.form-modal .toggle input[type="checkbox"]:checked,
+.modal-form .toggle input[type="checkbox"]:checked,
+.grid-form .toggle input[type="checkbox"]:checked {
+ border-color: rgba(88, 221, 255, .54) !important;
+ background: linear-gradient(135deg, rgba(88, 221, 255, .85), rgba(166, 122, 255, .72)) !important;
+}
+
+.form-modal .toggle input[type="checkbox"]:checked::after,
+.modal-form .toggle input[type="checkbox"]:checked::after,
+.grid-form .toggle input[type="checkbox"]:checked::after {
+ transform: translateX(18px);
+ background: #fff;
+}
+
+.form-modal .host-picker input[type="checkbox"],
+.modal-form .host-picker input[type="checkbox"],
+.grid-form .host-picker input[type="checkbox"],
+.form-modal .host-member-browser input[type="checkbox"],
+.modal-form .host-member-browser input[type="checkbox"],
+.grid-form .host-member-browser input[type="checkbox"] {
+ appearance: auto;
+ flex: 0 0 16px;
+ width: 16px !important;
+ min-width: 16px !important;
+ max-width: 16px !important;
+ height: 16px !important;
+ min-height: 16px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ accent-color: #58ddff;
+}
+
+.resource-toolbar .ghost-button.compact,
+.resource-toolbar .primary-action.compact {
+ flex: 0 0 auto;
+ min-width: max-content;
+}
+
.form-modal.wide-form-modal {
width: min(1120px, calc(100vw - 34px));
}
@@ -7528,6 +7631,33 @@ input:read-only {
}
@media (max-width: 1180px) {
+ .topbar {
+ grid-template-columns: minmax(160px, 250px) minmax(180px, 1fr) auto;
+ gap: 10px;
+ padding-inline: 14px;
+ }
+
+ .topbar-actions .topbar-action-button {
+ width: 40px;
+ min-width: 40px;
+ height: 40px;
+ padding: 0;
+ justify-content: center;
+ font-size: 0;
+ }
+
+ .topbar-actions .topbar-action-button svg {
+ width: 17px;
+ height: 17px;
+ }
+
+ .help-center {
+ left: 12px !important;
+ top: 12px !important;
+ width: calc(100vw - 24px);
+ height: calc(100vh - 24px);
+ }
+
.deployment-section-body.three,
.deployment-section-body.two,
.return-code-row,
@@ -7575,3 +7705,53 @@ input:read-only {
margin-left: 0;
}
}
+
+/* Last-mile control guard: modal input rules must not resize checkboxes/switches. */
+.dashboard-widget {
+ min-width: 0;
+ max-width: 100%;
+}
+
+.dashboard-widget::before {
+ inset: -80px 0 auto auto;
+}
+
+.dashboard-widget > *,
+.widget-toolbar,
+.dashboard-stat-widget {
+ min-width: 0;
+ max-width: 100%;
+}
+
+.form-modal .toggle input[type="checkbox"],
+.modal-form .toggle input[type="checkbox"],
+.grid-form .toggle input[type="checkbox"] {
+ appearance: none !important;
+ flex: 0 0 42px !important;
+ width: 42px !important;
+ min-width: 42px !important;
+ max-width: 42px !important;
+ height: 24px !important;
+ min-height: 24px !important;
+ max-height: 24px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+.form-modal .host-picker input[type="checkbox"],
+.modal-form .host-picker input[type="checkbox"],
+.grid-form .host-picker input[type="checkbox"],
+.form-modal .host-member-browser input[type="checkbox"],
+.modal-form .host-member-browser input[type="checkbox"],
+.grid-form .host-member-browser input[type="checkbox"] {
+ appearance: auto !important;
+ flex: 0 0 16px !important;
+ width: 16px !important;
+ min-width: 16px !important;
+ max-width: 16px !important;
+ height: 16px !important;
+ min-height: 16px !important;
+ max-height: 16px !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}