--synth-join: 0.000; --synth-slash-width: 0.00px; scale: 1.000 1; translate: 0.00px 0px; scroll: 0.000; proximity: 0.000; /* cursor: paused */
const target = reduced ? (scroll === 1 || proximity === 1 ? 1 : 0) : Math.max(scroll, proximity)const offscreen = rect.bottom < 0 || rect.top > viewportHeight || rect.width === 0const elapsed = lastTime ? Math.min(64, time - lastTime) : 16lastTime = timeconst next = reduced || offscreen ? target : progress.current + (target - progress.current) * (1 - Math.exp(-elapsed / 60))progress.current = Math.abs(next - target) < 0.0005 ? target : nextnode.style.setProperty("--synth-join", String(progress.current))node.setAttribute("data-join-progress", progress.current.toFixed(5))node.setAttribute("data-scroll-progress", scroll.toFixed(5))node.setAttribute("data-proximity-progress", proximity.toFixed(5))node.setAttribute("data-connection-state", progress.current === 1 ? "disconnected" : "dis/connected") opacity: "calc(1 - var(--synth-join, 0))",scale: "calc(1 - var(--synth-join, 0)) 1",transformOrigin: "left center",translate: "calc(-1 * var(--synth-join, 0) * var(--synth-slash-width, 0px)) 0px",const over = (event: PointerEvent) => { const el = interactiveFrom(event.target) if (el === last) return last = el logVisualEvent("hover", describeElement(el)) if (!hotTarget()) publishVisualState({ target: "pointer", event: "hover" })}const down = (event: PointerEvent) => { logVisualEvent("press", describeElement(el)) publishVisualState({ target: "pointer", event: "press" })}const focus = (event: FocusEvent) => { logVisualEvent("focus", describeElement(el))}document.addEventListener("pointerover", over, { passive: true })document.addEventListener("pointerdown", down, { passive: true })document.addEventListener("focusin", focus)export const CURSOR_FRAMES: Keyframe[] = [ { offset: 0, opacity: 1, easing: "steps(1, end)" }, { offset: 0.5, opacity: 0, easing: "steps(1, end)" }, { offset: 1, opacity: 1 },]export const CURSOR_TIMING: KeyframeAnimationOptions = { duration: 900, iterations: Infinity, easing: "linear", fill: "none",}animation = node.animate(CURSOR_FRAMES, CURSOR_TIMING) const dx = Math.max(rect.left - point.x, 0, point.x - rect.right) const dy = Math.max(rect.top - point.y, 0, point.y - rect.bottom) const distance = Math.hypot(dx, dy) // Near is deliberately incomplete; actual hover/focus finishes the join. publishProduct(id, hovering.current && distance === 0 ? 1 : 0.96 * clamp(1 - distance / 320))}export const CURSOR_FRAMES: Keyframe[] = [ { offset: 0, opacity: 1, easing: "steps(1, end)" }, { offset: 0.5, opacity: 0, easing: "steps(1, end)" }, { offset: 1, opacity: 1 },]export const CURSOR_TIMING: KeyframeAnimationOptions = { duration: 900, iterations: Infinity, easing: "linear", fill: "none",} const animation = node.animate([ { offset: 0, textShadow: `1px 0 0 rgba(191,33,40,.55), -1px 0 0 rgba(236,234,228,.32)${base}`, easing: "steps(1, end)" }, { offset: 0.38, textShadow: `-1px 0 0 rgba(191,33,40,.36), 1px 0 0 rgba(236,234,228,.22)${base}`, easing: "steps(1, end)" }, { offset: 0.72, textShadow: original, easing: "steps(1, end)" }, { offset: 1, textShadow: original },], { duration: 120, easing: "linear", fill: "none", iterations: 1 }).synthtech-analogue-atmosphere > .synthtech-analogue-signal { animation: synthtech-analogue-signal-shift 9s steps(1, end) infinite;}.synthtech-analogue-atmosphere[data-running="false"] > .synthtech-analogue-signal { animation-play-state: paused; visibility: hidden;}@keyframes synthtech-analogue-signal-shift { 0%, 94%, 100% { opacity: 0; transform: translateX(0); } 95% { opacity: 0.34; transform: translateX(-3px); } 96% { opacity: 0.34; transform: translateX(1px); } 97% { opacity: 0; transform: translateX(0); }}@media (prefers-reduced-motion: reduce) { .synthtech-analogue-atmosphere > .synthtech-analogue-signal { animation: none; display: none; }}SYNTHESIS TECHNOLOGIES / SYSTEMS DEVELOPMENT / EST. 2026
SYNTHESIS / SYSTEMS DEV / EST. 2026
LOCATION // NOT SHARED
Optional. Rounded location stays on this page.
LOCATION // NOT SHARED
Optional. Rounded location stays on this page.
00
//
SYNTHESIS MODULE / PUBLIC INTERFACE
00
//
SYNTHESIS MODULE / PUBLIC INTERFACE
CONNECTING THE
DIS
/
CONNECTED.
DIS
/
CONNECTED.
DIS
/
CONNECTED.
Software systems for industries where the tools stopped talking to each other.
BUILD 00.01 / INTERFACE PUBLIC / NODE PRIMARY
01
//
ACTIVE SYSTEMS
SCROLL TO ACCESS
Construction technology. Software for bringing building information and production workflows together.
Tabletop software. Tools for organizing worlds, running expeditions, and connecting the information behind the game.
Games and experimental systems. Explore the projects taking shape beyond our production and tabletop tools.