<!DOCTYPE html><html lang="en" data-astro-cid-j7pv25f6> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><meta name="generator" content="Astro v5.16.6"><title></title><style>html,body{margin:0;padding:0;background:#000}main[data-astro-cid-j7pv25f6]{width:100%;height:100vh;overflow:hidden;position:relative;background-color:#000}canvas[data-astro-cid-j7pv25f6]{display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}.overlay[data-astro-cid-j7pv25f6]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;display:flex;justify-content:center;align-items:center;pointer-events:none}.content[data-astro-cid-j7pv25f6]{pointer-events:auto;opacity:0}.content[data-astro-cid-j7pv25f6] h1[data-astro-cid-j7pv25f6]{font-size:7rem;margin:0;padding:20px}@media(max-width:768px){.content[data-astro-cid-j7pv25f6] h1[data-astro-cid-j7pv25f6]{font-size:15vw}}
</style></head> <body data-astro-cid-j7pv25f6> <main data-astro-cid-j7pv25f6> <canvas id="glcanvas" data-astro-cid-j7pv25f6></canvas> <!-- 
				We keep the DOM element for accessibility, SEO, and the click target.
				We set opacity to 0 in CSS so it's invisible but still clickable.
			--> <div class="overlay" data-astro-cid-j7pv25f6> <div class="content" data-astro-cid-j7pv25f6> <h1 data-astro-cid-j7pv25f6><a href="/home" data-astro-cid-j7pv25f6>GOLDERMEDIA</a></h1> </div> </div> <!-- SHADER SOURCE CODE --> <script id="vs" type="x-shader/x-vertex">
				attribute vec2 position;
				void main() {
					gl_Position = vec4(position, 0.0, 1.0);
				}
			</script> <script id="fs" type="x-shader/x-fragment">
				precision highp float;
				uniform vec2 resolution;
				uniform float time;
				uniform sampler2D u_textTexture;

				// --- SHADER LOGIC START ---
				mat2 rot(float a) {
					float s = sin(a);
					float c = cos(a);
					return mat2(c, -s, s, c);
				}

				float hash(float n) { return fract(sin(n) * 43758.5453); }

				float noise(vec3 x) {
					vec3 p = floor(x);
					vec3 f = fract(x);
					f = f * f * (3.0 - 2.0 * f);
					float n = p.x + p.y * 57.0 + 113.0 * p.z;
					return mix(mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),
								mix(hash(n + 57.0), hash(n + 58.0), f.x), f.y),
							mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),
								mix(hash(n + 170.0), hash(n + 171.0), f.x), f.y), f.z);
				}

				void main() {
					// 1. Generate Background Pattern
					//vec2 res = (resolution.x < 1.0) ? vec2(800.0, 600.0) : resolution;
					vec2 res = max(resolution, vec2(1.0));
					//vec2 uv = (gl_FragCoord.xy * 2.0 - res) / min(res.x, res.y);
					//vec2 uv = (gl_FragCoord.xy - res * 0.5) / min(res.x, res.y);
					vec2 uv = (gl_FragCoord.xy - resolution.xy * 0.5) / resolution.y;
					//vec2 uv = (gl_FragCoord.xy - res.x * 0.5) / (gl_FragCoord.y - res.y * 0.5);
					//vec2 uv = (gl_FragCoord.xy - res * 0.5) / res.y;
					uv *= 2.4;
					float t = time * 1.0;
					vec3 ro = vec3(0.0, 0.0, -t);
					vec3 rd = normalize(vec3(uv, 0.75));
					rd.xy *= rot(t * 0.1);
					vec3 col = vec3(0.0);
					
					vec3 p = ro;
					
					// OPTIMIZATION: Reduced loop count from 60 to 32. 
					// Compensated by increasing step size (0.2 -> 0.25) to maintain tunnel depth.
					for(int i = 0; i < 60; i++) {
						p += rd * 0.6;
						
						// OPTIMIZATION: Calculate radius first
						float r = length(p.xy);
						
						// OPTIMIZATION: Early exit. 
						// If we are in the "hole" of the tunnel (radius < 0.2), 
						// the 'tube' variable later becomes 0.0 anyway.
						if (r < 0.15) continue;

						float ang = atan(p.y, p.x);
						float wobble = noise(p * 0.5 + t );
						float jets = sin(ang * 6.0 + p.z * 0.5 + wobble * 0.3);
						float intensity = noise(p * 0.1 + vec3(0.0, 0.0, t * 0.75));
						jets = smoothstep(0.2, 0.4, jets);
						jets *= smoothstep(0.3, 0.4, intensity + 0.2);
						
						float tube = smoothstep(0.2, 1.5, r);
						float n = noise(p * 3.0);
						float spark = pow(n, 36.0) * jets * tube;
						
						if(spark > 0.0001) {
							vec3 c = vec3(1.0, 0.3, 0.05) * spark * 4.0;
							c += vec3(1.0, 0.9, 0.6) * pow(spark, 1.5) * 15.0;
							c *= 1.0 / (1.0 + length(p - ro) * 0.1);
							col += c;
						}
					}
					col = col / (1.0 + col * 0.5);
					col = pow(col, vec3(1.3));

					// 2. Sample Text Texture
					vec2 textUV = gl_FragCoord.xy / resolution;
					vec4 textLayer = texture2D(u_textTexture, textUV);

					// 3. Composite Text over Background
					gl_FragColor = vec4(mix(col, textLayer.rgb, textLayer.a), 1.0);
				}
				// --- SHADER LOGIC END ---
			</script> </main> </body> </html>  <script type="module">const o=document.getElementById("glcanvas"),s=document.createElement("canvas"),x=2560;let e;try{e=o.getContext("webgl",{alpha:!1,powerPreference:"default"})}catch{}if(!e)console.error("WebGL not supported"),o.style.display="none";else{let d=function(n,t,a){const i=n.createShader(t);return n.shaderSource(i,a),n.compileShader(i),n.getShaderParameter(i,n.COMPILE_STATUS)?i:(console.error(n.getShaderInfoLog(i)),n.deleteShader(i),null)},_=function(n){s.width=o.width,s.height=o.height;const t=s.getContext("2d");if(!t)return;const a=o.width/window.innerWidth;t.clearRect(0,0,s.width,s.height);const r=Math.min(window.innerWidth*.13,140)*a;t.font=`100 ${r}px sans-serif`,t.letterSpacing=Math.floor(r*.3)+"px",t.textAlign="center",t.textBaseline="middle",t.fillStyle="#ffffff";const E=s.width/2,T=s.height/2;t.save(),t.translate(E,T),t.scale(.66,1),t.shadowColor="rgba(180, 32, 0, 0.4)",t.shadowBlur=20*a,t.fillText("GOLDERMEDIA",0,0),t.shadowColor="rgba(250, 188, 0, 0.8)",t.shadowBlur=15*a,t.fillText("GOLDERMEDIA",0,0),t.shadowColor="rgba(0, 0, 0, 1.0)",t.shadowBlur=15*a,t.fillText("GOLDERMEDIA",0,0),t.restore(),e.bindTexture(e.TEXTURE_2D,n),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR)};const f=document.getElementById("vs"),h=document.getElementById("fs");if(f&&h){const n=f.textContent,t=h.textContent,a=d(e,e.VERTEX_SHADER,n),i=d(e,e.FRAGMENT_SHADER,t),r=e.createProgram();if(e.attachShader(r,a),e.attachShader(r,i),e.linkProgram(r),r){const E=e.getAttribLocation(r,"position"),T=e.getUniformLocation(r,"resolution"),w=e.getUniformLocation(r,"time"),g=e.getUniformLocation(r,"u_textTexture"),l=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,l),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),e.STATIC_DRAW);const u=e.createTexture(),R=()=>{const c=window.innerWidth,m=c>x?x/c:1;o.width=c*m,o.height=window.innerHeight*m,e.viewport(0,0,o.width,o.height),_(u)};window.addEventListener("resize",R),R();const A=c=>{c*=1e-4,e.useProgram(r),e.enableVertexAttribArray(E),e.bindBuffer(e.ARRAY_BUFFER,l),e.vertexAttribPointer(E,2,e.FLOAT,!1,0,0),e.uniform2f(T,o.width,o.height),e.uniform1f(w,c),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,u),e.uniform1i(g,0),e.drawArrays(e.TRIANGLES,0,6),requestAnimationFrame(A)};requestAnimationFrame(A)}}}</script>