@font-face { font-family: "Noto Serif SC"; src: url("../fonts/NotoSerifSC-subset.woff2?v=20260818-3") format("woff2"); font-style: normal; font-weight: 200 900; font-display: swap; } :root { color-scheme: dark; --ink: #ffffff; --ink-muted: rgba(255, 255, 255, 0.78); --line: rgba(255, 255, 255, 0.82); --line-soft: rgba(255, 255, 255, 0.42); --rose: #f38caa; --font-display: "Noto Serif SC", "Source Han Serif SC", "Songti SC", STSong, serif; font-family: "Microsoft YaHei UI", "PingFang SC", "Source Han Sans SC", "Noto Sans CJK SC", sans-serif; font-synthesis: none; } * { box-sizing: border-box; } html { min-width: 320px; min-height: 100%; background: #77747f; } body { min-width: 320px; min-height: 100vh; min-height: 100svh; margin: 0; overflow-x: hidden; color: var(--ink); background: #77747f; } a { color: inherit; text-decoration: none; } #sakura { position: fixed; z-index: 0; inset: 0; width: 100%; height: 100%; pointer-events: none; background: linear-gradient(180deg, #d8d7dc 0%, #aaa8b2 45%, #66636f 100%); } .landing { position: relative; z-index: 2; display: grid; min-height: 100vh; min-height: 100svh; place-items: start center; padding: clamp(34px, 6vh, 64px) 24px 28px; } .composition { position: relative; display: flex; width: min(100%, 620px); flex-direction: column; align-items: center; justify-content: flex-start; text-align: center; /* Preserve the 100px composition on normal screens and reclaim space on short ones. */ transform: translateY(clamp(0px, calc(125vh - 800px), 100px)); } .portrait-stage { position: relative; z-index: 2; display: grid; width: 124px; height: 124px; flex: 0 0 auto; place-items: center; } .portrait-ring { position: relative; width: 116px; height: 116px; overflow: visible; border: 3px solid rgba(255, 255, 255, 0.92); border-radius: 50%; background: #d9d8dc; box-shadow: 0 12px 34px rgba(49, 42, 53, 0.24); transform: rotate(0deg); transition: transform 720ms ease-in-out; } .portrait-stage:hover .portrait-ring { transform: rotate(360deg); } .portrait-image { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 43%; border-radius: 50%; } /* The supplied frame is square. Keep only its central glitch slices so the circular avatar remains the dominant shape. */ .portrait-frame { position: absolute; z-index: 2; inset: 0; overflow: hidden; pointer-events: none; border-radius: 50%; clip-path: circle(50% at 50% 50%); -webkit-mask-image: url("../images/avatar-frame-mask.svg?v=20260817-2"); -webkit-mask-mode: alpha; -webkit-mask-repeat: no-repeat; -webkit-mask-size: 100% 100%; mask-image: url("../images/avatar-frame-mask.svg?v=20260817-2"); mask-mode: alpha; mask-repeat: no-repeat; mask-size: 100% 100%; } .portrait-frame-slice { position: absolute; display: block; inset: 0; } .portrait-frame-slice img { display: block; width: 100%; height: 100%; object-fit: fill; } .intro { position: relative; width: 100%; margin-top: 83px; margin-bottom: 33px; padding: 66px 24px 60px; } .eyebrow { margin: 0 0 14px; color: rgba(255, 255, 255, 0.68); font-family: "Segoe UI", Arial, sans-serif; font-size: 0.66rem; font-weight: 500; letter-spacing: 0; text-transform: uppercase; } h1 { display: inline-flex; margin: 0; align-items: center; justify-content: center; gap: 0.3em; font-family: var(--font-display); font-size: 3rem; font-weight: 300; line-height: 1.16; letter-spacing: 0; text-shadow: 0 3px 18px rgba(47, 41, 51, 0.18); } #site-title { transform-origin: center; animation: title-glow 2.8s ease-in-out infinite; will-change: transform, text-shadow; } @keyframes title-glow { 0%, 100% { color: rgba(255, 255, 255, 0.92); transform: scale(1); text-shadow: 0 3px 18px rgba(47, 41, 51, 0.18), 0 0 2px rgba(255, 255, 255, 0.24), 0 0 0 rgba(243, 140, 170, 0); } 50% { color: #fff8fb; transform: scale(1.06); text-shadow: 0 3px 18px rgba(47, 41, 51, 0.18), 0 0 7px rgba(255, 255, 255, 1), 0 0 24px rgba(243, 140, 170, 0.95), 0 0 54px rgba(243, 140, 170, 0.68); } } .tagline { margin: 30px 0 0; color: var(--ink-muted); font-family: var(--font-display); font-size: 1.2rem; font-weight: 300; letter-spacing: 0; text-shadow: 0 2px 14px rgba(47, 41, 51, 0.24); } .tagline-chromatic { position: relative; color: #ffffff; font-weight: 500; mix-blend-mode: lighten; text-shadow: 0 3px 14px rgba(47, 41, 51, 0.2); } .tagline-chromatic::before, .tagline-chromatic::after { position: absolute; top: 0; width: 100%; content: attr(data-text); background: transparent; clip: rect(0, 0, 0, 0); pointer-events: none; } .tagline-chromatic::before { left: -0.0125em; text-shadow: 0.05em 0 #ff3f1a; animation: glitch-loop-1 0.8s infinite ease-in-out alternate-reverse; } .tagline-chromatic::after { left: 0.0125em; text-shadow: -0.0625em 0 #00a7e0; animation: glitch-loop-2 0.8s infinite ease-in-out alternate-reverse; } @keyframes glitch-loop-1 { 0% { clip: rect(0.45em, 9999px, 0.1125em, 0); } 25% { clip: rect(0.3125em, 9999px, 1.2375em, 0); } 50% { clip: rect(0.625em, 9999px, 1.275em, 0); } 75% { clip: rect(0.375em, 9999px, 1.15em, 0); } 100% { clip: rect(1.1375em, 9999px, 1.225em, 0); } } @keyframes glitch-loop-2 { 0% { top: -0.0125em; left: 0.0125em; clip: rect(0.8125em, 9999px, 1.4875em, 0); } 25% { top: -0.075em; left: 0.05em; clip: rect(0.9875em, 9999px, 0.2375em, 0); } 50% { top: -0.0375em; left: 0.025em; clip: rect(0.85em, 9999px, 0.1375em, 0); } 75% { top: 0; left: -0.05em; clip: rect(1.1875em, 9999px, 0.6625em, 0); } 100% { top: -0.0125em; left: -0.0125em; clip: rect(0.3875em, 9999px, 1.8625em, 0); } } .destinations { position: relative; z-index: 2; display: flex; width: min(100%, 420px); flex-wrap: wrap; align-items: center; justify-content: center; gap: 18px; overflow: visible; } .destinations-single { width: min(100%, 240px); } .destination { position: relative; display: flex; width: 82px; height: 82px; flex: 0 0 82px; align-items: center; justify-content: center; gap: 7px; min-width: 0; min-height: 0; color: rgba(255, 255, 255, 0.92); font-family: "Segoe UI", Arial, sans-serif; font-size: 0.78rem; font-weight: 400; letter-spacing: 0; text-transform: uppercase; border: 1px solid rgba(255, 255, 255, 0.88); border-radius: 50%; background: rgba(75, 70, 81, 0.16); box-shadow: 0 12px 32px rgba(50, 43, 55, 0.13); backdrop-filter: blur(4px); transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease; } .destination:hover { color: #4e4854; background: rgba(255, 255, 255, 0.82); border-color: rgba(255, 255, 255, 0.98); transform: translateY(-3px); } .destination:active { transform: translateY(-1px); } .destination-label { line-height: 1; } .external-icon { font-family: "Segoe UI Symbol", "Arial Unicode MS", sans-serif; font-size: 0.76rem; line-height: 1; } .destination:focus-visible { z-index: 2; outline: 2px solid #ffffff; outline-offset: -5px; } .site-footer { position: fixed; z-index: 3; right: 18px; bottom: 14px; color: rgba(255, 255, 255, 0.48); font-family: "Segoe UI", Arial, sans-serif; font-size: 0.58rem; letter-spacing: 0; text-transform: uppercase; } @media (max-width: 720px) { .landing { padding: 30px 20px 38px; } .composition { min-height: 610px; transform: translateY(clamp(0px, calc(75vh - 480px), 100px)); } .portrait-stage { width: 106px; height: 106px; } .portrait-ring { width: 100px; height: 100px; } .intro { margin-top: 65px; margin-bottom: 29px; padding: 54px 12px 50px; } h1 { gap: 0.28em; font-size: 2.55rem; } .tagline { margin-top: 24px; font-size: 1.08rem; } .destinations { width: min(100%, 330px); gap: 14px; } .destination { width: 76px; height: 76px; flex-basis: 76px; font-size: 0.74rem; } .site-footer { display: none; } } @media (max-width: 380px) { .landing { padding-right: 16px; padding-left: 16px; } h1 { gap: 0.24em; font-size: 2.3rem; } } @media (max-height: 720px) and (min-width: 721px) { .landing { padding-top: 44px; padding-bottom: 18px; } } @media (max-width: 720px) and (max-height: 720px) { .landing { padding-bottom: 0; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; } .tagline-chromatic::before, .tagline-chromatic::after { animation: none; } .portrait-ring { transition: none; } #site-title { animation: none; } }