-
+ {/* One stack, so the helper and the R pill can never overlap, whatever their height. */}
+
+
+
+
);
diff --git a/src/components/RStatus.tsx b/src/components/RStatus.tsx
index b344be5..dcb0161 100644
--- a/src/components/RStatus.tsx
+++ b/src/components/RStatus.tsx
@@ -1,13 +1,18 @@
import { useEffect, useState } from 'react';
import { onStatus, restartR, type RStatus as Status } from '../r/webrClient';
-export default function RStatus() {
+/**
+ * `where` splits the two homes: an error sits in the page ("page"), the ready
+ * and busy pill stacks under the helper in the corner ("corner").
+ */
+export default function RStatus({ where }: { where?: 'page' | 'corner' }) {
const [status, setStatus] = useState({ phase: 'idle' });
useEffect(() => onStatus(setStatus), []);
// Nothing has started yet, so claim nothing: an amber "Starting R…" pill for
// idle would be a lie on any page reached before the boot effect runs.
if (status.phase === 'idle') return null;
+ if (where === (status.phase === 'error' ? 'corner' : 'page')) return null;
if (status.phase === 'ready') {
return