Delete script.js
Browse files
script.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
| 1 |
-
(() => {
|
| 2 |
-
"use strict";
|
| 3 |
-
|
| 4 |
-
const root = document.documentElement;
|
| 5 |
-
const body = document.body;
|
| 6 |
-
const header = document.querySelector(".site-header");
|
| 7 |
-
const menuToggle = document.getElementById("menuToggle");
|
| 8 |
-
const themeToggle = document.getElementById("themeToggle");
|
| 9 |
-
const year = document.getElementById("year");
|
| 10 |
-
|
| 11 |
-
// Theme ---------------------------------------------------------
|
| 12 |
-
const storedTheme = localStorage.getItem("braegn-theme");
|
| 13 |
-
const preferredDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
| 14 |
-
const initialTheme = storedTheme || (preferredDark ? "dark" : "light");
|
| 15 |
-
|
| 16 |
-
function applyTheme(theme) {
|
| 17 |
-
if (theme === "dark") {
|
| 18 |
-
root.setAttribute("data-theme", "dark");
|
| 19 |
-
themeToggle?.setAttribute("aria-pressed", "true");
|
| 20 |
-
if (themeToggle) themeToggle.querySelector(".theme-icon").textContent = "☼";
|
| 21 |
-
} else {
|
| 22 |
-
root.removeAttribute("data-theme");
|
| 23 |
-
themeToggle?.setAttribute("aria-pressed", "false");
|
| 24 |
-
if (themeToggle) themeToggle.querySelector(".theme-icon").textContent = "◐";
|
| 25 |
-
}
|
| 26 |
-
}
|
| 27 |
-
|
| 28 |
-
applyTheme(initialTheme);
|
| 29 |
-
|
| 30 |
-
themeToggle?.addEventListener("click", () => {
|
| 31 |
-
const next = root.getAttribute("data-theme") === "dark" ? "light" : "dark";
|
| 32 |
-
localStorage.setItem("braegn-theme", next);
|
| 33 |
-
applyTheme(next);
|
| 34 |
-
});
|
| 35 |
-
|
| 36 |
-
// Mobile navigation ---------------------------------------------
|
| 37 |
-
menuToggle?.addEventListener("click", () => {
|
| 38 |
-
const open = header.classList.toggle("menu-open");
|
| 39 |
-
body.classList.toggle("menu-open", open);
|
| 40 |
-
menuToggle.setAttribute("aria-expanded", String(open));
|
| 41 |
-
menuToggle.textContent = open ? "×" : "☰";
|
| 42 |
-
});
|
| 43 |
-
|
| 44 |
-
document.querySelectorAll(".nav a").forEach((link) => {
|
| 45 |
-
link.addEventListener("click", () => {
|
| 46 |
-
header.classList.remove("menu-open");
|
| 47 |
-
body.classList.remove("menu-open");
|
| 48 |
-
menuToggle?.setAttribute("aria-expanded", "false");
|
| 49 |
-
if (menuToggle) menuToggle.textContent = "☰";
|
| 50 |
-
});
|
| 51 |
-
});
|
| 52 |
-
|
| 53 |
-
// Reveal-on-scroll ----------------------------------------------
|
| 54 |
-
const revealItems = document.querySelectorAll(".reveal");
|
| 55 |
-
|
| 56 |
-
if ("IntersectionObserver" in window) {
|
| 57 |
-
const observer = new IntersectionObserver((entries, obs) => {
|
| 58 |
-
entries.forEach((entry) => {
|
| 59 |
-
if (!entry.isIntersecting) return;
|
| 60 |
-
entry.target.classList.add("is-visible");
|
| 61 |
-
obs.unobserve(entry.target);
|
| 62 |
-
});
|
| 63 |
-
}, { threshold: 0.12, rootMargin: "0px 0px -35px 0px" });
|
| 64 |
-
|
| 65 |
-
revealItems.forEach((item) => observer.observe(item));
|
| 66 |
-
} else {
|
| 67 |
-
revealItems.forEach((item) => item.classList.add("is-visible"));
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
// Dynamic year ---------------------------------------------------
|
| 71 |
-
if (year) year.textContent = new Date().getFullYear();
|
| 72 |
-
|
| 73 |
-
// Respect reduced-motion preferences ---------------------------
|
| 74 |
-
if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
|
| 75 |
-
document.querySelectorAll(".reveal").forEach((item) => {
|
| 76 |
-
item.classList.add("is-visible");
|
| 77 |
-
item.style.transition = "none";
|
| 78 |
-
});
|
| 79 |
-
document.querySelectorAll(".orbit").forEach((item) => {
|
| 80 |
-
item.style.animation = "none";
|
| 81 |
-
});
|
| 82 |
-
}
|
| 83 |
-
})();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|