fix: disable all feature tours — shell welcome tour, TourEngine, landing links

Tours were demoing stale features and auto-triggering annoyingly.
TourEngine.start() now returns immediately (no-ops). Shell welcome
tour JS/CSS/HTML removed. "Start Guided Tour" links stripped from
all 27 landing pages. Tour CSS selectors removed from info panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-04-15 11:12:00 -04:00
parent a5aeb9fef5
commit 0f6b5ecd8d
29 changed files with 8 additions and 381 deletions

View File

@ -15,11 +15,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/crowdsurf" class="rl-cta-primary">Start Swiping</a> <a href="https://demo.rspace.online/crowdsurf" class="rl-cta-primary">Start Swiping</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-crowdsurf-dashboard')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- How it works --> <!-- How it works -->

View File

@ -27,11 +27,6 @@ export function renderLanding(): string {
</a> </a>
<a href="#principles" class="rl-cta-secondary">Learn More</a> <a href="#principles" class="rl-cta-secondary">Learn More</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-bnb-view')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Principles (4-card grid) --> <!-- Principles (4-card grid) -->

View File

@ -18,11 +18,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rbooks" class="rl-cta-primary" id="ml-primary">Browse Library</a> <a href="https://demo.rspace.online/rbooks" class="rl-cta-primary" id="ml-primary">Browse Library</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-book-shelf')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -19,11 +19,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rcal" class="rl-cta-primary" id="ml-primary">Try the Demo</a> <a href="https://demo.rspace.online/rcal" class="rl-cta-primary" id="ml-primary">Try the Demo</a>
<a href="#features" class="rl-cta-secondary">Learn More</a> <a href="#features" class="rl-cta-secondary">Learn More</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-calendar-view')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Principles (4-card grid) --> <!-- Principles (4-card grid) -->

View File

@ -16,11 +16,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rcart" class="rl-cta-primary" id="ml-primary">Start Shopping</a> <a href="https://demo.rspace.online/rcart" class="rl-cta-primary" id="ml-primary">Start Shopping</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-cart-shop')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -17,11 +17,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rchoices" class="rl-cta-primary" id="ml-primary">Create a Choice Room</a> <a href="https://demo.rspace.online/rchoices" class="rl-cta-primary" id="ml-primary">Create a Choice Room</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-choices-dashboard')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Three tools --> <!-- Three tools -->

View File

@ -19,11 +19,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rdata" class="rl-cta-primary" id="ml-primary">View Dashboard</a> <a href="https://demo.rspace.online/rdata" class="rl-cta-primary" id="ml-primary">View Dashboard</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-content-tree')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -18,11 +18,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rfiles" class="rl-cta-primary" id="ml-primary">Start Sharing</a> <a href="https://demo.rspace.online/rfiles" class="rl-cta-primary" id="ml-primary">Start Sharing</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-file-browser')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -176,11 +176,6 @@ export function renderLanding(): string {
<p style="font-size:0.8rem;color:var(--rs-text-muted,#64748b);margin-top:0.75rem"> <p style="font-size:0.8rem;color:var(--rs-text-muted,#64748b);margin-top:0.75rem">
Build your flow in the demo, then sign in to save it to your own space. Build your flow in the demo, then sign in to save it to your own space.
</p> </p>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-flows-app')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- What rFlows Does --> <!-- What rFlows Does -->

View File

@ -17,11 +17,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rforum" class="rl-cta-primary" id="ml-primary">Get Started</a> <a href="https://demo.rspace.online/rforum" class="rl-cta-primary" id="ml-primary">Get Started</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-forum-dashboard')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- How It Works --> <!-- How It Works -->

View File

@ -20,11 +20,6 @@ export function renderLanding(): string {
</a> </a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-inbox-client')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- What rInbox Does --> <!-- What rInbox Does -->

View File

@ -16,11 +16,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rmaps" class="rl-cta-primary" id="ml-primary">Open Maps</a> <a href="https://demo.rspace.online/rmaps" class="rl-cta-primary" id="ml-primary">Open Maps</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-map-viewer')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -18,11 +18,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rmeets" class="rl-cta-primary" id="ml-primary">Start a Meeting</a> <a href="https://demo.rspace.online/rmeets" class="rl-cta-primary" id="ml-primary">Start a Meeting</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-jitsi-room')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Why Self-Host --> <!-- Why Self-Host -->

View File

@ -19,11 +19,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rnetwork" class="rl-cta-primary" id="ml-primary">Explore Network</a> <a href="https://demo.rspace.online/rnetwork" class="rl-cta-primary" id="ml-primary">Explore Network</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-crm-view')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -17,11 +17,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rphotos" class="rl-cta-primary" id="ml-primary">Browse Photos</a> <a href="https://demo.rspace.online/rphotos" class="rl-cta-primary" id="ml-primary">Browse Photos</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-photo-gallery')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -22,11 +22,6 @@ export function renderLanding(): string {
</a> </a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-pubs-editor')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- How it works --> <!-- How it works -->

View File

@ -31,11 +31,6 @@ export function renderLanding(): string {
</a> </a>
<a href="#features" class="rl-cta-secondary">Learn More</a> <a href="#features" class="rl-cta-secondary">Learn More</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-schedule-app')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features (4-card grid) --> <!-- Features (4-card grid) -->

View File

@ -19,11 +19,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rsocials" class="rl-cta-primary" id="ml-primary">Try Demo</a> <a href="https://demo.rspace.online/rsocials" class="rl-cta-primary" id="ml-primary">Try Demo</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-campaign-manager')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -17,11 +17,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rsplat" class="rl-cta-primary" id="ml-primary">Open Canvas</a> <a href="https://demo.rspace.online/rsplat" class="rl-cta-primary" id="ml-primary">Open Canvas</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-splat-viewer')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -17,11 +17,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rswag" class="rl-cta-primary" id="ml-primary">Start Designing</a> <a href="https://demo.rspace.online/rswag" class="rl-cta-primary" id="ml-primary">Start Designing</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-swag-designer')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -21,11 +21,6 @@ export function renderLanding(): string {
</a> </a>
<a href="https://demo.rspace.online/rtasks" class="rl-cta-secondary">View Dashboard</a> <a href="https://demo.rspace.online/rtasks" class="rl-cta-secondary">View Dashboard</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-tasks-board')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- How It Works --> <!-- How It Works -->

View File

@ -27,11 +27,6 @@ export function renderLanding(): string {
</a> </a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-timebank-app')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- ELI5: What is Timebanking? --> <!-- ELI5: What is Timebanking? -->

View File

@ -18,11 +18,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rtrips" class="rl-cta-primary" id="ml-primary">Start Planning</a> <a href="https://demo.rspace.online/rtrips" class="rl-cta-primary" id="ml-primary">Start Planning</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-trips-planner')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- How It Works --> <!-- How It Works -->

View File

@ -21,11 +21,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rtube" class="rl-cta-secondary" id="ml-primary">Browse Videos</a> <a href="https://demo.rspace.online/rtube" class="rl-cta-secondary" id="ml-primary">Browse Videos</a>
<a href="https://demo.rspace.online/rtube" class="rl-cta-primary" style="background:#dc2626">Start Streaming</a> <a href="https://demo.rspace.online/rtube" class="rl-cta-primary" style="background:#dc2626">Start Streaming</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-video-player')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- How It Works --> <!-- How It Works -->

View File

@ -28,11 +28,6 @@ export function renderLanding(): string {
</a> </a>
<a href="#principles" class="rl-cta-secondary">Learn More</a> <a href="#principles" class="rl-cta-secondary">Learn More</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-vnb-view')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Principles (4-card grid) --> <!-- Principles (4-card grid) -->

View File

@ -27,11 +27,6 @@ export function renderLanding(): string {
</a> </a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-vote-dashboard')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- ELI5 Section: rVote in 30 Seconds --> <!-- ELI5 Section: rVote in 30 Seconds -->

View File

@ -19,11 +19,6 @@ export function renderLanding(): string {
<a href="https://demo.rspace.online/rwallet" class="rl-cta-primary" id="ml-primary">View Treasury</a> <a href="https://demo.rspace.online/rwallet" class="rl-cta-primary" id="ml-primary">View Treasury</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a> <a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div> </div>
<p style="font-size:0.82rem;margin-top:0.5rem">
<a href="#" onclick="document.querySelector('folk-wallet-viewer')?.startTour?.();window.__rspaceHideInfo?.();return false" style="color:var(--rs-primary,#06b6d4);text-decoration:none">
Start Guided Tour &rarr;
</a>
</p>
</div> </div>
<!-- Features --> <!-- Features -->

View File

@ -327,6 +327,7 @@ export function renderShell(opts: ShellOptions): string {
<rstack-offline-indicator></rstack-offline-indicator> <rstack-offline-indicator></rstack-offline-indicator>
<rstack-comment-bell></rstack-comment-bell> <rstack-comment-bell></rstack-comment-bell>
<rstack-notification-bell></rstack-notification-bell> <rstack-notification-bell></rstack-notification-bell>
<rstack-chat-widget></rstack-chat-widget>
<rstack-share-panel></rstack-share-panel> <rstack-share-panel></rstack-share-panel>
<rstack-identity></rstack-identity> <rstack-identity></rstack-identity>
</div> </div>
@ -649,134 +650,7 @@ export function renderShell(opts: ShellOptions): string {
}); });
}); });
// ── Welcome tour (guided feature walkthrough for first-time visitors) ── // ── Welcome tour — disabled (tours turned off) ──
(function() {
var currentSpace = '${escapeAttr(spaceSlug)}';
if (currentSpace !== 'demo') return;
if (localStorage.getItem('rspace_tour_done')) return;
var TOUR_STEPS = [
{
target: 'rstack-app-switcher',
title: 'Welcome to rSpace',
msg: 'This is your collaborative workspace with 25+ interoperable tools called rApps. Use this switcher to jump between modules like Notes, Maps, Voting, Wallet, and more.'
},
{
target: 'rstack-mi',
title: 'Meet mi \u2014 Your AI Guide',
msg: 'Press <strong>Cmd+K</strong> (or Ctrl+K) to open mi, your mycelial intelligence assistant. mi can create content, set up spaces, and help you build across all rApps.'
},
{
target: 'rstack-space-switcher',
title: 'Spaces',
msg: 'Each space is a self-contained community with its own data, members, and encryption. Switch between spaces or create a new one here.'
},
{
target: 'rstack-identity',
title: 'Passwordless Identity',
msg: 'Sign in with <strong>passkeys</strong> \u2014 no passwords or seed phrases. Your identity is cryptographic and portable across all spaces.'
},
{
target: '#app',
title: 'The Canvas',
msg: 'This is your infinite canvas. Drag to pan, scroll to zoom, and use the toolbar to add shapes. Everything syncs in real-time using local-first CRDTs.'
},
{
target: '.rstack-tab-row',
title: 'rApp Tabs',
msg: 'Each module has its own views accessible via tabs. Switch between canvas, list, and detail views depending on the active rApp.'
},
];
var step = 0;
var tourEl = document.getElementById('rspace-tour');
var backdrop = document.getElementById('rspace-tour-backdrop');
var spotlight = document.getElementById('rspace-tour-spotlight');
var tooltip = document.getElementById('rspace-tour-tooltip');
var titleEl = document.getElementById('rspace-tour-title');
var msgEl = document.getElementById('rspace-tour-msg');
var stepEl = document.getElementById('rspace-tour-step');
var prevBtn = document.getElementById('rspace-tour-prev');
var nextBtn = document.getElementById('rspace-tour-next');
var skipBtn = document.getElementById('rspace-tour-skip');
function endTour() {
localStorage.setItem('rspace_tour_done', '1');
if (tourEl) tourEl.style.display = 'none';
}
function showStep() {
if (!tourEl || !backdrop || !spotlight || !tooltip) return;
var s = TOUR_STEPS[step];
var target = document.querySelector(s.target);
var rect = target ? target.getBoundingClientRect() : { left: window.innerWidth / 2 - 60, top: 8, width: 120, height: 40 };
// Spotlight
var pad = 6;
var sx = rect.left - pad, sy = rect.top - pad;
var sw = rect.width + pad * 2, sh = rect.height + pad * 2;
spotlight.style.left = sx + 'px';
spotlight.style.top = sy + 'px';
spotlight.style.width = sw + 'px';
spotlight.style.height = sh + 'px';
// Backdrop clip-path (cut hole for spotlight)
backdrop.style.clipPath = 'polygon(0% 0%, 0% 100%, ' +
sx + 'px 100%, ' + sx + 'px ' + sy + 'px, ' +
(sx + sw) + 'px ' + sy + 'px, ' +
(sx + sw) + 'px ' + (sy + sh) + 'px, ' +
sx + 'px ' + (sy + sh) + 'px, ' +
sx + 'px 100%, 100% 100%, 100% 0%)';
// Tooltip position: below target, clamped to viewport
var ttTop = rect.top + rect.height + 16;
var ttLeft = Math.max(16, Math.min(rect.left, window.innerWidth - 380));
// If tooltip would go off bottom, put it above
if (ttTop + 200 > window.innerHeight) {
ttTop = Math.max(16, rect.top - 220);
}
tooltip.style.top = ttTop + 'px';
tooltip.style.left = ttLeft + 'px';
// Content
stepEl.textContent = (step + 1) + ' / ' + TOUR_STEPS.length;
titleEl.textContent = s.title;
msgEl.innerHTML = s.msg;
// Buttons
prevBtn.style.display = step > 0 ? '' : 'none';
nextBtn.textContent = step === TOUR_STEPS.length - 1 ? 'Get Started' : 'Next';
}
// Wire buttons
if (nextBtn) nextBtn.addEventListener('click', function() {
step++;
if (step >= TOUR_STEPS.length) { endTour(); return; }
showStep();
});
if (prevBtn) prevBtn.addEventListener('click', function() {
if (step > 0) { step--; showStep(); }
});
if (skipBtn) skipBtn.addEventListener('click', endTour);
if (backdrop) backdrop.addEventListener('click', endTour);
// Keyboard: Escape to skip, arrows to navigate
document.addEventListener('keydown', function(e) {
if (!tourEl || tourEl.style.display === 'none') return;
if (e.key === 'Escape') { endTour(); e.preventDefault(); }
if (e.key === 'ArrowRight' || e.key === 'Enter') {
step++;
if (step >= TOUR_STEPS.length) { endTour(); return; }
showStep(); e.preventDefault();
}
if (e.key === 'ArrowLeft' && step > 0) { step--; showStep(); e.preventDefault(); }
});
// Start tour after a brief delay
setTimeout(function() {
if (tourEl) { tourEl.style.display = ''; showStep(); }
}, 800);
})();
// Legacy compat // Legacy compat
window.__rspaceDismissWelcome = function() { window.__rspaceDismissWelcome = function() {
localStorage.setItem('rspace_tour_done', '1'); localStorage.setItem('rspace_tour_done', '1');
@ -1910,21 +1784,7 @@ export function renderExternalAppShell(opts: ExternalAppShellOptions): string {
// ── Welcome tour (guided feature walkthrough for first-time visitors) ── // ── Welcome tour (guided feature walkthrough for first-time visitors) ──
function renderWelcomeOverlay(): string { function renderWelcomeOverlay(): string {
return ` return ''; // Tours disabled
<div id="rspace-tour" style="display:none">
<div class="rspace-tour__backdrop" id="rspace-tour-backdrop"></div>
<div class="rspace-tour__spotlight" id="rspace-tour-spotlight"></div>
<div class="rspace-tour__tooltip" id="rspace-tour-tooltip">
<div class="rspace-tour__step" id="rspace-tour-step"></div>
<div class="rspace-tour__title" id="rspace-tour-title"></div>
<div class="rspace-tour__msg" id="rspace-tour-msg"></div>
<div class="rspace-tour__nav">
<button class="rspace-tour__btn rspace-tour__btn--prev" id="rspace-tour-prev" style="display:none">Back</button>
<button class="rspace-tour__btn rspace-tour__btn--next" id="rspace-tour-next">Next</button>
<button class="rspace-tour__btn rspace-tour__btn--skip" id="rspace-tour-skip">Skip tour</button>
</div>
</div>
</div>`;
} }
const ACCESS_GATE_CSS = ` const ACCESS_GATE_CSS = `
@ -1960,88 +1820,7 @@ const ACCESS_GATE_CSS = `
.access-gate__actions { display: flex; flex-direction: column; gap: 0.75rem; align-items: center; } .access-gate__actions { display: flex; flex-direction: column; gap: 0.75rem; align-items: center; }
`; `;
const WELCOME_CSS = ` const WELCOME_CSS = ''; // Tours disabled
#rspace-tour { position: fixed; inset: 0; z-index: 10000; pointer-events: none; }
.rspace-tour__backdrop {
position: fixed; inset: 0;
background: rgba(0,0,0,0.55);
pointer-events: auto;
transition: clip-path 0.3s ease;
}
.rspace-tour__spotlight {
position: fixed;
border: 2px solid var(--rs-primary, #06b6d4);
border-radius: 8px;
box-shadow: 0 0 0 4px rgba(6,182,212,0.25), 0 0 20px rgba(6,182,212,0.15);
pointer-events: none;
transition: all 0.35s ease;
}
.rspace-tour__tooltip {
position: fixed;
width: min(360px, calc(100vw - 32px));
background: var(--rs-bg-surface, #1e293b);
border: 1px solid var(--rs-border, #334155);
border-radius: 14px;
padding: 20px;
box-shadow: 0 16px 48px rgba(0,0,0,0.5);
color: var(--rs-text-primary, #f1f5f9);
pointer-events: auto;
animation: rspace-tour-pop 0.25s ease-out;
transition: top 0.35s ease, left 0.35s ease;
}
@keyframes rspace-tour-pop {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.rspace-tour__step {
font-size: 0.7rem;
color: var(--rs-text-muted, #64748b);
margin-bottom: 6px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.rspace-tour__title {
font-size: 1.1rem;
font-weight: 700;
margin-bottom: 8px;
background: linear-gradient(135deg, #06b6d4, #7c3aed);
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
background-clip: text;
}
.rspace-tour__msg {
font-size: 0.85rem;
color: var(--rs-text-secondary, #94a3b8);
line-height: 1.6;
margin-bottom: 14px;
}
.rspace-tour__nav {
display: flex; align-items: center; gap: 8px;
}
.rspace-tour__btn {
padding: 7px 16px; border-radius: 8px;
font-size: 0.8rem; font-weight: 600;
cursor: pointer; border: none;
transition: background 0.15s, transform 0.1s;
font-family: inherit;
}
.rspace-tour__btn:hover { transform: translateY(-1px); }
.rspace-tour__btn--next {
background: linear-gradient(135deg, #06b6d4, #7c3aed); color: white;
}
.rspace-tour__btn--prev {
background: var(--rs-btn-secondary-bg, #334155);
color: var(--rs-text-secondary, #94a3b8);
}
.rspace-tour__btn--skip {
background: none;
color: var(--rs-text-muted, #64748b);
margin-left: auto;
}
.rspace-tour__btn--skip:hover { color: var(--rs-text-primary, #f1f5f9); }
@media (max-width: 600px) {
.rspace-tour__tooltip { width: calc(100vw - 24px); left: 12px !important; }
}
`;
const INFO_PANEL_CSS = ` const INFO_PANEL_CSS = `
/* ── Info button in tab bar ── */ /* ── Info button in tab bar ── */
@ -2188,20 +1967,6 @@ const INFO_PANEL_CSS = `
} }
.rapp-info-panel__body .rl-cta-secondary:hover { transform: translateY(-1px); border-color: rgba(20,184,166,0.4); color: var(--rs-text-primary); background: rgba(20,184,166,0.08); } .rapp-info-panel__body .rl-cta-secondary:hover { transform: translateY(-1px); border-color: rgba(20,184,166,0.4); color: var(--rs-text-primary); background: rgba(20,184,166,0.08); }
/* Tour / guide links — promote to prominent buttons */
.rapp-info-panel__body a[onclick*="startTour"],
.rapp-info-panel__body a[href*="tour"] {
display: inline-flex; align-items: center; gap: 6px;
padding: 0.65rem 1.35rem; margin-top: 0.75rem;
font-size: 0.92rem; font-weight: 600; text-decoration: none;
background: linear-gradient(135deg, rgba(79,70,229,0.15), rgba(20,184,166,0.1));
border: 1px solid rgba(79,70,229,0.25); border-radius: 10px; color: #a78bfa;
transition: background 0.15s, border-color 0.15s, color 0.15s, transform 0.15s;
}
.rapp-info-panel__body a[onclick*="startTour"]:hover,
.rapp-info-panel__body a[href*="tour"]:hover {
background: linear-gradient(135deg, rgba(79,70,229,0.25), rgba(20,184,166,0.15));
border-color: rgba(79,70,229,0.4); color: #c4b5fd; transform: translateY(-1px);
} }
/* Badges */ /* Badges */

View File

@ -37,11 +37,9 @@ export class TourEngine {
this.getContainer = getContainer; this.getContainer = getContainer;
} }
/** Start (or restart) the tour from step 0. */ /** Start (or restart) the tour from step 0. Disabled — tours are turned off. */
start() { start() {
this._active = true; return;
this._step = 0;
this.renderOverlay();
} }
/** Advance to next step or finish if at the end. */ /** Advance to next step or finish if at the end. */
@ -205,10 +203,9 @@ export class LightTourEngine {
this.storageKey = storageKey; this.storageKey = storageKey;
} }
/** Disabled — tours are turned off. */
start() { start() {
this._active = true; return;
this._step = 0;
this.renderOverlay();
} }
advance() { advance() {