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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- How it works -->

View File

@ -27,11 +27,6 @@ export function renderLanding(): string {
</a>
<a href="#principles" class="rl-cta-secondary">Learn More</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="#features" class="rl-cta-secondary">Learn More</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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">
Build your flow in the demo, then sign in to save it to your own space.
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- How It Works -->

View File

@ -20,11 +20,6 @@ export function renderLanding(): string {
</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- Features -->

View File

@ -22,11 +22,6 @@ export function renderLanding(): string {
</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- How it works -->

View File

@ -31,11 +31,6 @@ export function renderLanding(): string {
</a>
<a href="#features" class="rl-cta-secondary">Learn More</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- Features -->

View File

@ -21,11 +21,6 @@ export function renderLanding(): string {
</a>
<a href="https://demo.rspace.online/rtasks" class="rl-cta-secondary">View Dashboard</a>
</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>
<!-- How It Works -->

View File

@ -27,11 +27,6 @@ export function renderLanding(): string {
</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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-primary" style="background:#dc2626">Start Streaming</a>
</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>
<!-- How It Works -->

View File

@ -28,11 +28,6 @@ export function renderLanding(): string {
</a>
<a href="#principles" class="rl-cta-secondary">Learn More</a>
</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>
<!-- Principles (4-card grid) -->

View File

@ -27,11 +27,6 @@ export function renderLanding(): string {
</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- 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="/create-space" class="rl-cta-secondary">Create a Space</a>
</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>
<!-- Features -->

View File

@ -327,6 +327,7 @@ export function renderShell(opts: ShellOptions): string {
<rstack-offline-indicator></rstack-offline-indicator>
<rstack-comment-bell></rstack-comment-bell>
<rstack-notification-bell></rstack-notification-bell>
<rstack-chat-widget></rstack-chat-widget>
<rstack-share-panel></rstack-share-panel>
<rstack-identity></rstack-identity>
</div>
@ -649,134 +650,7 @@ export function renderShell(opts: ShellOptions): string {
});
});
// ── Welcome tour (guided feature walkthrough for first-time visitors) ──
(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);
})();
// ── Welcome tour — disabled (tours turned off) ──
// Legacy compat
window.__rspaceDismissWelcome = function() {
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) ──
function renderWelcomeOverlay(): string {
return `
<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>`;
return ''; // Tours disabled
}
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; }
`;
const WELCOME_CSS = `
#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 WELCOME_CSS = ''; // Tours disabled
const INFO_PANEL_CSS = `
/* ── 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); }
/* 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 */

View File

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