background
This commit is contained in:
parent
36ead92a6c
commit
a64664a505
@ -40,7 +40,8 @@ main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar {
|
.navbar {
|
||||||
backdrop-filter: blur(6px);
|
background: rgba(255, 255, 255, 0.96);
|
||||||
|
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-brand {
|
.navbar-brand {
|
||||||
@ -116,3 +117,171 @@ footer a {
|
|||||||
padding-top: 40px;
|
padding-top: 40px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
html {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
position: relative;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar,
|
||||||
|
main,
|
||||||
|
footer {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-background {
|
||||||
|
position: fixed;
|
||||||
|
inset: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-grid,
|
||||||
|
.bg-orb,
|
||||||
|
.bg-cursor-glow {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-grid {
|
||||||
|
inset: 0;
|
||||||
|
background-image:
|
||||||
|
linear-gradient(rgba(17, 24, 39, 0.03) 1px, transparent 1px),
|
||||||
|
linear-gradient(90deg, rgba(17, 24, 39, 0.03) 1px, transparent 1px);
|
||||||
|
background-size: 72px 72px;
|
||||||
|
mask-image: radial-gradient(circle at center, rgba(0, 0, 0, 0.68), transparent 78%);
|
||||||
|
opacity: 0.22;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-orb {
|
||||||
|
border-radius: 50%;
|
||||||
|
filter: blur(4px);
|
||||||
|
opacity: 0.7;
|
||||||
|
will-change: transform;
|
||||||
|
animation: pulseOrb 12s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-orb-one {
|
||||||
|
top: 7%;
|
||||||
|
left: -8%;
|
||||||
|
width: 340px;
|
||||||
|
height: 340px;
|
||||||
|
background: radial-gradient(circle at 30% 30%, rgba(37, 99, 235, 0.34), rgba(37, 99, 235, 0.06) 60%, transparent 72%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-orb-two {
|
||||||
|
top: 18%;
|
||||||
|
right: -10%;
|
||||||
|
width: 420px;
|
||||||
|
height: 420px;
|
||||||
|
background: radial-gradient(circle at 40% 40%, rgba(16, 185, 129, 0.24), rgba(37, 99, 235, 0.06) 58%, transparent 74%);
|
||||||
|
animation-duration: 18s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-orb-three {
|
||||||
|
bottom: -8%;
|
||||||
|
left: 48%;
|
||||||
|
width: 360px;
|
||||||
|
height: 360px;
|
||||||
|
background: radial-gradient(circle at 50% 50%, rgba(251, 191, 36, 0.2), rgba(37, 99, 235, 0.06) 62%, transparent 76%);
|
||||||
|
animation-duration: 20s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-cursor-glow {
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 240px;
|
||||||
|
height: 240px;
|
||||||
|
margin: -120px 0 0 -120px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: radial-gradient(circle, rgba(37, 99, 235, 0.1) 0%, rgba(37, 99, 235, 0.03) 48%, transparent 72%);
|
||||||
|
opacity: 0.5;
|
||||||
|
will-change: transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-section,
|
||||||
|
.section-muted,
|
||||||
|
.about-panel,
|
||||||
|
.hero-card,
|
||||||
|
.contact-box,
|
||||||
|
.card {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-section::after,
|
||||||
|
.section-muted::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
background: linear-gradient(135deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-card,
|
||||||
|
.about-panel,
|
||||||
|
.contact-box,
|
||||||
|
.card,
|
||||||
|
.navbar {
|
||||||
|
-webkit-backdrop-filter: none;
|
||||||
|
backdrop-filter: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-card,
|
||||||
|
.about-panel,
|
||||||
|
.contact-box,
|
||||||
|
.card {
|
||||||
|
background: rgba(255, 255, 255, 0.97);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card,
|
||||||
|
.hero-card,
|
||||||
|
.about-panel,
|
||||||
|
.contact-box {
|
||||||
|
box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary,
|
||||||
|
.btn-outline-dark {
|
||||||
|
transition: transform 0.25s ease, box-shadow 0.25s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary:hover,
|
||||||
|
.btn-outline-dark:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 14px 34px rgba(15, 23, 42, 0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulseOrb {
|
||||||
|
0%, 100% {
|
||||||
|
opacity: 0.52;
|
||||||
|
filter: blur(4px);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.78;
|
||||||
|
filter: blur(2px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
html {
|
||||||
|
scroll-behavior: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-orb,
|
||||||
|
.bg-cursor-glow,
|
||||||
|
.btn-primary,
|
||||||
|
.btn-outline-dark {
|
||||||
|
animation: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-cursor-glow {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -16,4 +16,43 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const toast = new bootstrap.Toast(toastEl, { delay: 4000 });
|
const toast = new bootstrap.Toast(toastEl, { delay: 4000 });
|
||||||
toast.show();
|
toast.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||||
|
const orbs = Array.from(document.querySelectorAll('.bg-orb'));
|
||||||
|
const cursorGlow = document.querySelector('.bg-cursor-glow');
|
||||||
|
|
||||||
|
if (!prefersReducedMotion && (orbs.length || cursorGlow)) {
|
||||||
|
const pointer = { x: window.innerWidth / 2, y: window.innerHeight / 3 };
|
||||||
|
const smooth = { x: pointer.x, y: pointer.y };
|
||||||
|
|
||||||
|
const render = () => {
|
||||||
|
smooth.x += (pointer.x - smooth.x) * 0.08;
|
||||||
|
smooth.y += (pointer.y - smooth.y) * 0.08;
|
||||||
|
|
||||||
|
orbs.forEach((orb, index) => {
|
||||||
|
const depth = Number(orb.dataset.depth || 20);
|
||||||
|
const direction = index % 2 === 0 ? 1 : -1;
|
||||||
|
const dx = ((smooth.x / window.innerWidth) - 0.5) * depth * direction;
|
||||||
|
const dy = ((smooth.y / window.innerHeight) - 0.5) * depth;
|
||||||
|
orb.style.transform = `translate3d(${dx}px, ${dy}px, 0)`;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (cursorGlow) {
|
||||||
|
cursorGlow.style.transform = `translate3d(${smooth.x}px, ${smooth.y}px, 0)`;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.requestAnimationFrame(render);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('pointermove', (event) => {
|
||||||
|
pointer.x = event.clientX;
|
||||||
|
pointer.y = event.clientY;
|
||||||
|
}, { passive: true });
|
||||||
|
|
||||||
|
window.addEventListener('scroll', () => {
|
||||||
|
pointer.y = window.innerHeight / 3 + (window.scrollY * 0.08);
|
||||||
|
}, { passive: true });
|
||||||
|
|
||||||
|
render();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -131,6 +131,14 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<div class="site-background" aria-hidden="true">
|
||||||
|
<span class="bg-grid"></span>
|
||||||
|
<span class="bg-orb bg-orb-one" data-depth="18"></span>
|
||||||
|
<span class="bg-orb bg-orb-two" data-depth="28"></span>
|
||||||
|
<span class="bg-orb bg-orb-three" data-depth="38"></span>
|
||||||
|
<span class="bg-cursor-glow"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg navbar-light bg-white border-bottom fixed-top">
|
<nav class="navbar navbar-expand-lg navbar-light bg-white border-bottom fixed-top">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a class="navbar-brand fw-semibold" href="#top">Alex Carter</a>
|
<a class="navbar-brand fw-semibold" href="#top">Alex Carter</a>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user