mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
fix(onboarding): center step connector line & refresh welcome layout (#640)
* fix(onboarding): center step connector line with circles The connector line was vertically centered against the circle+label column, landing below the circle's center. Absolutely position the label below the circle so the row height equals just the circle and items-center aligns the line to the circle's center. * feat(onboarding): refresh welcome layout & indicator spacing - Place logo inline to the right of the Welcome heading - Move the tagline badge below the heading with more breathing room - Add space between the step indicator and step content
This commit is contained in:
parent
7e1acedfcf
commit
aa347c9047
2 changed files with 17 additions and 21 deletions
|
|
@ -26,7 +26,7 @@ export function StepIndicator({ currentStep, path }: StepIndicatorProps) {
|
||||||
const currentIndex = steps.findIndex(s => s.step === currentStep)
|
const currentIndex = steps.findIndex(s => s.step === currentStep)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex items-center gap-2 mb-8 px-4">
|
<div className="flex items-center gap-2 mb-14 px-4">
|
||||||
{steps.map((s, i) => (
|
{steps.map((s, i) => (
|
||||||
<React.Fragment key={s.step}>
|
<React.Fragment key={s.step}>
|
||||||
{i > 0 && (
|
{i > 0 && (
|
||||||
|
|
@ -37,7 +37,7 @@ export function StepIndicator({ currentStep, path }: StepIndicatorProps) {
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<div className="flex flex-col items-center gap-1.5">
|
<div className="relative flex flex-col items-center">
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"size-8 rounded-full flex items-center justify-center text-xs font-medium transition-all duration-300",
|
"size-8 rounded-full flex items-center justify-center text-xs font-medium transition-all duration-300",
|
||||||
|
|
@ -54,7 +54,7 @@ export function StepIndicator({ currentStep, path }: StepIndicatorProps) {
|
||||||
</div>
|
</div>
|
||||||
<span
|
<span
|
||||||
className={cn(
|
className={cn(
|
||||||
"text-[11px] font-medium transition-colors duration-300",
|
"absolute top-full mt-1.5 whitespace-nowrap text-[11px] font-medium transition-colors duration-300",
|
||||||
i <= currentIndex ? "text-foreground" : "text-muted-foreground"
|
i <= currentIndex ? "text-foreground" : "text-muted-foreground"
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -12,15 +12,21 @@ export function WelcomeStep({ state }: WelcomeStepProps) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col items-center justify-center text-center flex-1">
|
<div className="flex flex-col items-center justify-center text-center flex-1">
|
||||||
{/* Logo with ambient glow */}
|
{/* Logo + main heading on the same level */}
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, scale: 0.8 }}
|
initial={{ opacity: 0, y: 8 }}
|
||||||
animate={{ opacity: 1, scale: 1 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.5, ease: [0.16, 1, 0.3, 1] }}
|
transition={{ delay: 0.2 }}
|
||||||
className="relative mb-8"
|
className="flex items-center gap-4 mb-4"
|
||||||
>
|
>
|
||||||
<div className="absolute inset-0 size-16 rounded-2xl bg-primary/10 blur-xl scale-[2.5]" />
|
<h1 className="text-3xl font-bold tracking-tight">
|
||||||
<img src="/logo-only.png" alt="Rowboat" className="relative size-16" />
|
Welcome to Rowboat
|
||||||
|
</h1>
|
||||||
|
{/* Logo with ambient glow */}
|
||||||
|
<div className="relative shrink-0">
|
||||||
|
<div className="absolute inset-0 size-12 rounded-2xl bg-primary/10 blur-xl scale-[2.5]" />
|
||||||
|
<img src="/logo-only.png" alt="Rowboat" className="relative size-12" />
|
||||||
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Tagline badge */}
|
{/* Tagline badge */}
|
||||||
|
|
@ -28,21 +34,11 @@ export function WelcomeStep({ state }: WelcomeStepProps) {
|
||||||
initial={{ opacity: 0, y: 6 }}
|
initial={{ opacity: 0, y: 6 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ delay: 0.15 }}
|
transition={{ delay: 0.15 }}
|
||||||
className="inline-flex items-center gap-2 rounded-full border bg-muted/50 px-3.5 py-1.5 text-xs font-medium text-muted-foreground mb-6"
|
className="inline-flex items-center gap-2 rounded-full border bg-muted/50 px-3.5 py-1.5 text-xs font-medium text-muted-foreground mb-10"
|
||||||
>
|
>
|
||||||
<span className="size-1.5 rounded-full bg-green-500 animate-pulse" />
|
<span className="size-1.5 rounded-full bg-green-500 animate-pulse" />
|
||||||
Your AI coworker, with memory
|
Your AI coworker, with memory
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Main heading */}
|
|
||||||
<motion.h1
|
|
||||||
initial={{ opacity: 0, y: 8 }}
|
|
||||||
animate={{ opacity: 1, y: 0 }}
|
|
||||||
transition={{ delay: 0.2 }}
|
|
||||||
className="text-3xl font-bold tracking-tight mb-3"
|
|
||||||
>
|
|
||||||
Welcome to Rowboat
|
|
||||||
</motion.h1>
|
|
||||||
<motion.p
|
<motion.p
|
||||||
initial={{ opacity: 0 }}
|
initial={{ opacity: 0 }}
|
||||||
animate={{ opacity: 1 }}
|
animate={{ opacity: 1 }}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue