Initial commit

This commit is contained in:
nke4 committed 2026-10-23 18:54:25 +02:00
commit 7b51551856
27 files changed
+911

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
// light follows the cursor across a card's glass
document.querySelectorAll('.shard').forEach(el=>{
el.addEventListener('pointermove',e=>{
const r=el.getBoundingClientRect();
el.style.setProperty('--mx',(e.clientX-r.left)+'px');
el.style.setProperty('--my',(e.clientY-r.top)+'px');
});
el.addEventListener('pointerleave',()=>{el.style.removeProperty('--mx');el.style.removeProperty('--my')});
});
+27
View File
@@ -0,0 +1,27 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 900" preserveAspectRatio="xMidYMid slice">
<style>
.c{fill:none;stroke:#9fd8ff;stroke-width:1;stroke-linejoin:bevel;stroke-dasharray:1400;stroke-dashoffset:1400;animation:d 1.6s cubic-bezier(.2,.7,.2,1) forwards}
.t{stroke-width:.6;opacity:.6;animation-delay:.35s}
@keyframes d{to{stroke-dashoffset:0}}
@media (prefers-reduced-motion:reduce){.c{animation:none;stroke-dashoffset:0}}
</style>
<g opacity=".16">
<polygon points="1160,290 1600,0 1600,180 1380,330" fill="#8fd3ff" opacity=".35"/>
<polygon points="1160,290 1380,330 1520,640 1210,560" fill="#ff4f8b" opacity=".18"/>
<polygon points="1160,290 960,520 700,900 1210,900 1210,560" fill="#8fd3ff" opacity=".15"/>
<polygon points="1160,290 760,60 900,0 1190,0" fill="#ff4f8b" opacity=".14"/>
</g>
<g opacity=".34">
<polyline class="c" points="1160,290 1010,180 880,150 700,0"/>
<polyline class="c" points="1160,290 1290,190 1370,90 1450,0"/>
<polyline class="c" points="1160,290 1380,330 1500,300 1600,340"/>
<polyline class="c" points="1160,290 1210,560 1190,700 1260,900"/>
<polyline class="c" points="1160,290 960,520 820,560 520,900"/>
<polyline class="c" points="1160,290 1100,380 900,350 640,420 0,380"/>
<polyline class="c" points="1380,330 1520,640 1600,700"/>
<polyline class="c t" points="1010,180 1100,380 1210,560"/>
<polyline class="c t" points="1290,190 1380,330 1210,560"/>
<polyline class="c t" points="880,150 900,350 960,520"/>
<polyline class="c t" points="1160,290 1245,235 1290,190"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+92
View File
@@ -0,0 +1,92 @@
:root{
--bg:#0a1119;
--glass:#121d29;
--edge:#27384a;
--ink:#dfe7ee;
--dim:#8497a9;
--ice:#8fd3ff;
--hot:#ff4f8b;
--display:"Bahnschrift","Oswald","Arial Narrow","Roboto Condensed",sans-serif;
--body:"Segoe UI Variable Text","Segoe UI","Helvetica Neue",Arial,sans-serif;
--mono:ui-monospace,"Cascadia Mono","JetBrains Mono",Consolas,monospace;
}
*{box-sizing:border-box;margin:0}
html{background:var(--bg);color-scheme:dark}
body{
min-height:100vh;font:400 1rem/1.55 var(--body);color:var(--ink);
background:
linear-gradient(115deg,transparent 0 62%,rgba(143,211,255,.045) 62% 63%,transparent 63%),
url(/assets/shatter.svg) center/cover no-repeat fixed,
radial-gradient(120% 80% at 85% 20%,#13263a 0,var(--bg) 60%);
}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--ice);outline-offset:3px}
/* top bar */
.bar{
position:sticky;top:0;z-index:5;display:flex;align-items:stretch;gap:2px;
padding:0 clamp(1rem,4vw,3rem);height:3.4rem;
background:rgba(10,17,25,.78);backdrop-filter:blur(10px);
border-bottom:1px solid var(--edge);
}
.brand{
display:flex;align-items:center;margin-right:auto;
font:700 1.35rem/1 var(--display);letter-spacing:.04em;
}
.brand i{font-style:normal;color:var(--hot);margin:0 .08em}
.bar nav{display:flex;gap:2px}
.bar nav a{
display:flex;align-items:center;padding:0 1.5rem;color:var(--dim);
font:500 1rem var(--display);letter-spacing:.06em;
clip-path:polygon(14px 0,100% 0,calc(100% - 14px) 100%,0 100%);
transition:background .15s,color .15s;
}
.bar nav a:hover{color:var(--ink);background:rgba(143,211,255,.08)}
.bar nav a[aria-current]{color:var(--bg);background:var(--ice)}
@media(max-width:640px){.bar nav a{padding:0 .8rem}.brand{font-size:1.1rem}}
/* page frame */
main{max-width:1080px;margin:0 auto;padding:clamp(2rem,6vw,4.5rem) clamp(1rem,4vw,2rem) 6rem}
.title{font:700 clamp(2.6rem,7vw,4.6rem)/.95 var(--display);letter-spacing:.01em;margin-bottom:.9rem}
.lede{max-width:46ch;color:var(--dim)}
/* home */
.home{display:grid;place-items:center;min-height:calc(100vh - 3.4rem)}
.home p{font:400 .95rem var(--mono);color:var(--dim)}
.home p::after{content:"";display:inline-block;width:.6ch;height:1.1em;margin-left:.5ch;vertical-align:-.2em;background:var(--ice);animation:blink 1.1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
/* services */
.group{margin-top:3.5rem}
.group h2{font:600 1.5rem var(--display);letter-spacing:.03em;display:flex;align-items:baseline;gap:1rem;margin-bottom:1.3rem}
.group h2 small{font:400 .9rem var(--body);color:var(--dim);letter-spacing:0}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1.1rem}
@media(min-width:700px){.grid>:nth-child(3n+2){margin-top:1.4rem}.grid>:nth-child(3n){margin-top:.5rem}}
.shard{
--a:16px;--b:30px;--c:22px;--line:var(--edge);--glint:rgba(143,211,255,.22);
--cut:polygon(0 var(--a),var(--b) 0,100% 0,100% calc(100% - var(--c)),calc(100% - var(--b)) 100%,0 100%);
position:relative;display:flex;flex-direction:column;gap:.35rem;min-height:9.5rem;
padding:1.4rem 1.3rem 1.2rem;background:var(--line);clip-path:var(--cut);
transition:transform .18s ease,background .18s;
}
.shard::before{
content:"";position:absolute;inset:1px;z-index:0;clip-path:var(--cut);
background:
radial-gradient(220px circle at var(--mx,-50%) var(--my,-50%),var(--glint),transparent 70%),
linear-gradient(160deg,rgba(255,255,255,.05),transparent 40%),var(--glass);
}
.shard>*{position:relative;z-index:1}
.shard:nth-child(3n+2){--a:26px;--b:14px;--c:34px}
.shard:nth-child(3n){--a:10px;--b:40px;--c:14px}
.shard:nth-child(5n){--a:34px;--b:22px;--c:18px}
.shard:hover,.shard:focus-visible{--line:var(--ice);transform:translate(-3px,-3px)}
.shard h3{font:600 1.45rem/1.1 var(--display);letter-spacing:.02em}
.shard p{color:var(--dim);font-size:.92rem;max-width:30ch}
.host{margin-top:auto;padding-top:.8rem;font:400 .8rem var(--mono);color:var(--ice)}
.admin{--glint:rgba(255,79,139,.22)}
.admin:hover,.admin:focus-visible{--line:var(--hot)}
.admin .host{color:var(--hot)}
.badge{align-self:flex-start;margin-bottom:.3rem;padding:.1rem .6rem .1rem .5rem;font:500 .78rem var(--body);color:var(--bg);background:var(--hot);clip-path:polygon(0 0,100% 0,calc(100% - 7px) 100%,0 100%)}
.heart{color:var(--hot)}
@media(prefers-reduced-motion:reduce){.shard{transition:none}.home p::after{animation:none}}