.sub-caps{position:absolute;left:0;right:0;bottom:6%;display:flex;justify-content:space-around;font-size:clamp(8px,2.4vmin,12px);color:#dfe3ffcc;text-align:center;padding:0 3%}
import * as THREE from 'three';
import { RoundedBoxGeometry } from 'three/addons/geometries/RoundedBoxGeometry.js';
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setPixelRatio(Math.min(devicePixelRatio, 2));
document.body.appendChild(renderer.domElement);
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x0b0b14);
const camera = new THREE.PerspectiveCamera(40, 1, 0.1, 100);
camera.position.set(0, 0.7, 6.2);
const mat = new THREE.MeshStandardMaterial({ color: 0x8ecbff, roughness: 0.32, metalness: 0.15 });
const sharp = new THREE.Mesh(new THREE.BoxGeometry(1.5, 1.5, 1.5), mat);
sharp.position.x = -1.7;
const bevel = new THREE.Mesh(new RoundedBoxGeometry(1.5, 1.5, 1.5, 5, 0.16), mat);
bevel.position.x = 1.7;
scene.add(sharp, bevel);
const key = new THREE.DirectionalLight(0xffffff, 2.1); key.position.set(4, 3, 4); scene.add(key);
scene.add(new THREE.AmbientLight(0xffffff, 0.35));
function resize() { renderer.setSize(innerWidth, innerHeight); camera.aspect = innerWidth / innerHeight; camera.updateProjectionMatrix(); }
addEventListener('resize', resize); resize();
renderer.setAnimationLoop((t) => {
const r = t * 0.00026;
sharp.rotation.set(r * 0.6, r, 0);
bevel.rotation.copy(sharp.rotation);
camera.lookAt(0, 0, 0);
renderer.render(scene, camera);
});