~cytrogen/realm

f6d518240097f488822a520c456a3592915b9725 — Cytrogen 5 days ago 97d34cd main
更新联系方式
3 files changed, 168 insertions(+), 4 deletions(-)

M contact.html
M index.html
M realm.css
M contact.html => contact.html +4 -4
@@ 98,8 98,8 @@
		<!-- 无 JS 降级:直接显示联系方式 -->
		<noscript>
			<div class="realm-content">
				<p>电子邮箱:<a href="mailto:boo@cytrogen.icu">boo@cytrogen.icu</a></p>
				<p>长毛象:<a href="https://m.otter.homes/@Cytrogen">@Cytrogen@m.otter.homes</a></p>
				<p>电子邮箱:<a href="mailto:realm@cytrogen.icu">realm@cytrogen.icu</a></p>
				<p>长毛象:<a href="https://gts.cytrogen.icu/@Cytrogen">@Cytrogen@gts.cytrogen.icu</a></p>
				<p>GitHub:<a href="https://github.com/cytrogen">github.com/cytrogen</a></p>
			</div>
		</noscript>


@@ 117,8 117,8 @@
		const result = phone.querySelector('.phone-result');
		const link = phone.querySelector('.phone-result__link');
		const codes = {
			'114': { label: 'boo@cytrogen.icu', href: 'mailto:boo@cytrogen.icu' },
			'520': { label: '@Cytrogen@m.otter.homes', href: 'https://m.otter.homes/@Cytrogen' },
			'114': { label: 'realm@cytrogen.icu', href: 'mailto:realm@cytrogen.icu' },
			'520': { label: '@Cytrogen@gts.cytrogen.icu', href: 'https://gts.cytrogen.icu/@Cytrogen' },
			'404': { label: 'github.com/cytrogen', href: 'https://github.com/cytrogen' },
			'818': { label: '@Cytrogen@pixelfed.feddit.social', href: 'https://pixelfed.feddit.social/Cytrogen' },
			'886': { label: '@Cytrogen@pxlmo.com', href: 'https://pxlmo.com/Cytrogen' },

M index.html => index.html +2 -0
@@ 6,6 6,8 @@
	<title>Realm — cytrogen.icu</title>
	<meta name="description" content="Realm — the visual exploration territory of cytrogen.icu">
	<meta name="theme-color" content="#1a1a2e">
	<link rel="me" href="https://gts.cytrogen.icu/@Cytrogen">
	<link rel="me" href="mailto:realm@cytrogen.icu">
	<link rel="stylesheet" href="realm.css">
</head>
<body>

M realm.css => realm.css +162 -0
@@ 66,6 66,31 @@
	50% { opacity: 0.4; }
}

@keyframes star-twinkle {
	0%, 100% { opacity: 0.3; }
	50% { opacity: 1; }
}

@keyframes leaf-fall {
	0% { transform: translateY(0) rotate(0deg); }
	100% { transform: translateY(550px) rotate(540deg); }
}

@keyframes fog-drift {
	0% { transform: translateX(-80px); }
	100% { transform: translateX(80px); }
}

@keyframes hand-emerge {
	0%   { transform: translateY(40px); opacity: 0; }
	15%  { transform: translateY(28px); opacity: 0.3; }
	35%  { transform: translateY(8px);  opacity: 0.8; }
	50%  { transform: translateY(0);    opacity: 1; }
	70%  { transform: translateY(0);    opacity: 1; }
	85%  { transform: translateY(8px);  opacity: 0.8; }
	100% { transform: translateY(40px); opacity: 0; }
}


/* ================================================================
   RESET


@@ 525,6 550,8 @@
	.fill-board { fill: var(--bg-elevated); }
	.fill-accent-shape { fill: var(--accent); }
	.fill-accent-dim { fill: var(--accent-dim); }
	.fill-fence { fill: oklch(0.30 0.03 280); }
	.fill-zombie { fill: oklch(0.22 0.06 145); }

	/* --- Skull SVG fills --- */
	.fill-skull { fill: oklch(0.25 0.04 280); }


@@ 1402,6 1429,141 @@
		fill: var(--text-secondary);
	}

	/* --- Death / Graveyard scene --- */

	.star-twinkle {
		animation: star-twinkle 3s var(--ease-default) infinite;
	}

	.leaf-anim {
		animation: leaf-fall 10s linear infinite;
		transform-box: fill-box;
		transform-origin: center;
	}

	.fog-anim {
		animation: fog-drift 20s ease-in-out infinite alternate;
	}

	.hand-decor {
		animation: hand-emerge 6s var(--ease-default) infinite;
		transform-box: fill-box;
		transform-origin: center bottom;
	}

	.tombstone-entry {
		cursor: pointer;
		fill: oklch(0.42 0.03 285);
		transition: fill var(--duration-normal) var(--ease-default);
	}

	.tombstone-entry:hover,
	.tombstone-entry:focus-visible {
		fill: var(--accent);
	}

	.tombstone-entry:focus-visible {
		outline: 2px solid var(--accent);
		outline-offset: 2px;
	}

	.adventure-hand {
		opacity: 0;
		transform: translateY(20px);
		transition: opacity var(--duration-slow) var(--ease-out), transform var(--duration-slow) var(--ease-out);
		transform-box: fill-box;
		transform-origin: center bottom;
	}

	#adventure-trigger:target .adventure-hand {
		opacity: 1;
		transform: translateY(0);
	}

	.adventure-speech {
		opacity: 0;
	}

	#adventure-trigger:target .adventure-speech {
		animation: lock-text-appear 3s var(--ease-default) forwards;
	}

	.crow-body {
		transform-box: fill-box;
		transform-origin: center bottom;
	}

	#crow-says:target .crow-body {
		animation: lock-shake 0.6s var(--ease-default);
	}

	.egg-speech {
		opacity: 0;
		transition: opacity var(--duration-normal) var(--ease-default);
	}

	#crow-says:target .egg-speech,
	#pumpkin-cat:target .egg-speech {
		opacity: 1;
	}

	.egg-close {
		cursor: pointer;
	}

	.egg-close text {
		transition: fill var(--duration-fast) var(--ease-default);
	}

	.egg-close:hover text,
	.egg-close:focus-visible text {
		fill: var(--accent);
	}

	.pumpkin-shell {
		transition: fill var(--duration-normal) var(--ease-default);
	}

	#pumpkin-cat:target .pumpkin-shell {
		fill: var(--accent-bright);
	}

	.pumpkin-glow {
		opacity: 0;
		transition: opacity var(--duration-normal) var(--ease-default);
	}

	#pumpkin-cat:target .pumpkin-glow {
		opacity: 1;
		animation: forge-pulse 2s var(--ease-default) infinite;
	}

	@media (prefers-reduced-motion: reduce) {
		.star-twinkle,
		.leaf-anim,
		.fog-anim,
		.hand-decor {
			animation: none;
		}

		.star-twinkle {
			opacity: 0.7;
		}

		#adventure-trigger:target .adventure-speech {
			animation: none;
			opacity: 1;
		}

		#crow-says:target .crow-body {
			animation: none;
		}

		#pumpkin-cat:target .pumpkin-glow {
			animation: none;
		}
	}

	/* --- Responsive scene rules --- */

	@container (max-width: 25rem) {