awacke1 commited on
Commit
1440923
·
verified ·
1 Parent(s): bf93483

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +153 -146
index.html CHANGED
@@ -10,217 +10,224 @@
10
  overflow: hidden;
11
  }
12
 
13
- /* Climber animations */
14
- .climber {
15
- position: absolute;
16
- width: 40px;
17
- height: 60px;
18
- filter: drop-shadow(2px 2px 2px rgba(0,0,0,0.3));
19
  }
20
 
21
- @keyframes bounce {
22
- 0%, 100% { transform: translateY(0) scaleY(1); }
23
- 50% { transform: translateY(-20px) scaleY(0.9); }
24
- }
25
-
26
- .climber1 {
27
- left: 300px;
28
- top: 200px;
29
- animation: bounce 1.2s infinite ease-in-out;
30
- }
31
- .climber2 {
32
- left: 500px;
33
- top: 180px;
34
- animation: bounce 1.5s infinite ease-in-out;
35
- }
36
- .climber3 {
37
- left: 700px;
38
- top: 220px;
39
- animation: bounce 0.9s infinite ease-in-out;
40
- }
41
-
42
- /* Enhanced waterfall */
43
  .waterfall-container {
44
  position: absolute;
45
  left: 400px;
46
  top: 200px;
47
- width: 80px;
48
  height: 300px;
49
- overflow: hidden;
50
- border-radius: 40px 40px 0 0;
51
  }
52
 
53
- .waterfall-stream {
 
 
 
54
  width: 100%;
55
- height: 200%;
56
- background: linear-gradient(180deg,
57
- rgba(255, 255, 255, 0.8),
58
- rgba(173, 216, 230, 0.9),
59
- rgba(173, 216, 230, 0.7),
60
- rgba(173, 216, 230, 0.8)
61
- );
62
- animation: waterfall 2s linear infinite;
63
- filter: blur(2px);
 
 
 
 
64
  }
65
 
66
- /* Whitewater spheres */
67
- .whitewater-sphere {
68
  position: absolute;
69
  border-radius: 50%;
70
- animation: float var(--float-duration, 4s) linear infinite;
71
- opacity: 0.6;
 
 
 
72
  }
73
 
74
- @keyframes float {
75
- 0% {
76
- transform: translate(-100%, var(--start-y, 0)) scale(1);
 
 
 
 
 
 
 
 
77
  opacity: 0;
78
  }
79
- 10% { opacity: var(--max-opacity, 0.6); }
80
- 90% { opacity: var(--max-opacity, 0.6); }
81
- 100% {
82
- transform: translate(300%, var(--end-y, 0)) scale(var(--end-scale, 1.2));
83
  opacity: 0;
84
  }
85
  }
86
 
87
- /* River with perspective */
88
- .river {
89
- position: absolute;
90
- width: 200%;
91
- height: 100px;
92
- bottom: 100px;
93
- left: -50%;
94
- background: linear-gradient(90deg,
95
- rgba(173, 216, 230, 0.8),
96
- rgba(173, 216, 230, 0.9),
97
- rgba(255, 255, 255, 0.6),
98
- rgba(173, 216, 230, 0.9),
99
- rgba(173, 216, 230, 0.8)
100
- );
101
- animation: riverFlow 8s linear infinite;
102
- transform: perspective(500px) rotateX(30deg);
103
- transform-origin: bottom;
104
  }
105
 
106
- .mist {
107
- position: absolute;
108
- width: 120px;
109
- height: 40px;
110
- left: 380px;
111
- bottom: 160px;
112
- background: radial-gradient(
113
- ellipse at center,
114
- rgba(255, 255, 255, 0.6) 0%,
115
- rgba(255, 255, 255, 0) 70%
116
- );
117
- filter: blur(3px);
118
- animation: mist 3s ease-in-out infinite alternate;
119
  }
120
 
121
- @keyframes waterfall {
122
- 0% { transform: translateY(-50%); }
123
- 100% { transform: translateY(0); }
 
 
124
  }
125
 
126
- @keyframes riverFlow {
127
- 0% { transform: perspective(500px) rotateX(30deg) translateX(0); }
128
- 100% { transform: perspective(500px) rotateX(30deg) translateX(-50%); }
129
  }
130
 
131
- @keyframes mist {
132
- 0% { opacity: 0.4; transform: translateY(0); }
133
- 100% { opacity: 0.7; transform: translateY(-10px); }
134
- }
135
  </style>
136
  </head>
137
  <body>
138
  <div class="scene-container">
139
- <!-- Background with peaks -->
140
  <svg width="100%" height="100%" viewBox="0 0 1200 800">
141
- <defs>
142
- <linearGradient id="rockGradient" x1="0%" y1="0%" x2="0%" y2="100%">
143
- <stop offset="0%" style="stop-color:#8B4513"/>
144
- <stop offset="50%" style="stop-color:#A0522D"/>
145
- <stop offset="100%" style="stop-color:#8B4513"/>
146
- </linearGradient>
147
- </defs>
148
-
149
- <!-- Mountains with peaks -->
150
  <path d="M0,300 L200,100 L300,250 L400,80 L500,220 L600,100 L700,240 L800,120 L1000,280 L1200,150 L1200,800 L0,800 Z"
151
- fill="url(#rockGradient)"/>
152
  </svg>
153
 
154
- <!-- Animated climbers -->
155
  <svg class="climber climber1" viewBox="0 0 40 60">
156
  <path d="M20,10 L20,35 M15,20 L25,20 M20,35 L15,50 M20,35 L25,50"
157
  stroke="#333" stroke-width="3" stroke-linecap="round"/>
158
  <circle cx="20" cy="8" r="6" fill="#ff4444"/>
159
- <path d="M18,32 Q20,30 22,32" stroke="#888" stroke-width="2" fill="none"/>
160
  </svg>
161
-
162
  <svg class="climber climber2" viewBox="0 0 40 60">
163
  <path d="M20,10 L20,35 M15,20 L25,20 M20,35 L15,50 M20,35 L25,50"
164
  stroke="#333" stroke-width="3" stroke-linecap="round"/>
165
  <circle cx="20" cy="8" r="6" fill="#4444ff"/>
166
- <path d="M18,32 Q20,30 22,32" stroke="#888" stroke-width="2" fill="none"/>
167
  </svg>
168
-
169
  <svg class="climber climber3" viewBox="0 0 40 60">
170
  <path d="M20,10 L20,35 M15,20 L25,20 M20,35 L15,50 M20,35 L25,50"
171
  stroke="#333" stroke-width="3" stroke-linecap="round"/>
172
  <circle cx="20" cy="8" r="6" fill="#44ff44"/>
173
- <path d="M18,32 Q20,30 22,32" stroke="#888" stroke-width="2" fill="none"/>
174
  </svg>
175
 
176
- <!-- Water effects -->
177
- <div class="waterfall-container">
178
- <div class="waterfall-stream"></div>
179
- </div>
180
- <div class="mist"></div>
181
- <div class="river"></div>
182
 
183
- <!-- Dynamic whitewater spheres -->
184
  <script>
185
- function createWhitewaterSpheres() {
186
- const container = document.querySelector('.river');
187
- const colors = [
188
- 'rgba(255, 255, 255, 0.6)',
189
- 'rgba(173, 216, 230, 0.5)',
190
- 'rgba(135, 206, 235, 0.4)',
191
- 'rgba(240, 248, 255, 0.7)'
192
- ];
193
 
194
- function createSphere() {
195
- const sphere = document.createElement('div');
196
- sphere.className = 'whitewater-sphere';
197
- const size = 5 + Math.random() * 15;
198
- sphere.style.cssText = `
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  width: ${size}px;
200
  height: ${size}px;
201
- background: ${colors[Math.floor(Math.random() * colors.length)]};
202
- --float-duration: ${3 + Math.random() * 4}s;
203
- --start-y: ${-20 + Math.random() * 40}px;
204
- --end-y: ${-10 + Math.random() * 20}px;
205
- --end-scale: ${0.8 + Math.random() * 0.8};
206
- --max-opacity: ${0.4 + Math.random() * 0.3};
 
 
207
  `;
208
- container.appendChild(sphere);
209
-
210
- sphere.addEventListener('animationend', () => {
211
- sphere.remove();
212
- createSphere();
213
- });
214
  }
215
 
216
- // Create initial spheres
217
- for (let i = 0; i < 30; i++) {
218
- setTimeout(() => createSphere(), Math.random() * 3000);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  }
 
 
 
 
 
220
  }
221
 
222
- // Initialize whitewater
223
- createWhitewaterSpheres();
224
  </script>
225
  </div>
226
  </body>
 
10
  overflow: hidden;
11
  }
12
 
13
+ /* Unified water colors */
14
+ :root {
15
+ --water-blue-1: rgba(173, 216, 230, 0.7);
16
+ --water-blue-2: rgba(135, 206, 235, 0.6);
17
+ --water-white-1: rgba(255, 255, 255, 0.5);
18
+ --water-white-2: rgba(240, 248, 255, 0.4);
19
  }
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  .waterfall-container {
22
  position: absolute;
23
  left: 400px;
24
  top: 200px;
25
+ width: 120px;
26
  height: 300px;
27
+ overflow: visible;
 
28
  }
29
 
30
+ .river-container {
31
+ position: absolute;
32
+ bottom: 100px;
33
+ left: 0;
34
  width: 100%;
35
+ height: 120px;
36
+ transform: perspective(1000px) rotateX(30deg);
37
+ transform-origin: bottom;
38
+ overflow: hidden;
39
+ }
40
+
41
+ .impact-zone {
42
+ position: absolute;
43
+ left: 380px;
44
+ bottom: 220px;
45
+ width: 160px;
46
+ height: 80px;
47
+ overflow: visible;
48
  }
49
 
50
+ .water-shape {
 
51
  position: absolute;
52
  border-radius: 50%;
53
+ opacity: 0;
54
+ }
55
+
56
+ .waterfall-drop {
57
+ animation: waterfall-fall var(--fall-duration, 1.5s) linear infinite;
58
  }
59
 
60
+ .impact-splash {
61
+ animation: splash var(--splash-duration, 1s) ease-out infinite;
62
+ }
63
+
64
+ .river-swirl {
65
+ animation: river-flow var(--flow-duration, 4s) linear infinite;
66
+ }
67
+
68
+ @keyframes waterfall-fall {
69
+ 0% {
70
+ transform: translate(var(--start-x, 0), -100%) scale(1);
71
  opacity: 0;
72
  }
73
+ 10% { opacity: var(--opacity, 0.6); }
74
+ 90% { opacity: var(--opacity, 0.6); }
75
+ 100% {
76
+ transform: translate(var(--end-x, 0), 100%) scale(var(--end-scale, 0.8));
77
  opacity: 0;
78
  }
79
  }
80
 
81
+ @keyframes splash {
82
+ 0% {
83
+ transform: translate(var(--start-x, 0), 0) scale(0.2);
84
+ opacity: 0;
85
+ }
86
+ 40% {
87
+ opacity: var(--opacity, 0.6);
88
+ transform: translate(var(--end-x, 0), var(--y-offset, 0)) scale(1);
89
+ }
90
+ 100% {
91
+ transform: translate(var(--final-x, 0), var(--final-y, 0)) scale(1.5);
92
+ opacity: 0;
93
+ }
 
 
 
 
94
  }
95
 
96
+ @keyframes river-flow {
97
+ 0% {
98
+ transform: translate(-100%, var(--y-pos, 0)) rotate(0deg);
99
+ opacity: 0;
100
+ }
101
+ 10% { opacity: var(--opacity, 0.6); }
102
+ 90% { opacity: var(--opacity, 0.6); }
103
+ 100% {
104
+ transform: translate(200%, var(--y-pos, 0)) rotate(360deg);
105
+ opacity: 0;
106
+ }
 
 
107
  }
108
 
109
+ .climber {
110
+ position: absolute;
111
+ width: 40px;
112
+ height: 60px;
113
+ animation: bounce 1.2s infinite ease-in-out;
114
  }
115
 
116
+ @keyframes bounce {
117
+ 0%, 100% { transform: translateY(0); }
118
+ 50% { transform: translateY(-20px); }
119
  }
120
 
121
+ .climber1 { left: 300px; top: 200px; animation-delay: -0.2s; }
122
+ .climber2 { left: 500px; top: 180px; animation-delay: -0.5s; }
123
+ .climber3 { left: 700px; top: 220px; animation-delay: -0.8s; }
 
124
  </style>
125
  </head>
126
  <body>
127
  <div class="scene-container">
128
+ <!-- Background cliffs -->
129
  <svg width="100%" height="100%" viewBox="0 0 1200 800">
 
 
 
 
 
 
 
 
 
130
  <path d="M0,300 L200,100 L300,250 L400,80 L500,220 L600,100 L700,240 L800,120 L1000,280 L1200,150 L1200,800 L0,800 Z"
131
+ fill="#8B4513"/>
132
  </svg>
133
 
134
+ <!-- Climbers -->
135
  <svg class="climber climber1" viewBox="0 0 40 60">
136
  <path d="M20,10 L20,35 M15,20 L25,20 M20,35 L15,50 M20,35 L25,50"
137
  stroke="#333" stroke-width="3" stroke-linecap="round"/>
138
  <circle cx="20" cy="8" r="6" fill="#ff4444"/>
 
139
  </svg>
 
140
  <svg class="climber climber2" viewBox="0 0 40 60">
141
  <path d="M20,10 L20,35 M15,20 L25,20 M20,35 L15,50 M20,35 L25,50"
142
  stroke="#333" stroke-width="3" stroke-linecap="round"/>
143
  <circle cx="20" cy="8" r="6" fill="#4444ff"/>
 
144
  </svg>
 
145
  <svg class="climber climber3" viewBox="0 0 40 60">
146
  <path d="M20,10 L20,35 M15,20 L25,20 M20,35 L15,50 M20,35 L25,50"
147
  stroke="#333" stroke-width="3" stroke-linecap="round"/>
148
  <circle cx="20" cy="8" r="6" fill="#44ff44"/>
 
149
  </svg>
150
 
151
+ <!-- Water system containers -->
152
+ <div class="waterfall-container"></div>
153
+ <div class="impact-zone"></div>
154
+ <div class="river-container"></div>
 
 
155
 
 
156
  <script>
157
+ // Create dynamic water elements
158
+ function createWaterSystem() {
159
+ const waterfall = document.querySelector('.waterfall-container');
160
+ const impactZone = document.querySelector('.impact-zone');
161
+ const river = document.querySelector('.river-container');
 
 
 
162
 
163
+ // Waterfall drops
164
+ function createWaterfallDrop() {
165
+ const drop = document.createElement('div');
166
+ drop.className = 'water-shape waterfall-drop';
167
+ const size = 10 + Math.random() * 30;
168
+ drop.style.cssText = `
169
+ width: ${size}px;
170
+ height: ${size}px;
171
+ background: var(--water-${Math.random() > 0.5 ? 'blue' : 'white'}-${Math.random() > 0.5 ? '1' : '2'});
172
+ left: ${Math.random() * 100}%;
173
+ --fall-duration: ${1 + Math.random()}s;
174
+ --opacity: ${0.4 + Math.random() * 0.3};
175
+ --start-x: ${-10 + Math.random() * 20}px;
176
+ --end-x: ${-20 + Math.random() * 40}px;
177
+ --end-scale: ${0.6 + Math.random() * 0.4};
178
+ filter: blur(${1 + Math.random() * 2}px);
179
+ `;
180
+ waterfall.appendChild(drop);
181
+ drop.addEventListener('animationend', () => drop.remove());
182
+ }
183
+
184
+ // Impact splashes
185
+ function createSplash() {
186
+ const splash = document.createElement('div');
187
+ splash.className = 'water-shape impact-splash';
188
+ const size = 15 + Math.random() * 40;
189
+ splash.style.cssText = `
190
  width: ${size}px;
191
  height: ${size}px;
192
+ background: var(--water-${Math.random() > 0.5 ? 'blue' : 'white'}-${Math.random() > 0.5 ? '1' : '2'});
193
+ left: ${Math.random() * 100}%;
194
+ --splash-duration: ${0.8 + Math.random() * 0.4}s;
195
+ --opacity: ${0.3 + Math.random() * 0.4};
196
+ --y-offset: ${-10 - Math.random() * 20}px;
197
+ --final-y: ${-20 - Math.random() * 30}px;
198
+ --final-x: ${-30 + Math.random() * 60}px;
199
+ filter: blur(${2 + Math.random() * 2}px);
200
  `;
201
+ impactZone.appendChild(splash);
202
+ splash.addEventListener('animationend', () => splash.remove());
 
 
 
 
203
  }
204
 
205
+ // River swirls
206
+ function createRiverSwirl() {
207
+ const swirl = document.createElement('div');
208
+ swirl.className = 'water-shape river-swirl';
209
+ const size = 20 + Math.random() * 50;
210
+ swirl.style.cssText = `
211
+ width: ${size}px;
212
+ height: ${size}px;
213
+ background: var(--water-${Math.random() > 0.5 ? 'blue' : 'white'}-${Math.random() > 0.5 ? '1' : '2'});
214
+ top: ${Math.random() * 100}%;
215
+ --flow-duration: ${4 + Math.random() * 3}s;
216
+ --opacity: ${0.3 + Math.random() * 0.4};
217
+ --y-pos: ${-20 + Math.random() * 40}px;
218
+ filter: blur(${1 + Math.random() * 3}px);
219
+ `;
220
+ river.appendChild(swirl);
221
+ swirl.addEventListener('animationend', () => swirl.remove());
222
  }
223
+
224
+ // Generate continuous water elements
225
+ setInterval(createWaterfallDrop, 100);
226
+ setInterval(createSplash, 150);
227
+ setInterval(createRiverSwirl, 200);
228
  }
229
 
230
+ createWaterSystem();
 
231
  </script>
232
  </div>
233
  </body>