|
3 | 3 | </script> |
4 | 4 |
|
5 | 5 | <section class="relative min-h-screen overflow-hidden bg-white"> |
6 | | - <!-- Subtle gradient mesh background --> |
| 6 | + <!-- Ambient background layers --> |
7 | 7 | <div class="pointer-events-none absolute inset-0" aria-hidden="true"> |
| 8 | + <!-- Primary gradient mesh --> |
8 | 9 | <div |
9 | | - class="absolute -left-1/4 top-0 h-[600px] w-[600px] rounded-full bg-[#00D372]/10 blur-3xl" |
| 10 | + class="absolute right-0 top-0 h-[800px] w-[800px] rounded-full bg-[#00D372]/[0.08] blur-3xl" |
| 11 | + style="transform: translate(30%, -20%);" |
10 | 12 | ></div> |
| 13 | + <!-- Secondary accent --> |
11 | 14 | <div |
12 | | - class="absolute -right-1/4 top-1/3 h-[500px] w-[500px] rounded-full bg-[#00D372]/5 blur-3xl" |
| 15 | + class="absolute bottom-0 left-0 h-[600px] w-[600px] rounded-full bg-[#00D372]/[0.04] blur-3xl" |
| 16 | + style="transform: translate(-40%, 20%);" |
| 17 | + ></div> |
| 18 | + <!-- Subtle grid overlay --> |
| 19 | + <div |
| 20 | + class="absolute inset-0 opacity-[0.015]" |
| 21 | + style="background-image: linear-gradient(rgba(0,0,0,0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(0,0,0,0.1) 1px, transparent 1px); background-size: 64px 64px;" |
13 | 22 | ></div> |
14 | 23 | </div> |
15 | 24 |
|
16 | | - <!-- Grid pattern --> |
17 | | - <div |
18 | | - class="pointer-events-none absolute inset-0 opacity-[0.03]" |
19 | | - style="background-image: linear-gradient(rgba(0,0,0,0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(0,0,0,0.1) 1px, transparent 1px); background-size: 48px 48px;" |
20 | | - aria-hidden="true" |
21 | | - ></div> |
22 | | - |
23 | | - <div class="relative z-10 mx-auto flex min-h-screen max-w-6xl flex-col justify-center px-6 py-20"> |
24 | | - <div class="mx-auto max-w-3xl text-center"> |
| 25 | + <div class="relative z-10 mx-auto flex min-h-screen max-w-7xl flex-col justify-center px-6 py-20 lg:px-12"> |
| 26 | + <!-- Mobile: centered layout --> |
| 27 | + <div class="lg:hidden mx-auto max-w-xl text-center"> |
25 | 28 | <div class="mb-8 flex flex-wrap items-center justify-center gap-3"> |
26 | 29 | <div |
27 | 30 | class="flex items-center gap-2 rounded-full border border-[#00D372]/30 bg-[#00D372]/10 px-4 py-2" |
|
37 | 40 | </div> |
38 | 41 | </div> |
39 | 42 |
|
40 | | - <h1 class="mb-10 text-5xl font-bold leading-[1.1] tracking-tight text-zinc-900 sm:text-6xl lg:text-7xl"> |
| 43 | + <h1 class="mb-10 text-5xl font-bold leading-[1.1] tracking-tight text-zinc-900 sm:text-6xl"> |
41 | 44 | Build<br /> |
42 | 45 | <span class="text-zinc-400">the</span> |
43 | 46 | <span class="text-[#00D372]">Future</span><br /> |
44 | 47 | <span class="text-zinc-400">with</span> Code<span class="text-[#00D372]">;</span> |
45 | 48 | </h1> |
46 | 49 |
|
47 | | - <p class="mb-10 mx-auto max-w-2xl text-lg leading-relaxed text-zinc-600 sm:text-xl"> |
| 50 | + <p class="mb-10 mx-auto max-w-md text-lg leading-relaxed text-zinc-600"> |
48 | 51 | 東京大学のソフトウェアエンジニアリングサークル。 |
49 | 52 | <span class="font-semibold text-zinc-800">学生が実際にプロダクトを作り、世に届ける。</span> |
50 | 53 | </p> |
51 | 54 |
|
52 | | - <div class="flex flex-wrap items-center justify-center gap-4"> |
| 55 | + <div class="flex flex-col items-center gap-4 sm:flex-row sm:justify-center"> |
53 | 56 | <a |
54 | 57 | href="/join" |
55 | | - class="group inline-flex items-center gap-2 rounded-lg bg-[#00D372] px-8 py-4 font-semibold text-white shadow-lg shadow-[#00D372]/30 transition-all hover:shadow-xl hover:shadow-[#00D372]/40 focus:outline-none focus:ring-2 focus:ring-[#00D372] focus:ring-offset-2" |
| 58 | + class="group inline-flex w-full sm:w-auto items-center justify-center gap-2 rounded-lg bg-[#00D372] px-8 py-4 font-semibold text-white shadow-lg shadow-[#00D372]/30 transition-all hover:shadow-xl hover:shadow-[#00D372]/40 focus:outline-none focus:ring-2 focus:ring-[#00D372] focus:ring-offset-2" |
56 | 59 | > |
57 | 60 | <span>参加する</span> |
58 | 61 | <ArrowRight class="h-5 w-5 transition-transform group-hover:translate-x-1" /> |
59 | 62 | </a> |
60 | 63 | <a |
61 | 64 | href="/projects" |
62 | | - class="group inline-flex items-center gap-2 rounded-lg bg-zinc-900 px-8 py-4 font-semibold text-white transition-all hover:bg-zinc-800 focus:outline-none focus:ring-2 focus:ring-[#00D372] focus:ring-offset-2" |
| 65 | + class="group inline-flex w-full sm:w-auto items-center justify-center gap-2 rounded-lg bg-zinc-900 px-8 py-4 font-semibold text-white transition-all hover:bg-zinc-800 focus:outline-none focus:ring-2 focus:ring-[#00D372] focus:ring-offset-2" |
63 | 66 | > |
64 | 67 | プロジェクトを見る |
65 | 68 | <ArrowRight class="h-5 w-5 transition-transform group-hover:translate-x-1" /> |
66 | 69 | </a> |
67 | 70 | </div> |
68 | 71 | </div> |
| 72 | + |
| 73 | + <!-- Desktop: asymmetric layout --> |
| 74 | + <div class="hidden lg:grid lg:grid-cols-2 lg:gap-16 xl:gap-24 lg:items-center"> |
| 75 | + <!-- Left column: Content --> |
| 76 | + <div class="space-y-12 animate-fade-in-up"> |
| 77 | + <!-- Meta badges --> |
| 78 | + <div class="flex flex-wrap items-center gap-3"> |
| 79 | + <div |
| 80 | + class="flex items-center gap-2.5 rounded-full border border-[#00D372]/30 bg-[#00D372]/[0.08] px-5 py-2.5 backdrop-blur-sm" |
| 81 | + > |
| 82 | + <div class="h-2 w-2 rounded-full bg-[#00D372] shadow-[0_0_10px_rgba(0,211,114,0.7)] animate-pulse-glow"></div> |
| 83 | + <span class="font-mono text-sm font-medium text-zinc-700 tracking-wide">SINCE 2019</span> |
| 84 | + </div> |
| 85 | + <div |
| 86 | + class="flex items-center gap-2.5 rounded-full border border-zinc-200/80 bg-white/60 px-5 py-2.5 backdrop-blur-sm" |
| 87 | + > |
| 88 | + <Code2 class="h-4 w-4 text-zinc-500" /> |
| 89 | + <span class="font-mono text-sm text-zinc-600">The University of Tokyo</span> |
| 90 | + </div> |
| 91 | + </div> |
| 92 | + |
| 93 | + <!-- Headline --> |
| 94 | + <div class="space-y-4"> |
| 95 | + <h1 class="text-6xl xl:text-7xl font-bold leading-[1.05] tracking-tight text-zinc-900"> |
| 96 | + Build the <span class="text-[#00D372]">Future</span><br /> |
| 97 | + with Code<span class="text-[#00D372]">;</span> |
| 98 | + </h1> |
| 99 | + </div> |
| 100 | + |
| 101 | + <!-- Description --> |
| 102 | + <div class="space-y-6 max-w-xl"> |
| 103 | + <p class="text-xl leading-relaxed text-zinc-600"> |
| 104 | + 東京大学のソフトウェアエンジニアリングサークル。 |
| 105 | + </p> |
| 106 | + <p class="text-lg leading-relaxed text-zinc-700 font-medium"> |
| 107 | + 学生が実際にプロダクトを作り、世に届ける。 |
| 108 | + </p> |
| 109 | + </div> |
| 110 | + |
| 111 | + <!-- CTAs --> |
| 112 | + <div class="flex flex-wrap items-center gap-4 pt-4"> |
| 113 | + <a |
| 114 | + href="/join" |
| 115 | + class="group inline-flex items-center gap-2.5 rounded-lg bg-[#00D372] px-8 py-4 font-semibold text-white shadow-lg shadow-[#00D372]/30 transition-all hover:shadow-xl hover:shadow-[#00D372]/40 hover:translate-y-[-2px] focus:outline-none focus:ring-2 focus:ring-[#00D372] focus:ring-offset-2" |
| 116 | + > |
| 117 | + <span>参加する</span> |
| 118 | + <ArrowRight class="h-5 w-5 transition-transform group-hover:translate-x-1" /> |
| 119 | + </a> |
| 120 | + <a |
| 121 | + href="/projects" |
| 122 | + class="group inline-flex items-center gap-2.5 rounded-lg border border-zinc-900 bg-zinc-900 px-8 py-4 font-semibold text-white transition-all hover:bg-zinc-800 hover:border-zinc-800 focus:outline-none focus:ring-2 focus:ring-[#00D372] focus:ring-offset-2" |
| 123 | + > |
| 124 | + <span>プロジェクトを見る</span> |
| 125 | + <ArrowRight class="h-5 w-5 transition-transform group-hover:translate-x-1" /> |
| 126 | + </a> |
| 127 | + </div> |
| 128 | + </div> |
| 129 | + |
| 130 | + <!-- Right column: Visual elements --> |
| 131 | + <div class="relative animate-fade-in-right"> |
| 132 | + <!-- Floating card stack --> |
| 133 | + <div class="relative h-[600px]"> |
| 134 | + <!-- Card 1: Code snippet --> |
| 135 | + <div |
| 136 | + class="absolute left-0 top-0 w-full rounded-2xl border border-zinc-200/80 bg-white/80 p-8 shadow-2xl shadow-zinc-900/5 backdrop-blur-sm animate-float-1" |
| 137 | + > |
| 138 | + <div class="flex items-center justify-between mb-6"> |
| 139 | + <div class="flex items-center gap-2"> |
| 140 | + <div class="h-3 w-3 rounded-full bg-[#ff5f57]"></div> |
| 141 | + <div class="h-3 w-3 rounded-full bg-[#febc2e]"></div> |
| 142 | + <div class="h-3 w-3 rounded-full bg-[#28c840]"></div> |
| 143 | + </div> |
| 144 | + <span class="font-mono text-xs text-zinc-400">main.ts</span> |
| 145 | + </div> |
| 146 | + <pre class="font-mono text-sm leading-relaxed text-zinc-700"><code>{@html `<span class="text-purple-600">const</span> <span class="text-zinc-900">mission</span> = { |
| 147 | + <span class="text-[#00D372]">learn</span>: <span class="text-blue-600">"最新技術"</span>, |
| 148 | + <span class="text-[#00D372]">build</span>: <span class="text-blue-600">"実用プロダクト"</span>, |
| 149 | + <span class="text-[#00D372]">share</span>: <span class="text-blue-600">"知見と経験"</span> |
| 150 | +};`}</code></pre> |
| 151 | + </div> |
| 152 | + |
| 153 | + <!-- Card 2: Stats --> |
| 154 | + <div |
| 155 | + class="absolute right-0 top-48 w-80 rounded-2xl border border-zinc-200/80 bg-white/90 p-6 shadow-xl shadow-zinc-900/5 backdrop-blur-sm animate-float-2" |
| 156 | + > |
| 157 | + <div class="space-y-4"> |
| 158 | + <div class="flex items-baseline gap-3"> |
| 159 | + <div class="text-4xl font-bold text-zinc-900">100+</div> |
| 160 | + <div class="font-mono text-sm text-zinc-500">メンバー</div> |
| 161 | + </div> |
| 162 | + <div class="flex items-baseline gap-3"> |
| 163 | + <div class="text-4xl font-bold text-[#00D372]">50+</div> |
| 164 | + <div class="font-mono text-sm text-zinc-500">プロジェクト</div> |
| 165 | + </div> |
| 166 | + <div class="flex items-baseline gap-3"> |
| 167 | + <div class="text-4xl font-bold text-zinc-900">6</div> |
| 168 | + <div class="font-mono text-sm text-zinc-500">年の実績</div> |
| 169 | + </div> |
| 170 | + </div> |
| 171 | + </div> |
| 172 | + |
| 173 | + <!-- Card 3: Tech tags --> |
| 174 | + <div |
| 175 | + class="absolute left-12 bottom-0 rounded-2xl border border-zinc-200/80 bg-white/80 p-6 shadow-xl shadow-zinc-900/5 backdrop-blur-sm animate-float-3" |
| 176 | + > |
| 177 | + <div class="flex flex-wrap gap-2"> |
| 178 | + <span class="rounded-lg bg-zinc-100 px-3 py-1.5 font-mono text-xs text-zinc-700">TypeScript</span> |
| 179 | + <span class="rounded-lg bg-zinc-100 px-3 py-1.5 font-mono text-xs text-zinc-700">React</span> |
| 180 | + <span class="rounded-lg bg-zinc-100 px-3 py-1.5 font-mono text-xs text-zinc-700">Svelte</span> |
| 181 | + <span class="rounded-lg bg-zinc-100 px-3 py-1.5 font-mono text-xs text-zinc-700">Python</span> |
| 182 | + <span class="rounded-lg bg-zinc-100 px-3 py-1.5 font-mono text-xs text-zinc-700">Go</span> |
| 183 | + <span class="rounded-lg bg-[#00D372]/10 px-3 py-1.5 font-mono text-xs text-[#00D372] font-medium">+More</span> |
| 184 | + </div> |
| 185 | + </div> |
| 186 | + </div> |
| 187 | + </div> |
| 188 | + </div> |
69 | 189 | </div> |
70 | 190 | </section> |
| 191 | + |
| 192 | +<style> |
| 193 | + /* Fade in animations */ |
| 194 | + @keyframes fade-in-up { |
| 195 | + from { |
| 196 | + opacity: 0; |
| 197 | + transform: translateY(24px); |
| 198 | + } |
| 199 | + to { |
| 200 | + opacity: 1; |
| 201 | + transform: translateY(0); |
| 202 | + } |
| 203 | + } |
| 204 | +
|
| 205 | + @keyframes fade-in-right { |
| 206 | + from { |
| 207 | + opacity: 0; |
| 208 | + transform: translateX(-24px); |
| 209 | + } |
| 210 | + to { |
| 211 | + opacity: 1; |
| 212 | + transform: translateX(0); |
| 213 | + } |
| 214 | + } |
| 215 | +
|
| 216 | + .animate-fade-in-up { |
| 217 | + animation: fade-in-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards; |
| 218 | + } |
| 219 | +
|
| 220 | + .animate-fade-in-right { |
| 221 | + animation: fade-in-right 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards; |
| 222 | + opacity: 0; |
| 223 | + } |
| 224 | +
|
| 225 | + /* Floating cards */ |
| 226 | + @keyframes float-1 { |
| 227 | + 0%, 100% { |
| 228 | + transform: translateY(0px) rotate(0deg); |
| 229 | + } |
| 230 | + 50% { |
| 231 | + transform: translateY(-12px) rotate(-1deg); |
| 232 | + } |
| 233 | + } |
| 234 | +
|
| 235 | + @keyframes float-2 { |
| 236 | + 0%, 100% { |
| 237 | + transform: translateY(0px) rotate(0deg); |
| 238 | + } |
| 239 | + 50% { |
| 240 | + transform: translateY(-16px) rotate(1deg); |
| 241 | + } |
| 242 | + } |
| 243 | +
|
| 244 | + @keyframes float-3 { |
| 245 | + 0%, 100% { |
| 246 | + transform: translateY(0px) rotate(0deg); |
| 247 | + } |
| 248 | + 50% { |
| 249 | + transform: translateY(-10px) rotate(-0.5deg); |
| 250 | + } |
| 251 | + } |
| 252 | +
|
| 253 | + .animate-float-1 { |
| 254 | + animation: float-1 8s ease-in-out infinite; |
| 255 | + } |
| 256 | +
|
| 257 | + .animate-float-2 { |
| 258 | + animation: float-2 7s ease-in-out infinite 0.5s; |
| 259 | + } |
| 260 | +
|
| 261 | + .animate-float-3 { |
| 262 | + animation: float-3 9s ease-in-out infinite 1s; |
| 263 | + } |
| 264 | +
|
| 265 | + /* Pulse glow effect */ |
| 266 | + @keyframes pulse-glow { |
| 267 | + 0%, 100% { |
| 268 | + box-shadow: 0 0 10px rgba(0, 211, 114, 0.7); |
| 269 | + } |
| 270 | + 50% { |
| 271 | + box-shadow: 0 0 20px rgba(0, 211, 114, 0.9); |
| 272 | + } |
| 273 | + } |
| 274 | +
|
| 275 | + .animate-pulse-glow { |
| 276 | + animation: pulse-glow 2s ease-in-out infinite; |
| 277 | + } |
| 278 | +</style> |
0 commit comments