added cybersigilism

This commit is contained in:
2026-05-16 05:24:15 +02:00
parent 0bd63433c2
commit 0ade5a7e37
2 changed files with 589 additions and 1 deletions
@@ -99,8 +99,9 @@ export default function Settings() {
<option value="salon-noir">Salon Noir (black gallery wall)</option>
<option value="gothic">Gothic (cathedral nightfall)</option>
<option value="breakcore">Breakcore (Y2K rot + neon glitch)</option>
<option value="cybersigil">Cybersigil (dark frostbite + glitch)</option>
</select>
<p className="text-[10px] font-display italic text-[var(--subtext0)] mt-2 tracking-wider">Salon trio tuned for the gallery aesthetic. Breakcore swaps that for early-2000s web rot hot magenta on CRT violet, acid green, scanline noise.</p>
<p className="text-[10px] font-display italic text-[var(--subtext0)] mt-2 tracking-wider">Salon trio tuned for the gallery aesthetic. Breakcore swaps that for early-2000s web rot hot magenta on CRT violet, acid green, scanline noise. Cybersigil is the moody cut near-black ground, ice-cyan barbed sigil linework, bruised-magenta on contact, lingering chromatic glitch.</p>
</div>
<div>
<label className="field-label">Custom CSS</label>
+587
View File
@@ -165,6 +165,39 @@
--rosewater: #F0DDE8;
}
/* CYBERSIGIL — Frostbite. Near-black ground, ice-cyan sigil linework,
* bruised-magenta primary accent, sterile bone-white text. Modern-breakcore
* melancholy: chromatic-aberration glitch, barbed sigil ornament, deep
* vignette + fine cold grain. Primary accent: bruised magenta (--mauve). */
.cybersigil {
--crust: #020203;
--mantle: #050507;
--base: #070709;
--surface0: #0C0D11;
--surface1: #13151B;
--surface2: #1E2129;
--overlay0: #2A2F3A;
--overlay1: #3D4654;
--overlay2: #566174;
--text: #DCE6EC; /* sterile bone-white, cool cast */
--subtext0: #7E8B99;
--subtext1: #AAB8C4;
--blue: #3FB4FF; /* cold electric */
--lavender: #8E7CFF; /* cold violet */
--sapphire: #3A5BFF; /* deep cold hyperlink */
--sky: #4FE9FF; /* ice-cyan — primary sigil line */
--teal: #2FD8D2; /* frost mint — secondary neon */
--green: #5BE0A8; /* cold jade */
--yellow: #E8C24A; /* muted amber — inline code only */
--peach: #E07A5F;
--maroon: #5A1530;
--red: #FF3B5C; /* siren — danger only */
--mauve: #C8327A; /* bruised magenta — primary accent */
--pink: #E86AAE; /* faded neon pink */
--flamingo: #E8A0C4;
--rosewater: #EAF2F6; /* brightest bone — on-accent text */
}
html {
font-family: var(--font-sans);
font-feature-settings: "kern", "liga", "calt", "onum";
@@ -1839,6 +1872,560 @@ input[type="date"] { color-scheme: light; }
color: var(--red);
}
/* ═══════════════════════════════════════════════════════════════════════
* CYBERSIGIL — Frostbite layer.
* Scoped to `.cybersigil`; salon / salon-noir / gothic / breakcore untouched.
* Aesthetic: modern-breakcore melancholy. Editorial serif body in tension
* with cold-mono sigil chrome — thin barbed vector linework, ice-cyan rest
* state, bruised-magenta on contact, RGB chromatic split that lingers
* (slower + sadder than breakcore's snap). Every control is a visible neon
* affordance — no bare text. Motion is reactive only; killed by
* prefers-reduced-motion at the very end of this file.
* ═══════════════════════════════════════════════════════════════════════ */
/* Deep tube vignette — blacker, tighter than breakcore. */
.cybersigil body::before {
background-image: radial-gradient(
ellipse at center,
transparent 40%,
color-mix(in srgb, var(--crust) 92%, transparent) 100%
);
}
/* Fine cold grain + tight scanlines. Lower opacity than breakcore, blue-
* shifted — atmospheric, not blown out. */
.cybersigil body::after,
html.cybersigil body::after {
opacity: 0.4;
background-image:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='1.4' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.31 0 0 0 0 0.91 0 0 0 0 1 0 0 0 0.4 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>"),
repeating-linear-gradient(
0deg,
rgba(0, 0, 0, 0) 0,
rgba(0, 0, 0, 0) 2px,
rgba(0, 0, 0, 0.34) 3px,
rgba(0, 0, 0, 0) 4px
);
mix-blend-mode: screen;
}
/* Glow pools — ice-cyan + bruised magenta, large + faint. Moody, not lit. */
.cybersigil .salon-atmosphere::before {
background: var(--sky);
opacity: 0.07;
}
.cybersigil .salon-atmosphere::after {
background: var(--mauve);
opacity: 0.06;
}
/* Selection — magenta block, bone text, cyan bleed. */
.cybersigil ::selection {
background: var(--mauve);
color: var(--rosewater);
text-shadow: 0 0 6px var(--sky);
}
/* Static chromatic aberration on display heads + nameplate (resting state). */
.cybersigil .prose h1,
.cybersigil .prose h2,
.cybersigil h1.font-display,
.cybersigil .nameplate-title {
text-shadow:
-1px 0 0 color-mix(in srgb, var(--sky) 72%, transparent),
1px 0 0 color-mix(in srgb, var(--mauve) 72%, transparent),
0 0 22px color-mix(in srgb, var(--sky) 28%, transparent);
}
/* Nameplate underline → ice rule, hard magenta offset + cyan bloom. */
.cybersigil .nameplate::after {
height: 2px;
bottom: -7px;
background: var(--sky);
box-shadow:
2px 2px 0 var(--mauve),
0 0 12px color-mix(in srgb, var(--sky) 70%, transparent);
}
@keyframes cs-shear {
0% { clip-path: inset(0 0 0 0); transform: translateX(0);
text-shadow: -1px 0 0 var(--sky), 1px 0 0 var(--mauve); }
22% { clip-path: inset(14% 0 58% 0); transform: translateX(-6px);
text-shadow: -6px 0 0 var(--sky), 6px 0 0 var(--mauve); }
45% { clip-path: inset(60% 0 12% 0); transform: translateX(5px);
text-shadow: 5px 0 0 var(--teal), -5px 0 0 var(--mauve); }
68% { clip-path: inset(28% 0 44% 0); transform: translateX(-3px);
text-shadow: -3px 0 0 var(--mauve), 3px 0 0 var(--sky); }
100% { clip-path: inset(0 0 0 0); transform: translateX(0);
text-shadow: -1px 0 0 var(--sky), 1px 0 0 var(--mauve); }
}
.cybersigil .nameplate:hover .nameplate-title {
animation: cs-shear 320ms steps(4, jump-none) 1;
}
/* Display heads — slow melancholic glitch-in on load (sadder than the
* breakcore snap; longer settle, deeper offsets). */
@keyframes cs-load-glitch {
0% { opacity: 0; clip-path: inset(48% 0 48% 0); transform: translateX(-12px); }
18% { opacity: 1; clip-path: inset(6% 0 74% 0); transform: translateX(9px); }
38% { clip-path: inset(70% 0 6% 0); transform: translateX(-6px); }
58% { clip-path: inset(22% 0 40% 0); transform: translateX(4px); }
78% { clip-path: inset(4% 0 86% 0); transform: translateX(-2px); }
100% { opacity: 1; clip-path: none; transform: translateX(0); }
}
.cybersigil .prose h1,
.cybersigil h1.font-display {
animation: cs-load-glitch 620ms steps(5, jump-none) backwards;
}
/* Plate — dark glass card, ice frame, barbed sigil corner-brackets. The
* brackets are the theme signature: thin angular vector marks that ignite
* magenta on contact. */
.cybersigil .plate {
position: relative;
background: var(--surface0);
box-shadow:
inset 0 0 0 1px color-mix(in srgb, var(--sky) 26%, transparent),
0 0 0 1px color-mix(in srgb, var(--sky) 14%, transparent),
0 22px 44px -28px rgba(79, 233, 255, 0.28),
0 0 26px -10px color-mix(in srgb, var(--mauve) 36%, transparent);
}
.cybersigil .plate::before,
.cybersigil .plate::after {
content: "";
position: absolute;
width: 26px;
height: 26px;
border: 1.5px solid color-mix(in srgb, var(--sky) 70%, transparent);
filter: drop-shadow(0 0 4px color-mix(in srgb, var(--sky) 45%, transparent));
pointer-events: none;
transition: border-color 0.18s ease, filter 0.18s ease;
}
.cybersigil .plate::before {
top: -1px;
left: -1px;
border-right: 0;
border-bottom: 0;
clip-path: polygon(0 0, 100% 0, 100% 20%, 32% 20%, 32% 100%, 0 100%);
}
.cybersigil .plate::after {
right: -1px;
bottom: -1px;
border-left: 0;
border-top: 0;
clip-path: polygon(100% 0, 100% 100%, 0 100%, 0 80%, 68% 80%, 68% 0);
}
.cybersigil .plate:hover {
transform: translateY(-3px);
box-shadow:
inset 0 0 0 1px color-mix(in srgb, var(--mauve) 40%, transparent),
0 0 0 1px color-mix(in srgb, var(--mauve) 26%, transparent),
0 32px 60px -28px rgba(200, 50, 122, 0.42),
0 0 34px -8px color-mix(in srgb, var(--mauve) 48%, transparent);
}
.cybersigil .plate:hover::before,
.cybersigil .plate:hover::after {
border-color: var(--mauve);
filter: drop-shadow(0 0 7px color-mix(in srgb, var(--mauve) 60%, transparent));
}
.cybersigil .plate:focus-visible {
box-shadow:
inset 0 0 0 2px var(--sky),
0 0 0 2px var(--mauve),
0 0 30px -6px color-mix(in srgb, var(--sky) 60%, transparent);
}
.cybersigil .plate:hover .plate-caption-title {
text-shadow: -1px 0 0 var(--sky), 1px 0 0 var(--mauve);
}
.cybersigil .plate-image {
background: var(--mantle);
}
.cybersigil .plate:hover .plate-image img {
filter:
drop-shadow(-3px 0 0 color-mix(in srgb, var(--mauve) 70%, transparent))
drop-shadow(3px 0 0 color-mix(in srgb, var(--sky) 70%, transparent))
saturate(0.92) contrast(1.05) brightness(0.96);
}
.cybersigil .plate .plate-image::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
opacity: 0;
transform: translateY(-110%);
mix-blend-mode: screen;
background: linear-gradient(
180deg,
transparent 0%,
color-mix(in srgb, var(--sky) 24%, transparent) 46%,
color-mix(in srgb, var(--mauve) 64%, transparent) 49%,
color-mix(in srgb, var(--sky) 40%, transparent) 51%,
color-mix(in srgb, var(--sky) 22%, transparent) 54%,
transparent 100%
);
}
@keyframes cs-scan {
0% { transform: translateY(-110%); opacity: 0; }
14% { opacity: 1; }
86% { opacity: 1; }
100% { transform: translateY(110%); opacity: 0; }
}
.cybersigil .plate:hover .plate-image::after,
.cybersigil .plate:focus-visible .plate-image::after {
animation: cs-scan 0.78s cubic-bezier(0.4, 0, 0.2, 1) 1;
}
.cybersigil .prose figure img,
.cybersigil .prose img {
background:
linear-gradient(var(--surface0), var(--surface0)) padding-box,
linear-gradient(135deg, color-mix(in srgb, var(--sky) 40%, var(--surface2)), color-mix(in srgb, var(--mauve) 40%, var(--surface1))) border-box;
}
/* Section rule — masked barbed sigil glyph between cyan→magenta filaments. */
.cybersigil .section-rule {
color: var(--sky);
font-family: var(--font-mono);
font-style: normal;
font-size: 0.76rem;
text-transform: uppercase;
letter-spacing: 0.24em;
}
.cybersigil .section-rule::before,
.cybersigil .section-rule::after {
height: 1px;
opacity: 0.9;
background: linear-gradient(
to right,
transparent,
color-mix(in srgb, var(--sky) 75%, transparent) 45%,
color-mix(in srgb, var(--mauve) 75%, transparent) 55%,
transparent
);
}
.cybersigil .section-rule .ornament {
color: transparent;
width: 1.1em;
height: 1.1em;
background-color: var(--sky);
-webkit-mask: var(--cs-sigil) center / contain no-repeat;
mask: var(--cs-sigil) center / contain no-repeat;
filter: drop-shadow(0 0 5px color-mix(in srgb, var(--sky) 60%, transparent));
}
.cybersigil {
--cs-sigil: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='1.5' stroke-linecap='round'><path d='M12 1 L12 23 M12 1 L9 4 M12 1 L15 4 M12 7 L7 10 M12 7 L17 10 M12 13 L8.5 16 M12 13 L15.5 16'/></svg>");
}
/* Readability — lift dim-on-near-black copy spots to the subtext ramp. */
.cybersigil .prose h6,
.cybersigil .prose del,
.cybersigil .hljs-comment,
.cybersigil .hljs-quote,
.cybersigil .site-copyright,
.cybersigil .slug-hint {
color: var(--subtext0);
}
/* Chips — thin ice outline, mono caps. */
.cybersigil .chip {
background: transparent;
border-color: color-mix(in srgb, var(--sky) 55%, transparent);
color: var(--sky);
font-family: var(--font-mono);
font-style: normal;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.1em;
border-radius: 0;
}
.cybersigil .chip-accent {
background: var(--mauve);
color: var(--rosewater);
border-color: var(--mauve);
}
.cybersigil .chip-draft {
background: transparent;
border-color: color-mix(in srgb, var(--green) 60%, transparent);
color: var(--green);
}
.cybersigil .plate-caption-meta {
font-family: var(--font-mono);
letter-spacing: 0.16em;
}
.cybersigil .plate-caption-sep {
color: var(--sky);
opacity: 1;
}
/* Buttons & inputs — square, hard offset, ice→magenta neon. */
.cybersigil .btn,
.cybersigil .field-input,
.cybersigil .topbar-control,
.cybersigil .topbar-control kbd { border-radius: 0; }
.cybersigil .btn--primary {
color: var(--rosewater);
border-color: var(--mauve);
box-shadow: 3px 3px 0 0 var(--sky);
}
.cybersigil .btn--primary:hover {
background: var(--sky);
border-color: var(--sky);
color: var(--crust);
box-shadow: 3px 3px 0 0 var(--mauve);
}
.cybersigil .btn--primary:active {
transform: translate(2px, 2px);
box-shadow: 1px 1px 0 0 var(--mauve);
}
.cybersigil .btn--danger {
box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--red) 60%, var(--crust));
}
.cybersigil .btn--danger:hover {
box-shadow: 3px 3px 0 0 var(--mauve);
}
.cybersigil .btn--danger:active {
transform: translate(2px, 2px);
box-shadow: 1px 1px 0 0 var(--mauve);
}
.cybersigil .btn:focus-visible {
border-color: var(--sky);
box-shadow: 0 0 0 2px var(--sky);
}
.cybersigil .field-input:focus {
border-color: var(--sky);
background: color-mix(in srgb, var(--surface0) 85%, var(--sky) 8%);
box-shadow: 0 0 0 2px color-mix(in srgb, var(--sky) 35%, transparent);
}
.cybersigil .btn--ghost {
color: var(--sky);
border-color: color-mix(in srgb, var(--sky) 55%, transparent);
background: color-mix(in srgb, var(--surface0) 60%, transparent);
box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--sky) 32%, var(--crust));
}
.cybersigil .btn--ghost:hover {
color: var(--crust);
background: var(--sky);
border-color: var(--sky);
box-shadow: 3px 3px 0 0 var(--mauve);
}
.cybersigil .btn--ghost:active {
transform: translate(2px, 2px);
box-shadow: 1px 1px 0 0 var(--mauve);
}
/* Back-link → sigil-marked neon return tab. */
.cybersigil .back-link {
display: inline-flex;
align-items: center;
gap: 0.5em;
font-family: var(--font-mono);
font-style: normal;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.16em;
color: var(--sky);
padding: 7px 13px;
background: color-mix(in srgb, var(--crust) 70%, transparent);
border: 1px solid var(--mauve);
box-shadow: 3px 3px 0 0 var(--mauve);
text-shadow: 0 0 6px color-mix(in srgb, var(--sky) 50%, transparent);
}
.cybersigil .back-link::before {
content: "";
width: 0.95em;
height: 0.95em;
flex: none;
background-color: currentColor;
-webkit-mask: var(--cs-sigil) center / contain no-repeat;
mask: var(--cs-sigil) center / contain no-repeat;
transform: rotate(-90deg);
}
.cybersigil .back-link:hover,
.cybersigil .back-link:focus-visible {
color: var(--crust);
background: var(--sky);
border-color: var(--sky);
box-shadow: 3px 3px 0 0 var(--mauve);
text-shadow: none;
}
.cybersigil .back-link:active {
transform: translate(3px, 3px);
box-shadow: 0 0 0 0 var(--mauve);
}
/* Top-bar chrome — cold mono caps, hard offset. */
.cybersigil .topbar-control {
font-family: var(--font-mono);
font-style: normal;
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--sky);
background: color-mix(in srgb, var(--crust) 60%, transparent);
border-color: color-mix(in srgb, var(--sky) 50%, transparent);
}
.cybersigil .topbar-control:hover {
color: var(--crust);
background: var(--mauve);
border-color: var(--mauve);
box-shadow: 2px 2px 0 0 var(--sky);
}
.cybersigil .topbar-control:focus-visible {
border-color: var(--sky);
box-shadow: 0 0 0 2px var(--sky);
}
.cybersigil .topbar-control--danger:hover {
background: var(--red);
border-color: var(--red);
color: var(--rosewater);
box-shadow: 2px 2px 0 0 var(--mauve);
}
.cybersigil .topbar-divider {
width: 2px;
background: repeating-linear-gradient(
180deg,
var(--sky) 0 3px,
transparent 3px 5px,
var(--mauve) 5px 8px,
transparent 8px 10px
);
}
/* Post prev/next — neon offset panels + cyan eyebrow. */
.cybersigil .post-nav a { transition: box-shadow 0.15s ease, border-color 0.15s ease; }
.cybersigil .post-nav a:hover {
border-color: var(--mauve);
box-shadow:
inset 0 0 0 1px color-mix(in srgb, var(--mauve) 40%, transparent),
4px 4px 0 0 var(--mauve);
}
.cybersigil .post-nav .pn-eyebrow {
color: var(--sky);
font-family: var(--font-mono);
letter-spacing: 0.18em;
text-shadow: 0 0 6px color-mix(in srgb, var(--sky) 45%, transparent);
}
/* Prose / code — cold terminal, amber inline, magenta quote, barbed rule. */
.cybersigil .prose pre {
color: var(--sky);
background-color: color-mix(in srgb, var(--crust) 88%, transparent);
background-image: repeating-linear-gradient(
0deg,
rgba(0, 0, 0, 0) 0 2px,
color-mix(in srgb, var(--sky) 8%, transparent) 2px 3px,
rgba(0, 0, 0, 0) 3px 4px
);
border-color: var(--mauve);
border-left-color: var(--sky);
box-shadow:
0 0 0 1px color-mix(in srgb, var(--sky) 24%, transparent),
4px 4px 0 0 color-mix(in srgb, var(--mauve) 32%, var(--crust));
}
.cybersigil .prose pre code { color: inherit; }
.cybersigil .prose :not(pre) code {
color: var(--yellow);
background: color-mix(in srgb, var(--yellow) 12%, transparent);
border-bottom-color: color-mix(in srgb, var(--yellow) 55%, transparent);
}
.cybersigil .prose blockquote {
border-left-color: var(--mauve);
background: color-mix(in srgb, var(--mauve) 8%, transparent);
box-shadow: -3px 0 16px -5px color-mix(in srgb, var(--mauve) 55%, transparent);
padding: 0.5rem 0 0.5rem 1.4rem;
}
.cybersigil .prose hr {
height: 3px;
opacity: 0.9;
background: repeating-linear-gradient(
90deg,
var(--sky) 0 12px,
var(--mauve) 12px 24px
);
box-shadow: 0 0 12px color-mix(in srgb, var(--sky) 42%, transparent);
}
.cybersigil .prose hr::before {
background: var(--sky);
box-shadow: 0 0 8px var(--sky);
}
.cybersigil .prose h3 { color: var(--pink); }
.cybersigil .prose h4 { color: var(--teal); }
.cybersigil .prose h5 { color: var(--green); font-family: var(--font-mono); }
.cybersigil .prose a {
text-decoration-color: color-mix(in srgb, var(--sky) 55%, transparent);
}
.cybersigil .prose a:hover {
color: var(--mauve);
text-decoration-color: var(--mauve);
}
/* Scrollbar + caret — full-immersion cold chrome. */
.cybersigil {
scrollbar-color: var(--sky) var(--crust);
caret-color: var(--mauve);
}
.cybersigil ::-webkit-scrollbar { width: 11px; height: 11px; }
.cybersigil ::-webkit-scrollbar-track { background: var(--crust); }
.cybersigil ::-webkit-scrollbar-thumb {
background: var(--sky);
border: 2px solid var(--crust);
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mauve) 55%, transparent);
}
.cybersigil ::-webkit-scrollbar-thumb:hover { background: var(--mauve); }
.cybersigil ::-webkit-scrollbar-corner { background: var(--crust); }
/* Reading progress — ice scan with cold bloom. */
.cybersigil .reading-progress {
background: var(--sky);
box-shadow: 0 0 8px var(--sky), 0 0 3px var(--mauve);
}
/* Glass / tooltip / catalogue tag — cold neon parity with breakcore. */
.cybersigil .glass {
background-color: color-mix(in srgb, var(--surface0) 72%, transparent);
border-color: color-mix(in srgb, var(--sky) 42%, var(--surface2));
box-shadow:
inset 0 0 0 1px color-mix(in srgb, var(--sky) 22%, transparent),
0 0 0 1px color-mix(in srgb, var(--mauve) 14%, transparent),
0 14px 40px -24px rgba(0, 0, 0, 0.92);
}
.cybersigil .plate-tag-mini {
background: var(--crust);
color: var(--sky);
border: 1px solid var(--mauve);
border-radius: 0;
font-family: var(--font-mono);
font-weight: 500;
}
.cybersigil .kbd-tip {
background: var(--crust);
border-color: var(--mauve);
border-radius: 0;
color: var(--sky);
box-shadow: 2px 2px 0 var(--mauve);
}
.cybersigil .kbd-tip kbd {
color: var(--rosewater);
background: var(--surface0);
border-color: var(--mauve);
border-radius: 0;
}
.cybersigil input[type="date"] { color-scheme: dark; }
/* Confirm dialog — hard edge, ice→magenta cap, chromatic title. */
.cybersigil .cdialog-panel {
border-radius: 0;
padding-top: 1.85rem;
}
.cybersigil .cdialog-panel::before {
content: "";
position: absolute;
inset: 0 0 auto 0;
height: 2px;
background: linear-gradient(90deg, var(--sky), var(--mauve));
}
.cybersigil .cdialog-title {
text-shadow: -1px 0 0 var(--sky), 1px 0 0 var(--mauve);
}
/* ═══ Reduced motion — universal kill-switch. Final word in the file so it
* overrides every animation/transition above, all themes. Content still
* resolves to its final state (forwards-filled keyframes complete). ═══ */