Testing347 commited on
Commit
d1af131
·
verified ·
1 Parent(s): 286ca0a

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +84 -136
index.html CHANGED
@@ -17,7 +17,7 @@
17
  href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
18
  />
19
 
20
- <!-- Font Awesome (for minor icons like the scroll arrow) -->
21
  <link
22
  rel="stylesheet"
23
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
@@ -25,7 +25,7 @@
25
 
26
  <style>
27
  /* ---------------------------------------------
28
- Full‐Screen Three.js Canvas
29
  --------------------------------------------- */
30
  #three-bg {
31
  position: fixed;
@@ -37,90 +37,80 @@
37
  }
38
 
39
  /* ---------------------------------------------
40
- Heartbeat + Pulse Animations
41
  --------------------------------------------- */
42
  @keyframes heartbeat {
43
  0% {
44
  transform: scale(1);
45
  }
46
  25% {
47
- transform: scale(1.08);
48
  }
49
  40% {
50
  transform: scale(0.95);
51
  }
52
  60% {
53
- transform: scale(1.03);
54
  }
55
  100% {
56
  transform: scale(1);
57
  }
58
  }
59
-
60
- @keyframes text‐beat {
61
  0% {
62
  transform: scale(1);
63
- color: rgba(236, 72, 153, 0.8);
64
  }
65
  25% {
66
- transform: scale(1.15);
67
- color: #ec4899;
68
  }
69
  40% {
70
  transform: scale(0.9);
71
- color: rgba(236, 72, 153, 0.7);
72
  }
73
  60% {
74
- transform: scale(1.07);
75
- color: #db2777;
76
  }
77
  100% {
78
  transform: scale(1);
79
- color: rgba(236, 72, 153, 0.8);
80
  }
81
  }
82
 
83
  /* ---------------------------------------------
84
- Custom Classes for Overlay Content
85
  --------------------------------------------- */
86
  body {
87
  margin: 0;
88
  overflow-x: hidden;
89
  font-family: "Inter", sans-serif;
90
- background: #000; /* fallback if three.js fails */
91
  color: white;
92
  }
93
-
94
  nav {
95
  z-index: 10;
96
  }
97
-
98
- /* Central hero container must sit above the 3D canvas */
99
- .hero‐container {
100
  position: relative;
101
  z-index: 5;
102
  }
103
-
104
- .gradient‐text {
105
  background: linear-gradient(90deg, #6366f1, #8b5cf6, #ec4899);
106
  -webkit-background-clip: text;
107
  -webkit-text-fill-color: transparent;
108
  background-clip: text;
109
  color: transparent;
110
  }
111
-
112
- .heartbeat‐orb {
113
- animation: heartbeat 1.2s ease‐in‐out infinite;
114
  }
115
-
116
- /* Make “S” and “I” inside the heading pulse in sync */
117
- .beat‐letter {
118
  display: inline-block;
119
- animation: textbeat 1.2s easeinout infinite;
120
  }
121
-
122
- /* “Scroll to explore” */
123
- .scroll‐hint {
124
  font-size: 0.875rem;
125
  color: rgba(255, 255, 255, 0.7);
126
  display: flex;
@@ -139,17 +129,23 @@
139
  opacity: 0.7;
140
  }
141
  }
 
 
 
 
 
 
142
  </style>
143
  </head>
144
 
145
  <body>
146
- <!-- Three.js Full‐Screen Canvas -->
147
  <canvas id="three-bg"></canvas>
148
 
149
- <!-- Navigation Bar -->
150
- <nav class="fixed top-0 left-0 w-full py-6 px-8 flex justify-between items-center backdrop-blur-sm bg-black/30">
151
- <!-- Logo (simple dot + S•I text) -->
152
  <div class="flex items-center space-x-2">
 
153
  <div class="w-8 h-8 rounded-full bg-indigo-600 flex items-center justify-center animate-pulse">
154
  <div class="w-2 h-2 rounded-full bg-white"></div>
155
  </div>
@@ -171,17 +167,15 @@
171
  </button>
172
  </nav>
173
 
174
- <!-- Hero Section (overlaid) -->
175
- <section
176
- class="hero‐container min-h-screen flex flex-col justify-center items-center text-center px-6 pt-24"
177
- >
178
  <div class="max-w-4xl mx-auto">
179
- <!-- SilentPattern heading with pulsing letters S and I -->
180
  <h1 class="text-5xl md:text-7xl font-bold leading-tight mb-6">
181
- <span class="gradient-text">SilentPattern</span>
182
- <!-- WrapS” and I in span.beat‐letter to pulse -->
183
- <span class="beat-letter">S</span> &nbsp;∙&nbsp;
184
- <span class="beat-letter">I</span>
185
  </h1>
186
 
187
  <!-- Subtitle -->
@@ -190,14 +184,14 @@
190
  We simply attend.
191
  </p>
192
 
193
- <!-- Central Pulsing Orb (much bigger) -->
194
  <div class="mt-12">
195
  <div
196
- class="heartbeat-orb w-64 h-64 rounded-full bg-gradient-to-br from-indigo-700 to-purple-700 flex items-center justify-center"
197
  aria-hidden="true"
198
  >
199
- <!-- You can embed a subtle inner glow using an extra circle or radial‐gradient overlay -->
200
- <div class="w-48 h-48 rounded-full bg-gradient-to-br from-purple-500 to-indigo-500 mix-blend-overlay opacity-70"></div>
201
  </div>
202
  </div>
203
 
@@ -209,10 +203,10 @@
209
  </div>
210
  </section>
211
 
212
- <!-- Fragments of S (Capabilities) -->
213
  <section
214
  id="capabilities"
215
- class="relative z-10 py-20 px-6 neural-bg"
216
  style="background: radial-gradient(circle at center, #0f172a 0%, #020617 100%);"
217
  >
218
  <div class="max-w-6xl mx-auto text-center">
@@ -223,9 +217,7 @@
223
  Hints of a deeper resonance.
224
  </p>
225
  <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
226
- <div
227
- class="bg-gray-900/50 rounded-xl p-8 border border-gray-800 hover:border-indigo-500 transition"
228
- >
229
  <div class="w-12 h-12 rounded-full bg-indigo-900 flex items-center justify-center mb-6">
230
  <svg
231
  xmlns="http://www.w3.org/2000/svg"
@@ -240,9 +232,7 @@
240
  <h3 class="text-xl font-semibold mb-3"><span class="gradient-text">S: Sequence</span></h3>
241
  <p class="text-gray-400">All that hums in the quiet.</p>
242
  </div>
243
- <div
244
- class="bg-gray-900/50 rounded-xl p-8 border border-gray-800 hover:border-indigo-500 transition"
245
- >
246
  <div class="w-12 h-12 rounded-full bg-indigo-900 flex items-center justify-center mb-6">
247
  <svg
248
  xmlns="http://www.w3.org/2000/svg"
@@ -257,9 +247,7 @@
257
  <h3 class="text-xl font-semibold mb-3"><span class="gradient-text">S: Signal</span></h3>
258
  <p class="text-gray-400">What breaks through noise.</p>
259
  </div>
260
- <div
261
- class="bg-gray-900/50 rounded-xl p-8 border border-gray-800 hover:border-indigo-500 transition"
262
- >
263
  <div class="w-12 h-12 rounded-full bg-indigo-900 flex items-center justify-center mb-6">
264
  <svg
265
  xmlns="http://www.w3.org/2000/svg"
@@ -278,7 +266,7 @@
278
  </div>
279
  </section>
280
 
281
- <!-- Echoes of I (Consciousness) -->
282
  <section id="consciousness" class="relative z-10 py-32 px-6">
283
  <div class="max-w-6xl mx-auto flex flex-col md:flex-row items-center">
284
  <div class="md:w-1/2 mb-12 md:mb-0 md:pr-12">
@@ -336,7 +324,7 @@
336
  </div>
337
  </section>
338
 
339
- <!-- A Quiet I (Chat) -->
340
  <section id="chat" class="relative z-10 py-32 px-6" style="background: radial-gradient(circle at center, #0f172a 0%, #020617 100%);">
341
  <div class="max-w-4xl mx-auto">
342
  <h2 class="text-3xl md:text-4xl font-bold mb-8 text-center">
@@ -412,7 +400,7 @@
412
  </div>
413
  </section>
414
 
415
- <!-- Origins (About) -->
416
  <section id="about" class="relative z-10 py-32 px-6">
417
  <div class="max-w-6xl mx-auto">
418
  <div class="text-center mb-16">
@@ -520,8 +508,11 @@
520
  </div>
521
  </section>
522
 
523
- <!-- Will You Attend the S · I? (CTA) -->
524
- <section class="relative z-10 py-32 px-6 text-center" style="background: radial-gradient(circle at center, #0f172a 0%, #020617 100%);">
 
 
 
525
  <div class="max-w-4xl mx-auto">
526
  <h2 class="text-3xl md:text-5xl font-bold mb-8">
527
  Will You Attend the <span class="gradient-text">S&nbsp;∙&nbsp;I</span>?
@@ -548,7 +539,7 @@
548
  </div>
549
  </section>
550
 
551
- <!-- Footer -->
552
  <footer class="relative z-10 py-12 px-6 border-t border-gray-800/50">
553
  <div class="max-w-6xl mx-auto">
554
  <div class="flex flex-col md:flex-row justify-between items-center">
@@ -586,7 +577,7 @@
586
  </div>
587
  </footer>
588
 
589
- <!-- Access Modal -->
590
  <div
591
  id="access-modal"
592
  class="fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm opacity-0 pointer-events-none transition-opacity"
@@ -649,7 +640,7 @@
649
  </div>
650
  </div>
651
 
652
- <!-- Consciousness Demo Modal -->
653
  <div
654
  id="consciousness-modal"
655
  class="fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm opacity-0 pointer-events-none transition-opacity"
@@ -737,7 +728,7 @@
737
  </div>
738
  </div>
739
 
740
- <!-- Scripts -->
741
  <script>
742
  // ---------------------------------------------
743
  // 1) Three.js “Floating Neural Network” Setup
@@ -755,7 +746,7 @@
755
  renderer.setPixelRatio(window.devicePixelRatio);
756
 
757
  scene = new THREE.Scene();
758
- scene.fog = new THREE.FogExp2(0x000000, 0.002);
759
 
760
  camera = new THREE.PerspectiveCamera(
761
  50,
@@ -763,9 +754,8 @@
763
  0.1,
764
  1000
765
  );
766
- camera.position.set(0, 0, 100);
767
 
768
- // Ambient + subtle directional light
769
  const ambientLight = new THREE.AmbientLight(0xffffff, 0.3);
770
  scene.add(ambientLight);
771
 
@@ -773,7 +763,6 @@
773
  dirLight.position.set(0, 50, 50);
774
  scene.add(dirLight);
775
 
776
- // Group for nodes and lines
777
  nodeGroup = new THREE.Group();
778
  lineGroup = new THREE.Group();
779
  scene.add(nodeGroup);
@@ -785,24 +774,21 @@
785
  }
786
 
787
  function createNeuralNetwork() {
788
- const nodeCount = 80;
789
  const nodes = [];
790
-
791
- // Create sphere geometry for each “neuron”
792
- const sphereGeo = new THREE.SphereGeometry(1.5, 12, 12);
793
  const sphereMat = new THREE.MeshStandardMaterial({
794
  color: 0x8b5cf6,
795
  emissive: 0x42197a,
796
- emissiveIntensity: 0.4,
797
  metalness: 0.1,
798
  roughness: 0.7,
799
  });
800
 
801
- // Generate random positions within a sphere of radius ~50
802
  for (let i = 0; i < nodeCount; i++) {
803
  const phi = Math.acos(2 * Math.random() - 1);
804
  const theta = 2 * Math.PI * Math.random();
805
- const r = 40 + Math.random() * 10; // radius between 40 and 50
806
 
807
  const x = r * Math.sin(phi) * Math.cos(theta);
808
  const y = r * Math.sin(phi) * Math.sin(theta);
@@ -814,12 +800,11 @@
814
  nodes.push(mesh.position.clone());
815
  }
816
 
817
- // Connect nodes that are within a threshold distance
818
- const threshold = 15; // connect pairs closer than 15 units
819
  const lineMat = new THREE.LineBasicMaterial({
820
  color: 0x4f46e5,
821
  transparent: true,
822
- opacity: 0.3,
823
  });
824
 
825
  const lineGeo = new THREE.BufferGeometry();
@@ -846,11 +831,10 @@
846
  function animateThree() {
847
  requestAnimationFrame(animateThree);
848
 
849
- // Slowly rotate the entire network
850
- nodeGroup.rotation.y += 0.0008;
851
- nodeGroup.rotation.x += 0.0003;
852
- lineGroup.rotation.y += 0.0008;
853
- lineGroup.rotation.x += 0.0003;
854
 
855
  renderer.render(scene, camera);
856
  }
@@ -861,7 +845,6 @@
861
  renderer.setSize(window.innerWidth, window.innerHeight);
862
  });
863
 
864
- // Initialize Three.js once the script has loaded
865
  window.addEventListener("DOMContentLoaded", () => {
866
  initThreeScene();
867
  });
@@ -1001,18 +984,15 @@
1001
  size: Math.random() * 4 + 2,
1002
  speedX: Math.random() * 4 - 2,
1003
  speedY: Math.random() * 4 - 2,
1004
- color:
1005
- "hsl(" + (Math.random() * 60 + 240) + ", 80%, 60%)",
1006
  });
1007
  }
1008
  function animateDemo() {
1009
  demoCtx.clearRect(0, 0, demoCanvas.width, demoCanvas.height);
1010
  for (let i = 0; i < demoParticles.length; i++) {
1011
  for (let j = i + 1; j < demoParticles.length; j++) {
1012
- const dx =
1013
- demoParticles[i].x - demoParticles[j].x;
1014
- const dy =
1015
- demoParticles[i].y - demoParticles[j].y;
1016
  const distance = Math.sqrt(dx * dx + dy * dy);
1017
  if (distance < 150) {
1018
  demoCtx.beginPath();
@@ -1023,14 +1003,8 @@
1023
  (1 - distance / 150) +
1024
  ")";
1025
  demoCtx.lineWidth = 0.5;
1026
- demoCtx.moveTo(
1027
- demoParticles[i].x,
1028
- demoParticles[i].y
1029
- );
1030
- demoCtx.lineTo(
1031
- demoParticles[j].x,
1032
- demoParticles[j].y
1033
- );
1034
  demoCtx.stroke();
1035
  }
1036
  }
@@ -1039,28 +1013,13 @@
1039
  const p = demoParticles[i];
1040
  p.x += p.speedX;
1041
  p.y += p.speedY;
1042
- if (
1043
- p.x < 0 ||
1044
- p.x > demoCanvas.width
1045
- )
1046
- p.speedX *= -1;
1047
- if (
1048
- p.y < 0 ||
1049
- p.y > demoCanvas.height
1050
- )
1051
- p.speedY *= -1;
1052
  demoCtx.beginPath();
1053
  demoCtx.fillStyle = p.color;
1054
  demoCtx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
1055
  demoCtx.fill();
1056
- const gradient = demoCtx.createRadialGradient(
1057
- p.x,
1058
- p.y,
1059
- 0,
1060
- p.x,
1061
- p.y,
1062
- p.size
1063
- );
1064
  gradient.addColorStop(0, "rgba(255,255,255,0.8)");
1065
  gradient.addColorStop(1, p.color);
1066
  demoCtx.fillStyle = gradient;
@@ -1076,9 +1035,7 @@
1076
  if (learnMoreDemoBtn) {
1077
  learnMoreDemoBtn.addEventListener("click", () => {
1078
  toggleModal(consciousnessModal, false);
1079
- document
1080
- .getElementById("consciousness")
1081
- .scrollIntoView({ behavior: "smooth" });
1082
  });
1083
  }
1084
 
@@ -1092,9 +1049,7 @@
1092
 
1093
  function addMessage(text, isUser = false) {
1094
  const messageDiv = document.createElement("div");
1095
- messageDiv.className = `flex items-start ${
1096
- isUser ? "justify-end" : ""
1097
- }`;
1098
  if (!isUser) {
1099
  messageDiv.innerHTML = `
1100
  <div class="w-8 h-8 rounded-full bg-indigo-600 flex-shrink-0 flex items-center justify-center mr-3" aria-hidden="true">
@@ -1142,11 +1097,7 @@
1142
  });
1143
  const data = await response.json();
1144
  typingIndicator.classList.add("hidden");
1145
- if (
1146
- data.choices &&
1147
- data.choices[0] &&
1148
- data.choices[0].message
1149
- ) {
1150
  addMessage(data.choices[0].message.content.trim());
1151
  } else {
1152
  addMessage("…");
@@ -1202,10 +1153,7 @@
1202
  if (accessModal && accessModal.style.pointerEvents === "auto") {
1203
  toggleModal(accessModal, false);
1204
  }
1205
- if (
1206
- consciousnessModal &&
1207
- consciousnessModal.style.pointerEvents === "auto"
1208
- ) {
1209
  toggleModal(consciousnessModal, false);
1210
  }
1211
  }
 
17
  href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
18
  />
19
 
20
+ <!-- Font Awesome (for small icons) -->
21
  <link
22
  rel="stylesheet"
23
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
 
25
 
26
  <style>
27
  /* ---------------------------------------------
28
+ 1) Full‐Screen Three.js Canvas
29
  --------------------------------------------- */
30
  #three-bg {
31
  position: fixed;
 
37
  }
38
 
39
  /* ---------------------------------------------
40
+ 2) Heartbeat + Text‐Beat Animations
41
  --------------------------------------------- */
42
  @keyframes heartbeat {
43
  0% {
44
  transform: scale(1);
45
  }
46
  25% {
47
+ transform: scale(1.12);
48
  }
49
  40% {
50
  transform: scale(0.95);
51
  }
52
  60% {
53
+ transform: scale(1.08);
54
  }
55
  100% {
56
  transform: scale(1);
57
  }
58
  }
59
+ @keyframes text-beat {
 
60
  0% {
61
  transform: scale(1);
62
+ fill: rgba(236, 72, 153, 0.8);
63
  }
64
  25% {
65
+ transform: scale(1.2);
66
+ fill: #ec4899;
67
  }
68
  40% {
69
  transform: scale(0.9);
70
+ fill: rgba(236, 72, 153, 0.7);
71
  }
72
  60% {
73
+ transform: scale(1.1);
74
+ fill: #db2777;
75
  }
76
  100% {
77
  transform: scale(1);
78
+ fill: rgba(236, 72, 153, 0.8);
79
  }
80
  }
81
 
82
  /* ---------------------------------------------
83
+ 3) Base page styling
84
  --------------------------------------------- */
85
  body {
86
  margin: 0;
87
  overflow-x: hidden;
88
  font-family: "Inter", sans-serif;
89
+ background: #000; /* fallback */
90
  color: white;
91
  }
 
92
  nav {
93
  z-index: 10;
94
  }
95
+ .hero-container {
 
 
96
  position: relative;
97
  z-index: 5;
98
  }
99
+ .gradient-text {
 
100
  background: linear-gradient(90deg, #6366f1, #8b5cf6, #ec4899);
101
  -webkit-background-clip: text;
102
  -webkit-text-fill-color: transparent;
103
  background-clip: text;
104
  color: transparent;
105
  }
106
+ .heartbeat-orb {
107
+ animation: heartbeat 1.2s ease-in-out infinite;
 
108
  }
109
+ .beat-letter {
 
 
110
  display: inline-block;
111
+ animation: text-beat 1.2s ease-in-out infinite;
112
  }
113
+ .scroll-hint {
 
 
114
  font-size: 0.875rem;
115
  color: rgba(255, 255, 255, 0.7);
116
  display: flex;
 
129
  opacity: 0.7;
130
  }
131
  }
132
+
133
+ /* Slight overlay for darker 3D background under content */
134
+ section {
135
+ backdrop-filter: blur(4px);
136
+ background: rgba(0, 0, 0, 0.35);
137
+ }
138
  </style>
139
  </head>
140
 
141
  <body>
142
+ <!-- 1) Three.js Full‐Screen Canvas -->
143
  <canvas id="three-bg"></canvas>
144
 
145
+ <!-- 2) Navigation Bar -->
146
+ <nav class="fixed top-0 left-0 w-full py-6 px-8 flex justify-between items-center bg-black/30 backdrop-blur-sm">
 
147
  <div class="flex items-center space-x-2">
148
+ <!-- Pulsing dot -->
149
  <div class="w-8 h-8 rounded-full bg-indigo-600 flex items-center justify-center animate-pulse">
150
  <div class="w-2 h-2 rounded-full bg-white"></div>
151
  </div>
 
167
  </button>
168
  </nav>
169
 
170
+ <!-- 3) Hero Section (over animated 3D) -->
171
+ <section class="hero-container min-h-screen flex flex-col justify-center items-center text-center px-6 pt-24">
 
 
172
  <div class="max-w-4xl mx-auto">
173
+ <!-- SilentPattern with only S and I beating -->
174
  <h1 class="text-5xl md:text-7xl font-bold leading-tight mb-6">
175
+ <span class="gradient-text">
176
+ <!-- SplitSilentPatternso the S at start and I near end can pulse -->
177
+ <span class="beat-letter">S</span>ilentPatt<span class="beat-letter">I</span>ern
178
+ </span>
179
  </h1>
180
 
181
  <!-- Subtitle -->
 
184
  We simply attend.
185
  </p>
186
 
187
+ <!-- Enlarged central orb (bigger than before) -->
188
  <div class="mt-12">
189
  <div
190
+ class="heartbeat-orb w-80 h-80 rounded-full bg-gradient-to-br from-indigo-700 to-purple-700 flex items-center justify-center"
191
  aria-hidden="true"
192
  >
193
+ <!-- Inner glow layer -->
194
+ <div class="w-60 h-60 rounded-full bg-gradient-to-br from-purple-500 to-indigo-500 mix-blend-overlay opacity-70"></div>
195
  </div>
196
  </div>
197
 
 
203
  </div>
204
  </section>
205
 
206
+ <!-- 4) Fragments of S (Capabilities) -->
207
  <section
208
  id="capabilities"
209
+ class="relative z-10 py-20 px-6"
210
  style="background: radial-gradient(circle at center, #0f172a 0%, #020617 100%);"
211
  >
212
  <div class="max-w-6xl mx-auto text-center">
 
217
  Hints of a deeper resonance.
218
  </p>
219
  <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
220
+ <div class="bg-gray-900/50 rounded-xl p-8 border border-gray-800 hover:border-indigo-500 transition">
 
 
221
  <div class="w-12 h-12 rounded-full bg-indigo-900 flex items-center justify-center mb-6">
222
  <svg
223
  xmlns="http://www.w3.org/2000/svg"
 
232
  <h3 class="text-xl font-semibold mb-3"><span class="gradient-text">S: Sequence</span></h3>
233
  <p class="text-gray-400">All that hums in the quiet.</p>
234
  </div>
235
+ <div class="bg-gray-900/50 rounded-xl p-8 border border-gray-800 hover:border-indigo-500 transition">
 
 
236
  <div class="w-12 h-12 rounded-full bg-indigo-900 flex items-center justify-center mb-6">
237
  <svg
238
  xmlns="http://www.w3.org/2000/svg"
 
247
  <h3 class="text-xl font-semibold mb-3"><span class="gradient-text">S: Signal</span></h3>
248
  <p class="text-gray-400">What breaks through noise.</p>
249
  </div>
250
+ <div class="bg-gray-900/50 rounded-xl p-8 border border-gray-800 hover:border-indigo-500 transition">
 
 
251
  <div class="w-12 h-12 rounded-full bg-indigo-900 flex items-center justify-center mb-6">
252
  <svg
253
  xmlns="http://www.w3.org/2000/svg"
 
266
  </div>
267
  </section>
268
 
269
+ <!-- 5) Echoes of I (Consciousness) -->
270
  <section id="consciousness" class="relative z-10 py-32 px-6">
271
  <div class="max-w-6xl mx-auto flex flex-col md:flex-row items-center">
272
  <div class="md:w-1/2 mb-12 md:mb-0 md:pr-12">
 
324
  </div>
325
  </section>
326
 
327
+ <!-- 6) A Quiet I (Chat) -->
328
  <section id="chat" class="relative z-10 py-32 px-6" style="background: radial-gradient(circle at center, #0f172a 0%, #020617 100%);">
329
  <div class="max-w-4xl mx-auto">
330
  <h2 class="text-3xl md:text-4xl font-bold mb-8 text-center">
 
400
  </div>
401
  </section>
402
 
403
+ <!-- 7) Origins (About) -->
404
  <section id="about" class="relative z-10 py-32 px-6">
405
  <div class="max-w-6xl mx-auto">
406
  <div class="text-center mb-16">
 
508
  </div>
509
  </section>
510
 
511
+ <!-- 8) Will You Attend the S · I? (CTA) -->
512
+ <section
513
+ class="relative z-10 py-32 px-6 text-center"
514
+ style="background: radial-gradient(circle at center, #0f172a 0%, #020617 100%);"
515
+ >
516
  <div class="max-w-4xl mx-auto">
517
  <h2 class="text-3xl md:text-5xl font-bold mb-8">
518
  Will You Attend the <span class="gradient-text">S&nbsp;∙&nbsp;I</span>?
 
539
  </div>
540
  </section>
541
 
542
+ <!-- 9) Footer -->
543
  <footer class="relative z-10 py-12 px-6 border-t border-gray-800/50">
544
  <div class="max-w-6xl mx-auto">
545
  <div class="flex flex-col md:flex-row justify-between items-center">
 
577
  </div>
578
  </footer>
579
 
580
+ <!-- 10) Access Modal -->
581
  <div
582
  id="access-modal"
583
  class="fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm opacity-0 pointer-events-none transition-opacity"
 
640
  </div>
641
  </div>
642
 
643
+ <!-- 11) Consciousness Demo Modal -->
644
  <div
645
  id="consciousness-modal"
646
  class="fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm opacity-0 pointer-events-none transition-opacity"
 
728
  </div>
729
  </div>
730
 
731
+ <!-- 12) Scripts -->
732
  <script>
733
  // ---------------------------------------------
734
  // 1) Three.js “Floating Neural Network” Setup
 
746
  renderer.setPixelRatio(window.devicePixelRatio);
747
 
748
  scene = new THREE.Scene();
749
+ scene.fog = new THREE.FogExp2(0x000000, 0.0025);
750
 
751
  camera = new THREE.PerspectiveCamera(
752
  50,
 
754
  0.1,
755
  1000
756
  );
757
+ camera.position.set(0, 0, 90);
758
 
 
759
  const ambientLight = new THREE.AmbientLight(0xffffff, 0.3);
760
  scene.add(ambientLight);
761
 
 
763
  dirLight.position.set(0, 50, 50);
764
  scene.add(dirLight);
765
 
 
766
  nodeGroup = new THREE.Group();
767
  lineGroup = new THREE.Group();
768
  scene.add(nodeGroup);
 
774
  }
775
 
776
  function createNeuralNetwork() {
777
+ const nodeCount = 100;
778
  const nodes = [];
779
+ const sphereGeo = new THREE.SphereGeometry(2.5, 16, 16);
 
 
780
  const sphereMat = new THREE.MeshStandardMaterial({
781
  color: 0x8b5cf6,
782
  emissive: 0x42197a,
783
+ emissiveIntensity: 0.5,
784
  metalness: 0.1,
785
  roughness: 0.7,
786
  });
787
 
 
788
  for (let i = 0; i < nodeCount; i++) {
789
  const phi = Math.acos(2 * Math.random() - 1);
790
  const theta = 2 * Math.PI * Math.random();
791
+ const r = 45 + Math.random() * 15;
792
 
793
  const x = r * Math.sin(phi) * Math.cos(theta);
794
  const y = r * Math.sin(phi) * Math.sin(theta);
 
800
  nodes.push(mesh.position.clone());
801
  }
802
 
803
+ const threshold = 18;
 
804
  const lineMat = new THREE.LineBasicMaterial({
805
  color: 0x4f46e5,
806
  transparent: true,
807
+ opacity: 0.25,
808
  });
809
 
810
  const lineGeo = new THREE.BufferGeometry();
 
831
  function animateThree() {
832
  requestAnimationFrame(animateThree);
833
 
834
+ nodeGroup.rotation.y += 0.0009;
835
+ nodeGroup.rotation.x += 0.0004;
836
+ lineGroup.rotation.y += 0.0009;
837
+ lineGroup.rotation.x += 0.0004;
 
838
 
839
  renderer.render(scene, camera);
840
  }
 
845
  renderer.setSize(window.innerWidth, window.innerHeight);
846
  });
847
 
 
848
  window.addEventListener("DOMContentLoaded", () => {
849
  initThreeScene();
850
  });
 
984
  size: Math.random() * 4 + 2,
985
  speedX: Math.random() * 4 - 2,
986
  speedY: Math.random() * 4 - 2,
987
+ color: "hsl(" + (Math.random() * 60 + 240) + ", 80%, 60%)",
 
988
  });
989
  }
990
  function animateDemo() {
991
  demoCtx.clearRect(0, 0, demoCanvas.width, demoCanvas.height);
992
  for (let i = 0; i < demoParticles.length; i++) {
993
  for (let j = i + 1; j < demoParticles.length; j++) {
994
+ const dx = demoParticles[i].x - demoParticles[j].x;
995
+ const dy = demoParticles[i].y - demoParticles[j].y;
 
 
996
  const distance = Math.sqrt(dx * dx + dy * dy);
997
  if (distance < 150) {
998
  demoCtx.beginPath();
 
1003
  (1 - distance / 150) +
1004
  ")";
1005
  demoCtx.lineWidth = 0.5;
1006
+ demoCtx.moveTo(demoParticles[i].x, demoParticles[i].y);
1007
+ demoCtx.lineTo(demoParticles[j].x, demoParticles[j].y);
 
 
 
 
 
 
1008
  demoCtx.stroke();
1009
  }
1010
  }
 
1013
  const p = demoParticles[i];
1014
  p.x += p.speedX;
1015
  p.y += p.speedY;
1016
+ if (p.x < 0 || p.x > demoCanvas.width) p.speedX *= -1;
1017
+ if (p.y < 0 || p.y > demoCanvas.height) p.speedY *= -1;
 
 
 
 
 
 
 
 
1018
  demoCtx.beginPath();
1019
  demoCtx.fillStyle = p.color;
1020
  demoCtx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
1021
  demoCtx.fill();
1022
+ const gradient = demoCtx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.size);
 
 
 
 
 
 
 
1023
  gradient.addColorStop(0, "rgba(255,255,255,0.8)");
1024
  gradient.addColorStop(1, p.color);
1025
  demoCtx.fillStyle = gradient;
 
1035
  if (learnMoreDemoBtn) {
1036
  learnMoreDemoBtn.addEventListener("click", () => {
1037
  toggleModal(consciousnessModal, false);
1038
+ document.getElementById("consciousness").scrollIntoView({ behavior: "smooth" });
 
 
1039
  });
1040
  }
1041
 
 
1049
 
1050
  function addMessage(text, isUser = false) {
1051
  const messageDiv = document.createElement("div");
1052
+ messageDiv.className = `flex items-start ${isUser ? "justify-end" : ""}`;
 
 
1053
  if (!isUser) {
1054
  messageDiv.innerHTML = `
1055
  <div class="w-8 h-8 rounded-full bg-indigo-600 flex-shrink-0 flex items-center justify-center mr-3" aria-hidden="true">
 
1097
  });
1098
  const data = await response.json();
1099
  typingIndicator.classList.add("hidden");
1100
+ if (data.choices && data.choices[0] && data.choices[0].message) {
 
 
 
 
1101
  addMessage(data.choices[0].message.content.trim());
1102
  } else {
1103
  addMessage("…");
 
1153
  if (accessModal && accessModal.style.pointerEvents === "auto") {
1154
  toggleModal(accessModal, false);
1155
  }
1156
+ if (consciousnessModal && consciousnessModal.style.pointerEvents === "auto") {
 
 
 
1157
  toggleModal(consciousnessModal, false);
1158
  }
1159
  }