200 lines
6 KiB
HTML
200 lines
6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
|
|
<title>functor.systems >> Matrix</title>
|
|
<meta name="description" content="a matrix homeserver for functor.systems members">
|
|
<meta name="author" content="Youwen Wu <youwen@functor.systems>">
|
|
|
|
<meta property="og:title" content="functor.systems >> Matrix">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:url" content="https://functor.systems/matrix">
|
|
<meta property="og:description" content="a matrix homeserver for functor.systems members">
|
|
|
|
<link rel="stylesheet" href="/sunlit.css">
|
|
|
|
<!-- <link rel="icon" href="/favicon.ico"> -->
|
|
<!-- <link rel="icon" href="/favicon.svg" type="image/svg+xml"> -->
|
|
<!-- <link rel="apple-touch-icon" href="/apple-touch-icon.png"> -->
|
|
|
|
<style>
|
|
@font-face {
|
|
font-family: "Redaction";
|
|
font-style: normal;
|
|
font-display: swap;
|
|
font-weight: regular;
|
|
src: url("/fonts/redaction.woff2") format("woff2");
|
|
}
|
|
@font-face {
|
|
font-family: "Redaction";
|
|
font-style: italic;
|
|
font-display: swap;
|
|
font-weight: regular;
|
|
src: url("/fonts/redaction-italic.woff2") format("woff2");
|
|
}
|
|
@font-face {
|
|
font-family: "Redaction 20";
|
|
font-style: italic;
|
|
font-display: swap;
|
|
font-weight: regular;
|
|
src: url("/fonts/redaction-20-italic.woff2") format("woff2");
|
|
}
|
|
body.dark #lightswitch {
|
|
color: #fff;
|
|
}
|
|
|
|
#lightswitch:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.hover-link {
|
|
text-decoration: none;
|
|
}
|
|
|
|
.hover-link:hover {
|
|
text-decoration: underline;
|
|
}
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<div id="dappled-light">
|
|
|
|
<div id="glow"></div>
|
|
<div id="glow-bounce"></div>
|
|
<div class="perspective">
|
|
<div id="leaves">
|
|
<svg style="width: 0; height: 0; position: absolute;">
|
|
<defs>
|
|
<filter id="wind" x="-20%" y="-20%" width="140%" height="140%">
|
|
<feTurbulence type="fractalNoise" numOctaves="2" seed="1">
|
|
<animate attributeName="baseFrequency" dur="16s" keyTimes="0;0.33;0.66;1"
|
|
values="0.005 0.003;0.01 0.009;0.008 0.004;0.005 0.003" repeatCount="indefinite" />
|
|
</feTurbulence>
|
|
<feDisplacementMap in="SourceGraphic">
|
|
<animate attributeName="scale" dur="20s" keyTimes="0;0.25;0.5;0.75;1" values="45;55;75;55;45"
|
|
repeatCount="indefinite" />
|
|
</feDisplacementMap>
|
|
</filter>
|
|
</defs>
|
|
</svg>
|
|
</div>
|
|
<div id="blinds">
|
|
<div class="shutters">
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
<div class="shutter"></div>
|
|
</div>
|
|
<div class="vertical">
|
|
<div class="bar"></div>
|
|
<div class="bar"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="progressive-blur">
|
|
<div></div>
|
|
<div></div>
|
|
<div></div>
|
|
<div></div>
|
|
</div>
|
|
</div>
|
|
<article style="font-family: 'Redaction';">
|
|
<h1 style="font-family: 'Redaction 20'; font-style: italic; font-size: 3.8rem;">matrix.functor.systems</h1>
|
|
<p style="font-size: 1.5rem;">
|
|
A <a href="https://matrix.org">matrix</a> homeserver operated by <a href="/">functor.systems</a>.
|
|
</p>
|
|
<p style="font-size: 1.5rem; margin-top: 1em; margin-bottom: 1em;">
|
|
Matrix is an open, federated, and end-to-end encrypted messaging protocol.
|
|
<span style="font-style: italic;">matrix.functor.systems</span> is our very
|
|
own homeserver, running the <a
|
|
href="https://github.com/matrix-construct/tuwunel">tuwunel</a> Matrix
|
|
server implementation.
|
|
</p>
|
|
<p style="font-size: 1.5rem; margin-top: 1em; margin-bottom: 1em;">
|
|
Registration is currently restricted to friends of the functor.systems
|
|
community. However, you can make an account on any other Matrix homeserver,
|
|
and interact with any account on matrix.functor.systems without any
|
|
downside. This is what is meant when we say Matrix is <em>federated</em>.
|
|
The official <a href="https://element.io/">matrix.org</a> free public homeserver is
|
|
a good place to make your first account.
|
|
</p>
|
|
<a style="font-size: 1.2rem;" class="hover-link" href="https://matrix.to/#/#vect:functor.systems">[register for an account]</a>
|
|
<a style="font-size: 1.2rem; margin-left: 20px;" class="hover-link" href="/">[functor.systems]</a>
|
|
<button
|
|
id="lightswitch"
|
|
style="
|
|
border: 1px solid #ccc;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-size: 1.2rem;
|
|
background: none;
|
|
border: none;
|
|
padding: 0px 0px 0px 0px;
|
|
font-family: 'Redaction';
|
|
margin-left: 20px;
|
|
"
|
|
></button>
|
|
</article>
|
|
<script>
|
|
function toggle() {
|
|
const isCurrentlyDark = document.body.classList.contains('dark');
|
|
applyTheme(!isCurrentlyDark);
|
|
}
|
|
|
|
document.addEventListener('keydown', function(event) {
|
|
if (event.keyCode === 32) {
|
|
toggle();
|
|
}
|
|
});
|
|
|
|
const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
const btn = document.getElementById('lightswitch');
|
|
|
|
const applyTheme = isDark => {
|
|
document.body.classList.add('animation-ready');
|
|
if (isDark) {
|
|
document.body.classList.add('dark');
|
|
} else {
|
|
document.body.classList.remove('dark');
|
|
}
|
|
btn.textContent = isDark
|
|
? '[lights on]'
|
|
: '[lights out]';
|
|
};
|
|
|
|
applyTheme(darkQuery.matches);
|
|
|
|
darkQuery.addEventListener('change', e => {
|
|
applyTheme(e.matches);
|
|
});
|
|
|
|
btn.addEventListener('click', () => {
|
|
const isCurrentlyDark = document.body.classList.contains('dark');
|
|
applyTheme(!isCurrentlyDark);
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|