@keyframes ripple{0%{transform:scale(.6);opacity:1}70%{opacity:.15}to{transform:scale(2.8);opacity:0}}@keyframes shimmer{0%{background-position:100%0}to{background-position:-100%0}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes charIn{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@keyframes charOut{0%{opacity:1}to{opacity:0}}@keyframes scroll-bounce{0%,to{transform:translateX(-50%) translateY(0);opacity:.4}50%{transform:translateX(-50%) translateY(8px);opacity:.9}}:root{--bg:#0d1117;--bg-card:#161b22;--bg-card-hover:#1c2333;--border:#30363d;--border-hover:#58a6ff;--text-primary:#e6edf3;--text-secondary:#8b949e;--text-muted:#6e7681;--accent:#58a6ff;--accent-dim:rgba(88, 166, 255, 0.15);--tag-bg:rgba(88, 166, 255, 0.1);--tag-text:#79c0ff;--radius:8px;--max-width:1100px}*,::after,::before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}#landing{position:relative;height:100vh;height:100dvh;min-height:500px;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}#landing-bg,.project-image-wrap img{position:absolute;inset:0;width:100%;height:100%;z-index:0}#hero,#hero-avatar{position:relative;z-index:1}#hero{display:flex;flex-direction:column;align-items:center;padding:40px 20px;text-align:center}.avatar-wrap{position:relative;margin-bottom:24px}.avatar-wrap::after,.avatar-wrap::before{content:"";position:absolute;inset:-40px;border-radius:50%;background:radial-gradient(circle at center,transparent 48%,rgba(88,166,255,.55) 54%,rgba(88,166,255,.3) 60%,rgba(88,166,255,.12) 68%,rgba(88,166,255,.03) 78%,transparent 88%);transform:scale(.6);opacity:0;animation:ripple 5s ease-out infinite;pointer-events:none}.avatar-wrap::after{animation-delay:2.5s}#hero-avatar{width:120px;height:120px;border-radius:50%;border:2px solid var(--border)}#hero-name,#hero-name::after{background-image:linear-gradient(90deg,var(--accent) 0%,#c084fc 17%,var(--accent) 33%,#c084fc 50%,var(--accent) 67%,#c084fc 83%,var(--accent) 100%);background-size:200% 100%;background-position:100%0;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:shimmer 5s linear infinite}#hero-name{position:relative;font-size:2.8rem;font-weight:700;letter-spacing:-.02em;margin-bottom:12px}#hero-name::after{content:"Fantastair";position:absolute;left:-8px;right:-8px;top:-4px;bottom:-4px;filter:blur(6px);opacity:.5;pointer-events:none}#hero-tagline{display:flex;align-items:flex-start;gap:6px;color:var(--text-secondary);font-size:1.05rem;max-width:480px;margin-bottom:24px}#hitokoto-text{flex:1;min-width:0}#hitokoto-refresh{flex-shrink:0;background:0 0;border:0;color:var(--text-secondary);cursor:pointer;padding:3px;margin-top:2px;border-radius:4px;opacity:.4;transition:opacity .2s}#hitokoto-refresh:hover{opacity:1;color:var(--text-primary)}#hitokoto-refresh.spinning svg{animation:spin .6s linear infinite}.char,.char.exit{animation-fill-mode:both;animation-delay:calc(var(--i)*.028s)}.char{display:inline;opacity:0;animation-name:charIn;animation-duration:.25s}.char.exit{animation-name:charOut;animation-duration:.15s}#hero-github,.project-card{border:1px solid var(--border)}#hero-github{display:inline-flex;align-items:center;gap:8px;padding:8px 20px;border-radius:999px;font-size:.9rem;color:var(--text-secondary);transition:border-color .2s,color .2s}#hero-github:hover{border-color:var(--accent);color:var(--text-primary)}#scroll-indicator{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);z-index:1;color:var(--text-muted);opacity:.5;animation:scroll-bounce 2.2s ease-in-out infinite;pointer-events:none}#projects{max-width:var(--max-width);margin:0 auto;padding:0 24px 80px}#projects-title{font-size:1.4rem;font-weight:600;margin-bottom:32px;padding-bottom:12px;border-bottom:1px solid var(--border)}#projects-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.project-card{--mouse-x:50%;--mouse-y:50%;background:var(--bg-card);border-radius:var(--radius);overflow:hidden;transition:border-color .25s,transform .25s,box-shadow .25s;display:flex;flex-direction:column;position:relative}.project-card::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;border-radius:inherit;opacity:0;background:radial-gradient(600px circle at var(--mouse-x) var(--mouse-y),rgba(88,166,255,.15),transparent 40%);transition:opacity .4s}.project-card:hover{border-color:var(--border-hover);transform:translateY(-2px);box-shadow:0 0 20px rgba(88,166,255,.15),0 8px 24px rgba(0,0,0,.4)}.project-card:hover::after{opacity:1}.project-image-wrap{position:relative;width:100%;padding-top:56.25%;background:#0d1117;overflow:hidden}.project-image-wrap::before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(88,166,255,.04)0,transparent 60%);z-index:0}.project-image-wrap img{object-fit:contain;z-index:1;transition:opacity .3s,transform .4s}.project-card:hover .project-image-wrap img{transform:scale(1.08)}.project-image-wrap img.not-loaded{opacity:0}.project-body{padding:18px 20px 20px;flex:1;display:flex;flex-direction:column}.project-name{font-size:1.05rem;font-weight:600;margin-bottom:8px}.project-desc{font-size:.875rem;color:var(--text-secondary);line-height:1.55;margin-bottom:14px;flex:1}.project-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.project-tag{font-size:.75rem;padding:3px 10px;background:var(--tag-bg);color:var(--tag-text);border-radius:999px;white-space:nowrap}.project-links{display:flex;flex-wrap:wrap;gap:12px;padding-top:14px;border-top:1px solid var(--border)}.project-link{display:inline-flex;align-items:center;gap:5px;font-size:.85rem;color:var(--text-secondary);transition:color .2s}.project-link:hover{color:var(--accent)}.project-link svg{width:16px;height:16px;flex-shrink:0}#footer,#footer a{color:var(--text-muted)}#footer{text-align:center;padding:32px 20px;border-top:1px solid var(--border);font-size:.85rem}#footer a{text-decoration:none}#footer a:hover{text-decoration:underline}@media (max-width:900px){#projects-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:600px){#hero{padding:20px 16px}.avatar-wrap{margin-bottom:18px}#hero-avatar{width:88px;height:88px}#hero-name{font-size:2rem}#hero-tagline{font-size:.95rem}#projects{padding:0 16px 60px}#projects-grid{grid-template-columns:1fr}.project-body{padding:14px 16px 16px}}