aditya-rAj19 commited on
Commit
8b1c77d
·
1 Parent(s): fddd263

Make both pages fully responsive (mobile-first)

Browse files
frontend/src/index.css CHANGED
@@ -6,12 +6,13 @@
6
 
7
  body {
8
  margin: 0;
9
- background: #ffffff; /* Pure white as requested */
10
- color: #0f172a; /* navy */
11
  font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
12
  -webkit-font-smoothing: antialiased;
13
  -moz-osx-font-smoothing: grayscale;
14
  min-height: 100vh;
 
15
  }
16
 
17
  #root { min-height: 100vh; }
 
6
 
7
  body {
8
  margin: 0;
9
+ background: #ffffff;
10
+ color: #0f172a;
11
  font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
12
  -webkit-font-smoothing: antialiased;
13
  -moz-osx-font-smoothing: grayscale;
14
  min-height: 100vh;
15
+ overflow-x: hidden;
16
  }
17
 
18
  #root { min-height: 100vh; }
frontend/src/pages/AppPage.jsx CHANGED
@@ -273,9 +273,9 @@ export default function AppPage() {
273
  };
274
 
275
  return (
276
- <div className="bg-bg font-sans text-navy">
277
-
278
- {/* Main Content Area (Fills at least 1 screen height to push footer down) */}
279
  <div className="min-h-[100dvh] relative flex flex-col">
280
  {/* Floating Home Button (No Navbar) */}
281
  <button onClick={() => navigate('/')}
@@ -287,11 +287,11 @@ export default function AppPage() {
287
  Home
288
  </button>
289
 
290
- <main className="flex-1 w-full max-w-5xl mx-auto px-4 sm:px-6 py-20 sm:py-24 flex flex-col gap-5 sm:gap-7">
291
 
292
 
293
  {/* INPUT PANELS */}
294
- <div className="grid grid-cols-1 md:grid-cols-[1fr_32px_1fr] items-start gap-4 md:gap-0">
295
 
296
  {/* SOURCE */}
297
  <SpotlightCard className="bg-white border border-border shadow-sm rounded-2xl p-4 sm:p-6 flex flex-col gap-4">
@@ -354,12 +354,13 @@ export default function AppPage() {
354
  )}
355
  </SpotlightCard>
356
 
357
- {/* arrow */}
358
- <div className="hidden md:flex items-center justify-center pt-24 text-border2">
359
  <svg className="w-5 h-5" fill="none" stroke="currentColor" strokeWidth={2} viewBox="0 0 24 24"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>
360
  </div>
361
 
362
- <div className="md:hidden flex items-center gap-3">
 
363
  <div className="flex-1 h-px bg-border" />
364
  <span className="text-slate text-xs font-bold tracking-widest">THEN</span>
365
  <div className="flex-1 h-px bg-border" />
@@ -452,7 +453,7 @@ export default function AppPage() {
452
  <h2 className="text-lg sm:text-xl font-extrabold text-navy text-center">Results</h2>
453
 
454
  {/* 3-panel comparison */}
455
- <div className="grid grid-cols-1 md:grid-cols-3 gap-3 sm:gap-4">
456
  {[
457
  { label: 'Source', src: srcFile ? URL.createObjectURL(srcFile) : srcB64 },
458
  { label: 'Target', src: tgtFile ? URL.createObjectURL(tgtFile) : tgtB64 },
 
273
  };
274
 
275
  return (
276
+ <div className="bg-bg font-sans text-navy overflow-x-hidden">
277
+
278
+ {/* Main Content Area */}
279
  <div className="min-h-[100dvh] relative flex flex-col">
280
  {/* Floating Home Button (No Navbar) */}
281
  <button onClick={() => navigate('/')}
 
287
  Home
288
  </button>
289
 
290
+ <main className="flex-1 w-full max-w-5xl mx-auto px-3 sm:px-6 pt-16 sm:pt-20 pb-10 sm:pb-14 flex flex-col gap-4 sm:gap-6">
291
 
292
 
293
  {/* INPUT PANELS */}
294
+ <div className="grid grid-cols-1 sm:grid-cols-[1fr_28px_1fr] items-start gap-3 sm:gap-0">
295
 
296
  {/* SOURCE */}
297
  <SpotlightCard className="bg-white border border-border shadow-sm rounded-2xl p-4 sm:p-6 flex flex-col gap-4">
 
354
  )}
355
  </SpotlightCard>
356
 
357
+ {/* arrow — shown on sm+ */}
358
+ <div className="hidden sm:flex items-center justify-center pt-20 text-border2">
359
  <svg className="w-5 h-5" fill="none" stroke="currentColor" strokeWidth={2} viewBox="0 0 24 24"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>
360
  </div>
361
 
362
+ {/* divider mobile only */}
363
+ <div className="sm:hidden flex items-center gap-3">
364
  <div className="flex-1 h-px bg-border" />
365
  <span className="text-slate text-xs font-bold tracking-widest">THEN</span>
366
  <div className="flex-1 h-px bg-border" />
 
453
  <h2 className="text-lg sm:text-xl font-extrabold text-navy text-center">Results</h2>
454
 
455
  {/* 3-panel comparison */}
456
+ <div className="grid grid-cols-1 xs:grid-cols-3 sm:grid-cols-3 gap-2 sm:gap-3">
457
  {[
458
  { label: 'Source', src: srcFile ? URL.createObjectURL(srcFile) : srcB64 },
459
  { label: 'Target', src: tgtFile ? URL.createObjectURL(tgtFile) : tgtB64 },
frontend/src/pages/LandingPage.jsx CHANGED
@@ -1,6 +1,4 @@
1
- import { useNavigate, Link } from 'react-router-dom';
2
- import { motion } from 'framer-motion';
3
- import SplitText from '../components/ui/SplitText';
4
  import BlurText from '../components/ui/BlurText';
5
  import AnimatedContent from '../components/ui/AnimatedContent';
6
  import Magnet from '../components/ui/Magnet';
@@ -11,114 +9,107 @@ export default function LandingPage() {
11
  const navigate = useNavigate();
12
 
13
  return (
14
- // min-h-screen and overflow-x-hidden allow normal scrolling, but we make the Hero 100vh
15
  <div className="min-h-screen w-full bg-bg font-sans overflow-x-hidden flex flex-col text-navy">
16
 
17
- {/* ═══════════════ TOP LOGOS (No Navbar) ═══════════════ */}
18
- <div className="absolute top-0 left-0 right-0 z-50 flex items-start justify-between px-3 sm:px-8 pt-3 sm:pt-4 pointer-events-none gap-2">
19
- {/* Left Marwadi University */}
20
- <div className="shrink-0 pointer-events-auto max-w-[48%]">
21
  <img src="/logos/marwadi_university.jpeg" alt="Marwadi University"
22
- className="h-10 sm:h-14 md:h-20 w-auto object-contain mix-blend-multiply" />
23
  </div>
24
-
25
- {/* Right — Faculty of Engineering */}
26
- <div className="shrink-0 pointer-events-auto mt-1 sm:mt-2 max-w-[48%] flex justify-end">
27
  <img src="/logos/engineering_faculty.jpeg" alt="Faculty of Engineering"
28
- className="h-7 sm:h-12 md:h-16 w-auto object-contain mix-blend-multiply" />
29
  </div>
30
  </div>
31
 
32
-
33
- {/* ═══════════════════════════ HERO (Takes up exactly 100vh) ═══════════════════════════ */}
34
- <main className="h-screen min-h-[550px] relative flex flex-col items-center justify-center px-4 sm:px-6">
35
- {/* Subtle grid background */}
36
  <div className="absolute inset-0 pointer-events-none" style={{
37
  backgroundImage: 'linear-gradient(rgba(14,116,144,0.02) 1px,transparent 1px),linear-gradient(90deg,rgba(14,116,144,0.02) 1px,transparent 1px)',
38
  backgroundSize: '60px 60px',
39
  }} />
40
 
41
- <div className="relative z-10 w-full max-w-4xl mx-auto text-center flex flex-col items-center gap-6 sm:gap-8 -mt-10 sm:-mt-16 md:-mt-20">
42
 
43
- {/* ICT Logo - Fixed */}
44
  <AnimatedContent delay={0} direction="down" distance={20}>
45
- <div className="inline-flex px-4">
46
- <img src="/logos/ict_logo.png" alt="ICT Department"
47
- className="w-[180px] sm:w-[280px] md:w-[380px] max-w-full h-auto object-contain mix-blend-multiply" />
48
- </div>
49
  </AnimatedContent>
50
 
51
  {/* Headline */}
52
- <div className="w-full">
53
- <h1 className="text-[clamp(2.2rem,6vw,4.5rem)] font-black leading-[1.05] tracking-[-0.04em] text-navy flex flex-col md:flex-row items-center justify-center md:gap-x-1">
54
- <span className="inline-flex items-center justify-center md:justify-start h-[1.2em] overflow-visible whitespace-nowrap w-full md:w-[6.4em]">
 
 
55
  <Typewriter words={[
56
- "Your Future", // English
57
- "તમારું ભવિ્ય", // Gujarati
58
- "మీ భవిష్యత్తు", // Telugu
59
- "आपका भविष्य", // Hindi
60
- "Seu Futuro" // Portuguese
61
  ]} />
62
  </span>
63
- <ShinyText text="Starts Here" className="inline-block mt-2 md:mt-4 text-[clamp(1.4rem,4vw,2.5rem)] opacity-90" />
 
64
  </h1>
65
  </div>
66
 
67
  {/* Subtitle */}
68
  <BlurText
69
  text="Visualize your potential. Experience campus life virtually and see yourself wearing our colors in just one click."
70
- className="text-sm sm:text-base text-slate max-w-2xl leading-relaxed px-2 font-medium"
71
  delay={0.3}
72
  />
73
 
74
- {/* CTA Button */}
75
- <AnimatedContent delay={0.45} direction="up" distance={20} className="w-full max-w-xs sm:max-w-none mt-2">
76
- <div className="flex justify-center">
77
- <Magnet className="w-full sm:w-auto">
78
  <button onClick={() => navigate('/app')}
79
- className="w-full sm:w-auto flex items-center justify-center gap-2.5 bg-teal text-white px-10 py-3.5 sm:py-4 rounded-xl font-bold text-sm sm:text-base shadow-lg shadow-teal/20 hover:shadow-xl hover:shadow-teal/30 hover:-translate-y-0.5 active:scale-95 transition-all duration-200">
80
- <svg className="w-5 h-5 shrink-0" viewBox="0 0 24 24"><polygon points="5 3 19 12 5 21 5 3" fill="currentColor" /></svg>
 
 
81
  Enter Studio
82
  </button>
83
  </Magnet>
84
  </div>
85
  </AnimatedContent>
86
 
87
- {/* Excellence Trust Bar */}
88
- <AnimatedContent delay={0.6} direction="up" distance={10} className="mt-6 sm:mt-10 w-full">
89
- <div className="flex items-center justify-center opacity-90 px-4">
90
- <img src="/logos/qs_ranking.png" alt="QS Ranking" className="h-12 sm:h-16 md:h-20 w-auto object-contain mix-blend-multiply" />
 
91
  </div>
92
  </AnimatedContent>
93
  </div>
94
  </main>
95
 
96
-
97
- {/* ═══════════════════════════ BOTTOM AREA (Scrollable) ═══════════════════════════ */}
98
- <div className="flex flex-col bg-white">
99
-
100
- {/* Footer Strip */}
101
- <footer className="bg-bg3 border-t border-border py-2 px-4">
102
- <div className="max-w-6xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-3 text-xs sm:text-sm text-slate">
103
- <div className="flex flex-col sm:flex-row items-center gap-2 sm:gap-4 text-center sm:text-left w-full sm:w-auto">
104
- <img src="/logos/ict_logo_black.png" alt="ICT Department" className="h-6 sm:h-8 w-auto opacity-70" />
105
- <div className="w-12 h-px sm:w-px sm:h-8 bg-border" />
106
- <div className="flex flex-col leading-tight">
107
- <strong className="text-navy">DeepFace Studio</strong>
108
- <span>Dept. of ICT, Marwadi University</span>
109
- </div>
110
- </div>
111
- <div className="flex items-center gap-2 sm:gap-3 flex-wrap justify-center font-medium">
112
- <span>Educational use only</span>
113
- <span className="text-border2">·</span>
114
- <span>Local processing</span>
115
- <span className="text-border2">·</span>
116
- <span>© Aditya Raj 2026</span>
117
  </div>
118
  </div>
119
- </footer>
120
-
121
- </div>
 
 
 
 
 
 
122
 
123
  </div>
124
  );
 
1
+ import { useNavigate } from 'react-router-dom';
 
 
2
  import BlurText from '../components/ui/BlurText';
3
  import AnimatedContent from '../components/ui/AnimatedContent';
4
  import Magnet from '../components/ui/Magnet';
 
9
  const navigate = useNavigate();
10
 
11
  return (
 
12
  <div className="min-h-screen w-full bg-bg font-sans overflow-x-hidden flex flex-col text-navy">
13
 
14
+ {/* ═══ TOP LOGOS ═══ */}
15
+ <div className="absolute top-0 left-0 right-0 z-50 flex items-start justify-between px-3 sm:px-6 pt-3 sm:pt-4 pointer-events-none gap-2">
16
+ <div className="shrink-0 pointer-events-auto max-w-[45%]">
 
17
  <img src="/logos/marwadi_university.jpeg" alt="Marwadi University"
18
+ className="h-8 sm:h-12 md:h-16 w-auto max-w-full object-contain mix-blend-multiply" />
19
  </div>
20
+ <div className="shrink-0 pointer-events-auto mt-1 sm:mt-2 max-w-[45%] flex justify-end">
 
 
21
  <img src="/logos/engineering_faculty.jpeg" alt="Faculty of Engineering"
22
+ className="h-6 sm:h-10 md:h-14 w-auto max-w-full object-contain mix-blend-multiply" />
23
  </div>
24
  </div>
25
 
26
+ {/* ═══ HERO ═══ */}
27
+ <main className="flex-1 relative flex flex-col items-center justify-center px-4 sm:px-6 py-24 sm:py-28 min-h-screen">
28
+ {/* Grid background */}
 
29
  <div className="absolute inset-0 pointer-events-none" style={{
30
  backgroundImage: 'linear-gradient(rgba(14,116,144,0.02) 1px,transparent 1px),linear-gradient(90deg,rgba(14,116,144,0.02) 1px,transparent 1px)',
31
  backgroundSize: '60px 60px',
32
  }} />
33
 
34
+ <div className="relative z-10 w-full max-w-3xl mx-auto text-center flex flex-col items-center gap-5 sm:gap-7">
35
 
36
+ {/* ICT Logo */}
37
  <AnimatedContent delay={0} direction="down" distance={20}>
38
+ <img src="/logos/ict_logo.png" alt="ICT Department"
39
+ className="w-[140px] sm:w-[220px] md:w-[300px] max-w-[70vw] h-auto object-contain mix-blend-multiply mx-auto" />
 
 
40
  </AnimatedContent>
41
 
42
  {/* Headline */}
43
+ <div className="w-full px-2">
44
+ <h1 className="font-black leading-tight tracking-tight text-navy flex flex-col items-center gap-1 sm:gap-2"
45
+ style={{ fontSize: 'clamp(1.8rem, 6vw, 4rem)' }}>
46
+ {/* Typewriter — allow wrap on tiny screens */}
47
+ <span className="block w-full text-center overflow-hidden">
48
  <Typewriter words={[
49
+ 'Your Future',
50
+ 'તમારું ભવિ��્ય',
51
+ 'మీ భవిష్యత్తు',
52
+ 'आपका भविष्य',
53
+ 'Seu Futuro',
54
  ]} />
55
  </span>
56
+ <ShinyText text="Starts Here"
57
+ className="block text-[0.65em] sm:text-[0.7em] opacity-90" />
58
  </h1>
59
  </div>
60
 
61
  {/* Subtitle */}
62
  <BlurText
63
  text="Visualize your potential. Experience campus life virtually and see yourself wearing our colors in just one click."
64
+ className="text-xs sm:text-sm md:text-base text-slate max-w-xl leading-relaxed px-2 font-medium"
65
  delay={0.3}
66
  />
67
 
68
+ {/* CTA */}
69
+ <AnimatedContent delay={0.45} direction="up" distance={20} className="w-full mt-1">
70
+ <div className="flex justify-center px-4 sm:px-0">
71
+ <Magnet className="w-full sm:w-auto max-w-xs sm:max-w-none">
72
  <button onClick={() => navigate('/app')}
73
+ className="w-full sm:w-auto flex items-center justify-center gap-2.5 bg-teal text-white px-8 sm:px-10 py-3.5 rounded-xl font-bold text-sm sm:text-base shadow-lg shadow-teal/20 hover:shadow-xl hover:shadow-teal/30 hover:-translate-y-0.5 active:scale-95 transition-all duration-200">
74
+ <svg className="w-4 h-4 sm:w-5 sm:h-5 shrink-0" viewBox="0 0 24 24">
75
+ <polygon points="5 3 19 12 5 21 5 3" fill="currentColor" />
76
+ </svg>
77
  Enter Studio
78
  </button>
79
  </Magnet>
80
  </div>
81
  </AnimatedContent>
82
 
83
+ {/* QS Ranking badge */}
84
+ <AnimatedContent delay={0.6} direction="up" distance={10} className="mt-2 sm:mt-6 w-full">
85
+ <div className="flex items-center justify-center px-4">
86
+ <img src="/logos/qs_ranking.png" alt="QS Ranking"
87
+ className="h-10 sm:h-14 md:h-18 w-auto max-w-[80vw] object-contain mix-blend-multiply opacity-90" />
88
  </div>
89
  </AnimatedContent>
90
  </div>
91
  </main>
92
 
93
+ {/* ═══ FOOTER ═══ */}
94
+ <footer className="bg-bg3 border-t border-border py-3 px-4">
95
+ <div className="max-w-6xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-2 sm:gap-4 text-xs sm:text-sm text-slate">
96
+ <div className="flex flex-col sm:flex-row items-center gap-2 sm:gap-4 text-center sm:text-left w-full sm:w-auto">
97
+ <img src="/logos/ict_logo_black.png" alt="ICT Department" className="h-6 sm:h-8 w-auto opacity-70" />
98
+ <div className="w-10 h-px sm:w-px sm:h-7 bg-border" />
99
+ <div className="flex flex-col leading-tight">
100
+ <strong className="text-navy">DeepFace Studio</strong>
101
+ <span>Dept. of ICT, Marwadi University</span>
 
 
 
 
 
 
 
 
 
 
 
 
102
  </div>
103
  </div>
104
+ <div className="flex items-center gap-2 flex-wrap justify-center font-medium text-[11px] sm:text-xs">
105
+ <span>Educational use only</span>
106
+ <span className="text-border2">·</span>
107
+ <span>Local processing</span>
108
+ <span className="text-border2">·</span>
109
+ <span>© Aditya Raj 2026</span>
110
+ </div>
111
+ </div>
112
+ </footer>
113
 
114
  </div>
115
  );
frontend/tailwind.config.js CHANGED
@@ -2,6 +2,14 @@
2
  export default {
3
  content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}'],
4
  theme: {
 
 
 
 
 
 
 
 
5
  extend: {
6
  colors: {
7
  // Premium Light Academic Theme - White Background
 
2
  export default {
3
  content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}'],
4
  theme: {
5
+ screens: {
6
+ xs: '480px',
7
+ sm: '640px',
8
+ md: '768px',
9
+ lg: '1024px',
10
+ xl: '1280px',
11
+ '2xl': '1536px',
12
+ },
13
  extend: {
14
  colors: {
15
  // Premium Light Academic Theme - White Background