:root { color-scheme: light; --text: rgba(42, 42, 42, 0.78); --muted: rgba(42, 42, 42, 0.5); --strong: rgba(20, 20, 20, 0.82); } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; font-family: "Apple SD Gothic Neo", "Noto Sans KR", sans-serif; color: var(--text); } body { overflow: hidden; cursor: pointer; user-select: none; } body.is-expired { cursor: default; } body.is-expiring { cursor: default; } .background-layer { position: fixed; inset: 0; z-index: 0; background: #fff; background-size: cover; background-position: center; transition: background-image 0.6s ease; } .effect-layer { position: fixed; inset: 0; z-index: 3; pointer-events: none; overflow: hidden; } .toast { position: fixed; top: 1.5rem; right: 1.5rem; z-index: 4; max-width: min(24rem, calc(100vw - 3rem)); padding: 0.75rem 0.95rem; border-radius: 999px; color: var(--strong); font-size: 0.82rem; line-height: 1.45; background: rgba(255, 255, 255, 0.76); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); opacity: 0; pointer-events: none; transform: translateY(-0.4rem); transition: opacity 0.2s ease, transform 0.2s ease; backdrop-filter: blur(10px); } .toast.is-visible { opacity: 1; transform: translateY(0); } .app { position: relative; z-index: 1; min-height: 100vh; } .click-stage { position: fixed; inset: 0; z-index: 1; } .farewell-screen { position: fixed; inset: 0; z-index: 2; display: none; align-items: center; justify-content: center; padding: 2rem; color: var(--strong); font-size: clamp(1.2rem, 3vw, 2rem); line-height: 2; letter-spacing: -0.03em; text-align: center; text-shadow: 0 1px 10px rgba(255, 255, 255, 0.9); } .farewell-screen p { margin: 0; opacity: 0; transform: translate(var(--start-x, 0), var(--start-y, 1.2rem)) scale(1.08); } body.is-expiring .farewell-screen { display: flex; flex-direction: column; } body.is-expiring .farewell-screen p { animation: gather-in 2.8s cubic-bezier(0.16, 1, 0.3, 1) var(--gather-delay, 0s) forwards; } body.is-expired .farewell-screen { display: flex; flex-direction: column; } body.is-expired .farewell-screen p { opacity: 1; transform: translate(0, 0) scale(1); } body.is-expiring .keeper-panel, body.is-expiring .traces-panel { opacity: 0; pointer-events: none; transition: opacity 0.45s ease; } .text-particle { position: fixed; z-index: 4; pointer-events: none; line-height: 1; animation: particle-disperse 1.65s cubic-bezier(0.2, 0.8, 0.2, 1) var(--particle-delay, 0s) forwards; transform-origin: center; will-change: opacity, transform, filter; } body.is-expired .keeper-panel, body.is-expired .traces-panel { display: none; } .keeper-panel, .traces-panel { position: fixed; z-index: 2; max-width: min(24rem, calc(100vw - 3rem)); font-size: 0.78rem; line-height: 1.9; letter-spacing: -0.02em; text-shadow: 0 1px 8px rgba(255, 255, 255, 0.85); } .keeper-panel { right: 2rem; bottom: 2rem; text-align: right; } .keeper-text { margin-bottom: 1.3rem; color: var(--strong); } .keeper-text p { margin: 0; white-space: pre-wrap; } .text-stats { display: flex; flex-direction: column; gap: 0.2rem; } .text-stats div { display: flex; justify-content: flex-end; gap: 0.45rem; } .text-stats span, .traces-panel h2 { color: var(--muted); font-weight: 400; } .text-stats strong { color: var(--strong); font-weight: 600; } .traces-panel { left: 2rem; bottom: 2rem; } .traces-panel h2 { margin: 0 0 0.35rem; font-size: 0.78rem; } .recent-traces { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.12rem; } .recent-traces li { display: flex; align-items: center; gap: 0.45rem; color: var(--text); } .recent-traces .emoji { width: 1.3rem; font-size: 0.95rem; } .recent-traces .time { color: var(--muted); } .recent-traces .empty { color: var(--muted); } .click-message { position: absolute; max-width: min(28rem, calc(100vw - 3rem)); color: var(--strong); font-size: clamp(0.92rem, 2vw, 1.1rem); line-height: 1.5; white-space: nowrap; text-shadow: 0 1px 12px rgba(255, 255, 255, 0.95); animation: message-fade 1.8s ease forwards; } @keyframes message-fade { 0% { opacity: 0; transform: translate(-50%, 0.75rem); } 16% { opacity: 1; transform: translate(-50%, 0); } 72% { opacity: 1; transform: translate(-50%, -0.25rem); } 100% { opacity: 0; transform: translate(-50%, -1.25rem); } } @keyframes particle-disperse { 0% { opacity: 1; filter: blur(0); transform: translate(0, 0) rotate(0deg) scale(1); } 55% { opacity: 0.58; filter: blur(1.2px); } 100% { opacity: 0; filter: blur(5px); transform: translate(var(--particle-x, 3rem), var(--particle-y, -4rem)) rotate(var(--particle-rotation, 6deg)) scale(0.86); } } @keyframes gather-in { 0% { opacity: 0; filter: blur(8px); letter-spacing: 0.08em; transform: translate(var(--start-x, 0), var(--start-y, 1.2rem)) scale(1.08); } 55% { opacity: 0.64; filter: blur(2px); } 100% { opacity: 1; filter: blur(0); letter-spacing: -0.03em; transform: translate(0, 0) scale(1); } } @media (max-width: 640px) { .toast { top: 1rem; right: 1rem; } .keeper-panel { right: 1.25rem; bottom: 1.25rem; max-width: calc(100vw - 2.5rem); } .traces-panel { display: none; } }