77 LoadingOverlay ,
88 Stack ,
99} from "@mantine/core" ;
10+ import { useMediaQuery } from "@mantine/hooks" ;
1011import { IconBrandGithubFilled } from "@tabler/icons-react" ;
1112import { createFileRoute , redirect , useRouter } from "@tanstack/react-router" ;
1213import {
@@ -19,6 +20,7 @@ import {
1920import { useEffect , useRef } from "react" ;
2021import { isAuthenticated , resolveToken } from "../api/auth" ;
2122import ContributionBackground from "../components/contribution_background" ;
23+ import { MQ } from "../theme/media" ;
2224import "../styles/login.css" ;
2325import "../styles/page.css" ;
2426
@@ -53,6 +55,9 @@ function Login() {
5355 const { code, redirect : redirectUrl } = Route . useSearch ( ) ;
5456 const loading = useRef < boolean | null > ( null ) ;
5557
58+ // Prefer CSS for layout; JS flag helps toggle simplified title on small screens
59+ const isMobile = useMediaQuery ( MQ . login ) ;
60+
5661 // Persist redirect across OAuth flow
5762 useEffect ( ( ) => {
5863 if ( redirectUrl ) {
@@ -97,32 +102,35 @@ function Login() {
97102 delay : 1000 ,
98103 } ) ;
99104
100- createTimeline ( )
101- . sync ( slideinfade )
102- . add ( ".slide-up" , {
103- ease : "cubicBezier(.28,1,0,1)" ,
104- y : stagger ( "-1.5rem" ) ,
105- delay : stagger ( 10 ) ,
106- marginTop : "4.5rem" ,
107- } ) ;
105+ if ( isMobile ) {
106+ // Mobile: only fade in the caption/buttons
107+ createTimeline ( )
108+ . sync ( slideinfade )
109+ . add ( ".caption-item" , { opacity : 1 , delay : stagger ( 100 ) } ) ;
110+ } else {
111+ // Desktop: run stacked text animations
112+ createTimeline ( )
113+ . sync ( slideinfade )
114+ . add ( ".slide-up" , {
115+ ease : "cubicBezier(.28,1,0,1)" ,
116+ y : stagger ( "-1.5rem" ) ,
117+ delay : stagger ( 10 ) ,
118+ marginTop : "4.5rem" ,
119+ } ) ;
108120
109- createTimeline ( )
110- . sync ( slideinfade )
111- . add ( ".slide-down" , {
112- ease : "cubicBezier(.28,1,0,1)" ,
113- y : stagger ( "1.5rem" ) ,
114- delay : stagger ( 10 , {
115- reversed : true ,
116- } ) ,
117- marginBottom : "4.5rem" ,
118- } )
119- . add ( ".caption-item" , {
120- opacity : 1 ,
121- delay : stagger ( 100 ) ,
122- } ) ;
121+ createTimeline ( )
122+ . sync ( slideinfade )
123+ . add ( ".slide-down" , {
124+ ease : "cubicBezier(.28,1,0,1)" ,
125+ y : stagger ( "1.5rem" ) ,
126+ delay : stagger ( 10 , { reversed : true } ) ,
127+ marginBottom : "4.5rem" ,
128+ } )
129+ . add ( ".caption-item" , { opacity : 1 , delay : stagger ( 100 ) } ) ;
130+ }
123131 } ) ;
124132 return ( ) => scope . current ?. revert ( ) ;
125- } , [ ] ) ;
133+ } , [ isMobile ] ) ;
126134
127135 const _3D = (
128136 < span
@@ -147,20 +155,32 @@ function Login() {
147155 < Flex gap = { 20 } >
148156 < Center >
149157 < Stack gap = { 30 } >
150- < div className = "logo" >
151- < div className = "stack mona-sans-wide title github-text" >
152- < span className = "slide-up neon-blue" > GITHUB</ span >
153- < span className = "slide-up neon-blue" > GITHUB</ span >
154- < span className = "slide-up neon-blue" > GITHUB</ span >
155- < span className = "slide-up pink-text" > GITHUB</ span >
158+ { /* On mobile, render a simplified title; on larger screens use the animated stacked logo. */ }
159+ { isMobile ? (
160+ < div className = "logo" >
161+ < div
162+ className = "mona-sans-wide title"
163+ style = { { textAlign : "center" } }
164+ >
165+ GITHUB SKYLINE
166+ </ div >
156167 </ div >
157- < div className = "stack mona-sans-wide title skyline-text" >
158- < span className = "slide-down neon-pink" > SKYLINE</ span >
159- < span className = "slide-down neon-pink" > SKYLINE</ span >
160- < span className = "slide-down neon-pink" > SKYLINE</ span >
161- < span className = "slide-down pink-text" > SKYLINE</ span >
168+ ) : (
169+ < div className = "logo" >
170+ < div className = "stack mona-sans-wide title" >
171+ < span className = "slide-up neon-blue" > GITHUB</ span >
172+ < span className = "slide-up neon-blue" > GITHUB</ span >
173+ < span className = "slide-up neon-blue" > GITHUB</ span >
174+ < span className = "slide-up pink-text" > GITHUB</ span >
175+ </ div >
176+ < div className = "stack mona-sans-wide title" >
177+ < span className = "slide-down neon-pink" > SKYLINE</ span >
178+ < span className = "slide-down neon-pink" > SKYLINE</ span >
179+ < span className = "slide-down neon-pink" > SKYLINE</ span >
180+ < span className = "slide-down pink-text" > SKYLINE</ span >
181+ </ div >
162182 </ div >
163- </ div >
183+ ) }
164184 < Stack className = "caption" >
165185 < div className = "caption-item mona-sans-wide" >
166186 YOUR CONTRIBUTION STORY IN { _3D }
0 commit comments