Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 04733eb00a | |||
| dc8e3d55b1 |
@@ -18,6 +18,8 @@
|
||||
<i class="cs-fx-corner cs-fx-corner--tr"></i>
|
||||
<i class="cs-fx-corner cs-fx-corner--bl"></i>
|
||||
<i class="cs-fx-corner cs-fx-corner--br"></i>
|
||||
<i class="cs-fx-edge cs-fx-edge--l"></i>
|
||||
<i class="cs-fx-edge cs-fx-edge--r"></i>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
@@ -42,6 +44,17 @@
|
||||
});
|
||||
}
|
||||
|
||||
/* ─── Tall sigil vines pinned to the left/right screen edges ─── */
|
||||
/* Each edge gets its own growth (more organic than a shared one);
|
||||
* CSS pins the spine to the edge and clips the outer half so it
|
||||
* reads as an inward-creeping border vine. */
|
||||
const edges = document.querySelectorAll<HTMLElement>('.cs-fx-edge');
|
||||
edges.forEach((e) => {
|
||||
if (e.classList.contains('cs-fx-edge--sig')) return;
|
||||
e.innerHTML = buildCybersigil({ count: 8 });
|
||||
e.classList.add('cs-fx-edge--sig');
|
||||
});
|
||||
|
||||
/* ─── One slow-spinning sigil filling the background ─── */
|
||||
const wire = document.querySelector<HTMLElement>('.cs-fx-wire');
|
||||
if (wire && !wire.classList.contains('cs-fx-wire--sig')) {
|
||||
|
||||
@@ -202,6 +202,8 @@ export default function PostList({ posts: initialPosts, isAdmin = false }: Props
|
||||
<span>{formatYear(post.date)}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<PlateSigil />
|
||||
</a>
|
||||
|
||||
{post.tags && post.tags.length > 0 && (
|
||||
@@ -237,8 +239,6 @@ export default function PostList({ posts: initialPosts, isAdmin = false }: Props
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<PlateSigil />
|
||||
</article>
|
||||
);
|
||||
})}
|
||||
|
||||
@@ -76,7 +76,8 @@ html.cybersigil body::after {
|
||||
.cybersigil .cs-fx-halftone,
|
||||
.cybersigil .cs-fx-wire,
|
||||
.cybersigil .cs-fx-tear,
|
||||
.cybersigil .cs-fx-corner {
|
||||
.cybersigil .cs-fx-corner,
|
||||
.cybersigil .cs-fx-edge {
|
||||
position: fixed;
|
||||
pointer-events: none;
|
||||
}
|
||||
@@ -162,6 +163,35 @@ html.cybersigil body::after {
|
||||
.cybersigil .cs-fx-corner--bl { bottom: 0; left: 0; transform: scaleY(-1); animation-delay: -3.4s; }
|
||||
.cybersigil .cs-fx-corner--br { bottom: 0; right: 0; transform: scale(-1); animation-delay: -5.1s; }
|
||||
|
||||
/* Edge vines — a tall sigil growth pinned to each screen edge, spine on
|
||||
* the edge with its outer half clipped so it creeps inward only. Subtle
|
||||
* ambient opacity; same perpetual carve/wipe as the wire + corners. */
|
||||
.cybersigil .cs-fx-edge {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: clamp(64px, 9vw, 132px);
|
||||
overflow: hidden;
|
||||
opacity: 0.1;
|
||||
}
|
||||
.cybersigil .cs-fx-edge--l { left: 0; }
|
||||
.cybersigil .cs-fx-edge--r { right: 0; transform: scaleX(-1); }
|
||||
.cybersigil .cs-fx-edge .cs-sigil {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: auto;
|
||||
height: 100%;
|
||||
/* spine sits at the SVG's horizontal centre — shift it onto the edge so
|
||||
* only the inward-growing half stays within the clipped box */
|
||||
transform: translateX(-50%);
|
||||
filter: drop-shadow(0 0 5px color-mix(in srgb, var(--sky) 35%, transparent));
|
||||
}
|
||||
.cybersigil .cs-fx-edge .cs-sigil path,
|
||||
.cybersigil .cs-fx-edge .cs-sigil line {
|
||||
animation: cs-redraw 5.5s ease-in-out infinite;
|
||||
animation-delay: calc(var(--i, 0) * -0.34s);
|
||||
}
|
||||
|
||||
/* ─── Generated sigils (cs-sigil markup from lib/cybersigil.ts) ──────────
|
||||
* Inert/hidden everywhere; only cybersigil draws them. Strokes start fully
|
||||
* dashed-out and "carve" in via cs-carve. `forwards` fill means the reduced-
|
||||
@@ -428,14 +458,14 @@ html.cybersigil body::after {
|
||||
stroke: color-mix(in srgb, var(--mauve) 68%, var(--sky));
|
||||
filter: drop-shadow(0 0 4px color-mix(in srgb, var(--mauve) 55%, transparent));
|
||||
}
|
||||
.cybersigil .plate-enter:hover .cs-plate-sig,
|
||||
.cybersigil .plate-enter:focus-within .cs-plate-sig {
|
||||
.cybersigil .plate:hover .cs-plate-sig,
|
||||
.cybersigil .plate:focus-visible .cs-plate-sig {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.cybersigil .plate-enter:hover .cs-plate-sig .cs-sigil path,
|
||||
.cybersigil .plate-enter:hover .cs-plate-sig .cs-sigil line,
|
||||
.cybersigil .plate-enter:focus-within .cs-plate-sig .cs-sigil path,
|
||||
.cybersigil .plate-enter:focus-within .cs-plate-sig .cs-sigil line {
|
||||
.cybersigil .plate:hover .cs-plate-sig .cs-sigil path,
|
||||
.cybersigil .plate:hover .cs-plate-sig .cs-sigil line,
|
||||
.cybersigil .plate:focus-visible .cs-plate-sig .cs-sigil path,
|
||||
.cybersigil .plate:focus-visible .cs-plate-sig .cs-sigil line {
|
||||
animation: cs-carve 600ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
||||
animation-delay: calc(var(--i, 0) * 55ms);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
/* The looping sigils would otherwise collapse to their hidden end-state —
|
||||
* pin them fully drawn instead so they stay visible, just still. */
|
||||
.cybersigil .cs-fx-wire .cs-sigil path,
|
||||
.cybersigil .cs-fx-corner--sig .cs-sigil path {
|
||||
.cybersigil .cs-fx-corner--sig .cs-sigil path,
|
||||
.cybersigil .cs-fx-edge .cs-sigil path {
|
||||
animation: none !important;
|
||||
stroke-dashoffset: 0 !important;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user