Files
menav/dist/index.html
2026-04-22 12:47:22 +08:00

5534 lines
620 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN" data-theme-mode="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="menav-version" content="1.3.0">
<title data-editable="site-title">Bighill导航</title>
<meta name="description" content="个人导航主页" data-editable="site-description">
<meta name="author" content="Bighill" data-editable="site-author">
<link rel="icon" href="./menav.svg" type="image/x-icon">
<link rel="shortcut icon" href="./menav.svg" type="image/x-icon">
<link rel="preconnect" href="https://fontsapi.zeoseven.com" crossorigin>
<link rel="preload" href="https://fontsapi.zeoseven.com/292/main/result.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://fontsapi.zeoseven.com/292/main/result.css"></noscript>
<style>
:root {
--font-body: "LXGW WenKai";
--font-weight-body: normal;
}
</style>
<!-- 预设主题和侧边栏状态,避免闪烁 -->
<script>
(function() {
// 读取并应用主题设置
var savedTheme = localStorage.getItem('theme');
var defaultThemeMode = document.documentElement.getAttribute('data-theme-mode') || 'dark';
defaultThemeMode = String(defaultThemeMode).trim().toLowerCase();
var shouldUseLight = false;
if (savedTheme === 'light') {
shouldUseLight = true;
} else if (savedTheme === 'dark') {
shouldUseLight = false;
} else if (defaultThemeMode === 'light') {
shouldUseLight = true;
} else if (defaultThemeMode === 'system') {
try {
shouldUseLight =
window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches;
} catch (e) {
shouldUseLight = false;
}
}
if (shouldUseLight) {
document.documentElement.classList.add('theme-preload');
}
// 读取并应用侧边栏状态
var sidebarCollapsed = localStorage.getItem('sidebarCollapsed') === 'true';
var isMobile = window.innerWidth <= 768;
if (sidebarCollapsed && !isMobile) {
document.documentElement.classList.add('sidebar-collapsed-preload');
}
// 添加这个类用于控制初始渲染
document.documentElement.classList.add('preload');
})();
</script>
<link rel="stylesheet" href="style.css">
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"></noscript>
</head>
<body class="loading">
<div class="layout">
<!-- 移动端按钮 -->
<div class="mobile-buttons">
<button class="menu-toggle" aria-label="切换菜单">
<i class="fas fa-bars"></i>
</button>
<button class="search-toggle" aria-label="切换搜索">
<i class="fas fa-search"></i>
</button>
</div>
<!-- 遮罩层 -->
<div class="overlay"></div>
<!-- 左侧导航 -->
<nav class="sidebar">
<div class="logo">
<div class="logo-brand">
<img class="logo-image" src="./menav.svg" alt="Bighill导航 logo" width="26" height="26">
<h1 data-editable="logo-text">MeNav</h1>
</div>
<button class="sidebar-toggle" aria-label="收起/展开侧边栏">
<i class="fas fa-chevron-left toggle-icon"></i>
</button>
</div>
<div class="sidebar-content">
<div class="nav-section">
<div data-container="nav-items">
<div class="nav-item-wrapper">
<a href="?page=common" class="nav-item active active" data-page="common" data-type="nav-item" data-id="common" data-name="常用" data-icon="fas fa-star">
<div class="icon-container">
<i class="fas fa-star"></i>
</div>
<span class="nav-text" data-editable="nav-item-name">常用</span>
</a>
<div class="submenu">
<div class="submenu-header">常用</div>
<a href="?page=common#置顶" class="submenu-item" data-page="common" data-category="置顶" data-category-id="置顶">
<i class="fas fa-star"></i>
<span>置顶</span>
</a>
<a href="?page=common#学习资源" class="submenu-item" data-page="common" data-category="学习资源" data-category-id="学习资源">
<i class="fas fa-graduation-cap"></i>
<span>学习资源</span>
</a>
<a href="?page=common#设计资源" class="submenu-item" data-page="common" data-category="设计资源" data-category-id="设计资源">
<i class="fas fa-palette"></i>
<span>设计资源</span>
</a>
<a href="?page=common#在线工具" class="submenu-item" data-page="common" data-category="在线工具" data-category-id="在线工具">
<i class="fas fa-wrench"></i>
<span>在线工具</span>
</a>
<a href="?page=common#云服务平台" class="submenu-item" data-page="common" data-category="云服务平台" data-category-id="云服务平台">
<i class="fas fa-cloud"></i>
<span>云服务平台</span>
</a>
</div>
</div>
<div class="nav-item-wrapper">
<a href="?page=projects" class="nav-item" data-page="projects" data-type="nav-item" data-id="projects" data-name="项目" data-icon="fas fa-project-diagram">
<div class="icon-container">
<i class="fas fa-project-diagram"></i>
</div>
<span class="nav-text" data-editable="nav-item-name">项目</span>
</a>
<div class="submenu">
<div class="submenu-header">项目</div>
<a href="?page=projects#个人项目" class="submenu-item" data-page="projects" data-category="个人项目" data-category-id="个人项目">
<i class="fas fa-code"></i>
<span>个人项目</span>
</a>
<a href="?page=projects#star" class="submenu-item" data-page="projects" data-category="star" data-category-id="star">
<i class="fas fa-star"></i>
<span>star</span>
</a>
</div>
</div>
<div class="nav-item-wrapper">
<a href="?page=articles" class="nav-item" data-page="articles" data-type="nav-item" data-id="articles" data-name="文章" data-icon="fas fa-book">
<div class="icon-container">
<i class="fas fa-book"></i>
</div>
<span class="nav-text" data-editable="nav-item-name">文章</span>
</a>
<div class="submenu">
<div class="submenu-header">文章</div>
<a href="?page=articles#个人博客" class="submenu-item" data-page="articles" data-category="个人博客" data-category-id="个人博客">
<i class="fas fa-rss"></i>
<span>个人博客</span>
</a>
<a href="?page=articles#官方博客" class="submenu-item" data-page="articles" data-category="官方博客" data-category-id="官方博客">
<i class="fas fa-rss"></i>
<span>官方博客</span>
</a>
</div>
</div>
<div class="nav-item-wrapper">
<a href="?page=bookmarks" class="nav-item" data-page="bookmarks" data-type="nav-item" data-id="bookmarks" data-name="书签" data-icon="fas fa-bookmark">
<div class="icon-container">
<i class="fas fa-bookmark"></i>
</div>
<span class="nav-text" data-editable="nav-item-name">书签</span>
</a>
<div class="submenu">
<div class="submenu-header">书签</div>
<a href="?page=bookmarks#常用网站" class="submenu-item" data-page="bookmarks" data-category="常用网站" data-category-id="常用网站">
<i class="fas fa-star"></i>
<span>常用网站</span>
</a>
<a href="?page=bookmarks#社交媒体" class="submenu-item" data-page="bookmarks" data-category="社交媒体" data-category-id="社交媒体">
<i class="fas fa-share-alt"></i>
<span>社交媒体</span>
</a>
<a href="?page=bookmarks#技术资源" class="submenu-item" data-page="bookmarks" data-category="技术资源" data-category-id="技术资源">
<i class="fas fa-laptop-code"></i>
<span>技术资源</span>
</a>
<a href="?page=bookmarks#设计资源" class="submenu-item" data-page="bookmarks" data-category="设计资源" data-category-id="设计资源">
<i class="fas fa-palette"></i>
<span>设计资源</span>
</a>
<a href="?page=bookmarks#开发工具" class="submenu-item" data-page="bookmarks" data-category="开发工具" data-category-id="开发工具">
<i class="fas fa-tools"></i>
<span>开发工具</span>
</a>
</div>
</div>
<div class="nav-item-wrapper">
<a href="?page=content" class="nav-item" data-page="content" data-type="nav-item" data-id="content" data-name="关于" data-icon="fas fa-file-alt">
<div class="icon-container">
<i class="fas fa-file-alt"></i>
</div>
<span class="nav-text" data-editable="nav-item-name">关于</span>
</a>
</div>
</div>
</div>
<div class="sidebar-submenu-panel" aria-label="页面分类" data-container="sidebar-submenu"></div>
</div>
<div class="sidebar-social" data-container="social-links">
<a href="https://github.com" class="social-icon" target="_blank" rel="noopener" title="GitHub" aria-label="GitHub" data-type="social-link" data-name="GitHub" data-url="https://github.com" data-icon="fab fa-github">
<i class="fab fa-github" aria-hidden="true"></i>
<span class="nav-text visually-hidden" data-editable="social-link-name">GitHub</span>
</a>
<a href="https://t.me" class="social-icon" target="_blank" rel="noopener" title="Telegram" aria-label="Telegram" data-type="social-link" data-name="Telegram" data-url="https://t.me" data-icon="fab fa-telegram">
<i class="fab fa-telegram" aria-hidden="true"></i>
<span class="nav-text visually-hidden" data-editable="social-link-name">Telegram</span>
</a>
<a href="https://twitter.com" class="social-icon" target="_blank" rel="noopener" title="Twitter" aria-label="Twitter" data-type="social-link" data-name="Twitter" data-url="https://twitter.com" data-icon="fab fa-twitter">
<i class="fab fa-twitter" aria-hidden="true"></i>
<span class="nav-text visually-hidden" data-editable="social-link-name">Twitter</span>
</a>
<a href="https://steam.com" class="social-icon" target="_blank" rel="noopener" title="Steam" aria-label="Steam" data-type="social-link" data-name="Steam" data-url="https://steam.com" data-icon="fab fa-steam">
<i class="fab fa-steam" aria-hidden="true"></i>
<span class="nav-text visually-hidden" data-editable="social-link-name">Steam</span>
</a>
</div>
<div class="sidebar-footer">
<div class="copyright">
<p>© 2026 <a href="https://github.com/rbetree/menav" target="_blank" rel="noopener">MeNav</a></p>
<p>by <a href="https://github.com/rbetree" target="_blank" rel="noopener">rbetree</a></p>
</div>
</div>
</nav>
<!-- 右侧内容区 -->
<main class="content">
<!-- 搜索框容器 -->
<div class="search-container">
<div class="search-box">
<button class="search-engine-button search-engine-toggle"
type="button"
title="选择搜索引擎"
aria-label="选择搜索引擎"
aria-haspopup="menu"
aria-controls="search-engine-dropdown"
aria-expanded="false">
<i class="search-engine-icon search-engine-icon-svg" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" focusable="false">
<path fill="#616161" d="M29.171,32.001L32,29.172l12.001,12l-2.828,2.828L29.171,32.001z"></path>
<path fill="#616161" d="M36,20c0,8.837-7.163,16-16,16S4,28.837,4,20S11.163,4,20,4S36,11.163,36,20"></path>
<path fill="#37474f" d="M32.476,35.307l2.828-2.828l8.693,8.693L41.17,44L32.476,35.307z"></path>
<path fill="#64b5f6" d="M7,20c0-7.18,5.82-13,13-13s13,5.82,13,13s-5.82,13-13,13S7,27.18,7,20"></path>
</svg>
</i>
<span class="search-engine-label">本地</span>
</button>
<input type="text" id="search" placeholder="Search" aria-label="搜索" aria-keyshortcuts="Control+K Meta+K">
<span class="search-shortcut-hint" aria-hidden="true">Ctrl+K</span>
<div class="search-engine-dropdown" id="search-engine-dropdown" role="menu" aria-label="搜索引擎列表">
<button class="search-engine-option" type="button" role="menuitem" data-engine="local" title="本地搜索">
<i class="search-engine-option-svg" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" focusable="false">
<path fill="#616161" d="M29.171,32.001L32,29.172l12.001,12l-2.828,2.828L29.171,32.001z"></path>
<path fill="#616161" d="M36,20c0,8.837-7.163,16-16,16S4,28.837,4,20S11.163,4,20,4S36,11.163,36,20"></path>
<path fill="#37474f" d="M32.476,35.307l2.828-2.828l8.693,8.693L41.17,44L32.476,35.307z"></path>
<path fill="#64b5f6" d="M7,20c0-7.18,5.82-13,13-13s13,5.82,13,13s-5.82,13-13,13S7,27.18,7,20"></path>
</svg>
</i>
<span class="search-engine-option-label">本地搜索</span>
</button>
<button class="search-engine-option" type="button" role="menuitem" data-engine="google" title="Google搜索">
<i class="search-engine-option-svg" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" focusable="false">
<path fill="#FFC107" d="M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12c0-6.627,5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24c0,11.045,8.955,20,20,20c11.045,0,20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z"></path>
<path fill="#FF3D00" d="M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z"></path>
<path fill="#4CAF50" d="M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z"></path>
<path fill="#1976D2" d="M43.611,20.083H42V20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z"></path>
</svg>
</i>
<span class="search-engine-option-label">Google</span>
</button>
<button class="search-engine-option" type="button" role="menuitem" data-engine="bing" title="Bing搜索">
<i class="search-engine-option-svg" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" focusable="false">
<g fill="#2877fb" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal">
<g transform="scale(5.12,5.12)">
<path d="M45,26.10156v-5.10156c0,-0.89844 -0.60156,-1.69922 -1.39844,-1.89844l-4.60156,-1.40234c-5.30078,-1.59766 -10.30078,-3 -15.60156,-4.69922h-0.09766c-0.80078,-0.19922 -1.60156,0.69922 -1.19922,1.5c1.89844,3.89844 3.89844,9.5 3.89844,9.5l6.69922,2.60156c-0.30078,0 -21.69922,11.39844 -21.69922,11.39844l9,-8v-23c0,-0.89844 -0.60156,-1.80078 -1.39844,-2c0,0 -4.90234,-1.89844 -8,-2.89844c-0.20312,-0.10156 -0.40234,-0.10156 -0.60156,-0.10156c-0.39844,0 -0.80078,0.10156 -1.19922,0.39844c-0.5,0.40234 -0.80078,1 -0.80078,1.60156v34.69922c0,0.69922 0.30078,1.30078 0.89844,1.60156c2.10156,1.5 4.30078,3 6.40234,4.5l3,2.09766c0.30078,0.20313 0.69922,0.40234 1.09766,0.40234c0.40234,0 0.70313,-0.10156 1,-0.30078c4.30078,-2.60156 8.70313,-5.19922 13,-7.80078l10.60156,-6.30078c0.60156,-0.39844 1,-1 1,-1.69922z"></path>
</g>
</g>
</svg>
</i>
<span class="search-engine-option-label">Bing</span>
</button>
<button class="search-engine-option" type="button" role="menuitem" data-engine="duckduckgo" title="DuckDuckGo搜索">
<i class="search-engine-option-svg" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="4 4 40 40" focusable="false">
<path fill="#ff3d00" d="M44,24c0,11-9,20-20,20S4,35,4,24S13,4,24,4S44,13,44,24z"></path>
<path fill="#fff" d="M26,16.2c-0.6-0.6-1.5-0.9-2.5-1.1c-0.4-0.5-1-1-1.9-1.5c-1.6-0.8-3.5-1.2-5.3-0.9h-0.4 c-0.1,0-0.2,0.1-0.4,0.1c0.2,0,1,0.4,1.6,0.6c-0.3,0.2-0.8,0.2-1.1,0.4c0,0,0,0-0.1,0L15.7,14c-0.1,0.2-0.2,0.4-0.2,0.5 c1.3-0.1,3.2,0,4.6,0.4C19,15,18,15.3,17.3,15.7c-0.5,0.3-1,0.6-1.3,1.1c-1.2,1.3-1.7,3.5-1.3,5.9c0.5,2.7,2.4,11.4,3.4,16.3 l0.3,1.6c0,0,3.5,0.4,5.6,0.4c1.2,0,3.2,0.3,3.7-0.2c-0.1,0-0.6-0.6-0.8-1.1c-0.5-1-1-1.9-1.4-2.6c-1.2-2.5-2.5-5.9-1.9-8.1 c0.1-0.4,0.1-2.1,0.4-2.3c2.6-1.7,2.4-0.1,3.5-0.8c0.5-0.4,1-0.9,1.2-1.5C29.4,22.1,27.8,18,26,16.2z"></path>
<path fill="#fff" d="M24,42c-9.9,0-18-8.1-18-18c0-9.9,8.1-18,18-18c9.9,0,18,8.1,18,18C42,33.9,33.9,42,24,42z M24,8 C15.2,8,8,15.2,8,24s7.2,16,16,16s16-7.2,16-16S32.8,8,24,8z"></path>
<path fill="#0277bd" d="M19,21.1c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.6,0,1.2-0.5,1.2-1.2 C20.1,21.7,19.6,21.1,19,21.1z M19.5,22.2c-0.2,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3s0.3,0.1,0.3,0.3 C19.8,22.1,19.6,22.2,19.5,22.2z M26.8,20.6c-0.6,0-1,0.5-1,1c0,0.6,0.5,1,1,1c0.6,0,1-0.5,1-1S27.3,20.6,26.8,20.6z M27.2,21.5 c-0.1,0-0.3-0.1-0.3-0.3c0-0.1,0.1-0.3,0.3-0.3c0.1,0,0.3,0.1,0.3,0.3S27.4,21.5,27.2,21.5z M19.3,18.9c0,0-0.9-0.4-1.7,0.1 c-0.9,0.5-0.8,1.1-0.8,1.1s-0.5-1,0.8-1.5C18.7,18.1,19.3,18.9,19.3,18.9 M27.4,18.8c0,0-0.6-0.4-1.1-0.4c-1,0-1.3,0.5-1.3,0.5 s0.2-1.1,1.5-0.9C27.1,18.2,27.4,18.8,27.4,18.8"></path>
<path fill="#8bc34a" d="M23.3,35.7c0,0-4.3-2.3-4.4-1.4c-0.1,0.9,0,4.7,0.5,5s4.1-1.9,4.1-1.9L23.3,35.7z M25,35.6 c0,0,2.9-2.2,3.6-2.1c0.6,0.1,0.8,4.7,0.2,4.9c-0.6,0.2-3.9-1.2-3.9-1.2L25,35.6z"></path>
<path fill="#689f38" d="M22.5,35.7c0,1.5-0.2,2.1,0.4,2.3c0.6,0.1,1.9,0,2.3-0.3c0.4-0.3,0.1-2.2-0.1-2.6 C25,34.8,22.5,35.1,22.5,35.7"></path>
<path fill="#ffca28" d="M22.3,26.8c0.1-0.7,2-2.1,3.3-2.2c1.3-0.1,1.7-0.1,2.8-0.3c1.1-0.3,3.9-1,4.7-1.3 c0.8-0.4,4.1,0.2,1.8,1.5c-1,0.6-3.7,1.6-5.7,2.2c-1.9,0.6-3.1-0.6-3.8,0.4c-0.5,0.8-0.1,1.8,2.2,2c3.1,0.3,6.2-1.4,6.5-0.5 c0.3,0.9-2.7,2-4.6,2.1c-1.8,0-5.6-1.2-6.1-1.6C22.9,28.7,22.2,27.8,22.3,26.8"></path>
</svg>
</i>
<span class="search-engine-option-label">DuckDuckGo</span>
</button>
</div>
</div>
</div>
<!-- 页面容器 -->
<div class="page common active" id="common">
<div class="page-template page-template-common">
<div class="dashboard-grid">
<div class="dashboard-intro">
<div class="dashboard-welcome">
<h1 class="welcome-title">Bighill</h1>
<p class="welcome-subtitle">个人导航站</p>
</div>
<div class="dashboard-clock-card">
<div class="clock-header">
<div class="clock-meta">
<div class="clock-greeting" id="dashboard-greeting">Hello</div>
<div class="clock-date" id="dashboard-date">Mon, Jan 01</div>
</div>
<div class="clock-week" id="dashboard-week">Week 1</div>
</div>
<div class="clock-main">
<div class="clock-time" id="dashboard-clock">00:00</div>
</div>
</div>
</div>
<div class="dashboard-stats">
<div class="dashboard-panel">
<div class="panel-sidebar">
<div class="panel-static-icon">
<span class="fas fa-bars"></span>
</div>
<button class="panel-icon-btn add-btn" title="Add Todo" onclick="window.menavTodoApp.toggleInput()">
<span class="fas fa-plus"></span>
</button>
</div>
<div class="panel-content-wrapper">
<div class="panel-content custom-scrollbar" id="todo-list">
</div>
<div class="todo-input-container" id="todo-input-container"
style="display: none; padding: var(--spacing-md);">
<input type="text" class="todo-input" id="todo-input-field" placeholder="New task..."
onkeypress="window.menavTodoApp.handleInputKey(event)"
onblur="window.menavTodoApp.handleBlur()">
<button class="todo-add-btn-small" onmousedown="window.menavTodoApp.preventBlur(event)"
onclick="window.menavTodoApp.addFromInput()">
<span class="fas fa-arrow-right"></span>
</button>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
// --- Clock Logic ---
function getWeekNumber(d) {
d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
return weekNo;
}
function getGreeting(hour) {
if (hour < 5) return "Good Night";
if (hour < 12) return "Good Morning";
if (hour < 18) return "Good Afternoon";
return "Good Evening";
}
function updateDashboardClock() {
const clockEl = document.getElementById('dashboard-clock');
const dateEl = document.getElementById('dashboard-date');
const greetingEl = document.getElementById('dashboard-greeting');
const weekEl = document.getElementById('dashboard-week');
if (!clockEl || !dateEl) return;
const now = new Date();
clockEl.textContent = now.toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit' });
dateEl.textContent = now.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' });
if (greetingEl) greetingEl.textContent = getGreeting(now.getHours());
if (weekEl) weekEl.textContent = `Week ${getWeekNumber(now)}`;
}
setInterval(updateDashboardClock, 1000);
updateDashboardClock();
// --- Todo App Logic ---
const TODO_STORAGE_KEY = 'menav_todos_v1';
window.menavTodoApp = {
todos: [],
isIgnoreBlur: false,
init() {
this.load();
this.render();
},
load() {
try {
const raw = localStorage.getItem(TODO_STORAGE_KEY);
this.todos = raw ? JSON.parse(raw) : [
{ text: 'Drink Water', done: false },
{ text: 'Explore MeNav', done: true }
];
} catch (e) { this.todos = []; }
},
save() {
try { localStorage.setItem(TODO_STORAGE_KEY, JSON.stringify(this.todos)); } catch (e) { }
},
toggleInput() {
const container = document.getElementById('todo-input-container');
const field = document.getElementById('todo-input-field');
if (container.style.display === 'none') {
container.style.display = 'flex';
field.focus();
} else {
container.style.display = 'none';
}
},
handleBlur() {
// Delay to allow button click to process first
setTimeout(() => {
if (this.isIgnoreBlur) {
this.isIgnoreBlur = false;
return;
}
const container = document.getElementById('todo-input-container');
if (container) container.style.display = 'none';
}, 200);
},
preventBlur(e) {
// Prevent input blur when clicking the add button
this.isIgnoreBlur = true;
},
addFromInput() {
const input = document.getElementById('todo-input-field');
if (input && input.value.trim()) {
this.todos.push({ text: input.value.trim(), done: false });
input.value = '';
this.save();
this.render();
// 保持底部可见
const list = document.getElementById('todo-list');
list.scrollTop = list.scrollHeight;
// Keep input open and focused
input.focus();
}
},
handleInputKey(e) { if (e.key === 'Enter') this.addFromInput(); },
toggle(index) {
this.todos[index].done = !this.todos[index].done;
this.save(); this.render();
},
remove(index, e) {
if (e) e.stopPropagation();
this.todos.splice(index, 1);
this.save(); this.render();
},
render() {
const container = document.getElementById('todo-list');
if (!container) return;
if (this.todos.length === 0) {
container.innerHTML = '<div class="empty-todo-hint">No tasks.</div>';
return;
}
container.innerHTML = this.todos.map((todo, index) => `
<div class="todo-item ${todo.done ? 'done' : ''}" onclick="window.menavTodoApp.toggle(${index})">
<div class="todo-checkbox ${todo.done ? 'checked' : ''}">
${todo.done ? '<span class="fas fa-check"></span>' : ''}
</div>
<div class="todo-text" title="${this.escapeHtml(todo.text)}">${this.escapeHtml(todo.text)}</div>
<button class="todo-delete-btn" onclick="window.menavTodoApp.remove(${index}, event)" title="Delete">
<span class="fas fa-trash-alt"></span>
</button>
</div>
`).join('');
},
escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
};
window.menavTodoApp.init();
})();
</script> <section class="category category-level-1"
id="置顶"
data-type="category"
data-id="置顶"
data-name="置顶"
data-icon="fas fa-star"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-star"></i>
置顶
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="http://www.bighill.top:12390/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Bighill" data-url="http://www.bighill.top:12390/"
data-icon="fas fa-home"
data-description="个人主页"
data-tooltip="Bighill - 个人主页"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;http%3A%2F%2Fwww.bighill.top%3A12390%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Bighill favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;http%3A%2F%2Fwww.bighill.top%3A12390%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-home icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Bighill</h3>
<p>个人主页</p>
</div>
</a>
<a href="https://linux.do/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Linux.do" data-url="https://linux.do/"
data-icon="fab fa-linux"
data-description="新的理想型社区"
data-tooltip="Linux.do - 新的理想型社区"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Flinux.do%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Linux.do favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Flinux.do%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-linux icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Linux.do</h3>
<p>新的理想型社区</p>
</div>
</a>
<a href="https://rbetree.github.io/menav" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Menav" data-url="https://rbetree.github.io/menav"
data-icon="fas fa-star" data-favicon-url="assets/menav.svg"
data-description="个人导航站"
data-tooltip="Menav - 个人导航站"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="assets/menav.svg" alt="Menav favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-star icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Menav</h3>
<p>个人导航站</p>
</div>
</a>
<a href="https://www.google.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Google" data-url="https://www.google.com"
data-icon="fab fa-google"
data-description="全球最大的搜索引擎"
data-tooltip="Google - 全球最大的搜索引擎"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.google.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Google favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.google.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-google icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Google</h3>
<p>全球最大的搜索引擎</p>
</div>
</a>
<a href="https://www.github.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="GitHub" data-url="https://www.github.com"
data-icon="fab fa-github"
data-description="代码托管平台"
data-tooltip="GitHub - 代码托管平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.github.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="GitHub favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.github.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>GitHub</h3>
<p>代码托管平台</p>
</div>
</a>
<a href="https://stackoverflow.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Stack Overflow" data-url="https://stackoverflow.com"
data-icon="fab fa-stack-overflow"
data-description="程序员问答社区"
data-tooltip="Stack Overflow - 程序员问答社区"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fstackoverflow.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Stack Overflow favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fstackoverflow.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-stack-overflow icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Stack Overflow</h3>
<p>程序员问答社区</p>
</div>
</a>
<a href="https://chat.openai.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="ChatGPT" data-url="https://chat.openai.com"
data-icon="fas fa-robot"
data-description="AI智能助手"
data-tooltip="ChatGPT - AI智能助手"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fchat.openai.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="ChatGPT favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fchat.openai.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-robot icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>ChatGPT</h3>
<p>AI智能助手</p>
</div>
</a>
<a href="https://www.youtube.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="YouTube" data-url="https://www.youtube.com"
data-icon="fab fa-youtube"
data-description="视频分享平台"
data-tooltip="YouTube - 视频分享平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.youtube.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="YouTube favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.youtube.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-youtube icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>YouTube</h3>
<p>视频分享平台</p>
</div>
</a>
<a href="https://twitter.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Twitter" data-url="https://twitter.com"
data-icon="fab fa-twitter"
data-description="社交媒体平台"
data-tooltip="Twitter - 社交媒体平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ftwitter.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Twitter favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ftwitter.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-twitter icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Twitter</h3>
<p>社交媒体平台</p>
</div>
</a>
<a href="https://www.reddit.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Reddit" data-url="https://www.reddit.com"
data-icon="fab fa-reddit"
data-description="社区讨论平台"
data-tooltip="Reddit - 社区讨论平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.reddit.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Reddit favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.reddit.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-reddit icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Reddit</h3>
<p>社区讨论平台</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="学习资源"
data-type="category"
data-id="学习资源"
data-name="学习资源"
data-icon="fas fa-graduation-cap"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-graduation-cap"></i>
学习资源
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://www.bilibili.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="哔哩哔哩" data-url="https://www.bilibili.com"
data-icon="fas fa-play-circle"
data-description="视频学习平台"
data-tooltip="哔哩哔哩 - 视频学习平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.bilibili.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="哔哩哔哩 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.bilibili.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-play-circle icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>哔哩哔哩</h3>
<p>视频学习平台</p>
</div>
</a>
<a href="https://juejin.cn" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="掘金" data-url="https://juejin.cn"
data-icon="fas fa-book"
data-description="高质量技术社区"
data-tooltip="掘金 - 高质量技术社区"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fjuejin.cn&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="掘金 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fjuejin.cn&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-book icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>掘金</h3>
<p>高质量技术社区</p>
</div>
</a>
<a href="https://leetcode.cn" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="LeetCode" data-url="https://leetcode.cn"
data-icon="fas fa-code"
data-description="算法刷题平台"
data-tooltip="LeetCode - 算法刷题平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fleetcode.cn&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="LeetCode favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fleetcode.cn&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-code icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>LeetCode</h3>
<p>算法刷题平台</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="设计资源"
data-type="category"
data-id="设计资源"
data-name="设计资源"
data-icon="fas fa-palette"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-palette"></i>
设计资源
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://www.figma.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Figma" data-url="https://www.figma.com"
data-icon="fab fa-figma"
data-description="在线设计工具"
data-tooltip="Figma - 在线设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.figma.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Figma favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.figma.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-figma icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Figma</h3>
<p>在线设计工具</p>
</div>
</a>
<a href="https://dribbble.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Dribbble" data-url="https://dribbble.com"
data-icon="fab fa-dribbble"
data-description="设计师社区"
data-tooltip="Dribbble - 设计师社区"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fdribbble.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Dribbble favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fdribbble.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-dribbble icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Dribbble</h3>
<p>设计师社区</p>
</div>
</a>
<a href="https://www.iconfont.cn" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="IconFont" data-url="https://www.iconfont.cn"
data-icon="fas fa-icons"
data-description="图标资源库"
data-tooltip="IconFont - 图标资源库"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.iconfont.cn&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="IconFont favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.iconfont.cn&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-icons icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>IconFont</h3>
<p>图标资源库</p>
</div>
</a>
<a href="https://www.adobe.com/products/xd.html" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Adobe XD" data-url="https://www.adobe.com/products/xd.html"
data-icon="fab fa-adobe"
data-description="UI/UX设计工具"
data-tooltip="Adobe XD - UI/UX设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.adobe.com%2Fproducts%2Fxd.html&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Adobe XD favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.adobe.com%2Fproducts%2Fxd.html&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-adobe icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Adobe XD</h3>
<p>UI/UX设计工具</p>
</div>
</a>
<a href="https://www.sketch.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Sketch" data-url="https://www.sketch.com"
data-icon="fas fa-pencil-ruler"
data-description="矢量设计工具"
data-tooltip="Sketch - 矢量设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.sketch.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Sketch favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.sketch.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pencil-ruler icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Sketch</h3>
<p>矢量设计工具</p>
</div>
</a>
<a href="https://www.canva.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Canva" data-url="https://www.canva.com"
data-icon="fas fa-paint-brush"
data-description="在线平面设计"
data-tooltip="Canva - 在线平面设计"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.canva.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Canva favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.canva.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-paint-brush icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Canva</h3>
<p>在线平面设计</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="在线工具"
data-type="category"
data-id="在线工具"
data-name="在线工具"
data-icon="fas fa-wrench"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-wrench"></i>
在线工具
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://jsoneditoronline.org" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="JSON Editor" data-url="https://jsoneditoronline.org"
data-icon="fas fa-code-branch"
data-description="JSON在线编辑器"
data-tooltip="JSON Editor - JSON在线编辑器"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fjsoneditoronline.org&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="JSON Editor favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fjsoneditoronline.org&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-code-branch icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>JSON Editor</h3>
<p>JSON在线编辑器</p>
</div>
</a>
<a href="https://caniuse.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Can I Use" data-url="https://caniuse.com"
data-icon="fas fa-browser"
data-description="浏览器兼容性查询"
data-tooltip="Can I Use - 浏览器兼容性查询"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcaniuse.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Can I Use favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcaniuse.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-browser icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Can I Use</h3>
<p>浏览器兼容性查询</p>
</div>
</a>
<a href="https://tinypng.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="TinyPNG" data-url="https://tinypng.com"
data-icon="fas fa-compress"
data-description="图片压缩工具"
data-tooltip="TinyPNG - 图片压缩工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ftinypng.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="TinyPNG favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ftinypng.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-compress icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>TinyPNG</h3>
<p>图片压缩工具</p>
</div>
</a>
<a href="https://carbon.now.sh" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Carbon" data-url="https://carbon.now.sh"
data-icon="fas fa-code"
data-description="代码图片生成器"
data-tooltip="Carbon - 代码图片生成器"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcarbon.now.sh&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Carbon favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcarbon.now.sh&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-code icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Carbon</h3>
<p>代码图片生成器</p>
</div>
</a>
<a href="https://excalidraw.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Excalidraw" data-url="https://excalidraw.com"
data-icon="fas fa-pencil-alt"
data-description="手绘风格图表工具"
data-tooltip="Excalidraw - 手绘风格图表工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fexcalidraw.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Excalidraw favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fexcalidraw.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pencil-alt icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Excalidraw</h3>
<p>手绘风格图表工具</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="云服务平台"
data-type="category"
data-id="云服务平台"
data-name="云服务平台"
data-icon="fas fa-cloud"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-cloud"></i>
云服务平台
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://www.cloudflare.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Cloudflare" data-url="https://www.cloudflare.com"
data-icon="fas fa-cloud"
data-description="CDN与安全服务"
data-tooltip="Cloudflare - CDN与安全服务"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.cloudflare.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Cloudflare favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.cloudflare.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Cloudflare</h3>
<p>CDN与安全服务</p>
</div>
</a>
<a href="https://vercel.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Vercel" data-url="https://vercel.com"
data-icon="fas fa-server"
data-description="前端部署平台"
data-tooltip="Vercel - 前端部署平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvercel.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Vercel favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvercel.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-server icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Vercel</h3>
<p>前端部署平台</p>
</div>
</a>
<a href="https://www.netlify.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Netlify" data-url="https://www.netlify.com"
data-icon="fas fa-globe"
data-description="静态网站托管"
data-tooltip="Netlify - 静态网站托管"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.netlify.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Netlify favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.netlify.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-globe icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Netlify</h3>
<p>静态网站托管</p>
</div>
</a>
<a href="https://aws.amazon.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="AWS" data-url="https://aws.amazon.com"
data-icon="fab fa-aws"
data-description="亚马逊云服务"
data-tooltip="AWS - 亚马逊云服务"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Faws.amazon.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="AWS favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Faws.amazon.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-aws icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>AWS</h3>
<p>亚马逊云服务</p>
</div>
</a>
<a href="https://azure.microsoft.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Azure" data-url="https://azure.microsoft.com"
data-icon="fab fa-microsoft"
data-description="微软云平台"
data-tooltip="Azure - 微软云平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fazure.microsoft.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Azure favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fazure.microsoft.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-microsoft icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Azure</h3>
<p>微软云平台</p>
</div>
</a>
<a href="https://cloud.google.com" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Google Cloud" data-url="https://cloud.google.com"
data-icon="fab fa-google"
data-description="谷歌云平台"
data-tooltip="Google Cloud - 谷歌云平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcloud.google.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Google Cloud favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcloud.google.com&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-google icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Google Cloud</h3>
<p>谷歌云平台</p>
</div>
</a>
</div>
</div>
</section>
</div>
</div>
<div class="page projects" id="projects">
<div class="page-template page-template-projects">
<div class="welcome-section">
<div class="welcome-section-main">
<div class="welcome-title-row">
<h2 data-editable="page-title">项目</h2>
</div>
<p class="subtitle" data-editable="page-subtitle">项目展示</p>
</div>
</div>
<section class="category category-level-1 gh-heatmap-category" data-type="heatmap">
<div class="category-header">
<div class="gh-heatmap-header">
<h2>
<i class="fab fa-github"></i>
<span class="gh-text-desktop">GitHub Contributions</span>
<span class="gh-text-mobile">Contributions</span>
<span class="gh-heatmap-username">@rbetree</span>
</h2>
<div class="gh-legend" aria-hidden="true">
<span>
<span class="gh-text-desktop">Less</span>
<span class="gh-text-mobile">L</span>
</span>
<div class="gh-legend-item level-0"></div>
<div class="gh-legend-item level-1"></div>
<div class="gh-legend-item level-2"></div>
<div class="gh-legend-item level-3"></div>
<div class="gh-legend-item level-4"></div>
<span>
<span class="gh-text-desktop">More</span>
<span class="gh-text-mobile">M</span>
</span>
</div>
</div>
</div>
<div class="category-content">
<div class="gh-heatmap-wrapper">
<div class="calendar gh-calendar" data-github-username="rbetree" id="github-calendar-rbetree">
<div class="position-relative">
<h2 tabindex="-1" id="js-contribution-activity-description" class="f4 text-normal mb-2">
722
contributions
in the last year
</h2>
<a href="#year-link-2026" class="hide-sm hide-md hide-lg tmp-p-3 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus">Skip to contributions year list</a>
<div class="border py-2 graph-before-activity-overview">
<div class="js-calendar-graph tmp-mx-md-2 tmp-mx-3 d-flex flex-column flex-items-end flex-xl-items-center overflow-hidden pt-1 is-graph-loading graph-canvas ContributionCalendar height-full text-center"
data-graph-url="/users/rbetree/contributions"
data-url="/rbetree"
data-from="2025-04-20 00:00:00 UTC"
data-to="2026-04-22 23:59:59 UTC"
data-org=""
>
<div style="max-width: 100%; overflow-y: hidden; overflow-x: auto">
<table data-hydro-click="{&quot;event_type&quot;:&quot;user_profile.click&quot;,&quot;payload&quot;:{&quot;profile_user_id&quot;:108077543,&quot;target&quot;:&quot;CONTRIBUTION_CALENDAR_SQUARE&quot;,&quot;user_id&quot;:null,&quot;originating_url&quot;:&quot;https://github.com/users/rbetree/contributions&quot;}}" data-hydro-click-hmac="5367cc57cc819fedefd95a14821925c6748e203df08214fbf8f1e9913495add4" role="grid" aria-readonly="true" class="ContributionCalendar-grid js-calendar-graph-table" style="border-spacing: 4px; overflow: hidden; position: relative">
<caption class="sr-only">Contribution Graph</caption>
<thead>
<tr style="height: 15px">
<td style="width: 29px">
<span class="sr-only">Day of Week</span>
</td>
<td class="ContributionCalendar-label" colspan="2" style="position: relative">
<span class="sr-only">April</span>
<span aria-hidden="true" style="position: absolute; top: 0">Apr</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">May</span>
<span aria-hidden="true" style="position: absolute; top: 0">May</span>
</td>
<td class="ContributionCalendar-label" colspan="5" style="position: relative">
<span class="sr-only">June</span>
<span aria-hidden="true" style="position: absolute; top: 0">Jun</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">July</span>
<span aria-hidden="true" style="position: absolute; top: 0">Jul</span>
</td>
<td class="ContributionCalendar-label" colspan="5" style="position: relative">
<span class="sr-only">August</span>
<span aria-hidden="true" style="position: absolute; top: 0">Aug</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">September</span>
<span aria-hidden="true" style="position: absolute; top: 0">Sep</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">October</span>
<span aria-hidden="true" style="position: absolute; top: 0">Oct</span>
</td>
<td class="ContributionCalendar-label" colspan="5" style="position: relative">
<span class="sr-only">November</span>
<span aria-hidden="true" style="position: absolute; top: 0">Nov</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">December</span>
<span aria-hidden="true" style="position: absolute; top: 0">Dec</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">January</span>
<span aria-hidden="true" style="position: absolute; top: 0">Jan</span>
</td>
<td class="ContributionCalendar-label" colspan="4" style="position: relative">
<span class="sr-only">February</span>
<span aria-hidden="true" style="position: absolute; top: 0">Feb</span>
</td>
<td class="ContributionCalendar-label" colspan="5" style="position: relative">
<span class="sr-only">March</span>
<span aria-hidden="true" style="position: absolute; top: 0">Mar</span>
</td>
<td class="ContributionCalendar-label" colspan="3" style="position: relative">
<span class="sr-only">April</span>
<span aria-hidden="true" style="position: absolute; top: 0">Apr</span>
</td>
</tr>
</thead>
<tbody>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Sunday</span>
<span aria-hidden="true" style="clip-path: Circle(0); position: absolute; bottom: -4px">
Sun
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-04-20" id="contribution-day-component-0-0" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a949c687-7aca-4e37-945e-50f68cc1912e" for="contribution-day-component-0-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 20th.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-04-27" id="contribution-day-component-0-1" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a3c0c073-42b5-4fd4-8dfe-bb53df2c065a" for="contribution-day-component-0-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on April 27th.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-04" id="contribution-day-component-0-2" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bb8eecb5-2873-4423-a3c0-3144eeaa7a1c" for="contribution-day-component-0-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">11 contributions on May 4th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-11" id="contribution-day-component-0-3" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ce34ece4-6654-4e7a-9b88-5243e9305ca4" for="contribution-day-component-0-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on May 11th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-18" id="contribution-day-component-0-4" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-50d39b64-71f7-4a61-8b77-588511b11e84" for="contribution-day-component-0-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on May 18th.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-25" id="contribution-day-component-0-5" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-62dab7aa-f3e1-4f25-88e9-4ba4bdea0bf5" for="contribution-day-component-0-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 25th.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-4" style="width: 11px" data-date="2025-06-01" id="contribution-day-component-0-6" data-level="4" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f2a925ab-983a-4e73-b1f2-f58cc3b5e63b" for="contribution-day-component-0-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">21 contributions on June 1st.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-08" id="contribution-day-component-0-7" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a3df9baf-1da6-46f0-8228-2dd17e642680" for="contribution-day-component-0-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 8th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-06-15" id="contribution-day-component-0-8" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-fbd73b26-73c4-4065-b5a7-7a0bc4c7bed0" for="contribution-day-component-0-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on June 15th.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-22" id="contribution-day-component-0-9" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0624752c-24b1-4ede-b897-fedaeb1aa292" for="contribution-day-component-0-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 22nd.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-29" id="contribution-day-component-0-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-14264cb7-de50-4322-837c-7d72f06bc8e2" for="contribution-day-component-0-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 29th.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-07-06" id="contribution-day-component-0-11" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4f683acd-d8df-4823-bff7-1ad38889673a" for="contribution-day-component-0-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on July 6th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-13" id="contribution-day-component-0-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-aa64c366-db74-4f1a-9c94-b3c93805d8c5" for="contribution-day-component-0-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 13th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-20" id="contribution-day-component-0-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-860a435f-fa24-4957-99d1-88b5ff77e6b3" for="contribution-day-component-0-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 20th.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-27" id="contribution-day-component-0-14" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0c91cbb4-44ba-48d1-ae8d-7f096cedf25d" for="contribution-day-component-0-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 27th.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-03" id="contribution-day-component-0-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a5ec2e0b-8479-452e-bb1f-e14aa0252c64" for="contribution-day-component-0-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 3rd.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-10" id="contribution-day-component-0-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d7576eb5-5e15-4599-a714-1a2d3371d012" for="contribution-day-component-0-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 10th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-17" id="contribution-day-component-0-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f4e8a0b0-5229-4b41-ae7a-e85f35ebcd3e" for="contribution-day-component-0-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 17th.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-24" id="contribution-day-component-0-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-66c6ca93-2322-411c-8be1-1136723b5df8" for="contribution-day-component-0-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 24th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-31" id="contribution-day-component-0-19" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-198cc714-8537-4de4-bd61-3022cee48f80" for="contribution-day-component-0-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 31st.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-07" id="contribution-day-component-0-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f92ac0d2-6e39-4ce9-a91e-e9d82f7a747f" for="contribution-day-component-0-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 7th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-14" id="contribution-day-component-0-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a20986b3-6b85-4b0a-8952-6918f80a7313" for="contribution-day-component-0-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 14th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-21" id="contribution-day-component-0-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7fb4a6e1-b1d0-43a2-b6be-b6578199461f" for="contribution-day-component-0-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 21st.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-28" id="contribution-day-component-0-23" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ca99ab38-a188-4d3d-b20f-b6e13e8eea70" for="contribution-day-component-0-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 28th.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-05" id="contribution-day-component-0-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-483a0448-6498-410d-99ab-8fe46b5759e2" for="contribution-day-component-0-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 5th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-12" id="contribution-day-component-0-25" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cfa1aa33-995d-43f6-9100-cebf1e59c334" for="contribution-day-component-0-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 12th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-10-19" id="contribution-day-component-0-26" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a324a228-269c-4adf-bbb4-7a6621a03fba" for="contribution-day-component-0-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on October 19th.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-26" id="contribution-day-component-0-27" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d31b3f4f-fee6-424c-a116-b6cccd359e10" for="contribution-day-component-0-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on October 26th.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-11-02" id="contribution-day-component-0-28" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c965b813-8bc2-4474-a792-bbdec92effe9" for="contribution-day-component-0-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on November 2nd.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-11-09" id="contribution-day-component-0-29" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2ad80c33-f438-42e3-a681-9d06c5a59413" for="contribution-day-component-0-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on November 9th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-16" id="contribution-day-component-0-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e4a762f6-d028-4574-98d8-9932bdc9da57" for="contribution-day-component-0-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 16th.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-23" id="contribution-day-component-0-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f99b0097-adb9-44f6-b191-3cdfca04bcb5" for="contribution-day-component-0-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 23rd.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-30" id="contribution-day-component-0-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3b7e1f4b-b3cc-4877-a66d-29106ceb9ddc" for="contribution-day-component-0-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 30th.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-07" id="contribution-day-component-0-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8b79823f-d12e-4f43-bd56-3c44bcbc6838" for="contribution-day-component-0-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 7th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-14" id="contribution-day-component-0-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b069280a-67d7-4a08-b9d2-196e8ce0ee50" for="contribution-day-component-0-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 14th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-21" id="contribution-day-component-0-35" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b8190ce5-5bb0-4173-89b0-932d15dab9cf" for="contribution-day-component-0-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 21st.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-12-28" id="contribution-day-component-0-36" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4c241395-dd3b-4fcc-8e7f-a50b9175da65" for="contribution-day-component-0-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">6 contributions on December 28th.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-01-04" id="contribution-day-component-0-37" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ebcdc86b-e0ec-4df5-8076-2c08c0ec4681" for="contribution-day-component-0-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on January 4th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-11" id="contribution-day-component-0-38" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3c790975-858c-45bb-ba84-a446ff06f56b" for="contribution-day-component-0-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 11th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-18" id="contribution-day-component-0-39" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1b5e114e-a60d-4eeb-9a10-ff22f5ae71c2" for="contribution-day-component-0-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 18th.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-01-25" id="contribution-day-component-0-40" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-db6b3bb2-ec09-409b-9e60-74c5bf0eca92" for="contribution-day-component-0-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">6 contributions on January 25th.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-02-01" id="contribution-day-component-0-41" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-df85e85f-53af-4e8a-b4ce-3a7e2aa8ea6c" for="contribution-day-component-0-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on February 1st.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-08" id="contribution-day-component-0-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e5a3f406-eeea-4061-9cce-715e9c37a84f" for="contribution-day-component-0-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 8th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-02-15" id="contribution-day-component-0-43" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8c192528-155b-4b2f-b5fb-aa09af6be307" for="contribution-day-component-0-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">9 contributions on February 15th.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-22" id="contribution-day-component-0-44" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0e01d5d5-1eb8-43be-b833-680d89cca666" for="contribution-day-component-0-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 22nd.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-01" id="contribution-day-component-0-45" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a6c1c04d-eb13-4269-beaa-58e78f70abaf" for="contribution-day-component-0-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on March 1st.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-08" id="contribution-day-component-0-46" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-84035fed-2ede-4751-a4bc-39faa7eb2096" for="contribution-day-component-0-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 8th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-15" id="contribution-day-component-0-47" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d53480aa-6d1c-417e-8e2d-2dc0884afcc7" for="contribution-day-component-0-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 15th.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-22" id="contribution-day-component-0-48" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8a85a0e5-5d78-41fb-85aa-434d979dafd9" for="contribution-day-component-0-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on March 22nd.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-29" id="contribution-day-component-0-49" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ef2cd127-7540-494c-9668-ff3518954ef1" for="contribution-day-component-0-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on March 29th.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-05" id="contribution-day-component-0-50" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7fa5ce3b-b33d-4ada-9063-b477e28c5254" for="contribution-day-component-0-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 5th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-12" id="contribution-day-component-0-51" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c8ef93a3-dd8f-4c69-8c92-bd12c5f76c92" for="contribution-day-component-0-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 12th.</tool-tip>
<td tabindex="0" data-ix="52" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2026-04-19" id="contribution-day-component-0-52" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ddb9d306-eafb-4748-bc03-43f0d600cd7b" for="contribution-day-component-0-52" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">16 contributions on April 19th.</tool-tip>
</tr>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Monday</span>
<span aria-hidden="true" style="clip-path: None; position: absolute; bottom: -4px">
Mon
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-04-21" id="contribution-day-component-1-0" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e1763e79-9bac-40a5-8687-ccd1e4a44589" for="contribution-day-component-1-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 21st.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-04-28" id="contribution-day-component-1-1" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-11189456-9f7b-464f-9366-7e90e9e5ea3a" for="contribution-day-component-1-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on April 28th.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-05" id="contribution-day-component-1-2" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3b64a003-30c1-4dc2-ad13-200042272f35" for="contribution-day-component-1-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">10 contributions on May 5th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-12" id="contribution-day-component-1-3" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bd733fe8-cf53-48f7-8d54-ea9f71581a52" for="contribution-day-component-1-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">10 contributions on May 12th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-19" id="contribution-day-component-1-4" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-974fdb5f-db36-4048-9f9d-feb69a33aa3a" for="contribution-day-component-1-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 19th.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-26" id="contribution-day-component-1-5" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c688d2aa-036c-4cc5-8424-a1a6a70bbd8e" for="contribution-day-component-1-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 26th.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-02" id="contribution-day-component-1-6" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2d7e3108-d87b-4e13-ae27-40f59c96d8f6" for="contribution-day-component-1-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on June 2nd.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-09" id="contribution-day-component-1-7" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-34383410-d9f5-40e4-9295-6da271680369" for="contribution-day-component-1-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 9th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-16" id="contribution-day-component-1-8" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d2c9262d-1123-43dc-880d-6a4681e519a5" for="contribution-day-component-1-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on June 16th.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-23" id="contribution-day-component-1-9" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-19e12405-fd00-43a0-8e64-c02d3fe6d4db" for="contribution-day-component-1-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on June 23rd.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-30" id="contribution-day-component-1-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-195c07f5-0248-47f9-8f4e-5fdc9fba3a99" for="contribution-day-component-1-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 30th.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-07-07" id="contribution-day-component-1-11" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-468f61f5-e18d-4cd2-9552-e8a61bb0ecf2" for="contribution-day-component-1-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on July 7th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-14" id="contribution-day-component-1-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c0f24ca6-d0db-4e54-8e11-0fcbfdbdbfa1" for="contribution-day-component-1-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 14th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-21" id="contribution-day-component-1-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5aed5983-7422-42d4-94b1-15e219b90f6e" for="contribution-day-component-1-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 21st.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-28" id="contribution-day-component-1-14" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cf30f21b-2988-4002-b6e2-f5b8d317e7b2" for="contribution-day-component-1-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 28th.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-04" id="contribution-day-component-1-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b6d854ba-c3ed-4c34-a3fd-5abdc590532e" for="contribution-day-component-1-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 4th.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-11" id="contribution-day-component-1-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-34871fa3-0cc8-4208-913b-1ee6cf0ca5f5" for="contribution-day-component-1-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 11th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-18" id="contribution-day-component-1-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0b6c4166-2762-492a-964e-93fb77df49ef" for="contribution-day-component-1-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 18th.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-25" id="contribution-day-component-1-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a2553086-b2b7-4900-ab58-b8e78fd21d9e" for="contribution-day-component-1-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 25th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-01" id="contribution-day-component-1-19" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5f108ccb-4fc9-4817-a83d-ef1e32c6701b" for="contribution-day-component-1-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 1st.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-08" id="contribution-day-component-1-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8c4662e9-7f6f-4f7d-865a-ebf3646ff497" for="contribution-day-component-1-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 8th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-15" id="contribution-day-component-1-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1ee828fa-b30b-46ff-b1c0-4723375e6884" for="contribution-day-component-1-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 15th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-22" id="contribution-day-component-1-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c2570ae8-3334-47c6-bfc5-3b5733cee453" for="contribution-day-component-1-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 22nd.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-29" id="contribution-day-component-1-23" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2b0a6222-54fa-4f7b-ac98-64f6dbbbbda9" for="contribution-day-component-1-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 29th.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-06" id="contribution-day-component-1-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-27c9f62d-2adb-4473-bf20-1471993a4b19" for="contribution-day-component-1-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 6th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-13" id="contribution-day-component-1-25" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e61d1c7a-6f90-4369-b0b1-15ed27a5f3ca" for="contribution-day-component-1-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 13th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-20" id="contribution-day-component-1-26" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9f467786-75d3-4da9-8347-e5a2644e7e2f" for="contribution-day-component-1-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on October 20th.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-27" id="contribution-day-component-1-27" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-37d5722d-9c5c-4bba-b6d7-45e6ff7d603c" for="contribution-day-component-1-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on October 27th.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-03" id="contribution-day-component-1-28" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d54b1e95-9e30-47eb-9155-63867f13bf02" for="contribution-day-component-1-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 3rd.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-10" id="contribution-day-component-1-29" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4b029fc8-6e9f-4cd9-bfcb-6dafc6b98169" for="contribution-day-component-1-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 10th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-17" id="contribution-day-component-1-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-188a020b-8b2d-4e8f-a474-459b14b054c8" for="contribution-day-component-1-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 17th.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-24" id="contribution-day-component-1-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bb39e9d6-512d-43d9-841f-3a7a2fa1e9f3" for="contribution-day-component-1-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 24th.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-01" id="contribution-day-component-1-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-36ff14de-139b-4c02-ba85-29d39192736e" for="contribution-day-component-1-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 1st.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-08" id="contribution-day-component-1-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b62cf1c1-8706-4ee9-92bd-5cd83d5ed7f0" for="contribution-day-component-1-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 8th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-15" id="contribution-day-component-1-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cb7e9d73-0a73-4f8b-a7f3-538f416f1794" for="contribution-day-component-1-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 15th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-12-22" id="contribution-day-component-1-35" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c6c9d4ee-4ce0-4324-b6d6-ccf6c085e545" for="contribution-day-component-1-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">14 contributions on December 22nd.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-29" id="contribution-day-component-1-36" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-be08a8d0-3fc5-475b-8156-0db5a6f0dfa3" for="contribution-day-component-1-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 29th.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-05" id="contribution-day-component-1-37" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ee80b047-25f8-4c96-a312-c0add326cdc0" for="contribution-day-component-1-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on January 5th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-12" id="contribution-day-component-1-38" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d84d4ce6-5407-4265-9141-c64b862a6d17" for="contribution-day-component-1-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 12th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-19" id="contribution-day-component-1-39" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3a0266bf-dae8-4297-b0cf-8bba9141d712" for="contribution-day-component-1-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on January 19th.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-4" style="width: 11px" data-date="2026-01-26" id="contribution-day-component-1-40" data-level="4" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0769ef72-03e1-4c1c-b789-624c895a9b3e" for="contribution-day-component-1-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">27 contributions on January 26th.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-02" id="contribution-day-component-1-41" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5871b57d-7511-4736-af1b-8d625c203627" for="contribution-day-component-1-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 2nd.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-09" id="contribution-day-component-1-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5cc252a5-63ff-44ce-ac51-da40010e998d" for="contribution-day-component-1-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 9th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-4" style="width: 11px" data-date="2026-02-16" id="contribution-day-component-1-43" data-level="4" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a1df9dcd-39d2-4122-af65-953a610f90b6" for="contribution-day-component-1-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">23 contributions on February 16th.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-23" id="contribution-day-component-1-44" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-69ca265f-551d-491b-b4ec-54b0c411b4e9" for="contribution-day-component-1-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 23rd.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-02" id="contribution-day-component-1-45" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-08bc4825-f6d1-46e2-a0aa-bc05fd481cdb" for="contribution-day-component-1-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 2nd.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-09" id="contribution-day-component-1-46" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9e9923bb-1063-48c2-941a-d1117a551204" for="contribution-day-component-1-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on March 9th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-16" id="contribution-day-component-1-47" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7a041a34-4622-41c3-9267-27f17e82f4e3" for="contribution-day-component-1-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 16th.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-03-23" id="contribution-day-component-1-48" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f136b3aa-7cbd-43d7-a052-226527719498" for="contribution-day-component-1-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on March 23rd.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-30" id="contribution-day-component-1-49" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-223fb0f4-e25b-432a-9416-5e942f8cd27f" for="contribution-day-component-1-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 30th.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-06" id="contribution-day-component-1-50" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7848f40a-f17a-4e8f-b7d1-a2dd00c5f9f2" for="contribution-day-component-1-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 6th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-13" id="contribution-day-component-1-51" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-98300e52-c87e-4b47-a527-bb07f38308be" for="contribution-day-component-1-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on April 13th.</tool-tip>
<td tabindex="0" data-ix="52" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-20" id="contribution-day-component-1-52" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8ed4d7f6-753f-4494-bbae-1d0d0d052821" for="contribution-day-component-1-52" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 20th.</tool-tip>
</tr>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Tuesday</span>
<span aria-hidden="true" style="clip-path: Circle(0); position: absolute; bottom: -4px">
Tue
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-04-22" id="contribution-day-component-2-0" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e0f576e7-20e3-44b1-a5a4-4ac9fbb320e8" for="contribution-day-component-2-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 22nd.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-04-29" id="contribution-day-component-2-1" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-aac7dce6-039e-4e9e-b5b0-de2ac6590e22" for="contribution-day-component-2-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">10 contributions on April 29th.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-06" id="contribution-day-component-2-2" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ebb4fe35-8268-4759-a53c-d127ac97c521" for="contribution-day-component-2-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 6th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-13" id="contribution-day-component-2-3" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5ac0ec14-8c8b-45da-a86a-caabca3e0e8e" for="contribution-day-component-2-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 13th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-05-20" id="contribution-day-component-2-4" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-16a09cd1-3b78-41f5-bb75-fbe3e99f44af" for="contribution-day-component-2-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on May 20th.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-27" id="contribution-day-component-2-5" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cf1f374f-119a-487f-b660-ed9bc24579da" for="contribution-day-component-2-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 27th.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-06-03" id="contribution-day-component-2-6" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-28152fa9-02a1-4c8e-bf75-2307007255ea" for="contribution-day-component-2-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on June 3rd.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-10" id="contribution-day-component-2-7" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-dc76e358-e9c8-4517-a3da-0dde5bf9c3f3" for="contribution-day-component-2-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 10th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-17" id="contribution-day-component-2-8" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bc60a3a2-19b1-4526-a28b-ba6876c056fb" for="contribution-day-component-2-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on June 17th.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-24" id="contribution-day-component-2-9" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-94cbd4e9-7cd7-441d-82d8-36147b1da9ae" for="contribution-day-component-2-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on June 24th.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-01" id="contribution-day-component-2-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cf02d4af-0080-4813-b198-d4ccf4cef0ba" for="contribution-day-component-2-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 1st.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-08" id="contribution-day-component-2-11" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b47ddd53-cbac-41f9-8b8f-abdd78cc2a3e" for="contribution-day-component-2-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 8th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-15" id="contribution-day-component-2-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-07052273-e915-4e19-b330-2c655ab15d68" for="contribution-day-component-2-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 15th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-22" id="contribution-day-component-2-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-31cf929c-b12d-4086-8a93-bf71502f8144" for="contribution-day-component-2-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 22nd.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-29" id="contribution-day-component-2-14" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-6d9319c9-6b1b-4e47-af4e-6ef4ceecc2ea" for="contribution-day-component-2-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 29th.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-05" id="contribution-day-component-2-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5d16a08f-2676-4ade-8560-7f74be2fc114" for="contribution-day-component-2-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 5th.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-12" id="contribution-day-component-2-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c51a8ef4-1063-440d-b023-17ae5f03d6e8" for="contribution-day-component-2-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 12th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-19" id="contribution-day-component-2-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ece818b2-8b8c-4778-a771-213734e777eb" for="contribution-day-component-2-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 19th.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-26" id="contribution-day-component-2-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-43e6dff6-049a-42cf-b4b1-674a80d6da97" for="contribution-day-component-2-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 26th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-02" id="contribution-day-component-2-19" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5a643968-7fec-4185-8c10-c0c393b0ddec" for="contribution-day-component-2-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 2nd.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-09" id="contribution-day-component-2-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9e5ebacb-2b5e-40fc-9460-136c647c1b54" for="contribution-day-component-2-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 9th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-16" id="contribution-day-component-2-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b7957b9b-dd6c-4c40-81e2-0cb59e2b99dd" for="contribution-day-component-2-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 16th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-23" id="contribution-day-component-2-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a8fe7ba7-470e-461d-8362-ef78c45bd085" for="contribution-day-component-2-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 23rd.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-30" id="contribution-day-component-2-23" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7b5bb9a9-f216-4116-b9f5-39a07247a4db" for="contribution-day-component-2-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 30th.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-07" id="contribution-day-component-2-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-be47d912-8be9-4512-ac89-b2c824fdd696" for="contribution-day-component-2-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 7th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-14" id="contribution-day-component-2-25" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-509d27d7-a177-4749-ab8c-eb142b123299" for="contribution-day-component-2-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on October 14th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-21" id="contribution-day-component-2-26" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7ab2b731-9db4-4fd9-9f30-2a4343eb4308" for="contribution-day-component-2-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 21st.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-28" id="contribution-day-component-2-27" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d7462573-3e8c-4cdf-aa31-1f496cc71fcf" for="contribution-day-component-2-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 28th.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-04" id="contribution-day-component-2-28" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9b0e027f-b47b-4312-b3d5-7b141444dc6c" for="contribution-day-component-2-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 4th.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-11" id="contribution-day-component-2-29" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-eef51b49-5d83-47b8-ba3c-f2255e1bd602" for="contribution-day-component-2-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 11th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-18" id="contribution-day-component-2-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-61de843a-a8d3-448e-ac1f-bb7020fadf3f" for="contribution-day-component-2-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 18th.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-25" id="contribution-day-component-2-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c80062eb-88b6-4065-8188-fa8e68ebe914" for="contribution-day-component-2-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 25th.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-02" id="contribution-day-component-2-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5d66c7cf-0d83-4066-8989-80c064763e69" for="contribution-day-component-2-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 2nd.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-09" id="contribution-day-component-2-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-854df915-3793-4b5a-837f-13728e3cd37a" for="contribution-day-component-2-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 9th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-16" id="contribution-day-component-2-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d1d933ff-c63f-45fc-85be-22b1676a7284" for="contribution-day-component-2-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 16th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-12-23" id="contribution-day-component-2-35" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-176341b8-a4e9-4c4c-99de-f2969f9121f0" for="contribution-day-component-2-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on December 23rd.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-30" id="contribution-day-component-2-36" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-01cf1621-bd8a-446b-85ea-517789e7487a" for="contribution-day-component-2-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 30th.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-06" id="contribution-day-component-2-37" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7eecb3be-4bdd-4a55-aec2-dc8a4898ced5" for="contribution-day-component-2-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 6th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-13" id="contribution-day-component-2-38" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e2ce4b94-2c3a-400c-b550-961186923f88" for="contribution-day-component-2-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 13th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-20" id="contribution-day-component-2-39" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a34eb124-e923-4279-8dd3-ee700349fd22" for="contribution-day-component-2-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on January 20th.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-01-27" id="contribution-day-component-2-40" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-167df4b2-dce9-46be-9cb8-d8ed27cba2c7" for="contribution-day-component-2-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">6 contributions on January 27th.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-03" id="contribution-day-component-2-41" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-eb88a090-1e56-48cc-870a-e492e258560a" for="contribution-day-component-2-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 3rd.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-10" id="contribution-day-component-2-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-fda71c15-fbf6-4fc6-acff-de4977013f40" for="contribution-day-component-2-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 10th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2026-02-17" id="contribution-day-component-2-43" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-699c1587-b282-413e-9fb7-b14a076229fc" for="contribution-day-component-2-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">12 contributions on February 17th.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-24" id="contribution-day-component-2-44" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-321cf0fb-758e-4529-85c4-470ebfc0cbd3" for="contribution-day-component-2-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 24th.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-03" id="contribution-day-component-2-45" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-66695b7d-f2c7-4cb3-a366-06dc14d24b61" for="contribution-day-component-2-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on March 3rd.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-10" id="contribution-day-component-2-46" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3e68676e-9e96-4fce-8aa0-cf7848b45ccf" for="contribution-day-component-2-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 10th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-17" id="contribution-day-component-2-47" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-312e3dd4-3d60-48c1-8ed6-6ee9cdf40c00" for="contribution-day-component-2-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 17th.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-24" id="contribution-day-component-2-48" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-132c104c-af38-4654-8144-558dbe4875d9" for="contribution-day-component-2-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on March 24th.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-31" id="contribution-day-component-2-49" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-83c4c624-054b-4992-a385-9f45c6c6a216" for="contribution-day-component-2-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 31st.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-07" id="contribution-day-component-2-50" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-dbe89acc-15c6-44d1-85c8-f2166d28685a" for="contribution-day-component-2-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 7th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-14" id="contribution-day-component-2-51" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-de77db6f-435e-42a4-8cc3-265a7d779d72" for="contribution-day-component-2-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 14th.</tool-tip>
<td tabindex="0" data-ix="52" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-21" id="contribution-day-component-2-52" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-fae010cc-665e-47a7-b41b-c2ae8d956b36" for="contribution-day-component-2-52" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 21st.</tool-tip>
</tr>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Wednesday</span>
<span aria-hidden="true" style="clip-path: None; position: absolute; bottom: -4px">
Wed
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-04-23" id="contribution-day-component-3-0" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2299f3ce-a213-47c8-81ab-67bd73992efe" for="contribution-day-component-3-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 23rd.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-04-30" id="contribution-day-component-3-1" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-22ccb4a1-83bb-4206-8508-0fc1cb6a2970" for="contribution-day-component-3-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">9 contributions on April 30th.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-05-07" id="contribution-day-component-3-2" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5224af1d-9b73-46a6-852d-6d182b8d8cc3" for="contribution-day-component-3-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on May 7th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-05-14" id="contribution-day-component-3-3" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cd67ac8b-a763-49ff-9449-18d97d2bb00b" for="contribution-day-component-3-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">12 contributions on May 14th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-21" id="contribution-day-component-3-4" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-53de820a-f64d-4af1-872f-9cbb0639ab54" for="contribution-day-component-3-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on May 21st.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-05-28" id="contribution-day-component-3-5" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-45cc157c-23b4-49e2-aeea-cb1fc978c5f1" for="contribution-day-component-3-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on May 28th.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-04" id="contribution-day-component-3-6" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ce8a0fa9-a10c-4090-9b33-60c3b4f55732" for="contribution-day-component-3-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on June 4th.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-11" id="contribution-day-component-3-7" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1be55e6b-0cb2-4c25-a650-34b3b04721d1" for="contribution-day-component-3-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 11th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-18" id="contribution-day-component-3-8" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-88d0fe61-ff7e-4121-8407-cd781c8d4914" for="contribution-day-component-3-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on June 18th.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-25" id="contribution-day-component-3-9" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1930afaa-b93d-405b-b10c-d33c218764e4" for="contribution-day-component-3-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 25th.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-02" id="contribution-day-component-3-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-545ebfa0-6ad6-4965-8196-99a1880b8011" for="contribution-day-component-3-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 2nd.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-09" id="contribution-day-component-3-11" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f1d64c3f-6968-41bc-b3cd-b36170c45776" for="contribution-day-component-3-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 9th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-16" id="contribution-day-component-3-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1896b658-3595-46d7-b53b-d44b6033e35a" for="contribution-day-component-3-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 16th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-23" id="contribution-day-component-3-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-af35c640-d4ff-4682-8105-2e7b30852cc2" for="contribution-day-component-3-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 23rd.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-07-30" id="contribution-day-component-3-14" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8ea1cb16-5d72-451f-a8a5-9664d38f7a20" for="contribution-day-component-3-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on July 30th.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-06" id="contribution-day-component-3-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2125f938-8573-4775-b7c8-3be6bdbc40be" for="contribution-day-component-3-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 6th.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-13" id="contribution-day-component-3-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c7ddb48d-5c59-4172-a5c6-d4aac1791675" for="contribution-day-component-3-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 13th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-20" id="contribution-day-component-3-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b66c71ce-2d12-4fc1-897e-584bb42eb80f" for="contribution-day-component-3-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 20th.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-27" id="contribution-day-component-3-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5ebd35cf-602f-4282-bfe4-cd1c2fe587d7" for="contribution-day-component-3-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 27th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-03" id="contribution-day-component-3-19" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7f4132ee-6f7d-498d-8e2c-6b066f6a1948" for="contribution-day-component-3-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 3rd.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-10" id="contribution-day-component-3-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f8b0fe03-0b63-42c5-b6b6-919cb3ba8a18" for="contribution-day-component-3-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 10th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-17" id="contribution-day-component-3-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cc374d02-eddf-499c-8d94-4f767649f424" for="contribution-day-component-3-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 17th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-24" id="contribution-day-component-3-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-27258a4a-27fc-4024-ae43-db4e76115814" for="contribution-day-component-3-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 24th.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-01" id="contribution-day-component-3-23" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-29beb854-c13c-4754-ad04-ecabb2b97c15" for="contribution-day-component-3-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 1st.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-08" id="contribution-day-component-3-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-dc24f74f-2d47-449f-8e5d-56a5cda3fee9" for="contribution-day-component-3-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 8th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-15" id="contribution-day-component-3-25" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-42e469bf-2e1f-4444-9f75-9ddcdb7909a8" for="contribution-day-component-3-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 15th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-22" id="contribution-day-component-3-26" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-606e99a8-ceb8-4005-8cd9-3a1cf8314900" for="contribution-day-component-3-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on October 22nd.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-29" id="contribution-day-component-3-27" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d321b4d8-956a-480c-af2a-03bdc17c9ef7" for="contribution-day-component-3-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 29th.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-05" id="contribution-day-component-3-28" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8f4443fc-7368-4964-b549-0509e85b84c3" for="contribution-day-component-3-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 5th.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-12" id="contribution-day-component-3-29" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3f9f2949-6c7e-4145-85d2-441f22ba2272" for="contribution-day-component-3-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 12th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-19" id="contribution-day-component-3-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4fa1007a-49f2-44bb-a714-41cbeb9b36bd" for="contribution-day-component-3-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 19th.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-26" id="contribution-day-component-3-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3aba964c-6812-467e-9842-ba0444a6caa1" for="contribution-day-component-3-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 26th.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-03" id="contribution-day-component-3-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4bdd0779-db29-4415-800c-27b39331a6ec" for="contribution-day-component-3-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 3rd.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-10" id="contribution-day-component-3-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-26058320-fa10-4c4d-8b41-4fa35684205a" for="contribution-day-component-3-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 10th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-17" id="contribution-day-component-3-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9028d131-162f-4e79-bfc9-5b27d6923982" for="contribution-day-component-3-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 17th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-24" id="contribution-day-component-3-35" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-6898ab12-bf18-4324-909c-8c747e3ac1c3" for="contribution-day-component-3-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 24th.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-31" id="contribution-day-component-3-36" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bf1aeca4-3e69-4832-850a-5bc0d3ca9ea8" for="contribution-day-component-3-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 31st.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-07" id="contribution-day-component-3-37" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e5f35906-371e-4a08-bad7-7e40e1ec2f48" for="contribution-day-component-3-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on January 7th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-14" id="contribution-day-component-3-38" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0dd07aab-c9f8-428d-b165-790c4c39f39d" for="contribution-day-component-3-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 14th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-21" id="contribution-day-component-3-39" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bb4a5c39-e74b-4c04-8cb2-bb36c632e272" for="contribution-day-component-3-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on January 21st.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-01-28" id="contribution-day-component-3-40" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-04bebac6-e582-4ec8-a2cc-8fe8b3e14306" for="contribution-day-component-3-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on January 28th.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-04" id="contribution-day-component-3-41" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a31ff2cf-4b3c-47ac-b417-5c92d81f9227" for="contribution-day-component-3-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 4th.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-11" id="contribution-day-component-3-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ecbf8a2a-77d0-4098-9b60-bae03f021fd9" for="contribution-day-component-3-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 11th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-02-18" id="contribution-day-component-3-43" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4fe7e11e-3a5a-46c5-a9a8-bb78578c2aa2" for="contribution-day-component-3-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">6 contributions on February 18th.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-02-25" id="contribution-day-component-3-44" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d21206ac-266a-4f84-94c9-647c0456d7ca" for="contribution-day-component-3-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on February 25th.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-04" id="contribution-day-component-3-45" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-873094f7-835c-4079-b126-2f250085e657" for="contribution-day-component-3-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 4th.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-11" id="contribution-day-component-3-46" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-922fa3bf-6c61-48ae-9881-ddceb8d0c27d" for="contribution-day-component-3-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 11th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-18" id="contribution-day-component-3-47" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b012b168-5310-4219-89fe-5b8bffa404a1" for="contribution-day-component-3-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on March 18th.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-25" id="contribution-day-component-3-48" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d28c4b7f-6aba-4e9b-b86a-8910b1bc3f43" for="contribution-day-component-3-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on March 25th.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-01" id="contribution-day-component-3-49" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c644f229-6216-4ef8-98d8-adda6e673315" for="contribution-day-component-3-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 1st.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-08" id="contribution-day-component-3-50" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-dbe3231d-bb76-4d5b-bea0-f2ac46c2366a" for="contribution-day-component-3-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 8th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-04-15" id="contribution-day-component-3-51" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f624462b-1c43-40a5-a79a-84e49688385d" for="contribution-day-component-3-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on April 15th.</tool-tip>
<td tabindex="0" data-ix="52" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-22" id="contribution-day-component-3-52" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9ebcc2a6-a028-4790-b92f-1635eaa0910f" for="contribution-day-component-3-52" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 22nd.</tool-tip>
</tr>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Thursday</span>
<span aria-hidden="true" style="clip-path: Circle(0); position: absolute; bottom: -4px">
Thu
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-04-24" id="contribution-day-component-4-0" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-97f11241-ae8f-4936-a8ec-1b305ea58778" for="contribution-day-component-4-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on April 24th.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-05-01" id="contribution-day-component-4-1" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ed830386-e4d6-4374-b61c-898e1c017ad4" for="contribution-day-component-4-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">15 contributions on May 1st.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-05-08" id="contribution-day-component-4-2" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a1e2b457-9307-4d27-944f-1364738d67c7" for="contribution-day-component-4-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on May 8th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-05-15" id="contribution-day-component-4-3" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a8edd0ad-1f93-4978-868b-423f4255434b" for="contribution-day-component-4-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on May 15th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-22" id="contribution-day-component-4-4" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-506a8a20-c446-4fb9-8626-90692405b1f8" for="contribution-day-component-4-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">10 contributions on May 22nd.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-29" id="contribution-day-component-4-5" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-106454b7-9013-4888-9e29-69ea0f95c3a8" for="contribution-day-component-4-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on May 29th.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-06-05" id="contribution-day-component-4-6" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e362048c-6b1d-4d98-b7d2-5844e6d7e6f1" for="contribution-day-component-4-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">9 contributions on June 5th.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-12" id="contribution-day-component-4-7" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-22af5620-4389-477e-9b10-ede3b430c69f" for="contribution-day-component-4-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on June 12th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-19" id="contribution-day-component-4-8" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d1c763d4-765f-4f2b-abe3-c9605119f676" for="contribution-day-component-4-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on June 19th.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-06-26" id="contribution-day-component-4-9" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ead0eb63-dd0e-4b3e-ad4d-0258673e9673" for="contribution-day-component-4-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">14 contributions on June 26th.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-03" id="contribution-day-component-4-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4f83d859-73ad-4243-bf1a-da922ede53ae" for="contribution-day-component-4-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 3rd.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-10" id="contribution-day-component-4-11" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-70d848a0-5578-4702-b4f4-74d0b613474c" for="contribution-day-component-4-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 10th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-17" id="contribution-day-component-4-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e2de4290-7dd4-4d25-8da6-969c49031e41" for="contribution-day-component-4-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 17th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-24" id="contribution-day-component-4-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-efa78ece-576e-41c2-89e7-685cce3c87c9" for="contribution-day-component-4-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 24th.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-31" id="contribution-day-component-4-14" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b91927b2-e8e5-4740-ae99-932af7738c8b" for="contribution-day-component-4-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 31st.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-07" id="contribution-day-component-4-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b145da00-bfa6-43ef-93ce-5eef9f028af3" for="contribution-day-component-4-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 7th.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-14" id="contribution-day-component-4-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a68fba20-e0ab-4933-824f-edc807773400" for="contribution-day-component-4-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 14th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-21" id="contribution-day-component-4-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-79c40ad4-26e0-4aa3-b6eb-6d2d02270112" for="contribution-day-component-4-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 21st.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-28" id="contribution-day-component-4-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c9d7ac12-a2df-436d-982f-dbe9971928c8" for="contribution-day-component-4-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 28th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-04" id="contribution-day-component-4-19" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-129152ba-3061-4121-bd16-3b62a247eb5b" for="contribution-day-component-4-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 4th.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-11" id="contribution-day-component-4-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f6f08bc4-4f89-4e94-aaf0-3cb05f0136eb" for="contribution-day-component-4-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 11th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-18" id="contribution-day-component-4-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-921cf0b7-511c-41c2-8681-b6326e0f0934" for="contribution-day-component-4-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 18th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-25" id="contribution-day-component-4-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-aefd36d2-6160-4ecb-9d8e-762e0f5163c3" for="contribution-day-component-4-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 25th.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-02" id="contribution-day-component-4-23" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d56d5944-48c5-402d-b232-63c6eb586833" for="contribution-day-component-4-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on October 2nd.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-09" id="contribution-day-component-4-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-faacc10d-148a-4842-86ae-029e29d200da" for="contribution-day-component-4-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 9th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-16" id="contribution-day-component-4-25" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0ed5b9b0-8544-4d57-9b3d-8237e34c7641" for="contribution-day-component-4-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 16th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-23" id="contribution-day-component-4-26" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-93b957c5-3b3f-44d9-b6e9-19a447f0385e" for="contribution-day-component-4-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on October 23rd.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-30" id="contribution-day-component-4-27" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-313f7262-202b-4229-8d5d-4bd099d13fc1" for="contribution-day-component-4-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 30th.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-11-06" id="contribution-day-component-4-28" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-22c4bb63-bb8f-458f-9782-04f0c7048c07" for="contribution-day-component-4-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on November 6th.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-13" id="contribution-day-component-4-29" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0be946df-4f52-4535-8725-98c6ae7f5ba4" for="contribution-day-component-4-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 13th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-20" id="contribution-day-component-4-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-73f05b26-10c7-4ec8-8cee-ca8b62821934" for="contribution-day-component-4-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 20th.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-27" id="contribution-day-component-4-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c185f153-ded0-4cc6-8025-5dbffa303832" for="contribution-day-component-4-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 27th.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-04" id="contribution-day-component-4-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b9215671-f39b-4bda-b76f-9ee5cd49d94d" for="contribution-day-component-4-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 4th.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-11" id="contribution-day-component-4-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ea8e23c1-5e39-46a9-8a6a-85da49c0ffd2" for="contribution-day-component-4-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 11th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-18" id="contribution-day-component-4-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c6ce55be-e616-49a0-8575-d324ee36bcb2" for="contribution-day-component-4-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 18th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-25" id="contribution-day-component-4-35" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cfdf51b9-7476-4842-879b-909bdc19ffc9" for="contribution-day-component-4-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 25th.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-01" id="contribution-day-component-4-36" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bbd2c2a5-718d-4655-9195-c8434e40ef85" for="contribution-day-component-4-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 1st.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-08" id="contribution-day-component-4-37" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3559d131-a033-4412-8d00-695b6a573c44" for="contribution-day-component-4-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 8th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-15" id="contribution-day-component-4-38" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e7700b47-d9e5-4222-94e1-d7444174da64" for="contribution-day-component-4-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on January 15th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-22" id="contribution-day-component-4-39" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a0dee3e8-cbb3-40fd-93d5-ca268946b4fa" for="contribution-day-component-4-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on January 22nd.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-29" id="contribution-day-component-4-40" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5a282baa-bc3c-42a3-9acd-9f9682768d47" for="contribution-day-component-4-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on January 29th.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-05" id="contribution-day-component-4-41" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-dd6b433b-7dc3-4854-a231-f6603d4525cd" for="contribution-day-component-4-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 5th.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-12" id="contribution-day-component-4-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5450bbfb-2b45-4569-a26c-db105cf6b8c4" for="contribution-day-component-4-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 12th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-02-19" id="contribution-day-component-4-43" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a08790bd-e9ed-43a6-b6f3-0794d71234ee" for="contribution-day-component-4-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">10 contributions on February 19th.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2026-02-26" id="contribution-day-component-4-44" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-07298377-6cf4-4376-a5b9-042e0fa7897d" for="contribution-day-component-4-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">12 contributions on February 26th.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-03-05" id="contribution-day-component-4-45" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-fca74503-decb-4407-acb8-758343d43303" for="contribution-day-component-4-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">6 contributions on March 5th.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-12" id="contribution-day-component-4-46" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-97bccc37-33d4-47a7-a0ac-16e640f3225b" for="contribution-day-component-4-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 12th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-19" id="contribution-day-component-4-47" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8080102a-ad1d-4e77-a19f-754835e9b3dd" for="contribution-day-component-4-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 19th.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-26" id="contribution-day-component-4-48" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3ee70d1e-127b-4f52-95e6-ecb192dbe194" for="contribution-day-component-4-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 26th.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-02" id="contribution-day-component-4-49" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c36cd48f-3671-4259-ab3b-83c42cc36b21" for="contribution-day-component-4-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on April 2nd.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-09" id="contribution-day-component-4-50" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-739fb32f-dec6-48d0-ae2a-da22654ea387" for="contribution-day-component-4-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 9th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-16" id="contribution-day-component-4-51" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-df5cffc3-dbdf-454f-9f70-cea8e6fe7f84" for="contribution-day-component-4-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 16th.</tool-tip>
<td></td>
</tr>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Friday</span>
<span aria-hidden="true" style="clip-path: None; position: absolute; bottom: -4px">
Fri
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-04-25" id="contribution-day-component-5-0" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bea18ebb-f23b-45b1-aef3-96975b906564" for="contribution-day-component-5-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">15 contributions on April 25th.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-05-02" id="contribution-day-component-5-1" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-787dc890-1e8a-4973-898d-f66de901c3cb" for="contribution-day-component-5-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">13 contributions on May 2nd.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-09" id="contribution-day-component-5-2" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8fe23b09-1bd1-45b9-8a9c-3666e055a09c" for="contribution-day-component-5-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">9 contributions on May 9th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-05-16" id="contribution-day-component-5-3" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3afb61ee-2715-4e36-ab5d-9c7116bd096f" for="contribution-day-component-5-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">15 contributions on May 16th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-23" id="contribution-day-component-5-4" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9c6e6949-352b-4e52-92df-f66e493f4c48" for="contribution-day-component-5-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 23rd.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-30" id="contribution-day-component-5-5" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a8c68058-7529-4be7-9999-bbc6177ec7e6" for="contribution-day-component-5-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on May 30th.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-06" id="contribution-day-component-5-6" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-dc4d332f-f2f1-4704-9b60-bda067267622" for="contribution-day-component-5-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 6th.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-13" id="contribution-day-component-5-7" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ecc0c33a-3b3c-4c2c-83ae-e5d3879c523e" for="contribution-day-component-5-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on June 13th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-20" id="contribution-day-component-5-8" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0d3365d1-5555-4047-ba44-31065c33e79c" for="contribution-day-component-5-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 20th.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-27" id="contribution-day-component-5-9" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-092a35f4-cc28-4d37-b6a5-3981e7a81a1a" for="contribution-day-component-5-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on June 27th.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-04" id="contribution-day-component-5-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-9bd85f65-8a2c-4b94-8d1e-6873b7fd4a7f" for="contribution-day-component-5-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 4th.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-11" id="contribution-day-component-5-11" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7d4f38a0-da64-4536-8dc4-cf68fbddf8b3" for="contribution-day-component-5-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 11th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-18" id="contribution-day-component-5-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2e4ec063-b6e2-4d5d-ad25-fda16d87f53f" for="contribution-day-component-5-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 18th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-25" id="contribution-day-component-5-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c8835e7c-8a4a-40a2-8530-0d0d462dca57" for="contribution-day-component-5-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 25th.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-01" id="contribution-day-component-5-14" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-18dfa647-f570-4609-b55d-3764d00abf80" for="contribution-day-component-5-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 1st.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-08" id="contribution-day-component-5-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-67d6f451-1224-401f-a1fe-55a8e6436742" for="contribution-day-component-5-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 8th.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-15" id="contribution-day-component-5-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-fc66d01e-ae60-4222-a70d-43468cb9f579" for="contribution-day-component-5-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 15th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-22" id="contribution-day-component-5-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7b19c9bd-70b4-49f4-8670-83fad9133b19" for="contribution-day-component-5-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 22nd.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-29" id="contribution-day-component-5-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4f55beb9-c089-4159-838b-b63007fa4d18" for="contribution-day-component-5-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 29th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-09-05" id="contribution-day-component-5-19" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e17bc383-1581-4b0e-809d-5f9770f04a99" for="contribution-day-component-5-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on September 5th.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-12" id="contribution-day-component-5-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-423bba8c-b939-48e0-b4ec-1af2a38ef4ca" for="contribution-day-component-5-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 12th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-19" id="contribution-day-component-5-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-37f9ea53-d664-4869-8100-dfbf34839a18" for="contribution-day-component-5-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 19th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-26" id="contribution-day-component-5-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-97dd047c-8183-420b-ad75-0360a2867af5" for="contribution-day-component-5-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 26th.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-03" id="contribution-day-component-5-23" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-aa34d34c-ae88-4e3d-a4c4-018c4259753f" for="contribution-day-component-5-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 3rd.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-10" id="contribution-day-component-5-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-58de83ca-795e-4431-8ce5-d457655e2b29" for="contribution-day-component-5-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 10th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-17" id="contribution-day-component-5-25" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3e93e60f-bb96-4814-a2c6-9d5296868c62" for="contribution-day-component-5-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 17th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-24" id="contribution-day-component-5-26" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-107ee58a-11eb-48e4-9b55-ec8c9b83fee0" for="contribution-day-component-5-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">4 contributions on October 24th.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-31" id="contribution-day-component-5-27" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-aea94072-1d16-4528-9fa5-51c4e8f71d0c" for="contribution-day-component-5-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on October 31st.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-11-07" id="contribution-day-component-5-28" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2a5f180f-105b-4f36-aaef-b8f229e4d447" for="contribution-day-component-5-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on November 7th.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-14" id="contribution-day-component-5-29" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3b57bc48-a497-4b3e-9a83-2746cb7557bd" for="contribution-day-component-5-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 14th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-21" id="contribution-day-component-5-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-97ea296e-2237-4d6b-b3c7-a765759561fa" for="contribution-day-component-5-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 21st.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-28" id="contribution-day-component-5-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7adb5942-3aa6-4f61-b1ff-62aae335cb49" for="contribution-day-component-5-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 28th.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-05" id="contribution-day-component-5-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-6aa51e5b-6bf6-4b91-ba73-794dde672f85" for="contribution-day-component-5-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 5th.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-12" id="contribution-day-component-5-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e8846aee-639e-4633-9eac-f6cb4a3daaca" for="contribution-day-component-5-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 12th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-19" id="contribution-day-component-5-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7dd0ef83-c146-430d-92f2-4908d727e178" for="contribution-day-component-5-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 19th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-12-26" id="contribution-day-component-5-35" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7ffd407a-fe14-4f1d-9828-dc02b396a239" for="contribution-day-component-5-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">6 contributions on December 26th.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-02" id="contribution-day-component-5-36" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-975bad47-9610-4a1e-a8ef-c97158129e85" for="contribution-day-component-5-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on January 2nd.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-09" id="contribution-day-component-5-37" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-8784a617-b82e-4300-81e8-1dfac2f229ce" for="contribution-day-component-5-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 9th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-16" id="contribution-day-component-5-38" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cdae895b-f31f-4be0-9c67-9405e64aa13c" for="contribution-day-component-5-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on January 16th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-23" id="contribution-day-component-5-39" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a5c7b3ee-a5a1-470a-bcc9-d3d4066fad80" for="contribution-day-component-5-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on January 23rd.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-30" id="contribution-day-component-5-40" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e9571224-70ab-4298-852d-3c9e7e3776e6" for="contribution-day-component-5-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 30th.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-06" id="contribution-day-component-5-41" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-53f59b1e-d102-4a44-b971-5420de380113" for="contribution-day-component-5-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 6th.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-13" id="contribution-day-component-5-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b189e0cd-40b5-46e5-9ec6-5a54906f5d13" for="contribution-day-component-5-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 13th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-02-20" id="contribution-day-component-5-43" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-36f7540d-a577-495d-8cb3-81f652676661" for="contribution-day-component-5-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on February 20th.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-02-27" id="contribution-day-component-5-44" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-de8c6bce-2728-417f-bd2b-1c52c816876e" for="contribution-day-component-5-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on February 27th.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2026-03-06" id="contribution-day-component-5-45" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-fa9794d1-f219-4be3-aeaa-915e34cd475b" for="contribution-day-component-5-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">7 contributions on March 6th.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-13" id="contribution-day-component-5-46" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-38d3945e-7a5b-43d1-9957-9e688ac0e3bb" for="contribution-day-component-5-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 13th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-20" id="contribution-day-component-5-47" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a9347a9b-0f4e-4428-92e4-f65d27b67e46" for="contribution-day-component-5-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">3 contributions on March 20th.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-27" id="contribution-day-component-5-48" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-52c2cdf5-2123-4e0a-93f1-50173bc18a17" for="contribution-day-component-5-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 27th.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-03" id="contribution-day-component-5-49" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-d7d299cb-69bc-4bea-9b84-300af064c72d" for="contribution-day-component-5-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 3rd.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-10" id="contribution-day-component-5-50" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-b453d918-3434-42ec-aac9-2e4eb2b5fdef" for="contribution-day-component-5-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 10th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-17" id="contribution-day-component-5-51" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f3430fd8-17e9-4aa0-b0fa-6536bd22a997" for="contribution-day-component-5-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 17th.</tool-tip>
<td></td>
</tr>
<tr style="height: 11px">
<td class="ContributionCalendar-label" style="position: relative">
<span class="sr-only">Saturday</span>
<span aria-hidden="true" style="clip-path: Circle(0); position: absolute; bottom: -4px">
Sat
</span>
</td>
<td tabindex="0" data-ix="0" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-04-26" id="contribution-day-component-6-0" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a7d58c8c-c493-4632-bfa0-05e4039ae846" for="contribution-day-component-6-0" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on April 26th.</tool-tip>
<td tabindex="0" data-ix="1" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-05-03" id="contribution-day-component-6-1" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-def408b2-e4e4-4a1f-9500-060b828d2671" for="contribution-day-component-6-1" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">14 contributions on May 3rd.</tool-tip>
<td tabindex="0" data-ix="2" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-05-10" id="contribution-day-component-6-2" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-084f6b1b-50cf-401b-b87a-e77166bf69b5" for="contribution-day-component-6-2" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on May 10th.</tool-tip>
<td tabindex="0" data-ix="3" aria-selected="false" aria-describedby="contribution-graph-legend-level-3" style="width: 11px" data-date="2025-05-17" id="contribution-day-component-6-3" data-level="3" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ea2cfa69-e608-480f-82ac-bf66f15eee28" for="contribution-day-component-6-3" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">13 contributions on May 17th.</tool-tip>
<td tabindex="0" data-ix="4" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-05-24" id="contribution-day-component-6-4" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-6c73c7da-8921-45af-beea-48930b25f6c4" for="contribution-day-component-6-4" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on May 24th.</tool-tip>
<td tabindex="0" data-ix="5" aria-selected="false" aria-describedby="contribution-graph-legend-level-2" style="width: 11px" data-date="2025-05-31" id="contribution-day-component-6-5" data-level="2" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f23b7a35-5586-456e-a417-492882362d11" for="contribution-day-component-6-5" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">8 contributions on May 31st.</tool-tip>
<td tabindex="0" data-ix="6" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-07" id="contribution-day-component-6-6" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0cfdefda-eb12-4225-a233-817e3caa6352" for="contribution-day-component-6-6" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 7th.</tool-tip>
<td tabindex="0" data-ix="7" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-06-14" id="contribution-day-component-6-7" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-5ad817cd-f73b-4e73-a224-d2953552079d" for="contribution-day-component-6-7" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on June 14th.</tool-tip>
<td tabindex="0" data-ix="8" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-21" id="contribution-day-component-6-8" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-41dea0a3-b57a-4243-b7ba-6097b659e7d7" for="contribution-day-component-6-8" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 21st.</tool-tip>
<td tabindex="0" data-ix="9" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-06-28" id="contribution-day-component-6-9" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-cbf5dbe7-94be-4c96-883d-3028297e91b3" for="contribution-day-component-6-9" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on June 28th.</tool-tip>
<td tabindex="0" data-ix="10" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-05" id="contribution-day-component-6-10" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c9abd4f6-2819-41a5-b2b0-8c9273180c28" for="contribution-day-component-6-10" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 5th.</tool-tip>
<td tabindex="0" data-ix="11" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-12" id="contribution-day-component-6-11" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-146e2708-4d83-4432-87a9-13cb4ef5d0c6" for="contribution-day-component-6-11" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 12th.</tool-tip>
<td tabindex="0" data-ix="12" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-19" id="contribution-day-component-6-12" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-35904207-c546-4deb-8b3a-f64341ac7db7" for="contribution-day-component-6-12" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 19th.</tool-tip>
<td tabindex="0" data-ix="13" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-07-26" id="contribution-day-component-6-13" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-395b76d8-d5c9-4f62-95b7-c0ee195b1708" for="contribution-day-component-6-13" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on July 26th.</tool-tip>
<td tabindex="0" data-ix="14" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-08-02" id="contribution-day-component-6-14" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-063716e9-70ad-49fc-ba29-5bdd279b83da" for="contribution-day-component-6-14" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on August 2nd.</tool-tip>
<td tabindex="0" data-ix="15" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-09" id="contribution-day-component-6-15" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7db5e8fb-94a4-4f46-85b1-1d3c0ee6ce52" for="contribution-day-component-6-15" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 9th.</tool-tip>
<td tabindex="0" data-ix="16" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-16" id="contribution-day-component-6-16" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1916a515-ac52-407a-8e71-6340463433ed" for="contribution-day-component-6-16" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 16th.</tool-tip>
<td tabindex="0" data-ix="17" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-23" id="contribution-day-component-6-17" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a2af3ef1-7609-44e7-8d85-9b3041b5e4b1" for="contribution-day-component-6-17" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 23rd.</tool-tip>
<td tabindex="0" data-ix="18" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-08-30" id="contribution-day-component-6-18" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0206db10-f0f7-4955-90a2-5fa46efb0909" for="contribution-day-component-6-18" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on August 30th.</tool-tip>
<td tabindex="0" data-ix="19" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-06" id="contribution-day-component-6-19" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2b525b07-566a-44be-b20b-1dea6441fc35" for="contribution-day-component-6-19" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 6th.</tool-tip>
<td tabindex="0" data-ix="20" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-13" id="contribution-day-component-6-20" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bc22d911-31e5-413c-89ff-02377d28feb3" for="contribution-day-component-6-20" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 13th.</tool-tip>
<td tabindex="0" data-ix="21" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-20" id="contribution-day-component-6-21" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f0cf75c6-c34e-4bfd-abf5-bcdc5dd21845" for="contribution-day-component-6-21" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 20th.</tool-tip>
<td tabindex="0" data-ix="22" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-09-27" id="contribution-day-component-6-22" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f2538655-e2df-4389-add2-9809ae0c818f" for="contribution-day-component-6-22" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on September 27th.</tool-tip>
<td tabindex="0" data-ix="23" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-04" id="contribution-day-component-6-23" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-6034a92d-1033-4aac-973f-f27488b3db1c" for="contribution-day-component-6-23" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 4th.</tool-tip>
<td tabindex="0" data-ix="24" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-10-11" id="contribution-day-component-6-24" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-92a245fe-dd95-40f4-8a57-dedffdc431d2" for="contribution-day-component-6-24" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on October 11th.</tool-tip>
<td tabindex="0" data-ix="25" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-18" id="contribution-day-component-6-25" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-bb2f4ec6-01d8-4822-af90-9e4e2cc3561a" for="contribution-day-component-6-25" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on October 18th.</tool-tip>
<td tabindex="0" data-ix="26" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-10-25" id="contribution-day-component-6-26" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-e1e290d5-6987-4090-b45b-4228763e1596" for="contribution-day-component-6-26" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on October 25th.</tool-tip>
<td tabindex="0" data-ix="27" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2025-11-01" id="contribution-day-component-6-27" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-09bb268f-9ef0-4357-a1fc-ac878b14a9b5" for="contribution-day-component-6-27" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on November 1st.</tool-tip>
<td tabindex="0" data-ix="28" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-08" id="contribution-day-component-6-28" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2138fb3f-1cfa-4f53-80b2-18cdc86e0765" for="contribution-day-component-6-28" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 8th.</tool-tip>
<td tabindex="0" data-ix="29" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-15" id="contribution-day-component-6-29" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-4cdb6b3a-69aa-4e8b-a8a8-814b00cd5a56" for="contribution-day-component-6-29" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 15th.</tool-tip>
<td tabindex="0" data-ix="30" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-22" id="contribution-day-component-6-30" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3d9e1932-fc34-4fbc-8c56-9d01697cdde8" for="contribution-day-component-6-30" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 22nd.</tool-tip>
<td tabindex="0" data-ix="31" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-11-29" id="contribution-day-component-6-31" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-0237d00d-f0b5-4ab5-a551-772a0bcf0bc5" for="contribution-day-component-6-31" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on November 29th.</tool-tip>
<td tabindex="0" data-ix="32" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-06" id="contribution-day-component-6-32" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2983fee1-6a67-40c5-bba3-3f245b79f61d" for="contribution-day-component-6-32" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 6th.</tool-tip>
<td tabindex="0" data-ix="33" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-13" id="contribution-day-component-6-33" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-02820f0c-9222-403f-9d79-ae0696280be8" for="contribution-day-component-6-33" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 13th.</tool-tip>
<td tabindex="0" data-ix="34" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-20" id="contribution-day-component-6-34" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1409da1a-4272-4bf2-b69b-b871ca32de33" for="contribution-day-component-6-34" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 20th.</tool-tip>
<td tabindex="0" data-ix="35" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2025-12-27" id="contribution-day-component-6-35" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-af213e51-461b-4f18-8523-9417b3d7136f" for="contribution-day-component-6-35" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on December 27th.</tool-tip>
<td tabindex="0" data-ix="36" aria-selected="false" aria-describedby="contribution-graph-legend-level-4" style="width: 11px" data-date="2026-01-03" id="contribution-day-component-6-36" data-level="4" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-17f8dc80-f546-4804-b94b-dfe79e1ceb3a" for="contribution-day-component-6-36" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">25 contributions on January 3rd.</tool-tip>
<td tabindex="0" data-ix="37" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-10" id="contribution-day-component-6-37" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-c0d364e3-4a9a-4d8c-b7d3-928f04f11367" for="contribution-day-component-6-37" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 10th.</tool-tip>
<td tabindex="0" data-ix="38" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-17" id="contribution-day-component-6-38" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-95f4d35c-cc16-4e6c-890d-429804dbce49" for="contribution-day-component-6-38" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on January 17th.</tool-tip>
<td tabindex="0" data-ix="39" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-01-24" id="contribution-day-component-6-39" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-85a62ce2-bd79-49e0-b58a-c05f47cda9ad" for="contribution-day-component-6-39" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">5 contributions on January 24th.</tool-tip>
<td tabindex="0" data-ix="40" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-01-31" id="contribution-day-component-6-40" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3c30642c-5c65-4564-b0ea-2dea4ef0b827" for="contribution-day-component-6-40" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on January 31st.</tool-tip>
<td tabindex="0" data-ix="41" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-07" id="contribution-day-component-6-41" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-44df1270-3b8e-40f1-b107-089a4bc20f2a" for="contribution-day-component-6-41" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 7th.</tool-tip>
<td tabindex="0" data-ix="42" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-14" id="contribution-day-component-6-42" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-ca01ee37-0c20-4112-916b-9c1e1338eb92" for="contribution-day-component-6-42" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 14th.</tool-tip>
<td tabindex="0" data-ix="43" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-02-21" id="contribution-day-component-6-43" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-40c1c202-3a68-470a-8495-1fbe9e302a14" for="contribution-day-component-6-43" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on February 21st.</tool-tip>
<td tabindex="0" data-ix="44" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-02-28" id="contribution-day-component-6-44" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-f9f33ee0-5dc1-4da4-937d-edd7575e74c8" for="contribution-day-component-6-44" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on February 28th.</tool-tip>
<td tabindex="0" data-ix="45" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-07" id="contribution-day-component-6-45" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-26db4a67-c026-46f5-9764-1748fada5a6e" for="contribution-day-component-6-45" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 7th.</tool-tip>
<td tabindex="0" data-ix="46" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-14" id="contribution-day-component-6-46" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-2c208de0-8f3c-4d35-8930-1b937e7202e0" for="contribution-day-component-6-46" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 14th.</tool-tip>
<td tabindex="0" data-ix="47" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-03-21" id="contribution-day-component-6-47" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-3bb2a8ab-9e02-4fc2-a601-815b6e131420" for="contribution-day-component-6-47" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on March 21st.</tool-tip>
<td tabindex="0" data-ix="48" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-03-28" id="contribution-day-component-6-48" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-a53eed49-cb1e-4a35-b233-8d84dcd53545" for="contribution-day-component-6-48" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">2 contributions on March 28th.</tool-tip>
<td tabindex="0" data-ix="49" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-04" id="contribution-day-component-6-49" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-7848aaca-f709-4a6a-8aa5-8929705960e3" for="contribution-day-component-6-49" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 4th.</tool-tip>
<td tabindex="0" data-ix="50" aria-selected="false" aria-describedby="contribution-graph-legend-level-0" style="width: 11px" data-date="2026-04-11" id="contribution-day-component-6-50" data-level="0" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-1285f832-a57f-4439-80c8-20b02fb0659b" for="contribution-day-component-6-50" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">No contributions on April 11th.</tool-tip>
<td tabindex="0" data-ix="51" aria-selected="false" aria-describedby="contribution-graph-legend-level-1" style="width: 11px" data-date="2026-04-18" id="contribution-day-component-6-51" data-level="1" role="gridcell" data-view-component="true" class="ContributionCalendar-day"></td>
<tool-tip style="pointer-events: none;" id="tooltip-21cf04d0-2f41-4973-8526-3bef90f5cc63" for="contribution-day-component-6-51" popover="manual" data-direction="n" data-type="label" data-view-component="true" class="sr-only position-absolute">1 contribution on April 18th.</tool-tip>
<td></td>
</tr>
</tbody>
</table></div>
<div class="width-full f6 px-0 tmp-px-md-5 py-1">
<div class="float-left">
<a href="https://docs.github.com/articles/why-are-my-contributions-not-showing-up-on-my-profile" class="Link--muted">
Learn how we count contributions</a>
</div>
<div class="float-right color-fg-muted d-flex flex-items-center">
<span data-view-component="true" class="mr-1 tmp-mr-1">Less</span>
<div style="width: 10px; height: 10px" id="contribution-graph-legend-level-0" data-level="0" data-view-component="true" class="ContributionCalendar-day rounded-1 mr-1 tmp-mr-1">
<span class="sr-only">No contributions.</span>
</div>
<div style="width: 10px; height: 10px" id="contribution-graph-legend-level-1" data-level="1" data-view-component="true" class="ContributionCalendar-day rounded-1 mr-1 tmp-mr-1">
<span class="sr-only">Low contributions.</span>
</div>
<div style="width: 10px; height: 10px" id="contribution-graph-legend-level-2" data-level="2" data-view-component="true" class="ContributionCalendar-day rounded-1 mr-1 tmp-mr-1">
<span class="sr-only">Medium-low contributions.</span>
</div>
<div style="width: 10px; height: 10px" id="contribution-graph-legend-level-3" data-level="3" data-view-component="true" class="ContributionCalendar-day rounded-1 mr-1 tmp-mr-1">
<span class="sr-only">Medium-high contributions.</span>
</div>
<div style="width: 10px; height: 10px" id="contribution-graph-legend-level-4" data-level="4" data-view-component="true" class="ContributionCalendar-day rounded-1 mr-1 tmp-mr-1">
<span class="sr-only">High contributions.</span>
</div>
<span data-view-component="true">More</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="category category-level-1"
id="个人项目"
data-type="category"
data-id="个人项目"
data-name="个人项目"
data-icon="fas fa-code"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-code"></i>
个人项目
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://github.com/rbetree/menav" class="site-card site-card-repo" target="_blank"
rel="noopener" data-type="site" data-name="MeNav" data-url="https://github.com/rbetree/menav"
data-icon="fab fa-github"
data-description="一键部署的个人导航站生成器,支持书签导入与自动构建,轻松整理展示您的网络收藏"
data-tooltip="MeNav - 一键部署的个人导航站生成器,支持书签导入与自动构建,轻松整理展示您的网络收藏"
>
<div class="repo-header">
<i class="fab fa-github repo-icon" aria-hidden="true"></i>
<div class="repo-title">MeNav</div>
</div>
<div class="repo-desc">一键部署的个人导航站生成器,支持书签导入与自动构建,轻松整理展示您的网络收藏</div>
<div class="repo-stats">
<div class="stat-item">
<span class="lang-dot"
style="background-color: #f1e05a;"></span>
JavaScript
</div>
<div class="stat-item">
<i class="far fa-star" aria-hidden="true"></i> 256
</div>
<div class="stat-item">
<i class="fas fa-code-branch" aria-hidden="true"></i> 167
</div>
</div>
</a>
<a href="https://github.com/rbetree/MarksVault" class="site-card site-card-repo" target="_blank"
rel="noopener" data-type="site" data-name="MarksVault" data-url="https://github.com/rbetree/MarksVault"
data-icon="fab fa-github"
data-description="一个强大的浏览器扩展,用于智能管理、整理和安全备份您的书签数据"
data-tooltip="MarksVault - 一个强大的浏览器扩展,用于智能管理、整理和安全备份您的书签数据"
>
<div class="repo-header">
<i class="fab fa-github repo-icon" aria-hidden="true"></i>
<div class="repo-title">MarksVault</div>
</div>
<div class="repo-desc">一个强大的浏览器扩展,用于智能管理、整理和安全备份您的书签数据</div>
<div class="repo-stats">
<div class="stat-item">
<span class="lang-dot"
style="background-color: #3178c6;"></span>
TypeScript
</div>
<div class="stat-item">
<i class="far fa-star" aria-hidden="true"></i> 30
</div>
<div class="stat-item">
<i class="fas fa-code-branch" aria-hidden="true"></i> 6
</div>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="star"
data-type="category"
data-id="star"
data-name="star"
data-icon="fas fa-star"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-star"></i>
star
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://github.com/router-for-me/CLIProxyAPI" class="site-card site-card-repo" target="_blank"
rel="noopener" data-type="site" data-name="CLIProxyAPI" data-url="https://github.com/router-for-me/CLIProxyAPI"
data-icon="fab fa-github"
data-description="Wrap Gemini CLI, Antigravity, ChatGPT Codex, Claude Code, Qwen Code, iFlow as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini 2.5 Pro, GPT 5, Claude, Qwen model through API"
data-tooltip="CLIProxyAPI - Wrap Gemini CLI, Antigravity, ChatGPT Codex, Claude Code, Qwen Code, iFlow as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini 2.5 Pro, GPT 5, Claude, Qwen model through API"
>
<div class="repo-header">
<i class="fab fa-github repo-icon" aria-hidden="true"></i>
<div class="repo-title">CLIProxyAPI</div>
</div>
<div class="repo-desc">Wrap Gemini CLI, Antigravity, ChatGPT Codex, Claude Code, Qwen Code, iFlow as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini 2.5 Pro, GPT 5, Claude, Qwen model through API</div>
<div class="repo-stats">
<div class="stat-item">
<span class="lang-dot"
style="background-color: #00ADD8;"></span>
Go
</div>
<div class="stat-item">
<i class="far fa-star" aria-hidden="true"></i> 27769
</div>
<div class="stat-item">
<i class="fas fa-code-branch" aria-hidden="true"></i> 4595
</div>
</div>
</a>
</div>
</div>
</section>
</div>
</div>
<div class="page articles" id="articles">
<div class="page-template page-template-articles">
<div class="welcome-section">
<div class="welcome-section-main">
<div class="welcome-title-row">
<h2 data-editable="page-title">技术文章</h2>
</div>
<p class="subtitle" data-editable="page-subtitle">RSS 聚合文章列表</p>
</div>
</div>
<section class="category category-level-1 category-readonly">
<div class="category-header" data-toggle="category">
<h2>
<i class="fas fa-rss"></i>
个人博客
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid">
<a href="https://blog.rzlnb.top/posts/tech/thoughts-on-high-ticket-indie-sites/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="关于一人公司做独立站的一些思考" data-url="https://blog.rzlnb.top/posts/tech/thoughts-on-high-ticket-indie-sites/"
data-icon="fas fa-pen"
data-description="记录最近对一人公司做独立站的调研思考。"
data-tooltip="关于一人公司做独立站的一些思考 - 记录最近对一人公司做独立站的调研思考。"
data-published-at="2026-03-26T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fposts%2Ftech%2Fthoughts-on-high-ticket-indie-sites%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="关于一人公司做独立站的一些思考 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fposts%2Ftech%2Fthoughts-on-high-ticket-indie-sites%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>关于一人公司做独立站的一些思考</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-26</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>记录最近对一人公司做独立站的调研思考。</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/peach_beihai/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="北京漫步 | 北海初桃" data-url="https://www.tianxianzi.me/p/peach_beihai/"
data-icon="fas fa-pen"
data-description="今天去北海,听闻山桃花开了。北海的花总是比颐和园和圆明园开得更早一点。 接连好几天都把自己关在房间里写论文直到深夜、没有出门,吃着外卖,有点压力性进食,肠胃亮起了红灯,睡眠也断断续续。昨晚一阵急雨,今早大晴,想着不能再任由惯性这么下去,于是便动身去了北海。"
data-tooltip="北京漫步 | 北海初桃 - 今天去北海,听闻山桃花开了。北海的花总是比颐和园和圆明园开得更早一点。 接连好几天都把自己关在房间里写论文直到深夜、没有出门,吃着外卖,有点压力性进食,肠胃亮起了红灯,睡眠也断断续续。昨晚一阵急雨,今早大晴,想着不能再任由惯性这么下去,于是便动身去了北海。"
data-published-at="2026-03-21T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fpeach_beihai%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="北京漫步 | 北海初桃 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fpeach_beihai%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>北京漫步 | 北海初桃</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-21</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>今天去北海,听闻山桃花开了。北海的花总是比颐和园和圆明园开得更早一点。 接连好几天都把自己关在房间里写论文直到深夜、没有出门,吃着外卖,有点压力性进食,肠胃亮起了红灯,睡眠也断断续续。昨晚一阵急雨,今早大晴,想着不能再任由惯性这么下去,于是便动身去了北海。</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/yuki_yihe/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="北京漫步 | 颐和快雪" data-url="https://www.tianxianzi.me/p/yuki_yihe/"
data-icon="fas fa-pen"
data-description="下午下雪,去颐和园散步。昨天的积雪还没有化开。刚去的时候还在下小雪,湖水部分有点铅灰色,如同凛冽的冬将军。我还是蛮喜欢这种暧昧不清、带些灰暗的颜色,思绪辽远,水天一色,坐在湖边的长椅上,似乎幻听到了湖与雪的声音。寂静的声音在天地之间蔓延,或许某片积雪之中正有春雷萌动,或许某片水波正荡起去年春日的记忆,但是每每仔细倾听时,天地只有寂静,仿佛一切都未曾发生。面前的鸳鸯慢悠悠地滑行过水面,声音被远方吞没..."
data-tooltip="北京漫步 | 颐和快雪 - 下午下雪,去颐和园散步。昨天的积雪还没有化开。刚去的时候还在下小雪,湖水部分有点铅灰色,如同凛冽的冬将军。我还是蛮喜欢这种暧昧不清、带些灰暗的颜色,思绪辽远,水天一色,坐在湖边的长椅上,似乎幻听到了湖与雪的声音。寂静的声音在天地之间蔓延,或许某片积雪之中正有春雷萌动,或许某片水波正荡起去年春日的记忆,但是每每仔细倾听时,天地只有寂静,仿佛一切都未曾发生。面前的鸳鸯慢悠悠地滑行过水面,声音被远方吞没..."
data-published-at="2026-03-17T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fyuki_yihe%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="北京漫步 | 颐和快雪 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fyuki_yihe%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>北京漫步 | 颐和快雪</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>下午下雪,去颐和园散步。昨天的积雪还没有化开。刚去的时候还在下小雪,湖水部分有点铅灰色,如同凛冽的冬将军。我还是蛮喜欢这种暧昧不清、带些灰暗的颜色,思绪辽远,水天一色,坐在湖边的长椅上,似乎幻听到了湖与雪的声音。寂静的声音在天地之间蔓延,或许某片积雪之中正有春雷萌动,或许某片水波正荡起去年春日的记忆,但是每每仔细倾听时,天地只有寂静,仿佛一切都未曾发生。面前的鸳鸯慢悠悠地滑行过水面,声音被远方吞没...</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/hongkong/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="香港纪行" data-url="https://www.tianxianzi.me/p/hongkong/"
data-icon="fas fa-pen"
data-description="初见 刚从机场坐观光巴士出来,从窗户望向这个港口城市,沿途是大量的集装箱、可以描绘轮廓的小山丘,以及建在其上的高耸入云的建筑。低头看到出租车的红色涂装、弥漫在海面上的雾气、渡轮、潮湿的深圳港,好久没有来到南方。这新鲜而令人疲倦的潮气。"
data-tooltip="香港纪行 - 初见 刚从机场坐观光巴士出来,从窗户望向这个港口城市,沿途是大量的集装箱、可以描绘轮廓的小山丘,以及建在其上的高耸入云的建筑。低头看到出租车的红色涂装、弥漫在海面上的雾气、渡轮、潮湿的深圳港,好久没有来到南方。这新鲜而令人疲倦的潮气。"
data-published-at="2026-03-17T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fhongkong%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="香港纪行 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fhongkong%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>香港纪行</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>初见 刚从机场坐观光巴士出来,从窗户望向这个港口城市,沿途是大量的集装箱、可以描绘轮廓的小山丘,以及建在其上的高耸入云的建筑。低头看到出租车的红色涂装、弥漫在海面上的雾气、渡轮、潮湿的深圳港,好久没有来到南方。这新鲜而令人疲倦的潮气。</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/henan/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="河南纪行" data-url="https://www.tianxianzi.me/p/henan/"
data-icon="fas fa-pen"
data-description="都说中国里最中国的地方就是河南,而且我也一直想到中国历史的发源地之一去体验一下,于是就有了这次河南之行。说是说旅游,但是因为每天刷博物馆,学到天昏地暗,一沾枕头就睡着了。在河南五天五个城市,除了开封以外主要就是刷博物馆。特别是前三天。第一天在安阳,去了殷墟博物馆和殷墟遗址。第二天到郑州,在河南博物院学了八小时。第三天第四天在洛阳,去了二里头夏都遗址公园和遗址博物馆、古墓博物馆和洛阳博物馆三大馆。后..."
data-tooltip="河南纪行 - 都说中国里最中国的地方就是河南,而且我也一直想到中国历史的发源地之一去体验一下,于是就有了这次河南之行。说是说旅游,但是因为每天刷博物馆,学到天昏地暗,一沾枕头就睡着了。在河南五天五个城市,除了开封以外主要就是刷博物馆。特别是前三天。第一天在安阳,去了殷墟博物馆和殷墟遗址。第二天到郑州,在河南博物院学了八小时。第三天第四天在洛阳,去了二里头夏都遗址公园和遗址博物馆、古墓博物馆和洛阳博物馆三大馆。后..."
data-published-at="2026-03-02T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fhenan%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="河南纪行 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fhenan%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>河南纪行</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-02</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>都说中国里最中国的地方就是河南,而且我也一直想到中国历史的发源地之一去体验一下,于是就有了这次河南之行。说是说旅游,但是因为每天刷博物馆,学到天昏地暗,一沾枕头就睡着了。在河南五天五个城市,除了开封以外主要就是刷博物馆。特别是前三天。第一天在安阳,去了殷墟博物馆和殷墟遗址。第二天到郑州,在河南博物院学了八小时。第三天第四天在洛阳,去了二里头夏都遗址公园和遗址博物馆、古墓博物馆和洛阳博物馆三大馆。后...</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/henan_museum/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="天下之中" data-url="https://www.tianxianzi.me/p/henan_museum/"
data-icon="fas fa-pen"
data-description="河南博物院 豫博总共有十六个展馆,从上往下逛的话人会少一点。初来豫博,大概每学两个展馆就要休息一下,学到晚上八点钟出去。台阶上椅子上坐满了学一半学不动的人。"
data-tooltip="天下之中 - 河南博物院 豫博总共有十六个展馆,从上往下逛的话人会少一点。初来豫博,大概每学两个展馆就要休息一下,学到晚上八点钟出去。台阶上椅子上坐满了学一半学不动的人。"
data-published-at="2026-03-02T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fhenan_museum%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="天下之中 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fhenan_museum%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>天下之中</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-02</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>河南博物院 豫博总共有十六个展馆,从上往下逛的话人会少一点。初来豫博,大概每学两个展馆就要休息一下,学到晚上八点钟出去。台阶上椅子上坐满了学一半学不动的人。</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/yinxu/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="宅兹中国" data-url="https://www.tianxianzi.me/p/yinxu/"
data-icon="fas fa-pen"
data-description="殷墟遗址 来河南的第一站,去了安阳。因为之前看过『翦商:殷周之变与华夏新生 』,也读过不少商朝相关的民间故事,等等,一直对商朝的考古发掘非常感兴趣。为此我去的时候还专门请了一位文博背景的导游来讲解。学完的总体感受和我想象的不太一样,因为我对商王朝的想象更多来自于对于矇昧血腥的半神话时期的想象,来自于对神行走在大地上的年代的想象,读过看过的不少文艺作品多少都是基于此种想象而发展的。但实际到了此地,可..."
data-tooltip="宅兹中国 - 殷墟遗址 来河南的第一站,去了安阳。因为之前看过『翦商:殷周之变与华夏新生 』,也读过不少商朝相关的民间故事,等等,一直对商朝的考古发掘非常感兴趣。为此我去的时候还专门请了一位文博背景的导游来讲解。学完的总体感受和我想象的不太一样,因为我对商王朝的想象更多来自于对于矇昧血腥的半神话时期的想象,来自于对神行走在大地上的年代的想象,读过看过的不少文艺作品多少都是基于此种想象而发展的。但实际到了此地,可..."
data-published-at="2026-03-02T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fyinxu%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="宅兹中国 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fyinxu%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>宅兹中国</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-03-02</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>殷墟遗址 来河南的第一站,去了安阳。因为之前看过『翦商:殷周之变与华夏新生 』,也读过不少商朝相关的民间故事,等等,一直对商朝的考古发掘非常感兴趣。为此我去的时候还专门请了一位文博背景的导游来讲解。学完的总体感受和我想象的不太一样,因为我对商王朝的想象更多来自于对于矇昧血腥的半神话时期的想象,来自于对神行走在大地上的年代的想象,读过看过的不少文艺作品多少都是基于此种想象而发展的。但实际到了此地,可...</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/citywalk_6/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="北京漫步 | 北海 | 景山" data-url="https://www.tianxianzi.me/p/citywalk_6/"
data-icon="fas fa-pen"
data-description="午饭后看到窗外的暖阳,心中有些躁动。即便外边已经到了零下十多度,即便工作还很多,但是自己的身体似乎无法克制住因几个星期没有外出散步而产生的焦躁感,于是左思右想之后还是出门走走,就去相对比较近的北海公园。不过北京这个鬼地方连去最近的大公园都要打车堵上将近半小时,真得不适应生存,我在车上边晕车边这么想。"
data-tooltip="北京漫步 | 北海 | 景山 - 午饭后看到窗外的暖阳,心中有些躁动。即便外边已经到了零下十多度,即便工作还很多,但是自己的身体似乎无法克制住因几个星期没有外出散步而产生的焦躁感,于是左思右想之后还是出门走走,就去相对比较近的北海公园。不过北京这个鬼地方连去最近的大公园都要打车堵上将近半小时,真得不适应生存,我在车上边晕车边这么想。"
data-published-at="2026-02-05T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fcitywalk_6%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="北京漫步 | 北海 | 景山 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fcitywalk_6%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>北京漫步 | 北海 | 景山</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-02-05</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>午饭后看到窗外的暖阳,心中有些躁动。即便外边已经到了零下十多度,即便工作还很多,但是自己的身体似乎无法克制住因几个星期没有外出散步而产生的焦躁感,于是左思右想之后还是出门走走,就去相对比较近的北海公园。不过北京这个鬼地方连去最近的大公园都要打车堵上将近半小时,真得不适应生存,我在车上边晕车边这么想。</p>
</div>
</a>
<a href="https://www.tianxianzi.me/p/sanpo/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="散步" data-url="https://www.tianxianzi.me/p/sanpo/"
data-icon="fas fa-pen"
data-description="最近和一些朋友的、或者自己出行的散步流水账。 周末,早上起来后打算换家咖啡馆待待。经常需要换换环境,或许会有些新的灵感。于是去了资料馆旁边、北师大南边那个「雕刻时光咖啡馆」。骑车路上闻到香味,拐过去吃了一家骨汤螺狮粉,料是自己打的,汤清、味浓、酸亮、粉黏,一人食最开心的就是在计划外发现什么好吃的。吃完去了咖啡馆,一楼是家花店,二楼是咖啡馆,以为和塔可夫斯基的作品『雕刻时光 』有什么关系,但进店后没..."
data-tooltip="散步 - 最近和一些朋友的、或者自己出行的散步流水账。 周末,早上起来后打算换家咖啡馆待待。经常需要换换环境,或许会有些新的灵感。于是去了资料馆旁边、北师大南边那个「雕刻时光咖啡馆」。骑车路上闻到香味,拐过去吃了一家骨汤螺狮粉,料是自己打的,汤清、味浓、酸亮、粉黏,一人食最开心的就是在计划外发现什么好吃的。吃完去了咖啡馆,一楼是家花店,二楼是咖啡馆,以为和塔可夫斯基的作品『雕刻时光 』有什么关系,但进店后没..."
data-published-at="2026-01-21T00:00:00.000Z" data-source="天仙子" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fsanpo%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="散步 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2Fp%2Fsanpo%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>散步</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-01-21</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">天仙子</span>
</div>
<p>最近和一些朋友的、或者自己出行的散步流水账。 周末,早上起来后打算换家咖啡馆待待。经常需要换换环境,或许会有些新的灵感。于是去了资料馆旁边、北师大南边那个「雕刻时光咖啡馆」。骑车路上闻到香味,拐过去吃了一家骨汤螺狮粉,料是自己打的,汤清、味浓、酸亮、粉黏,一人食最开心的就是在计划外发现什么好吃的。吃完去了咖啡馆,一楼是家花店,二楼是咖啡馆,以为和塔可夫斯基的作品『雕刻时光 』有什么关系,但进店后没...</p>
</div>
</a>
<a href="https://blog.rzlnb.top/posts/tech/wsl2-mirrored-networking/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="WSL2 镜像网络模式Mirrored配置" data-url="https://blog.rzlnb.top/posts/tech/wsl2-mirrored-networking/"
data-icon="fas fa-pen"
data-description="在 WSL2 中启用 mirrored networking改善本地网络连通性与代理行为。"
data-tooltip="WSL2 镜像网络模式Mirrored配置 - 在 WSL2 中启用 mirrored networking改善本地网络连通性与代理行为。"
data-published-at="2025-11-16T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fposts%2Ftech%2Fwsl2-mirrored-networking%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="WSL2 镜像网络模式Mirrored配置 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fposts%2Ftech%2Fwsl2-mirrored-networking%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>WSL2 镜像网络模式Mirrored配置</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2025-11-16</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>在 WSL2 中启用 mirrored networking改善本地网络连通性与代理行为。</p>
</div>
</a>
<a href="https://blog.rzlnb.top/project/daydayweather/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="DayDayWeather" data-url="https://blog.rzlnb.top/project/daydayweather/"
data-icon="fas fa-pen"
data-description="将单体天气应用重构为高可用、可扩展的微服务系统Spring Cloud / Redis"
data-tooltip="DayDayWeather - 将单体天气应用重构为高可用、可扩展的微服务系统Spring Cloud / Redis"
data-published-at="2001-01-01T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fdaydayweather%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="DayDayWeather favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fdaydayweather%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>DayDayWeather</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2001-01-01</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>将单体天气应用重构为高可用、可扩展的微服务系统Spring Cloud / Redis</p>
</div>
</a>
<a href="https://blog.rzlnb.top/project/llm-agent/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="LLM Agent" data-url="https://blog.rzlnb.top/project/llm-agent/"
data-icon="fas fa-pen"
data-description="多模型 LLM Windows 桌面客户端(.NET 8 / WinForms / SQLite"
data-tooltip="LLM Agent - 多模型 LLM Windows 桌面客户端(.NET 8 / WinForms / SQLite"
data-published-at="2001-01-01T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fllm-agent%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="LLM Agent favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fllm-agent%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>LLM Agent</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2001-01-01</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>多模型 LLM Windows 桌面客户端(.NET 8 / WinForms / SQLite</p>
</div>
</a>
<a href="https://blog.rzlnb.top/project/xxsportshall/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="XxSportsHall" data-url="https://blog.rzlnb.top/project/xxsportshall/"
data-icon="fas fa-pen"
data-description="已上线微信小程序 Mini Program + CloudBase 约课/购课闭环(三端)"
data-tooltip="XxSportsHall - 已上线微信小程序 Mini Program + CloudBase 约课/购课闭环(三端)"
data-published-at="2001-01-01T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fxxsportshall%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="XxSportsHall favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fxxsportshall%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>XxSportsHall</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2001-01-01</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>已上线微信小程序 Mini Program + CloudBase 约课/购课闭环(三端)</p>
</div>
</a>
<a href="https://blog.rzlnb.top/project/menav/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="MeNav" data-url="https://blog.rzlnb.top/project/menav/"
data-icon="fas fa-pen"
data-description="个人导航站 static site generator配置化 + 构建期生成 + 纯静态交付)"
data-tooltip="MeNav - 个人导航站 static site generator配置化 + 构建期生成 + 纯静态交付)"
data-published-at="2001-01-01T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fmenav%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="MeNav favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fmenav%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>MeNav</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2001-01-01</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>个人导航站 static site generator配置化 + 构建期生成 + 纯静态交付)</p>
</div>
</a>
<a href="https://blog.rzlnb.top/project/teachdo/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="TeachDo" data-url="https://blog.rzlnb.top/project/teachdo/"
data-icon="fas fa-pen"
data-description="面向教师的 AI 备课平台Outline / 教案 / PPT 生成与编辑 / KB-RAG / 导出)"
data-tooltip="TeachDo - 面向教师的 AI 备课平台Outline / 教案 / PPT 生成与编辑 / KB-RAG / 导出)"
data-published-at="2001-01-01T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fteachdo%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="TeachDo favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fteachdo%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>TeachDo</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2001-01-01</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>面向教师的 AI 备课平台Outline / 教案 / PPT 生成与编辑 / KB-RAG / 导出)</p>
</div>
</a>
<a href="https://blog.rzlnb.top/project/marksvault/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="MarksVault" data-url="https://blog.rzlnb.top/project/marksvault/"
data-icon="fas fa-pen"
data-description="浏览器书签管理扩展:整理 + 自动化任务 + 备份到 GitHub 私有仓库"
data-tooltip="MarksVault - 浏览器书签管理扩展:整理 + 自动化任务 + 备份到 GitHub 私有仓库"
data-published-at="2001-01-01T00:00:00.000Z" data-source="Coolzr&#x27;s Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fmarksvault%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="MarksVault favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2Fproject%2Fmarksvault%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>MarksVault</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2001-01-01</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Coolzr&#x27;s Blog</span>
</div>
<p>浏览器书签管理扩展:整理 + 自动化任务 + 备份到 GitHub 私有仓库</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1 category-readonly">
<div class="category-header" data-toggle="category">
<h2>
<i class="fas fa-rss"></i>
官方博客
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid">
<a href="https://blog.cloudflare.com/past-bots-and-humans/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Moving past bots vs. humans" data-url="https://blog.cloudflare.com/past-bots-and-humans/"
data-icon="fas fa-cloud"
data-description="As AI assistants and privacy proxies challenge the capabilities of traditional bot detection, the Web needs new models for accountability. We believe that control should remain with the client, and th..."
data-tooltip="Moving past bots vs. humans - As AI assistants and privacy proxies challenge the capabilities of traditional bot detection, the Web needs new models for accountability. We believe that control should remain with the client, and th..."
data-published-at="2026-04-21T13:00:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fpast-bots-and-humans%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Moving past bots vs. humans favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fpast-bots-and-humans%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Moving past bots vs. humans</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-21</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>As AI assistants and privacy proxies challenge the capabilities of traditional bot detection, the Web needs new models for accountability. We believe that control should remain with the client, and th...</p>
</div>
</a>
<a href="https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Changes to GitHub Copilot Individual plans" data-url="https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/"
data-icon="fab fa-github"
data-description="We&#x27;re making these changes to ensure a reliable and predictable experience for existing customers. The post Changes to GitHub Copilot Individual plans appeared first on The GitHub Blog."
data-tooltip="Changes to GitHub Copilot Individual plans - We&#x27;re making these changes to ensure a reliable and predictable experience for existing customers. The post Changes to GitHub Copilot Individual plans appeared first on The GitHub Blog."
data-published-at="2026-04-20T18:15:28.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fnews-insights%2Fcompany-news%2Fchanges-to-github-copilot-individual-plans%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Changes to GitHub Copilot Individual plans favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fnews-insights%2Fcompany-news%2Fchanges-to-github-copilot-individual-plans%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Changes to GitHub Copilot Individual plans</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-20</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>We&#x27;re making these changes to ensure a reliable and predictable experience for existing customers. The post Changes to GitHub Copilot Individual plans appeared first on The GitHub Blog.</p>
</div>
</a>
<a href="https://github.blog/open-source/git/highlights-from-git-2-54/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Highlights from Git 2.54" data-url="https://github.blog/open-source/git/highlights-from-git-2-54/"
data-icon="fab fa-github"
data-description="The open source Git project just released Git 2.54. Here is GitHubs look at some of the most interesting features and changes introduced since last time. The post Highlights from Git 2.54 appeared fi..."
data-tooltip="Highlights from Git 2.54 - The open source Git project just released Git 2.54. Here is GitHubs look at some of the most interesting features and changes introduced since last time. The post Highlights from Git 2.54 appeared fi..."
data-published-at="2026-04-20T16:43:57.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fopen-source%2Fgit%2Fhighlights-from-git-2-54%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Highlights from Git 2.54 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fopen-source%2Fgit%2Fhighlights-from-git-2-54%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Highlights from Git 2.54</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-20</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>The open source Git project just released Git 2.54. Here is GitHubs look at some of the most interesting features and changes introduced since last time. The post Highlights from Git 2.54 appeared fi...</p>
</div>
</a>
<a href="https://blog.cloudflare.com/agents-week-in-review/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Building the agentic cloud: everything we launched during Agents Week 2026" data-url="https://blog.cloudflare.com/agents-week-in-review/"
data-icon="fas fa-cloud"
data-description="Agents Week 2026 is a wrap. Lets take a look at everything we announced, from compute and security to the agent toolbox, platform tools, and the emerging agentic web. Everything we shipped for the ag..."
data-tooltip="Building the agentic cloud: everything we launched during Agents Week 2026 - Agents Week 2026 is a wrap. Lets take a look at everything we announced, from compute and security to the agent toolbox, platform tools, and the emerging agentic web. Everything we shipped for the ag..."
data-published-at="2026-04-20T13:00:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fagents-week-in-review%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Building the agentic cloud: everything we launched during Agents Week 2026 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fagents-week-in-review%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Building the agentic cloud: everything we launched during Agents Week 2026</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-20</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>Agents Week 2026 is a wrap. Lets take a look at everything we announced, from compute and security to the agent toolbox, platform tools, and the emerging agentic web. Everything we shipped for the ag...</p>
</div>
</a>
<a href="https://blog.cloudflare.com/internal-ai-engineering-stack/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="The AI engineering stack we built internally — on the platform we ship" data-url="https://blog.cloudflare.com/internal-ai-engineering-stack/"
data-icon="fas fa-cloud"
data-description="We built our internal AI engineering stack on the same products we ship. That means 20 million requests routed through AI Gateway, 241 billion tokens processed, and inference running on Workers AI, se..."
data-tooltip="The AI engineering stack we built internally — on the platform we ship - We built our internal AI engineering stack on the same products we ship. That means 20 million requests routed through AI Gateway, 241 billion tokens processed, and inference running on Workers AI, se..."
data-published-at="2026-04-20T13:00:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Finternal-ai-engineering-stack%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="The AI engineering stack we built internally — on the platform we ship favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Finternal-ai-engineering-stack%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>The AI engineering stack we built internally — on the platform we ship</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-20</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>We built our internal AI engineering stack on the same products we ship. That means 20 million requests routed through AI Gateway, 241 billion tokens processed, and inference running on Workers AI, se...</p>
</div>
</a>
<a href="https://blog.cloudflare.com/ai-code-review/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Orchestrating AI Code Review at scale" data-url="https://blog.cloudflare.com/ai-code-review/"
data-icon="fas fa-cloud"
data-description="Learn about how we built a CI-native AI code reviewer using OpenCode that helps our engineers ship better, safer code."
data-tooltip="Orchestrating AI Code Review at scale - Learn about how we built a CI-native AI code reviewer using OpenCode that helps our engineers ship better, safer code."
data-published-at="2026-04-20T13:00:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fai-code-review%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Orchestrating AI Code Review at scale favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fai-code-review%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Orchestrating AI Code Review at scale</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-20</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>Learn about how we built a CI-native AI code reviewer using OpenCode that helps our engineers ship better, safer code.</p>
</div>
</a>
<a href="https://github.blog/ai-and-ml/github-copilot/building-an-emoji-list-generator-with-the-github-copilot-cli/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Building an emoji list generator with the GitHub Copilot CLI" data-url="https://github.blog/ai-and-ml/github-copilot/building-an-emoji-list-generator-with-the-github-copilot-cli/"
data-icon="fab fa-github"
data-description="See how we created an emoji list generator during the Rubber Duck Thursday stream. The post Building an emoji list generator with the GitHub Copilot CLI appeared first on The GitHub Blog."
data-tooltip="Building an emoji list generator with the GitHub Copilot CLI - See how we created an emoji list generator during the Rubber Duck Thursday stream. The post Building an emoji list generator with the GitHub Copilot CLI appeared first on The GitHub Blog."
data-published-at="2026-04-17T18:00:00.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fai-and-ml%2Fgithub-copilot%2Fbuilding-an-emoji-list-generator-with-the-github-copilot-cli%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Building an emoji list generator with the GitHub Copilot CLI favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fai-and-ml%2Fgithub-copilot%2Fbuilding-an-emoji-list-generator-with-the-github-copilot-cli%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Building an emoji list generator with the GitHub Copilot CLI</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>See how we created an emoji list generator during the Rubber Duck Thursday stream. The post Building an emoji list generator with the GitHub Copilot CLI appeared first on The GitHub Blog.</p>
</div>
</a>
<a href="https://github.blog/news-insights/company-news/bringing-more-transparency-to-githubs-status-page/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Bringing more transparency to GitHubs status page" data-url="https://github.blog/news-insights/company-news/bringing-more-transparency-to-githubs-status-page/"
data-icon="fab fa-github"
data-description="Changes to the status page will provide more specific data, so you&#x27;ll have better insight into the overall health of the platform. The post Bringing more transparency to GitHubs status page appeared ..."
data-tooltip="Bringing more transparency to GitHubs status page - Changes to the status page will provide more specific data, so you&#x27;ll have better insight into the overall health of the platform. The post Bringing more transparency to GitHubs status page appeared ..."
data-published-at="2026-04-17T16:00:00.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fnews-insights%2Fcompany-news%2Fbringing-more-transparency-to-githubs-status-page%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Bringing more transparency to GitHubs status page favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fnews-insights%2Fcompany-news%2Fbringing-more-transparency-to-githubs-status-page%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Bringing more transparency to GitHubs status page</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>Changes to the status page will provide more specific data, so you&#x27;ll have better insight into the overall health of the platform. The post Bringing more transparency to GitHubs status page appeared ...</p>
</div>
</a>
<a href="https://blog.cloudflare.com/agent-readiness/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Introducing the Agent Readiness score. Is your site agent-ready?" data-url="https://blog.cloudflare.com/agent-readiness/"
data-icon="fas fa-cloud"
data-description="The Agent Readiness score can help site owners understand how well their websites support AI agents. Here we explore new standards, share Radar data, and detail how we made Cloudflares docs the most ..."
data-tooltip="Introducing the Agent Readiness score. Is your site agent-ready? - The Agent Readiness score can help site owners understand how well their websites support AI agents. Here we explore new standards, share Radar data, and detail how we made Cloudflares docs the most ..."
data-published-at="2026-04-17T13:05:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fagent-readiness%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Introducing the Agent Readiness score. Is your site agent-ready? favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fagent-readiness%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Introducing the Agent Readiness score. Is your site agent-ready?</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>The Agent Readiness score can help site owners understand how well their websites support AI agents. Here we explore new standards, share Radar data, and detail how we made Cloudflares docs the most ...</p>
</div>
</a>
<a href="https://blog.cloudflare.com/shared-dictionaries/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Shared Dictionaries: compression that keeps up with the agentic web" data-url="https://blog.cloudflare.com/shared-dictionaries/"
data-icon="fas fa-cloud"
data-description="Today, were excited to give you a sneak peek of our support for shared compression dictionaries, show you how it improves page load times, and reveal when youll be able to try the beta yourself."
data-tooltip="Shared Dictionaries: compression that keeps up with the agentic web - Today, were excited to give you a sneak peek of our support for shared compression dictionaries, show you how it improves page load times, and reveal when youll be able to try the beta yourself."
data-published-at="2026-04-17T13:02:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fshared-dictionaries%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Shared Dictionaries: compression that keeps up with the agentic web favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fshared-dictionaries%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Shared Dictionaries: compression that keeps up with the agentic web</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>Today, were excited to give you a sneak peek of our support for shared compression dictionaries, show you how it improves page load times, and reveal when youll be able to try the beta yourself.</p>
</div>
</a>
<a href="https://blog.cloudflare.com/ai-redirects/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Redirects for AI Training enforces canonical content" data-url="https://blog.cloudflare.com/ai-redirects/"
data-icon="fas fa-cloud"
data-description="Soft directives dont stop crawlers from ingesting deprecated content. Redirects for AI Training allows anybody on Cloudflare to redirect verified crawlers to canonical pages with one toggle and no or..."
data-tooltip="Redirects for AI Training enforces canonical content - Soft directives dont stop crawlers from ingesting deprecated content. Redirects for AI Training allows anybody on Cloudflare to redirect verified crawlers to canonical pages with one toggle and no or..."
data-published-at="2026-04-17T13:00:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fai-redirects%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Redirects for AI Training enforces canonical content favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Fai-redirects%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Redirects for AI Training enforces canonical content</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>Soft directives dont stop crawlers from ingesting deprecated content. Redirects for AI Training allows anybody on Cloudflare to redirect verified crawlers to canonical pages with one toggle and no or...</p>
</div>
</a>
<a href="https://blog.cloudflare.com/unweight-tensor-compression/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Unweight: how we compressed an LLM 22% without sacrificing quality" data-url="https://blog.cloudflare.com/unweight-tensor-compression/"
data-icon="fas fa-cloud"
data-description="Running LLMs across Cloudflares network requires us to be smarter and more efficient about GPU memory bandwidth. Thats why we developed Unweight, a lossless inference-time compression system that ac..."
data-tooltip="Unweight: how we compressed an LLM 22% without sacrificing quality - Running LLMs across Cloudflares network requires us to be smarter and more efficient about GPU memory bandwidth. Thats why we developed Unweight, a lossless inference-time compression system that ac..."
data-published-at="2026-04-17T13:00:00.000Z" data-source="Cloudflare Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Funweight-tensor-compression%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Unweight: how we compressed an LLM 22% without sacrificing quality favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2Funweight-tensor-compression%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Unweight: how we compressed an LLM 22% without sacrificing quality</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-17</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">Cloudflare Blog</span>
</div>
<p>Running LLMs across Cloudflares network requires us to be smarter and more efficient about GPU memory bandwidth. Thats why we developed Unweight, a lossless inference-time compression system that ac...</p>
</div>
</a>
<a href="https://github.blog/engineering/infrastructure/how-github-uses-ebpf-to-improve-deployment-safety/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="How GitHub uses eBPF to improve deployment safety" data-url="https://github.blog/engineering/infrastructure/how-github-uses-ebpf-to-improve-deployment-safety/"
data-icon="fab fa-github"
data-description="Learn how Github uses eBPF to detect and prevent circular dependencies in its deployment tooling. The post How GitHub uses eBPF to improve deployment safety appeared first on The GitHub Blog."
data-tooltip="How GitHub uses eBPF to improve deployment safety - Learn how Github uses eBPF to detect and prevent circular dependencies in its deployment tooling. The post How GitHub uses eBPF to improve deployment safety appeared first on The GitHub Blog."
data-published-at="2026-04-16T16:00:00.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fengineering%2Finfrastructure%2Fhow-github-uses-ebpf-to-improve-deployment-safety%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="How GitHub uses eBPF to improve deployment safety favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fengineering%2Finfrastructure%2Fhow-github-uses-ebpf-to-improve-deployment-safety%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>How GitHub uses eBPF to improve deployment safety</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-16</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>Learn how Github uses eBPF to detect and prevent circular dependencies in its deployment tooling. The post How GitHub uses eBPF to improve deployment safety appeared first on The GitHub Blog.</p>
</div>
</a>
<a href="https://github.blog/ai-and-ml/github-copilot/build-a-personal-organization-command-center-with-github-copilot-cli/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Build a personal organization command center with GitHub Copilot CLI" data-url="https://github.blog/ai-and-ml/github-copilot/build-a-personal-organization-command-center-with-github-copilot-cli/"
data-icon="fab fa-github"
data-description="Learn about the productivity tool one GitHub engineer built, and how AI supported the development process. The post Build a personal organization command center with GitHub Copilot CLI appeared first ..."
data-tooltip="Build a personal organization command center with GitHub Copilot CLI - Learn about the productivity tool one GitHub engineer built, and how AI supported the development process. The post Build a personal organization command center with GitHub Copilot CLI appeared first ..."
data-published-at="2026-04-15T17:00:00.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fai-and-ml%2Fgithub-copilot%2Fbuild-a-personal-organization-command-center-with-github-copilot-cli%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Build a personal organization command center with GitHub Copilot CLI favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fai-and-ml%2Fgithub-copilot%2Fbuild-a-personal-organization-command-center-with-github-copilot-cli%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Build a personal organization command center with GitHub Copilot CLI</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-15</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>Learn about the productivity tool one GitHub engineer built, and how AI supported the development process. The post Build a personal organization command center with GitHub Copilot CLI appeared first ...</p>
</div>
</a>
<a href="https://github.blog/news-insights/policy-news-and-insights/developer-policy-update-intermediary-liability-copyright-and-transparency/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Developer policy update: Intermediary liability, copyright, and transparency" data-url="https://github.blog/news-insights/policy-news-and-insights/developer-policy-update-intermediary-liability-copyright-and-transparency/"
data-icon="fab fa-github"
data-description="Were sharing recent policy updates that developers should know about, updating our Transparency Center with the full year of 2025 data, and looking to whats ahead. The post Developer policy update: ..."
data-tooltip="Developer policy update: Intermediary liability, copyright, and transparency - Were sharing recent policy updates that developers should know about, updating our Transparency Center with the full year of 2025 data, and looking to whats ahead. The post Developer policy update: ..."
data-published-at="2026-04-15T15:00:00.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fnews-insights%2Fpolicy-news-and-insights%2Fdeveloper-policy-update-intermediary-liability-copyright-and-transparency%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Developer policy update: Intermediary liability, copyright, and transparency favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fnews-insights%2Fpolicy-news-and-insights%2Fdeveloper-policy-update-intermediary-liability-copyright-and-transparency%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Developer policy update: Intermediary liability, copyright, and transparency</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-15</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>Were sharing recent policy updates that developers should know about, updating our Transparency Center with the full year of 2025 data, and looking to whats ahead. The post Developer policy update: ...</p>
</div>
</a>
<a href="https://github.blog/security/hack-the-ai-agent-build-agentic-ai-security-skills-with-the-github-secure-code-game/" class="site-card" target="_blank"
rel="noopener" data-type="article" data-name="Hack the AI agent: Build agentic AI security skills with the GitHub Secure Code Game" data-url="https://github.blog/security/hack-the-ai-agent-build-agentic-ai-security-skills-with-the-github-secure-code-game/"
data-icon="fab fa-github"
data-description="Learn to find and exploit real-world agentic AI vulnerabilities through five progressive challenges in this free, open source game that over 10,000 developers have already used to sharpen their securi..."
data-tooltip="Hack the AI agent: Build agentic AI security skills with the GitHub Secure Code Game - Learn to find and exploit real-world agentic AI vulnerabilities through five progressive challenges in this free, open source game that over 10,000 developers have already used to sharpen their securi..."
data-published-at="2026-04-14T18:17:59.000Z" data-source="GitHub Blog" >
<div class="article-card-header">
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fsecurity%2Fhack-the-ai-agent-build-agentic-ai-security-skills-with-the-github-secure-code-game%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Hack the AI agent: Build agentic AI security skills with the GitHub Secure Code Game favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2Fsecurity%2Fhack-the-ai-agent-build-agentic-ai-security-skills-with-the-github-secure-code-game%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="article-card-title">
<h3>Hack the AI agent: Build agentic AI security skills with the GitHub Secure Code Game</h3>
</div>
</div>
<div class="article-card-body">
<div class="site-card-meta">
<span class="site-card-meta-date">2026-04-14</span>
<span class="site-card-meta-sep">·</span>
<span class="site-card-meta-source">GitHub Blog</span>
</div>
<p>Learn to find and exploit real-world agentic AI vulnerabilities through five progressive challenges in this free, open source game that over 10,000 developers have already used to sharpen their securi...</p>
</div>
</a>
</div>
</div>
</section>
<div class="menav-extension-shadow" data-extension-shadow="true" data-search-exclude="true" aria-hidden="true">
<section class="category category-level-1"
id="个人博客"
data-type="category"
data-id="个人博客"
data-name="个人博客"
data-icon="fas fa-rss"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-rss"></i>
个人博客
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://www.ruanyifeng.com/blog/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="阮一峰的网络日志" data-url="https://www.ruanyifeng.com/blog/"
data-icon="fas fa-pen"
data-description="技术文章与随笔"
data-tooltip="阮一峰的网络日志 - 技术文章与随笔"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.ruanyifeng.com%2Fblog%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="阮一峰的网络日志 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.ruanyifeng.com%2Fblog%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>阮一峰的网络日志</h3>
<p>技术文章与随笔</p>
</div>
</a>
<a href="https://blog.rzlnb.top/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Coolzr&#x27;s Blog" data-url="https://blog.rzlnb.top/"
data-icon="fas fa-pen"
data-description="偶尔会写点什么"
data-tooltip="Coolzr&#x27;s Blog - 偶尔会写点什么"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Coolzr&#x27;s Blog favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.rzlnb.top%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Coolzr&#x27;s Blog</h3>
<p>偶尔会写点什么</p>
</div>
</a>
<a href="https://www.tianxianzi.me/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="天仙子" data-url="https://www.tianxianzi.me/"
data-icon="fas fa-pen"
data-description="tianxianzi"
data-tooltip="天仙子 - tianxianzi"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="天仙子 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.tianxianzi.me%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>天仙子</h3>
<p>tianxianzi</p>
</div>
</a>
<a href="https://www.pseudoyu.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="pseudoyu" data-url="https://www.pseudoyu.com/"
data-icon="fas fa-pen"
data-description="pseudoyu"
data-tooltip="pseudoyu - pseudoyu"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.pseudoyu.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="pseudoyu favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.pseudoyu.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-pen icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>pseudoyu</h3>
<p>pseudoyu</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="官方博客"
data-type="category"
data-id="官方博客"
data-name="官方博客"
data-icon="fas fa-rss"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-rss"></i>
官方博客
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://github.blog/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="GitHub Blog" data-url="https://github.blog/"
data-icon="fab fa-github"
data-description="GitHub 官方博客(工程/产品/安全)"
data-tooltip="GitHub Blog - GitHub 官方博客(工程/产品/安全)"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="GitHub Blog favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.blog%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>GitHub Blog</h3>
<p>GitHub 官方博客(工程/产品/安全)</p>
</div>
</a>
<a href="https://blog.cloudflare.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Cloudflare Blog" data-url="https://blog.cloudflare.com/"
data-icon="fas fa-cloud"
data-description="Cloudflare 工程与安全博客"
data-tooltip="Cloudflare Blog - Cloudflare 工程与安全博客"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Cloudflare Blog favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fblog.cloudflare.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cloud icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Cloudflare Blog</h3>
<p>Cloudflare 工程与安全博客</p>
</div>
</a>
</div>
</div>
</section>
</div>
</div>
</div>
<div class="page bookmarks" id="bookmarks">
<div class="welcome-section">
<div class="welcome-section-main">
<div class="welcome-title-row">
<h2 data-editable="page-title">书签</h2>
<span class="page-updated-inline" title="2026-04-22T04:44:47.630Z">
update: 2026-04-22 | from: mtime
</span>
</div>
<p class="subtitle" data-editable="page-subtitle">bookmarks</p>
</div>
</div>
<section class="category category-level-1"
id="常用网站"
data-type="category"
data-id="常用网站"
data-name="常用网站"
data-icon="fas fa-star"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-star"></i>
常用网站
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="sites-grid" data-container="sites">
<a href="https://github.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="GitHub" data-url="https://github.com/"
data-icon="fab fa-github"
data-description="代码托管平台"
data-tooltip="GitHub - 代码托管平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="GitHub favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>GitHub</h3>
<p>代码托管平台</p>
</div>
</a>
<a href="https://stackoverflow.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Stack Overflow" data-url="https://stackoverflow.com/"
data-icon="fab fa-stack-overflow"
data-description="程序员问答社区"
data-tooltip="Stack Overflow - 程序员问答社区"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fstackoverflow.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Stack Overflow favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fstackoverflow.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-stack-overflow icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Stack Overflow</h3>
<p>程序员问答社区</p>
</div>
</a>
<a href="https://developer.mozilla.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="MDN Web Docs" data-url="https://developer.mozilla.org/"
data-icon="fas fa-book"
data-description="Web开发文档"
data-tooltip="MDN Web Docs - Web开发文档"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fdeveloper.mozilla.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="MDN Web Docs favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fdeveloper.mozilla.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-book icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>MDN Web Docs</h3>
<p>Web开发文档</p>
</div>
</a>
</div>
</div>
</section>
<section class="category category-level-1"
id="社交媒体"
data-type="category"
data-id="社交媒体"
data-name="社交媒体"
data-icon="fas fa-share-alt"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-share-alt"></i>
社交媒体
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="groups-container" data-container="groups">
<div class="group group-level-3"
data-type="group"
data-name="国际平台"
data-icon="fas fa-globe"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-globe"></i>
国际平台
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://twitter.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Twitter" data-url="https://twitter.com/"
data-icon="fab fa-twitter"
data-description="微博客社交平台"
data-tooltip="Twitter - 微博客社交平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ftwitter.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Twitter favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ftwitter.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-twitter icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Twitter</h3>
<p>微博客社交平台</p>
</div>
</a>
<a href="https://www.linkedin.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="LinkedIn" data-url="https://www.linkedin.com/"
data-icon="fab fa-linkedin"
data-description="职业社交网络"
data-tooltip="LinkedIn - 职业社交网络"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.linkedin.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="LinkedIn favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.linkedin.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-linkedin icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>LinkedIn</h3>
<p>职业社交网络</p>
</div>
</a>
<a href="https://www.facebook.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Facebook" data-url="https://www.facebook.com/"
data-icon="fab fa-facebook"
data-description="社交网络服务"
data-tooltip="Facebook - 社交网络服务"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.facebook.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Facebook favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.facebook.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-facebook icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Facebook</h3>
<p>社交网络服务</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="国内平台"
data-icon="fas fa-map-marker-alt"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-map-marker-alt"></i>
国内平台
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://weibo.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="微博" data-url="https://weibo.com/"
data-icon="fas fa-comment"
data-description="中文社交媒体平台"
data-tooltip="微博 - 中文社交媒体平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fweibo.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="微博 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fweibo.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-comment icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>微博</h3>
<p>中文社交媒体平台</p>
</div>
</a>
<a href="https://www.zhihu.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="知乎" data-url="https://www.zhihu.com/"
data-icon="fas fa-question-circle"
data-description="中文问答社区"
data-tooltip="知乎 - 中文问答社区"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.zhihu.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="知乎 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.zhihu.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-question-circle icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>知乎</h3>
<p>中文问答社区</p>
</div>
</a>
<a href="https://www.bilibili.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="B站" data-url="https://www.bilibili.com/"
data-icon="fas fa-video"
data-description="弹幕视频网站"
data-tooltip="B站 - 弹幕视频网站"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.bilibili.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="B站 favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.bilibili.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-video icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>B站</h3>
<p>弹幕视频网站</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="category category-level-1"
id="技术资源"
data-type="category"
data-id="技术资源"
data-name="技术资源"
data-icon="fas fa-laptop-code"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-laptop-code"></i>
技术资源
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="subcategories-container" data-container="subcategories">
<section class="category category-level-2"
id="前端开发"
data-type="category"
data-id="前端开发"
data-name="前端开发"
data-icon="fas fa-code"
data-level="2"
data-container="categories">
<div class="category-header" data-toggle="category">
<h3 data-editable="category-name">
<i class="fas fa-code"></i>
前端开发
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h3>
</div>
<div class="category-content">
<div class="groups-container" data-container="groups">
<div class="group group-level-3"
data-type="group"
data-name="框架库"
data-icon="fas fa-cube"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-cube"></i>
框架库
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://reactjs.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="React" data-url="https://reactjs.org/"
data-icon="fab fa-react"
data-description="React官方文档"
data-tooltip="React - React官方文档"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Freactjs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="React favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Freactjs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-react icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>React</h3>
<p>React官方文档</p>
</div>
</a>
<a href="https://vuejs.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Vue.js" data-url="https://vuejs.org/"
data-icon="fab fa-vuejs"
data-description="Vue.js官方文档"
data-tooltip="Vue.js - Vue.js官方文档"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvuejs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Vue.js favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvuejs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-vuejs icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Vue.js</h3>
<p>Vue.js官方文档</p>
</div>
</a>
<a href="https://angular.io/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Angular" data-url="https://angular.io/"
data-icon="fab fa-angular"
data-description="Angular官方文档"
data-tooltip="Angular - Angular官方文档"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fangular.io%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Angular favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fangular.io%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-angular icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Angular</h3>
<p>Angular官方文档</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="状态管理"
data-icon="fas fa-database"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-database"></i>
状态管理
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://redux.js.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Redux" data-url="https://redux.js.org/"
data-icon="fas fa-database"
data-description="Redux状态管理"
data-tooltip="Redux - Redux状态管理"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fredux.js.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Redux favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fredux.js.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-database icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Redux</h3>
<p>Redux状态管理</p>
</div>
</a>
<a href="https://vuex.vuejs.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Vuex" data-url="https://vuex.vuejs.org/"
data-icon="fas fa-database"
data-description="Vue状态管理"
data-tooltip="Vuex - Vue状态管理"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvuex.vuejs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Vuex favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvuex.vuejs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-database icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Vuex</h3>
<p>Vue状态管理</p>
</div>
</a>
<a href="https://mobx.js.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="MobX" data-url="https://mobx.js.org/"
data-icon="fas fa-react"
data-description="响应式状态管理"
data-tooltip="MobX - 响应式状态管理"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fmobx.js.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="MobX favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fmobx.js.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-react icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>MobX</h3>
<p>响应式状态管理</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="构建工具"
data-icon="fas fa-tools"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-tools"></i>
构建工具
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://webpack.js.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Webpack" data-url="https://webpack.js.org/"
data-icon="fas fa-cube"
data-description="模块打包工具"
data-tooltip="Webpack - 模块打包工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwebpack.js.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Webpack favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwebpack.js.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cube icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Webpack</h3>
<p>模块打包工具</p>
</div>
</a>
<a href="https://vitejs.dev/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Vite" data-url="https://vitejs.dev/"
data-icon="fas fa-bolt"
data-description="下一代前端构建工具"
data-tooltip="Vite - 下一代前端构建工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvitejs.dev%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Vite favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fvitejs.dev%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-bolt icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Vite</h3>
<p>下一代前端构建工具</p>
</div>
</a>
<a href="https://rollupjs.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Rollup" data-url="https://rollupjs.org/"
data-icon="fas fa-compress"
data-description="模块打包器"
data-tooltip="Rollup - 模块打包器"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Frollupjs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Rollup favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Frollupjs.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-compress icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Rollup</h3>
<p>模块打包器</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="category category-level-2"
id="后端开发"
data-type="category"
data-id="后端开发"
data-name="后端开发"
data-icon="fas fa-server"
data-level="2"
data-container="categories">
<div class="category-header" data-toggle="category">
<h3 data-editable="category-name">
<i class="fas fa-server"></i>
后端开发
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h3>
</div>
<div class="category-content">
<div class="groups-container" data-container="groups">
<div class="group group-level-3"
data-type="group"
data-name="Node.js生态"
data-icon="fab fa-node-js"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fab fa-node-js"></i>
Node.js生态
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://expressjs.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Express" data-url="https://expressjs.com/"
data-icon="fas fa-server"
data-description="Node.js Web框架"
data-tooltip="Express - Node.js Web框架"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fexpressjs.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Express favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fexpressjs.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-server icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Express</h3>
<p>Node.js Web框架</p>
</div>
</a>
<a href="https://koajs.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Koa" data-url="https://koajs.com/"
data-icon="fas fa-leaf" data-force-icon-mode="manual"
data-description="下一代Node.js框架"
data-tooltip="Koa - 下一代Node.js框架"
>
<div class="site-card-icon" aria-hidden="true">
<i class="fas fa-leaf site-icon" aria-hidden="true"></i>
</div>
<div class="site-card-content">
<h3>Koa</h3>
<p>下一代Node.js框架</p>
</div>
</a>
<a href="https://nestjs.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="NestJS" data-url="https://nestjs.com/"
data-icon="fas fa-home"
data-description="Node.js企业级框架"
data-tooltip="NestJS - Node.js企业级框架"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fnestjs.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="NestJS favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fnestjs.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-home icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>NestJS</h3>
<p>Node.js企业级框架</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="Python框架"
data-icon="fab fa-python"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fab fa-python"></i>
Python框架
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://www.djangoproject.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Django" data-url="https://www.djangoproject.com/"
data-icon="fab fa-python"
data-description="Python Web框架"
data-tooltip="Django - Python Web框架"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.djangoproject.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Django favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.djangoproject.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-python icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Django</h3>
<p>Python Web框架</p>
</div>
</a>
<a href="https://flask.palletsprojects.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Flask" data-url="https://flask.palletsprojects.com/"
data-icon="fas fa-flask"
data-description="Python微框架"
data-tooltip="Flask - Python微框架"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fflask.palletsprojects.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Flask favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fflask.palletsprojects.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-flask icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Flask</h3>
<p>Python微框架</p>
</div>
</a>
<a href="https://fastapi.tiangolo.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="FastAPI" data-url="https://fastapi.tiangolo.com/"
data-icon="fas fa-bolt"
data-description="现代Python Web框架"
data-tooltip="FastAPI - 现代Python Web框架"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ffastapi.tiangolo.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="FastAPI favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ffastapi.tiangolo.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-bolt icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>FastAPI</h3>
<p>现代Python Web框架</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</section>
<section class="category category-level-1"
id="设计资源"
data-type="category"
data-id="设计资源"
data-name="设计资源"
data-icon="fas fa-palette"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-palette"></i>
设计资源
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="subcategories-container" data-container="subcategories">
<section class="category category-level-2"
id="ui设计工具"
data-type="category"
data-id="ui设计工具"
data-name="UI设计工具"
data-icon="fas fa-paint-brush"
data-level="2"
data-container="categories">
<div class="category-header" data-toggle="category">
<h3 data-editable="category-name">
<i class="fas fa-paint-brush"></i>
UI设计工具
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h3>
</div>
<div class="category-content">
<div class="groups-container" data-container="groups">
<div class="group group-level-3"
data-type="group"
data-name="原型设计"
data-icon="fas fa-drafting-compass"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-drafting-compass"></i>
原型设计
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://www.figma.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Figma" data-url="https://www.figma.com/"
data-icon="fab fa-figma"
data-description="协作式UI设计工具"
data-tooltip="Figma - 协作式UI设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.figma.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Figma favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.figma.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-figma icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Figma</h3>
<p>协作式UI设计工具</p>
</div>
</a>
<a href="https://www.sketch.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Sketch" data-url="https://www.sketch.com/"
data-icon="fab fa-sketch"
data-description="Mac平台UI设计工具"
data-tooltip="Sketch - Mac平台UI设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.sketch.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Sketch favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.sketch.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-sketch icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Sketch</h3>
<p>Mac平台UI设计工具</p>
</div>
</a>
<a href="https://www.adobe.com/products/xd.html" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Adobe XD" data-url="https://www.adobe.com/products/xd.html"
data-icon="fab fa-adobe"
data-description="Adobe UI设计工具"
data-tooltip="Adobe XD - Adobe UI设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.adobe.com%2Fproducts%2Fxd.html&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Adobe XD favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.adobe.com%2Fproducts%2Fxd.html&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-adobe icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Adobe XD</h3>
<p>Adobe UI设计工具</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="设计系统"
data-icon="fas fa-th-large"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-th-large"></i>
设计系统
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://ant.design/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Ant Design" data-url="https://ant.design/"
data-icon="fas fa-th" data-force-icon-mode="manual"
data-description="企业级UI设计语言"
data-tooltip="Ant Design - 企业级UI设计语言"
>
<div class="site-card-icon" aria-hidden="true">
<i class="fas fa-th site-icon" aria-hidden="true"></i>
</div>
<div class="site-card-content">
<h3>Ant Design</h3>
<p>企业级UI设计语言</p>
</div>
</a>
<a href="https://material.io/design" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Material Design" data-url="https://material.io/design"
data-icon="fas fa-cube"
data-description="Google设计系统"
data-tooltip="Material Design - Google设计系统"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fmaterial.io%2Fdesign&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Material Design favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fmaterial.io%2Fdesign&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-cube icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Material Design</h3>
<p>Google设计系统</p>
</div>
</a>
<a href="https://getbootstrap.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Bootstrap" data-url="https://getbootstrap.com/"
data-icon="fab fa-bootstrap"
data-description="响应式CSS框架"
data-tooltip="Bootstrap - 响应式CSS框架"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgetbootstrap.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Bootstrap favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgetbootstrap.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-bootstrap icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Bootstrap</h3>
<p>响应式CSS框架</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="category category-level-2"
id="视觉资源"
data-type="category"
data-id="视觉资源"
data-name="视觉资源"
data-icon="fas fa-image"
data-level="2"
data-container="categories">
<div class="category-header" data-toggle="category">
<h3 data-editable="category-name">
<i class="fas fa-image"></i>
视觉资源
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h3>
</div>
<div class="category-content">
<div class="groups-container" data-container="groups">
<div class="group group-level-3"
data-type="group"
data-name="图标库"
data-icon="fas fa-icons"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-icons"></i>
图标库
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://fontawesome.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Font Awesome" data-url="https://fontawesome.com/"
data-icon="fab fa-font-awesome"
data-description="图标库"
data-tooltip="Font Awesome - 图标库"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ffontawesome.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Font Awesome favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ffontawesome.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-font-awesome icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Font Awesome</h3>
<p>图标库</p>
</div>
</a>
<a href="https://www.iconfont.cn/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Iconfont" data-url="https://www.iconfont.cn/"
data-icon="fas fa-icons"
data-description="阿里巴巴图标库"
data-tooltip="Iconfont - 阿里巴巴图标库"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.iconfont.cn%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Iconfont favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.iconfont.cn%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-icons icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Iconfont</h3>
<p>阿里巴巴图标库</p>
</div>
</a>
<a href="https://feathericons.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Feather Icons" data-url="https://feathericons.com/"
data-icon="fas fa-feather"
data-description="简洁的图标库"
data-tooltip="Feather Icons - 简洁的图标库"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ffeathericons.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Feather Icons favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Ffeathericons.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-feather icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Feather Icons</h3>
<p>简洁的图标库</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="配色方案"
data-icon="fas fa-palette"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-palette"></i>
配色方案
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://coolors.co/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Coolors" data-url="https://coolors.co/"
data-icon="fas fa-palette"
data-description="在线配色方案生成器"
data-tooltip="Coolors - 在线配色方案生成器"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcoolors.co%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Coolors favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcoolors.co%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-palette icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Coolors</h3>
<p>在线配色方案生成器</p>
</div>
</a>
<a href="https://color.adobe.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Adobe Color" data-url="https://color.adobe.com/"
data-icon="fab fa-adobe"
data-description="Adobe配色工具"
data-tooltip="Adobe Color - Adobe配色工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcolor.adobe.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Adobe Color favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcolor.adobe.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-adobe icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Adobe Color</h3>
<p>Adobe配色工具</p>
</div>
</a>
<a href="https://paletton.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Paletton" data-url="https://paletton.com/"
data-icon="fas fa-palette"
data-description="配色方案设计工具"
data-tooltip="Paletton - 配色方案设计工具"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fpaletton.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Paletton favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fpaletton.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-palette icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Paletton</h3>
<p>配色方案设计工具</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</section>
<section class="category category-level-1"
id="开发工具"
data-type="category"
data-id="开发工具"
data-name="开发工具"
data-icon="fas fa-tools"
data-level="1"
data-container="categories">
<div class="category-header" data-toggle="category">
<h2 data-editable="category-name">
<i class="fas fa-tools"></i>
开发工具
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h2>
</div>
<div class="category-content">
<div class="groups-container" data-container="groups">
<div class="group group-level-3"
data-type="group"
data-name="代码编辑器"
data-icon="fas fa-code"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-code"></i>
代码编辑器
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://code.visualstudio.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Visual Studio Code" data-url="https://code.visualstudio.com/"
data-icon="fas fa-code"
data-description="微软代码编辑器"
data-tooltip="Visual Studio Code - 微软代码编辑器"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcode.visualstudio.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Visual Studio Code favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fcode.visualstudio.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-code icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Visual Studio Code</h3>
<p>微软代码编辑器</p>
</div>
</a>
<a href="https://www.sublimetext.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Sublime Text" data-url="https://www.sublimetext.com/"
data-icon="fas fa-file-code"
data-description="轻量级代码编辑器"
data-tooltip="Sublime Text - 轻量级代码编辑器"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.sublimetext.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Sublime Text favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.sublimetext.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fas fa-file-code icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Sublime Text</h3>
<p>轻量级代码编辑器</p>
</div>
</a>
<a href="https://www.jetbrains.com/webstorm/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="WebStorm" data-url="https://www.jetbrains.com/webstorm/"
data-icon="fab fa-js"
data-description="JetBrains前端IDE"
data-tooltip="WebStorm - JetBrains前端IDE"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.jetbrains.com%2Fwebstorm%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="WebStorm favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fwww.jetbrains.com%2Fwebstorm%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-js icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>WebStorm</h3>
<p>JetBrains前端IDE</p>
</div>
</a>
</div>
</div>
</div>
<div class="group group-level-3"
data-type="group"
data-name="版本控制"
data-icon="fas fa-code-branch"
data-level="3">
<div class="group-header" data-toggle="group">
<h4 data-editable="group-name">
<i class="fas fa-code-branch"></i>
版本控制
<span class="toggle-icon">
<i class="fas fa-chevron-down"></i>
</span>
</h4>
</div>
<div class="group-content">
<div class="sites-grid" data-container="sites">
<a href="https://github.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="GitHub" data-url="https://github.com/"
data-icon="fab fa-github"
data-description="代码托管平台"
data-tooltip="GitHub - 代码托管平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="GitHub favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgithub.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-github icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>GitHub</h3>
<p>代码托管平台</p>
</div>
</a>
<a href="https://gitlab.com/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="GitLab" data-url="https://gitlab.com/"
data-icon="fab fa-gitlab"
data-description="Git代码管理平台"
data-tooltip="GitLab - Git代码管理平台"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgitlab.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="GitLab favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fgitlab.com%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-gitlab icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>GitLab</h3>
<p>Git代码管理平台</p>
</div>
</a>
<a href="https://bitbucket.org/" class="site-card" target="_blank"
rel="noopener" data-type="site" data-name="Bitbucket" data-url="https://bitbucket.org/"
data-icon="fab fa-bitbucket"
data-description="Atlassian代码托管"
data-tooltip="Bitbucket - Atlassian代码托管"
>
<div class="site-card-icon" aria-hidden="true">
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img class="favicon-icon" src="https://t3.gstatic.cn/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fbitbucket.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true" alt="Bitbucket favicon" loading="lazy"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="if (!this.dataset.faviconFallbackTried) { this.dataset.faviconFallbackTried = '1'; this.src = 'https://t3.gstatic.com/faviconV2?client&#x3D;SOCIAL&amp;type&#x3D;FAVICON&amp;fallback_opts&#x3D;TYPE,SIZE,URL&amp;url&#x3D;https%3A%2F%2Fbitbucket.org%2F&amp;size&#x3D;32&amp;drop_404_icon&#x3D;true'; return; } this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');" />
<i class="fab fa-bitbucket icon-fallback" aria-hidden="true"></i>
</div>
</div>
<div class="site-card-content">
<h3>Bitbucket</h3>
<p>Atlassian代码托管</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
<div class="page content" id="content">
<div class="page-template page-template-content page-template-content">
<div class="welcome-section">
<div class="welcome-section-main">
<div class="welcome-title-row">
<h2 data-editable="page-title">关于</h2>
</div>
<p class="subtitle" data-editable="page-subtitle">项目说明</p>
</div>
</div>
<div class="category content-category">
<article class="content-page" data-content-file="content/about.md">
<h1>关于 MeNav</h1>
<p>MeNav 是一个用于生成<strong>个人导航站</strong>的项目:</p>
<ul>
<li><strong>构建期</strong>:使用 Node.js 作为静态站点生成器SSG把配置与内容渲染为 <code>dist/</code></li>
<li><strong>运行时</strong>:输出一份轻量的浏览器 runtime用于页面交互与增强。</li>
</ul>
<p>这页用于放置项目的说明与使用要点(你也可以改成自己的“关于”页面)。</p>
<h2>适合谁</h2>
<ul>
<li>想要一个<strong>可自托管、可版本管理</strong>的导航页/起始页</li>
<li>希望用 <strong>YAML + Markdown</strong> 管理站点结构与内容</li>
<li>更偏好“生成静态文件再部署”,而不是运行时依赖服务端</li>
</ul>
<h2>快速开始</h2>
<pre><code class="language-bash">npm install
npm run dev
</code></pre>
<ul>
<li><code>npm run dev</code>:本地开发(生成站点并启动本地服务)</li>
<li><code>npm run build</code>:生成生产构建(输出到 <code>dist/</code></li>
</ul>
<h2>项目结构(常用)</h2>
<ul>
<li><code>src/generator/</code>构建期生成器Node.js</li>
<li><code>src/runtime/</code>:浏览器 runtime最终会被打包到 <code>dist/script.js</code></li>
<li><code>templates/</code>Handlebars 模板</li>
<li><code>config/</code>站点配置YAML</li>
<li><code>content/</code>内容页Markdown例如本文件</li>
<li><code>dist/</code>:构建输出(可直接部署)</li>
<li><code>dev/</code>网络缓存gitignored</li>
</ul>
<h2>配置说明(概念)</h2>
<ul>
<li>MeNav 的站点配置以 <code>config/</code> 下的 YAML 为主。</li>
<li><strong>注意</strong>:如果存在 <code>config/user/</code>,它会<strong>完全替换</strong> <code>config/_default/</code>(不是 merge</li>
</ul>
<h2>内容页Markdown说明</h2>
<ul>
<li>内容页的 Markdown 会在<strong>构建期</strong>渲染为 HTML。</li>
<li>内容页通常用于:关于、帮助、使用说明、更新记录等。</li>
</ul>
<h2>安全与链接处理</h2>
<p>MeNav 对链接会做安全处理(例如限制危险的 URL scheme以降低把不安全链接渲染到页面上的风险。</p>
<p>如果你在导航数据或内容页里粘贴了外部链接,建议优先使用 <code>https://</code></p>
<h2>部署</h2>
<p><code>npm run build</code> 后将生成的 <code>dist/</code> 部署到任意静态站点托管即可(例如 Nginx、GitHub Pages、Cloudflare Pages 等)。</p>
<h2>维护建议</h2>
<ul>
<li>把你的配置、内容页都纳入 git 版本管理</li>
<li>变更后跑一遍:</li>
</ul>
<pre><code class="language-bash">npm run check
</code></pre>
<p>(会依次执行语法检查、测试与构建)</p>
</article>
</div>
</div>
</div>
<div class="page search-results" id="search-results">
<!-- 搜索结果页 -->
<div class="welcome-section">
<div class="welcome-section-main">
<h2 data-editable="page-title">搜索结果</h2>
<p class="subtitle" data-editable="page-subtitle">在所有页面中找到的匹配项</p>
</div>
</div>
<section class="category search-section" data-section="common" data-type="category" data-name="常用" data-icon="fas fa-star" style="display: none;">
<h2 data-editable="category-name"><i class="fas fa-star"></i> 常用匹配项</h2>
<div class="sites-grid" data-container="sites"></div>
</section>
<section class="category search-section" data-section="projects" data-type="category" data-name="项目" data-icon="fas fa-project-diagram" style="display: none;">
<h2 data-editable="category-name"><i class="fas fa-project-diagram"></i> 项目匹配项</h2>
<div class="sites-grid" data-container="sites"></div>
</section>
<section class="category search-section" data-section="articles" data-type="category" data-name="文章" data-icon="fas fa-book" style="display: none;">
<h2 data-editable="category-name"><i class="fas fa-book"></i> 文章匹配项</h2>
<div class="sites-grid" data-container="sites"></div>
</section>
<section class="category search-section" data-section="bookmarks" data-type="category" data-name="书签" data-icon="fas fa-bookmark" style="display: none;">
<h2 data-editable="category-name"><i class="fas fa-bookmark"></i> 书签匹配项</h2>
<div class="sites-grid" data-container="sites"></div>
</section>
<section class="category search-section" data-section="content" data-type="category" data-name="关于" data-icon="fas fa-file-alt" style="display: none;">
<h2 data-editable="category-name"><i class="fas fa-file-alt"></i> 关于匹配项</h2>
<div class="sites-grid" data-container="sites"></div>
</section>
</div>
</main>
<!-- 分类切换按钮 -->
<button class="category-toggle" id="category-toggle" aria-label="展开/收起分类">
<i class="fas fa-angle-double-down"></i>
</button>
<!-- 主题切换按钮 -->
<button class="theme-toggle" aria-label="切换主题">
<i class="fas fa-moon"></i>
</button>
</div>
<!-- 配置元信息(版本/配置URL/少量运行时参数)- 用于浏览器扩展按需加载 -->
<script id="menav-config-data" type="application/json" style="display: none;">
{"version":"1.3.0","timestamp":"2026-04-22T04:47:05.278Z","icons":{"mode":"favicon","region":"cn"},"data":{"homePageId":"common","pageTemplates":{"common":"page","projects":"projects","articles":"articles","bookmarks":"bookmarks","content":"content"},"site":{"security":{"allowedSchemes":["http","https","mailto","tel"]}}},"configUrl":"./menav-config.json"}
</script>
<script src="pinyin-match.js"></script>
<script src="script.js"></script>
</body>
</html>