/* ─── Onboarding Tour ──────────────────────────────────────── */ .onboarding-root { position: fixed; inset: 0; z-index: 10000; pointer-events: none; opacity: 0; transition: opacity 0.35s ease; font-family: Inter, "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } .onboarding-root.is-visible { opacity: 1; } /* ─── Overlay ──────────────────────────────────────────────── */ .onboarding-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.64); pointer-events: auto; transition: clip-path 0.32s cubic-bezier(0.4, 0, 0.2, 1); will-change: clip-path; } /* During interactive steps, let clicks pass through to dropdowns etc. */ .onboarding-overlay--passive { pointer-events: none; } /* Tooltip also lets clicks through during interactive steps, except for buttons */ .onboarding-tooltip--passive { pointer-events: none; } .onboarding-tooltip--passive .onboarding-tooltip__btn { pointer-events: auto; } /* ─── Spotlight ring ───────────────────────────────────────── */ .onboarding-spotlight { position: fixed; z-index: 10001; border-radius: 10px; border: 2px solid rgba(0, 255, 136, 0.5); box-shadow: 0 0 22px rgba(0, 255, 136, 0.18), 0 0 50px rgba(0, 255, 136, 0.06), inset 0 0 0 1px rgba(0, 255, 136, 0.05); pointer-events: none; transition: left 0.32s cubic-bezier(0.4, 0, 0.2, 1), top 0.32s cubic-bezier(0.4, 0, 0.2, 1), width 0.32s cubic-bezier(0.4, 0, 0.2, 1), height 0.32s cubic-bezier(0.4, 0, 0.2, 1); } .onboarding-spotlight__pulse { position: absolute; inset: -4px; border-radius: 14px; border: 1px solid rgba(0, 255, 136, 0.3); animation: ob-pulse 2.4s ease-out infinite; } .onboarding-spotlight__pulse--delay { animation-delay: 1.2s; } @keyframes ob-pulse { 0% { transform: scale(1); opacity: 0.6; } 100% { transform: scale(1.08); opacity: 0; } } /* ─── Connector SVG ────────────────────────────────────────── */ .onboarding-connector { position: fixed; inset: 0; z-index: 10002; width: 100%; height: 100%; pointer-events: none; } .onboarding-connector__path { animation: ob-dash 1.6s linear infinite; stroke-dashoffset: 0; } @keyframes ob-dash { to { stroke-dashoffset: -24; } } .onboarding-connector__dot { animation: ob-dot-pulse 1.4s ease-in-out infinite; } @keyframes ob-dot-pulse { 0%, 100% { r: 4; opacity: 0.7; } 50% { r: 7; opacity: 1; } } /* ─── Tooltip card ─────────────────────────────────────────── */ .onboarding-tooltip { position: fixed; z-index: 10003; width: min(92vw, 360px); padding: 20px 22px 18px; border-radius: 16px; background: var(--bg-elevated, #1e1e1e); border: 1px solid var(--border-subtle, #333); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.03) inset, 0 0 60px rgba(0, 255, 136, 0.04); pointer-events: auto; transition: left 0.32s cubic-bezier(0.4, 0, 0.2, 1), top 0.32s cubic-bezier(0.4, 0, 0.2, 1); } .onboarding-tooltip--pop { animation: ob-pop-in 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); } @keyframes ob-pop-in { from { opacity: 0; transform: scale(0.92) translateY(6px); } to { opacity: 1; transform: scale(1) translateY(0); } } /* Tooltip arrow — CSS triangle pointing toward target */ .onboarding-tooltip__arrow { position: absolute; width: 0; height: 0; display: none; /* replaced by SVG connector; fallback for simple cases */ } /* ─── Tooltip head ─────────────────────────────────────────── */ .onboarding-tooltip__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .onboarding-tooltip__phase-badge { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; padding: 2px 10px; border-radius: 999px; background: rgba(var(--accent-rgb, 0, 255, 136), 0.12); color: var(--accent, #00ff88); } .onboarding-tooltip__counter { font-size: 11px; font-weight: 600; color: var(--fg-muted, #777); font-variant-numeric: tabular-nums; } /* ─── Tooltip body ─────────────────────────────────────────── */ .onboarding-tooltip__title { display: block; font-size: 17px; font-weight: 700; color: var(--fg-body, #e5e5e5); margin-bottom: 6px; line-height: 1.3; } .onboarding-tooltip__desc { font-size: 13px; line-height: 1.6; color: var(--fg-muted, #999); margin: 0 0 4px; } .onboarding-tooltip__action-hint { font-size: 13px; line-height: 1.5; color: var(--accent, #00ff88); margin: 8px 0 4px; font-weight: 600; animation: ob-hint-blink 1.8s ease-in-out infinite; } @keyframes ob-hint-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* ─── Tooltip actions ──────────────────────────────────────── */ .onboarding-tooltip__actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 14px; } .onboarding-tooltip__btn { display: inline-flex; align-items: center; gap: 5px; padding: 7px 16px; border-radius: 8px; border: none; font-size: 13px; font-weight: 600; cursor: pointer; transition: background 0.15s ease, opacity 0.15s ease, transform 0.12s ease; font-family: inherit; white-space: nowrap; } .onboarding-tooltip__btn:active { transform: scale(0.97); } .onboarding-tooltip__btn--primary { background: var(--accent, #00ff88); color: #000; } .onboarding-tooltip__btn--primary:hover { opacity: 0.85; } .onboarding-tooltip__btn--ghost { background: transparent; color: var(--fg-muted, #888); border: 1px solid var(--border-subtle, #444); } .onboarding-tooltip__btn--ghost:hover { color: var(--fg-body, #e5e5e5); border-color: var(--fg-muted, #888); } .onboarding-tooltip__wait-hint { font-size: 11px; color: var(--fg-muted, #777); font-style: italic; animation: ob-hint-blink 2s ease-in-out infinite; } /* ─── Progress bar (bottom-right) ──────────────────────────── */ .onboarding-progress { position: fixed; z-index: 10002; bottom: 24px; right: 32px; display: flex; align-items: center; gap: 40px; pointer-events: auto; } .onboarding-progress__phase { display: flex; flex-direction: column; align-items: center; gap: 5px; } .onboarding-progress__dot { width: 10px; height: 10px; border-radius: 50%; background: var(--border-subtle, #444); transition: background 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease; } .onboarding-progress__dot.is-active { background: var(--accent, #00ff88); transform: scale(1.4); box-shadow: 0 0 12px rgba(0, 255, 136, 0.4); } .onboarding-progress__dot.is-done { background: rgba(var(--accent-rgb, 0, 255, 136), 0.5); } .onboarding-progress__phase span { font-size: 10px; color: var(--fg-muted, #666); white-space: nowrap; } .onboarding-progress__phase .is-active + span, .onboarding-progress__phase .is-done + span { color: var(--fg-body, #ccc); } /* ─── Responsive ───────────────────────────────────────────── */ @media (max-width: 640px) { .onboarding-tooltip { width: calc(100vw - 20px); left: 10px !important; } .onboarding-progress { gap: 20px; } }