11<!DOCTYPE html>
22< html lang ="en ">
33< head >
4- < meta charset ="UTF-8 ">
5- < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6- < title > BlueVariable Studio</ title >
4+ < meta charset ="UTF-8 " />
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
6+ < title > BlueVariable</ title >
7+
8+ < link href ="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800&display=swap " rel ="stylesheet ">
9+
710< script src ="https://cdn.tailwindcss.com "> </ script >
8- < link href ="https://fonts.googleapis. com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap " rel =" stylesheet " >
11+ < script src ="https://unpkg. com/three@0.160.0/build/three.min.js " > </ script >
912
1013< style >
11- body {font-family : 'Inter' , sans-serif;background : # 030712 ;color : white}
12- .hero {
13- background : radial-gradient (circle at 30% 20% , rgba (59 , 130 , 246 , 0.25 ), transparent 40% ),
14- radial-gradient (circle at 80% 0% , rgba (96 , 165 , 250 , 0.25 ), transparent 35% ),
15- # 030712 ;
14+ body {
15+ margin : 0 ;
16+ background : # 05070f ;
17+ color : white;
18+ font-family : 'Inter' , sans-serif;
19+ overflow-x : hidden;
20+ }
21+
22+ canvas {
23+ position : fixed;
24+ top : 0 ;
25+ left : 0 ;
26+ z-index : 0 ;
27+ }
28+
29+ .content {
30+ position : relative;
31+ z-index : 2 ;
32+ }
33+
34+ .glow {
35+ background : linear-gradient (90deg , # 60a5fa, # 3b82f6 );
36+ -webkit-background-clip : text;
37+ -webkit-text-fill-color : transparent;
38+ }
39+
40+ .section {
41+ max-width : 1100px ;
42+ margin : auto;
43+ padding : 160px 24px ;
1644}
17- .glass {
18- background : rgba (255 , 255 , 255 , 0.04 );
45+
46+ .card {
47+ background : rgba (255 , 255 , 255 , 0.03 );
1948border : 1px solid rgba (255 , 255 , 255 , 0.08 );
20- backdrop-filter : blur (10px );
49+ border-radius : 20px ;
50+ padding : 40px ;
51+ backdrop-filter : blur (12px );
2152}
22- </ style >
2353
54+ </ style >
2455</ head >
56+
2557< body >
2658
27- < header class ="max-w-6xl mx-auto flex justify-between items-center p-6 ">
59+ < canvas id ="bg "> </ canvas >
60+
61+ < div class ="content ">
2862
63+ < header class ="flex justify-between items-center p-8 max-w-6xl mx-auto ">
2964< div class ="flex items-center gap-3 ">
30- < img src ="logo.png " class ="h-10 ">
31- < span class ="font-semibold tracking-wide "> bluevariable</ span >
65+ < img src ="logo.png " class ="h-10 "/ >
66+ < span class ="font-semibold "> bluevariable</ span >
3267</ div >
3368
34- < nav class ="space-x-8 text-gray-400 text-sm ">
35- < a href ="#game " class =" hover:text-white " > Game </ a >
36- < a href ="#blog " class =" hover:text-white " > Dev Blog </ a >
37- < a href ="#studio " class =" hover:text-white " > Studio </ a >
69+ < nav class ="text-sm text-gray-400 space-x-6 ">
70+ < a href ="#game "> game </ a >
71+ < a href ="#blog "> dev blog </ a >
72+ < a href ="#studio "> studio </ a >
3873</ nav >
39-
4074</ header >
4175
42- < section class ="hero text-center py-40 px-6 ">
76+ < section class ="section text-center ">
4377
44- < h1 class ="text-6xl md:text- 7xl font-extrabold mb-6 tracking-tight ">
78+ < h1 class ="text-7xl font-extrabold mb-6 glow ">
4579BlueVariable
4680</ h1 >
4781
48- < p class ="text-gray-400 max-w-xl mx-auto mb-10 ">
49- A two-person indie studio building small, thoughtful gameplay experiences.
82+ < p class ="text-gray-400 max-w-xl mx-auto mb-12 ">
83+ A two-person indie studio creating experimental gameplay experiences.
5084</ p >
5185
52- < a href =" #game " class ="bg -blue-600 hover:bg-blue-500 px-8 py-4 rounded-xl font-medium transition ">
53- See Our Game
54- </ a >
86+ < div class ="text -blue-400 font-semibold text-lg ">
87+ Purrfect Fit — Coming 2027
88+ </ div >
5589
5690</ section >
5791
58- < section id ="game " class ="max-w-5xl mx-auto py-32 px-6 ">
59-
60- < h2 class ="text-4xl font-bold mb-12 text-center "> Current Project</ h2 >
92+ < section id ="game " class ="section ">
6193
62- < div class ="glass p-12 rounded-3xl text-center ">
94+ < div class ="card text-center ">
95+ < h2 class ="text-4xl font-bold mb-6 "> Purrfect Fit</ h2 >
6396
64- < h3 class ="text-3xl font-bold mb-4 "> Purrfect Fit</ h3 >
65-
66- < p class ="text-gray-400 max-w-xl mx-auto mb-6 ">
67- A cozy puzzle experience about finding the perfect place for every cat.
97+ < p class ="text-gray-400 max-w-xl mx-auto mb-8 ">
98+ A cozy puzzle game about finding the perfect place for every cat.
6899</ p >
69100
70- < div class ="text-blue-400 font-semibold text-lg mb-8 ">
71- COMING SOON — 2027
101+ < div class ="text-blue-400 font-semibold ">
102+ Steam page coming soon
72103</ div >
73104
74- < button class ="border border-white/20 px-6 py-3 rounded-xl text-sm hover:bg-white hover:text-black transition ">
75- Wishlist on Steam (Soon)
76- </ button >
77-
78105</ div >
79106
80107</ section >
81108
82- < section id ="blog " class ="max-w-6xl mx-auto py-32 px-6 ">
109+ < section id ="blog " class ="section ">
83110
84- < h2 class ="text-4xl font-bold mb-16 text-center "> Dev Blog</ h2 >
111+ < h2 class ="text-4xl font-bold mb-12 "> Dev Blog</ h2 >
85112
86113< div class ="grid md:grid-cols-3 gap-8 ">
87114
88- < div class ="glass p-8 rounded-2xl hover:scale-105 transition ">
89- < div class ="text-sm text-gray-500 mb-3 "> Dev Log #1</ div >
90- < h3 class ="font-semibold mb-3 "> Starting Purrfect Fit</ h3 >
91- < p class ="text-gray-400 text-sm "> How the idea for our cozy puzzle game began.</ p >
115+ < div class ="card ">
116+ < h3 class ="font-semibold mb-2 "> Starting Development</ h3 >
117+ < p class ="text-gray-400 text-sm "> The origin of Purrfect Fit.</ p >
92118</ div >
93119
94- < div class ="glass p-8 rounded-2xl hover:scale-105 transition ">
95- < div class ="text-sm text-gray-500 mb-3 "> Dev Log #2</ div >
96- < h3 class ="font-semibold mb-3 "> Early Prototypes</ h3 >
97- < p class ="text-gray-400 text-sm "> Testing puzzle mechanics and level design.</ p >
120+ < div class ="card ">
121+ < h3 class ="font-semibold mb-2 "> Puzzle Mechanics</ h3 >
122+ < p class ="text-gray-400 text-sm "> Designing the core systems.</ p >
98123</ div >
99124
100- < div class ="glass p-8 rounded-2xl hover:scale-105 transition ">
101- < div class ="text-sm text-gray-500 mb-3 "> Dev Log #3</ div >
102- < h3 class ="font-semibold mb-3 "> Art Direction</ h3 >
103- < p class ="text-gray-400 text-sm "> Developing the visual style of the game.</ p >
125+ < div class ="card ">
126+ < h3 class ="font-semibold mb-2 "> Visual Style</ h3 >
127+ < p class ="text-gray-400 text-sm "> Exploring the art direction.</ p >
104128</ div >
105129
106130</ div >
107131
108132</ section >
109133
110- < section id ="studio " class ="py-32 px-6 max-w-3xl mx-auto text-center ">
134+ < section id ="studio " class ="section text-center ">
111135
112- < h2 class ="text-4xl font-bold mb-8 " > The Studio</ h2 >
136+ < h2 class ="text-4xl font-bold mb-6 " > Studio</ h2 >
113137
114- < p class ="text-gray-400 leading-relaxed ">
115- BlueVariable is a tiny independent game studio made of two developers. We focus on creative mechanics, cozy experiences, and carefully crafted gameplay. Our goal is to build small games that feel memorable and personal .
138+ < p class ="text-gray-400 max-w-xl mx-auto ">
139+ BlueVariable is a small independent game studio run by two developers building thoughtful and experimental games.
116140</ p >
117141
118142</ section >
119143
120- < footer class ="border-t border-white/10 text-center py-10 text-gray-500 text-sm ">
144+ < footer class ="text-center text-gray-500 pb-16 ">
145+ © BlueVariable
146+ </ footer >
121147
122- © 2026 BlueVariable Studio
148+ </ div >
123149
124- </ footer >
150+ < script >
151+
152+ const scene = new THREE . Scene ( ) ;
153+ const camera = new THREE . PerspectiveCamera ( 75 , window . innerWidth / window . innerHeight , 0.1 , 1000 ) ;
154+
155+ const renderer = new THREE . WebGLRenderer ( { canvas :document . getElementById ( "bg" ) , alpha :true } ) ;
156+ renderer . setSize ( window . innerWidth , window . innerHeight ) ;
157+
158+ camera . position . z = 6 ;
159+
160+ const geometry = new THREE . IcosahedronGeometry ( 1 , 1 ) ;
161+ const material = new THREE . MeshStandardMaterial ( {
162+ color :0x3b82f6 ,
163+ wireframe :true
164+ } ) ;
165+
166+ const meshes = [ ] ;
167+
168+ for ( let i = 0 ; i < 12 ; i ++ ) {
169+ const mesh = new THREE . Mesh ( geometry , material ) ;
170+ mesh . position . x = ( Math . random ( ) - 0.5 ) * 15 ;
171+ mesh . position . y = ( Math . random ( ) - 0.5 ) * 10 ;
172+ mesh . position . z = ( Math . random ( ) - 0.5 ) * 10 ;
173+
174+ scene . add ( mesh ) ;
175+ meshes . push ( mesh ) ;
176+ }
177+
178+ const light = new THREE . PointLight ( 0xffffff , 1 ) ;
179+ light . position . set ( 5 , 5 , 5 ) ;
180+ scene . add ( light ) ;
181+
182+ function animate ( ) {
183+ requestAnimationFrame ( animate ) ;
184+
185+ meshes . forEach ( m => {
186+ m . rotation . x += 0.002 ;
187+ m . rotation . y += 0.003 ;
188+ } ) ;
189+
190+ renderer . render ( scene , camera ) ;
191+ }
192+
193+ animate ( ) ;
194+
195+ window . addEventListener ( "resize" , ( ) => {
196+ renderer . setSize ( window . innerWidth , window . innerHeight ) ;
197+ camera . aspect = window . innerWidth / window . innerHeight ;
198+ camera . updateProjectionMatrix ( ) ;
199+ } ) ;
200+
201+ </ script >
125202
126203</ body >
127204</ html >
0 commit comments