diff --git a/shared/components/rstack-identity.ts b/shared/components/rstack-identity.ts index 73b2616..3ee548d 100644 --- a/shared/components/rstack-identity.ts +++ b/shared/components/rstack-identity.ts @@ -264,9 +264,17 @@ function autoResolveSpace(token: string, username: string): void { // Detect current space const currentSpace = _getCurrentSpace(); - if (currentSpace !== "demo") return; // Already on a non-demo space - // Provision personal space and redirect + if (currentSpace !== "demo") { + // User followed a link to a specific space (e.g., orgname.rspace.online). + // Provision their personal space silently, then reload to apply the + // authenticated session (clears access gates, reconnects CRDT sync, etc.). + autoProvisionSpace(token); + window.location.reload(); + return; + } + + // On demo/landing — provision personal space and redirect there fetch("/api/spaces/auto-provision", { method: "POST", headers: { diff --git a/website/canvas.html b/website/canvas.html index 5a02a88..97cb3ce 100644 --- a/website/canvas.html +++ b/website/canvas.html @@ -6685,31 +6685,53 @@ function showBulkDeleteConfirm(count) { if (bulkDeleteOverlay) return; // prevent stacking from key repeat const overlay = document.createElement("div"); - overlay.style.cssText = "position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:10000;display:flex;align-items:center;justify-content:center"; + overlay.style.cssText = "position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:100002;display:flex;align-items:center;justify-content:center;touch-action:manipulation"; const dialog = document.createElement("div"); - dialog.style.cssText = "background:var(--rs-bg-surface,#1e1b4b);border:1px solid var(--rs-border,#334155);border-radius:12px;padding:1.5rem 2rem;max-width:380px;text-align:center;color:var(--rs-text-primary,#e2e8f0);font-family:system-ui,sans-serif"; + dialog.style.cssText = "background:var(--rs-bg-surface,#1e1b4b);border:1px solid var(--rs-border,#334155);border-radius:12px;padding:1.5rem 2rem;max-width:380px;text-align:center;color:var(--rs-text-primary,#e2e8f0);font-family:system-ui,sans-serif;user-select:none"; + const btnBase = "padding:0.5rem 1.25rem;border-radius:8px;cursor:pointer;font-size:0.875rem;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;transition:filter 0.1s"; dialog.innerHTML = `
You are about to delete a large number of elements. This action cannot be easily undone.