{
  "html": "<footer class='footer'><div class='footer__grid-bg' aria-hidden='true'></div><div class='footer__inner'><p class='footer__copy'>© 2026 Алексей Смирнов</p><nav class='footer__nav'><a href='/policy' class='footer__link'><span class='footer__link-icon'>↗</span><span class='footer__link-text'>Политика</span></a><a href='/rules' class='footer__link'><span class='footer__link-icon'>↗</span><span class='footer__link-text'>Правила</span></a></nav></div></footer>",
  "css": ".footer { position: relative; overflow: hidden; animation: footer-breathe 4s cubic-bezier(0.34, 1.56, 0.64, 1) infinite; transform-origin: center; } .footer .footer__grid-bg { position: absolute; inset: 0; pointer-events: none; background-image: linear-gradient(rgba(59, 130, 246, 0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(59, 130, 246, 0.08) 1px, transparent 1px); background-size: 28px 28px; mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.9), transparent 75%); -webkit-mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.9), transparent 75%); animation: footer-grid-drift 12s linear infinite; } .footer .footer__inner { position: relative; z-index: 1; } .footer .footer__link { display: inline-flex; align-items: center; gap: 6px; position: relative; will-change: transform; transition: color 0.2s, transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); } .footer .footer__link-icon { display: inline-block; font-size: 13px; color: #60a5fa; transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1), color 0.2s; } .footer .footer__link:hover { color: #2563eb; transform: translateY(-2px); } .footer .footer__link:hover .footer__link-icon { animation: footer-icon-bounce 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) infinite; color: #3b82f6; } .footer .footer__link::after { content: ''; position: absolute; left: 0; bottom: -3px; width: 100%; height: 2px; background: linear-gradient(90deg, #60a5fa, #3b82f6, #2563eb); border-radius: 2px; transform: scaleX(0); transform-origin: left; transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); } .footer .footer__link:hover::after { transform: scaleX(1); } @keyframes footer-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.01); } } @keyframes footer-grid-drift { 0% { background-position: 0 0, 0 0; } 100% { background-position: 28px 28px, 28px 28px; } } @keyframes footer-icon-bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }"
}