
			/* Critical CSS — FOUC 抑制用最低限スタイル (issue #64)
			 * build 後に scripts/extract-inline-assets.mjs で外部 CSS 化し、CSP の inline 許可を避ける。 */
			:root {
				--color-bg: #0d1814;
				--color-primary: #c89456;
				--color-text: #ede0c8;
			}
			html, body {
				margin: 0;
				background: #0d1814;
				color: #ede0c8;
				font-family: 'Zen Kaku Gothic New', -apple-system, BlinkMacSystemFont,
					'Segoe UI', 'Hiragino Sans', 'Yu Gothic', system-ui, sans-serif;
			}
			#kalyoke-splash {
				position: fixed;
				inset: 0;
				z-index: 9999;
				display: flex;
				flex-direction: column;
				align-items: center;
				justify-content: center;
				gap: 24px;
				background: #0d1814;
				transition: opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);
			}
			#kalyoke-splash .kalyoke-splash-mark {
				font-family: 'Cormorant Garamond', 'Shippori Mincho', serif;
				font-size: 40px;
				font-style: italic;
				font-weight: 500;
				letter-spacing: 0.06em;
				color: #c89456;
			}
			/* 起動中もマスターがいる (JS より前に出るので、骨格 rig.ts の出力を静的に埋め込んでいる)。
			   2 拍子でボヨンと弾む待機 (ギャラリー #002)。 */
			#kalyoke-splash .kalyoke-splash-master {
				display: block;
				width: 120px;
				height: 120px;
			}
			#kalyoke-splash .kalyoke-splash-master g { transform-box: view-box; }
			#kalyoke-splash .m-squash { transform-origin: 100px 196px; animation: kalyoke-splash-sq 0.6s infinite; }
			#kalyoke-splash .m-hat { transform-origin: 98px 80px; animation: kalyoke-splash-hat 0.6s 0.05s infinite; }
			#kalyoke-splash .m-tie { transform-origin: 100px 164px; animation: kalyoke-splash-tie 0.6s 0.08s infinite; }
			#kalyoke-splash .m-hand-l { transform: translate(28px, 168px); animation: kalyoke-splash-hl 0.6s 0.1s infinite; }
			#kalyoke-splash .m-hand-r { transform: translate(172px, 168px); animation: kalyoke-splash-hr 0.6s 0.1s infinite; }
			@keyframes kalyoke-splash-sq {
				0%, 100% { transform: scale(1.08, 0.9); animation-timing-function: cubic-bezier(0.2, 0.8, 0.4, 1); }
				45% { transform: translateY(-8px) scale(0.95, 1.06); animation-timing-function: cubic-bezier(0.6, 0, 0.8, 0.2); }
			}
			@keyframes kalyoke-splash-hat {
				0%, 100% { transform: translateY(2px); }
				45% { transform: translateY(-3px) rotate(-2deg); }
			}
			@keyframes kalyoke-splash-tie {
				0%, 100% { transform: scale(1.15, 0.85); }
				45% { transform: scale(0.9, 1.1); }
			}
			@keyframes kalyoke-splash-hl {
				0%, 100% { transform: translate(26px, 176px) rotate(-20deg); }
				45% { transform: translate(30px, 154px) rotate(-6deg); }
			}
			@keyframes kalyoke-splash-hr {
				0%, 100% { transform: translate(174px, 176px) rotate(20deg); }
				45% { transform: translate(170px, 154px) rotate(6deg); }
			}
			body.app-ready #kalyoke-splash {
				opacity: 0;
				pointer-events: none;
			}
			.sveltekit-body {
				display: contents;
			}
			@media (prefers-reduced-motion: reduce) {
				#kalyoke-splash .kalyoke-splash-master * { animation: none !important; }
				#kalyoke-splash { transition: none; }
			}
		