diff --git a/internal/cloudcp/portal/dist/build_manifest.json b/internal/cloudcp/portal/dist/build_manifest.json
index 83a3ebbc4e..8de6137af1 100644
--- a/internal/cloudcp/portal/dist/build_manifest.json
+++ b/internal/cloudcp/portal/dist/build_manifest.json
@@ -1,5 +1,5 @@
{
- "source_hash": "8b0b284da60918f341d35eb2e51aed2893c7af4b399d949fd6dc0cef3e166408",
+ "source_hash": "06fe7351022ab56b379fb5059391505df0cd8b1ddb0c897f4b7ba30a9cca6866",
"build_inputs": [
"package.json",
"tsconfig.json",
diff --git a/internal/cloudcp/portal/dist/portal_app.css b/internal/cloudcp/portal/dist/portal_app.css
index 0e2445474b..5b36fb287b 100644
--- a/internal/cloudcp/portal/dist/portal_app.css
+++ b/internal/cloudcp/portal/dist/portal_app.css
@@ -1101,11 +1101,22 @@ header .logout-btn:hover,
grid-template-columns: minmax(0, 1.65fr) minmax(320px, 0.92fr);
gap: 14px;
}
+.team-side-column {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+}
.team-roster,
.team-invite-panel {
background: #fff;
border-color: var(--line);
}
+.team-policy-panel {
+ padding: 16px;
+ border: 1px solid var(--line);
+ border-radius: 12px;
+ background: #fff;
+}
.team-panel-heading {
margin-bottom: 12px;
}
@@ -1232,27 +1243,32 @@ header .logout-btn:hover,
flex-direction: column;
gap: 12px;
}
-.team-invite-guide {
+.team-policy-list {
display: flex;
flex-direction: column;
- gap: 6px;
- padding: 10px 12px;
+ gap: 0;
border: 1px solid var(--line);
border-radius: 10px;
- background: #fff;
+ background: var(--panel-muted);
+ overflow: hidden;
}
-.team-invite-guide-row {
+.team-policy-row {
display: flex;
flex-direction: column;
- gap: 2px;
+ gap: 4px;
+ padding: 12px 14px;
+ border-top: 1px solid var(--line);
}
-.team-invite-guide-row strong {
+.team-policy-row:first-child {
+ border-top: none;
+}
+.team-policy-row strong {
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--ink-muted);
}
-.team-invite-guide-row span {
+.team-policy-row span {
font-size: 12px;
line-height: 1.4;
color: var(--ink-soft);
diff --git a/internal/cloudcp/portal/dist/portal_app.js b/internal/cloudcp/portal/dist/portal_app.js
index bf2fbf5574..130ae76cdd 100644
--- a/internal/cloudcp/portal/dist/portal_app.js
+++ b/internal/cloudcp/portal/dist/portal_app.js
@@ -1813,7 +1813,8 @@
return ' Use the fleet view to open workspaces, watch health posture, and keep management actions explicit. Owners manage billing and access. Admins and techs keep the hosted fleet running day to day. Keep the roster small and role assignment explicit. The people listed here are the ones who can operate the hosted fleet. Add another operator with the minimum role they need for this account.Hosted fleet
Control who can operate this account
People on this account
Invite someone new
Assign the smallest role that still lets someone do the work they own on this account.
Owners manage billing and access. Admins and techs keep the hosted fleet running day to day.
Keep the roster small and role assignment explicit. The people listed here are the ones who can operate the hosted fleet.
Add another operator with the minimum role they need for this account.
Use support when hosted access looks wrong, billing does not behave as expected, or you need help with commercial licensing and privacy actions.
For access, tenant handoff, team, and billing issues, contact the hosted operations desk.
' + escapeHTML(context.bootstrap.support_email || "") + 'Self-hosted subscriptions, license recovery, refunds, and privacy requests all route through the same account surface.
Assign the smallest role that still lets someone do the work they own on this account.
' + + 'Add another operator with the minimum role they need for this account.
' + - 'Add another operator with the minimum role they need for this account.
' + + '