~cytrogen/realm

5dd1685be804caca4cb66411a583ec2dff256513 — Cytrogen a month ago 6d014a2
友邻村落:纯 CSS 缩放 + 随机山丘布局
4 files changed, 1752 insertions(+), 11 deletions(-)

A build-village.py
M friends.html
A friends.opml
M realm.css
A build-village.py => build-village.py +481 -0
@@ 0,0 1,481 @@
#!/usr/bin/env python3
"""
build-village.py — Generate friends.html from a FreshRSS OPML export.

Usage:
    python build-village.py friends.opml

Reads <outline> entries from the OPML, assigns each to one of 9 hillside
clusters, picks from 5 house templates, and writes a complete friends.html
with an interactive zoomable SVG village.
"""

import hashlib
import random
import sys
import xml.etree.ElementTree as ET
from dataclasses import dataclass

# ────────────────────────────────────────────────────────────────
# Data structures
# ────────────────────────────────────────────────────────────────

@dataclass
class Friend:
    name: str
    url: str


# ────────────────────────────────────────────────────────────────
# OPML parser
# ────────────────────────────────────────────────────────────────

def _site_url_from_feed(xml_url: str) -> str:
    """Derive a site URL from a feed URL (best effort)."""
    from urllib.parse import urlparse
    parsed = urlparse(xml_url)
    return f"{parsed.scheme}://{parsed.netloc}/"


# Categories to exclude (your own sites)
EXCLUDE_CATEGORIES = {"第零区"}


def parse_opml(path: str) -> list[Friend]:
    """Extract friends from OPML <outline> elements."""
    tree = ET.parse(path)
    root = tree.getroot()
    friends = []

    for category in root.iter("outline"):
        cat_name = category.get("text", "").strip()

        # Skip excluded categories
        if cat_name in EXCLUDE_CATEGORIES:
            continue

        for outline in category.findall("outline"):
            name = outline.get("text", "").strip()
            xml_url = outline.get("xmlUrl", "").strip()
            html_url = outline.get("htmlUrl", "").strip()

            if not name or not xml_url:
                continue

            # Prefer htmlUrl; fall back to deriving from xmlUrl
            url = html_url or _site_url_from_feed(xml_url)
            friends.append(Friend(name=name, url=url))

    # Deterministic sort by name
    friends.sort(key=lambda f: f.name.lower())
    return friends


# ────────────────────────────────────────────────────────────────
# Coordinate layout
# ────────────────────────────────────────────────────────────────

def _name_hash(name: str) -> int:
    """Deterministic hash from name string (0–65535)."""
    return int(hashlib.md5(name.encode()).hexdigest()[:4], 16)


# ── Hill boundary calculation ──
# Upper hill: M100 480 Q350 120 600 130 Q850 120 1100 480
# Lower hill: M0 480 Q300 240 600 250 Q900 240 1200 480

_HILL_SEGMENTS = [
    # Upper hill
    ((100, 480), (350, 120), (600, 130)),
    ((600, 130), (850, 120), (1100, 480)),
    # Lower hill
    ((0, 480), (300, 240), (600, 250)),
    ((600, 250), (900, 240), (1200, 480)),
]

VALLEY_FLOOR = 480
HOUSE_W, HOUSE_H = 38, 34
MIN_GAP = 5


def _bezier_y_at_x(x: float, p0: tuple, p1: tuple, p2: tuple) -> float | None:
    """Find y on a quadratic bezier at given x. Returns None if outside."""
    x0, y0 = p0
    x1, y1 = p1
    x2, y2 = p2

    a = x0 - 2 * x1 + x2
    b = 2 * (x1 - x0)
    c = x0 - x

    if abs(a) < 1e-10:
        if abs(b) < 1e-10:
            return None
        t = -c / b
    else:
        disc = b * b - 4 * a * c
        if disc < 0:
            return None
        sqrt_d = disc ** 0.5
        t = None
        for tc in [(-b + sqrt_d) / (2 * a), (-b - sqrt_d) / (2 * a)]:
            if 0 <= tc <= 1:
                t = tc
                break
        if t is None:
            return None

    if not (0 <= t <= 1):
        return None
    return (1 - t) ** 2 * y0 + 2 * t * (1 - t) * y1 + t ** 2 * y2


def hill_boundary(x: float) -> float:
    """Return the highest ground y at given x (lowest value = highest on screen)."""
    min_y = VALLEY_FLOOR
    for seg in _HILL_SEGMENTS:
        y = _bezier_y_at_x(x, *seg)
        if y is not None and y < min_y:
            min_y = y
    return min_y


def place_houses(friends: list[Friend]) -> list[tuple[Friend, float, float]]:
    """Place houses randomly across the hill surface, no overlaps."""
    # Deterministic seed from all friend names
    seed_str = "|".join(f.name for f in friends)
    rng = random.Random(hashlib.md5(seed_str.encode()).hexdigest())

    placed: list[tuple[float, float]] = []
    result: list[tuple[Friend, float, float]] = []

    for friend in friends:
        ok = False

        for _ in range(2000):
            cx = rng.uniform(80, 1120)
            top = hill_boundary(cx) + 10  # margin below hill edge
            bottom = VALLEY_FLOOR - HOUSE_H
            if top >= bottom:
                continue
            cy = rng.uniform(top, bottom)

            # Check overlap with all placed houses
            overlap = False
            for px, py in placed:
                if abs(cx - px) < HOUSE_W + MIN_GAP and abs(cy - py) < HOUSE_H + MIN_GAP:
                    overlap = True
                    break

            if not overlap:
                placed.append((cx, cy))
                result.append((friend, round(cx, 1), round(cy, 1)))
                ok = True
                break

        if not ok:
            # Fallback: scan for first open spot along valley floor
            for fx in range(100, 1100, 20):
                fy = VALLEY_FLOOR - HOUSE_H - 5
                overlap = any(
                    abs(fx - px) < HOUSE_W + MIN_GAP and abs(fy - py) < HOUSE_H + MIN_GAP
                    for px, py in placed
                )
                if not overlap:
                    placed.append((fx, fy))
                    result.append((friend, float(fx), float(fy)))
                    break

    return result


# ────────────────────────────────────────────────────────────────
# House SVG templates
#
# Each function returns SVG elements (relative to 0,0) for a house.
# The caller wraps them in a <g transform="translate(x,y)">.
# All houses fit in roughly a 40×40 bounding box.
#
# ★ USER CONTRIBUTION POINT ★
# These 5 shapes define the village personality. Modify the paths
# below to change house silhouettes. Keep fill classes consistent:
#   .fill-wall / .fill-wall-dark  — walls
#   .fill-roof                    — roof
#   .fill-window                  — windows (glow on hover)
#   .fill-door                    — door
# ────────────────────────────────────────────────────────────────

def house_peaked(name: str) -> str:
    """Type A: Classic peaked roof cottage."""
    return f'''\
<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
<polygon class="fill-roof" points="0,16 16,0 32,16"/>
<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
<rect class="fill-door" x="12" y="28" width="8" height="8"/>'''


def house_flat(name: str) -> str:
    """Type B: Flat-roof modernist block."""
    return f'''\
<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
<rect class="fill-door" x="13" y="28" width="8" height="8"/>'''


def house_squat(name: str) -> str:
    """Type C: Wide squat bungalow."""
    return f'''\
<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
<rect class="fill-door" x="15" y="28" width="8" height="8"/>'''


def house_ell(name: str) -> str:
    """Type D: L-shaped house with extension."""
    return f'''\
<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
<rect class="fill-door" x="13" y="28" width="7" height="8"/>'''


def house_tower(name: str) -> str:
    """Type E: Tall narrow tower."""
    return f'''\
<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
<polygon class="fill-roof" points="4,8 16,0 28,8"/>
<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
<rect class="fill-door" x="10" y="30" width="8" height="6"/>'''


HOUSE_TEMPLATES = [house_peaked, house_flat, house_squat, house_ell, house_tower]


def render_house(friend: Friend, x: float, y: float, template_idx: int) -> str:
    """Render a single house as an <a> hotspot."""
    template_fn = HOUSE_TEMPLATES[template_idx % len(HOUSE_TEMPLATES)]
    house_svg = template_fn(friend.name)

    # Escape name for XML
    safe_name = friend.name.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace('"', "&quot;")
    safe_url = friend.url.replace("&", "&amp;").replace('"', "&quot;")

    return f'''\t\t\t\t<a class="hotspot village-house" href="{safe_url}" target="_blank" rel="noopener noreferrer" aria-label="{safe_name}">
\t\t\t\t\t<title>{safe_name}</title>
\t\t\t\t\t<g transform="translate({x},{y})">
{_indent(house_svg, 6)}
\t\t\t\t\t</g>
\t\t\t\t\t<text class="hotspot-label village-label" x="{x + 16}" y="{y - 4}" text-anchor="middle">{safe_name}</text>
\t\t\t\t</a>'''


def _indent(text: str, tabs: int) -> str:
    prefix = "\t" * tabs
    return "\n".join(prefix + line for line in text.strip().split("\n"))


# ────────────────────────────────────────────────────────────────
# Background SVG
# ────────────────────────────────────────────────────────────────

BACKGROUND_SVG = '''\
\t\t\t\t<!-- Sky -->
\t\t\t\t<rect class="fill-sky" x="0" y="0" width="1200" height="800"/>

\t\t\t\t<!-- Stars -->
\t\t\t\t<g class="scene-detail" aria-hidden="true">
\t\t\t\t\t<rect class="fill-star" x="80" y="30" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="200" y="55" width="3" height="3"/>
\t\t\t\t\t<rect class="fill-star" x="350" y="20" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="480" y="45" width="3" height="3"/>
\t\t\t\t\t<rect class="fill-star" x="620" y="15" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="750" y="40" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="880" y="25" width="3" height="3"/>
\t\t\t\t\t<rect class="fill-star" x="1000" y="50" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="1100" y="18" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="150" y="70" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="550" y="60" width="2" height="2"/>
\t\t\t\t\t<rect class="fill-star" x="950" y="38" width="3" height="3"/>
\t\t\t\t</g>

\t\t\t\t<!-- Distant mountains -->
\t\t\t\t<path class="fill-mountain-far" d="M0 200 L100 140 L220 170 L350 110 L500 150 L650 100 L800 130 L950 90 L1100 120 L1200 100 L1200 250 L0 250 Z" aria-hidden="true"/>
\t\t\t\t<path class="fill-mountain" d="M0 240 L150 180 L300 210 L450 160 L600 200 L750 150 L900 190 L1050 140 L1200 170 L1200 280 L0 280 Z" aria-hidden="true"/>

\t\t\t\t<!-- Hillside terrain (3 tiers) -->
\t\t\t\t<!-- Upper hill -->
\t\t\t\t<path class="fill-ground" d="M100 480 Q350 120 600 130 Q850 120 1100 480 Z" aria-hidden="true"/>
\t\t\t\t<!-- Lower hill -->
\t\t\t\t<path class="fill-ground" d="M0 480 Q300 240 600 250 Q900 240 1200 480 Z" aria-hidden="true"/>
\t\t\t\t<!-- Valley floor -->
\t\t\t\t<rect class="fill-ground" x="0" y="480" width="1200" height="320" aria-hidden="true"/>

\t\t\t\t<!-- Winding path -->
\t\t\t\t<path class="fill-path" d="M550 140 Q480 200 520 270 Q560 330 500 390 Q440 440 480 520 Q520 580 480 650 L500 650 Q540 580 500 520 Q460 440 520 390 Q580 330 540 270 Q500 200 570 140 Z" aria-hidden="true"/>

\t\t\t\t<!-- Decorative trees -->
\t\t\t\t<g class="scene-detail" aria-hidden="true">
\t\t\t\t\t<!-- Top tier trees -->
\t\t\t\t\t<polygon class="fill-tree" points="280,220 290,180 300,220"/>
\t\t\t\t\t<polygon class="fill-tree" points="680,210 690,170 700,210"/>
\t\t\t\t\t<polygon class="fill-tree" points="850,225 860,188 870,225"/>
\t\t\t\t\t<!-- Middle tier trees -->
\t\t\t\t\t<polygon class="fill-tree" points="150,340 162,300 174,340"/>
\t\t\t\t\t<polygon class="fill-tree" points="420,310 430,275 440,310"/>
\t\t\t\t\t<polygon class="fill-tree" points="680,320 690,285 700,320"/>
\t\t\t\t\t<polygon class="fill-tree" points="950,340 960,305 970,340"/>
\t\t\t\t\t<!-- Bottom tier trees -->
\t\t\t\t\t<polygon class="fill-tree" points="200,460 212,425 224,460"/>
\t\t\t\t\t<polygon class="fill-tree" points="480,445 490,412 500,445"/>
\t\t\t\t\t<polygon class="fill-tree" points="780,440 790,408 800,440"/>
\t\t\t\t\t<polygon class="fill-tree" points="1050,450 1060,418 1070,450"/>
\t\t\t\t</g>'''

# ────────────────────────────────────────────────────────────────
# HTML template
# ────────────────────────────────────────────────────────────────

def build_html(friends: list[Friend]) -> str:
    all_ordered = place_houses(friends)

    # Generate house SVG
    house_lines = []
    for i, (friend, x, y) in enumerate(all_ordered):
        house_svg = render_house(friend, x, y, i)
        house_lines.append(house_svg)

    houses_svg = "\n\n".join(house_lines)

    # Generate scene-nav list
    nav_items = []
    for friend, _, _ in all_ordered:
        safe_name = friend.name.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
        safe_url = friend.url.replace("&", "&amp;").replace('"', "&quot;")
        nav_items.append(
            f'\t\t\t\t<li><a class="scene-nav__link" href="{safe_url}" '
            f'target="_blank" rel="noopener noreferrer">{safe_name}</a></li>'
        )
    nav_list = "\n".join(nav_items)

    # Generate noscript link list
    noscript_items = []
    for friend, _, _ in all_ordered:
        safe_name = friend.name.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
        safe_url = friend.url.replace("&", "&amp;").replace('"', "&quot;")
        noscript_items.append(
            f'\t\t\t\t<li><a href="{safe_url}" target="_blank" rel="noopener noreferrer">{safe_name}</a></li>'
        )
    noscript_list = "\n".join(noscript_items)

    # Back-to-neighbors house SVG at bottom
    back_svg = '''\t\t\t\t<!-- Return path -->
\t\t\t\t<a class="hotspot" href="neighbors.html" aria-label="邻邦 — Return to neighbors">
\t\t\t\t\t<title>邻邦 — Return</title>
\t\t\t\t\t<path class="hotspot-shape fill-path" d="M475 680 L505 680 L500 620 L480 620 Z"/>
\t\t\t\t\t<text class="hotspot-label" x="490" y="710" text-anchor="middle">邻邦</text>
\t\t\t\t</a>'''

    return f'''\
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
\t<meta charset="utf-8">
\t<meta name="viewport" content="width=device-width, initial-scale=1">
\t<title>友邻 — Realm</title>
\t<meta name="description" content="友邻村落 — Friends village of the Realm">
\t<meta name="theme-color" content="#1a1a2e">
\t<link rel="stylesheet" href="realm.css">
</head>
<body>

\t<a class="skip-link" href="#scene-nav-friends">跳过场景</a>

\t<main class="realm-folder">
\t\t<h1 class="visually-hidden">友邻</h1>

\t\t<input type="radio" name="village-zoom" id="vz1" class="visually-hidden" checked>
\t\t<input type="radio" name="village-zoom" id="vz2" class="visually-hidden">
\t\t<input type="radio" name="village-zoom" id="vz3" class="visually-hidden">
\t\t<input type="radio" name="village-zoom" id="vz4" class="visually-hidden">

\t\t<div class="village-controls">
\t\t\t<label for="vz1" class="village-zoom-label">1×</label>
\t\t\t<label for="vz2" class="village-zoom-label">1.5×</label>
\t\t\t<label for="vz3" class="village-zoom-label">2×</label>
\t\t\t<label for="vz4" class="village-zoom-label">3×</label>
\t\t</div>

\t\t<div class="village-viewport">
\t\t\t<div class="village-canvas">
\t\t\t\t<svg class="village" role="group" aria-labelledby="scene-friends-title" viewBox="0 0 1200 800">
\t\t\t\t\t<title id="scene-friends-title">友邻村落 — A hillside village of {len(friends)} friends</title>

{BACKGROUND_SVG}

\t\t\t\t\t<!-- Houses -->
{houses_svg}

{back_svg}
\t\t\t\t</svg>
\t\t\t</div>
\t\t</div>

\t\t<nav id="scene-nav-friends" class="scene-nav" aria-label="友邻导航">
\t\t\t<ul class="scene-nav__list">
{nav_list}
\t\t\t\t<li><a class="scene-nav__link" href="neighbors.html">邻邦 — 返回邻邦</a></li>
\t\t\t</ul>
\t\t</nav>

\t\t<noscript>
\t\t\t<p style="padding:var(--space-md);color:var(--text-secondary);">
\t\t\t\t以下是所有友邻链接:
\t\t\t</p>
\t\t\t<ul style="padding:var(--space-md);list-style:disc;color:var(--text-secondary);">
{noscript_list}
\t\t\t</ul>
\t\t</noscript>
\t</main>

</body>
</html>
'''


# ────────────────────────────────────────────────────────────────
# Main
# ────────────────────────────────────────────────────────────────

def main():
    if len(sys.argv) < 2:
        print("Usage: python build-village.py <friends.opml>", file=sys.stderr)
        sys.exit(1)

    opml_path = sys.argv[1]
    friends = parse_opml(opml_path)

    if not friends:
        print("No friends found in OPML file.", file=sys.stderr)
        sys.exit(1)

    print(f"Found {len(friends)} friends, generating village...", file=sys.stderr)

    html = build_html(friends)

    with open("friends.html", "w", encoding="utf-8") as f:
        f.write(html)

    print("✓ friends.html generated.", file=sys.stderr)


if __name__ == "__main__":
    main()

M friends.html => friends.html +1088 -11
@@ 4,27 4,1104 @@
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>友邻 — Realm</title>
	<meta name="description" content="友邻 — Friends of the Realm">
	<meta name="description" content="友邻村落 — Friends village of the Realm">
	<meta name="theme-color" content="#1a1a2e">
	<link rel="stylesheet" href="realm.css">
</head>
<body>

	<a class="skip-link" href="#main-content">跳至正文</a>
	<a class="skip-link" href="#scene-nav-friends">跳过场景</a>

	<main class="realm">
		<header class="realm-sigil">
			<h1 class="realm-sigil__title">友邻</h1>
			<p class="realm-sigil__subtitle">Friends</p>
		</header>
	<main class="realm-folder">
		<h1 class="visually-hidden">友邻</h1>

		<div id="main-content" class="realm-content">
			<p>Allies and neighbors of the realm.</p>
		<input type="radio" name="village-zoom" id="vz1" class="visually-hidden" checked>
		<input type="radio" name="village-zoom" id="vz2" class="visually-hidden">
		<input type="radio" name="village-zoom" id="vz3" class="visually-hidden">
		<input type="radio" name="village-zoom" id="vz4" class="visually-hidden">

		<div class="village-controls">
			<label for="vz1" class="village-zoom-label">1×</label>
			<label for="vz2" class="village-zoom-label">1.5×</label>
			<label for="vz3" class="village-zoom-label">2×</label>
			<label for="vz4" class="village-zoom-label">3×</label>
		</div>

		<div class="village-viewport">
			<div class="village-canvas">
				<svg class="village" role="group" aria-labelledby="scene-friends-title" viewBox="0 0 1200 800">
					<title id="scene-friends-title">友邻村落 — A hillside village of 72 friends</title>

				<!-- Sky -->
				<rect class="fill-sky" x="0" y="0" width="1200" height="800"/>

				<!-- Stars -->
				<g class="scene-detail" aria-hidden="true">
					<rect class="fill-star" x="80" y="30" width="2" height="2"/>
					<rect class="fill-star" x="200" y="55" width="3" height="3"/>
					<rect class="fill-star" x="350" y="20" width="2" height="2"/>
					<rect class="fill-star" x="480" y="45" width="3" height="3"/>
					<rect class="fill-star" x="620" y="15" width="2" height="2"/>
					<rect class="fill-star" x="750" y="40" width="2" height="2"/>
					<rect class="fill-star" x="880" y="25" width="3" height="3"/>
					<rect class="fill-star" x="1000" y="50" width="2" height="2"/>
					<rect class="fill-star" x="1100" y="18" width="2" height="2"/>
					<rect class="fill-star" x="150" y="70" width="2" height="2"/>
					<rect class="fill-star" x="550" y="60" width="2" height="2"/>
					<rect class="fill-star" x="950" y="38" width="3" height="3"/>
				</g>

				<!-- Distant mountains -->
				<path class="fill-mountain-far" d="M0 200 L100 140 L220 170 L350 110 L500 150 L650 100 L800 130 L950 90 L1100 120 L1200 100 L1200 250 L0 250 Z" aria-hidden="true"/>
				<path class="fill-mountain" d="M0 240 L150 180 L300 210 L450 160 L600 200 L750 150 L900 190 L1050 140 L1200 170 L1200 280 L0 280 Z" aria-hidden="true"/>

				<!-- Hillside terrain (3 tiers) -->
				<!-- Upper hill -->
				<path class="fill-ground" d="M100 480 Q350 120 600 130 Q850 120 1100 480 Z" aria-hidden="true"/>
				<!-- Lower hill -->
				<path class="fill-ground" d="M0 480 Q300 240 600 250 Q900 240 1200 480 Z" aria-hidden="true"/>
				<!-- Valley floor -->
				<rect class="fill-ground" x="0" y="480" width="1200" height="320" aria-hidden="true"/>

				<!-- Winding path -->
				<path class="fill-path" d="M550 140 Q480 200 520 270 Q560 330 500 390 Q440 440 480 520 Q520 580 480 650 L500 650 Q540 580 500 520 Q460 440 520 390 Q580 330 540 270 Q500 200 570 140 Z" aria-hidden="true"/>

				<!-- Decorative trees -->
				<g class="scene-detail" aria-hidden="true">
					<!-- Top tier trees -->
					<polygon class="fill-tree" points="280,220 290,180 300,220"/>
					<polygon class="fill-tree" points="680,210 690,170 700,210"/>
					<polygon class="fill-tree" points="850,225 860,188 870,225"/>
					<!-- Middle tier trees -->
					<polygon class="fill-tree" points="150,340 162,300 174,340"/>
					<polygon class="fill-tree" points="420,310 430,275 440,310"/>
					<polygon class="fill-tree" points="680,320 690,285 700,320"/>
					<polygon class="fill-tree" points="950,340 960,305 970,340"/>
					<!-- Bottom tier trees -->
					<polygon class="fill-tree" points="200,460 212,425 224,460"/>
					<polygon class="fill-tree" points="480,445 490,412 500,445"/>
					<polygon class="fill-tree" points="780,440 790,408 800,440"/>
					<polygon class="fill-tree" points="1050,450 1060,418 1070,450"/>
				</g>

					<!-- Houses -->
				<a class="hotspot village-house" href="https://lab.gb0.dev/" target="_blank" rel="noopener noreferrer" aria-label="/var/log/gblab">
					<title>/var/log/gblab</title>
					<g transform="translate(693.9,246.3)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="709.9" y="242.3" text-anchor="middle">/var/log/gblab</text>
				</a>

				<a class="hotspot village-house" href="https://pathos.page/" target="_blank" rel="noopener noreferrer" aria-label="2750 words">
					<title>2750 words</title>
					<g transform="translate(386.7,298.7)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="402.7" y="294.7" text-anchor="middle">2750 words</text>
				</a>

				<a class="hotspot village-house" href="https://blog.ursb.me/" target="_blank" rel="noopener noreferrer" aria-label="Airing 的博客">
					<title>Airing 的博客</title>
					<g transform="translate(87.6,443.3)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="103.6" y="439.3" text-anchor="middle">Airing 的博客</text>
				</a>

				<a class="hotspot village-house" href="https://anotherdayu.com/" target="_blank" rel="noopener noreferrer" aria-label="Another Dayu">
					<title>Another Dayu</title>
					<g transform="translate(767.7,365.0)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="783.7" y="361.0" text-anchor="middle">Another Dayu</text>
				</a>

				<a class="hotspot village-house" href="https://blog.est.im/" target="_blank" rel="noopener noreferrer" aria-label="est の 输入 输出和出入">
					<title>est の 输入 输出和出入</title>
					<g transform="translate(850.3,420.0)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="866.3" y="416.0" text-anchor="middle">est の 输入 输出和出入</text>
				</a>

				<a class="hotspot village-house" href="https://fav0.com/" target="_blank" rel="noopener noreferrer" aria-label="FAV0周刊">
					<title>FAV0周刊</title>
					<g transform="translate(186.2,392.8)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="202.2" y="388.8" text-anchor="middle">FAV0周刊</text>
				</a>

				<a class="hotspot village-house" href="https://hellogithub.com/" target="_blank" rel="noopener noreferrer" aria-label="HelloGitHub 月刊">
					<title>HelloGitHub 月刊</title>
					<g transform="translate(1011.1,429.3)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="1027.1" y="425.3" text-anchor="middle">HelloGitHub 月刊</text>
				</a>

				<a class="hotspot village-house" href="https://liangmouyin.com/" target="_blank" rel="noopener noreferrer" aria-label="Home on 梁某银的博客">
					<title>Home on 梁某银的博客</title>
					<g transform="translate(609.3,277.7)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="625.3" y="273.7" text-anchor="middle">Home on 梁某银的博客</text>
				</a>

				<a class="hotspot village-house" href="https://www.immarcus.com/blog" target="_blank" rel="noopener noreferrer" aria-label="I'm Marcus Blog">
					<title>I'm Marcus Blog</title>
					<g transform="translate(372.8,209.4)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="388.8" y="205.4" text-anchor="middle">I'm Marcus Blog</text>
				</a>

				<a class="hotspot village-house" href="https://imqi1.com/" target="_blank" rel="noopener noreferrer" aria-label="ImQi1">
					<title>ImQi1</title>
					<g transform="translate(252.5,317.4)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="268.5" y="313.4" text-anchor="middle">ImQi1</text>
				</a>

				<a class="hotspot village-house" href="https://blog.zzbd.org/" target="_blank" rel="noopener noreferrer" aria-label="J.F's BLOG">
					<title>J.F's BLOG</title>
					<g transform="translate(880.2,271.8)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="896.2" y="267.8" text-anchor="middle">J.F's BLOG</text>
				</a>

				<a class="hotspot village-house" href="https://jakearchibald.com/" target="_blank" rel="noopener noreferrer" aria-label="Jake Archibald's blog">
					<title>Jake Archibald's blog</title>
					<g transform="translate(826.9,306.1)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="842.9" y="302.1" text-anchor="middle">Jake Archibald's blog</text>
				</a>

				<a class="hotspot village-house" href="https://justgoidea.com/" target="_blank" rel="noopener noreferrer" aria-label="JustGoIdea">
					<title>JustGoIdea</title>
					<g transform="translate(308.8,259.9)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="324.8" y="255.89999999999998" text-anchor="middle">JustGoIdea</text>
				</a>

				<a class="hotspot village-house" href="https://www.justzht.com/" target="_blank" rel="noopener noreferrer" aria-label="JustZht's EchoChamber">
					<title>JustZht's EchoChamber</title>
					<g transform="translate(481.1,419.8)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="497.1" y="415.8" text-anchor="middle">JustZht's EchoChamber</text>
				</a>

				<a class="hotspot village-house" href="http://study.tczhong.com/" target="_blank" rel="noopener noreferrer" aria-label="Learn More">
					<title>Learn More</title>
					<g transform="translate(826.5,221.5)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="842.5" y="217.5" text-anchor="middle">Learn More</text>
				</a>

				<a class="hotspot village-house" href="https://blog.liuzhen932.top/" target="_blank" rel="noopener noreferrer" aria-label="liuzhen932 的小窝">
					<title>liuzhen932 的小窝</title>
					<g transform="translate(250.0,360.4)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="266.0" y="356.4" text-anchor="middle">liuzhen932 的小窝</text>
				</a>

				<a class="hotspot village-house" href="https://markonreview.com/" target="_blank" rel="noopener noreferrer" aria-label="Markon Review">
					<title>Markon Review</title>
					<g transform="translate(434.3,417.7)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="450.3" y="413.7" text-anchor="middle">Markon Review</text>
				</a>

				<a class="hotspot village-house" href="https://h4ck.org.cn/" target="_blank" rel="noopener noreferrer" aria-label="obaby@mars">
					<title>obaby@mars</title>
					<g transform="translate(1095.9,426.1)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="1111.9" y="422.1" text-anchor="middle">obaby@mars</text>
				</a>

				<a class="hotspot village-house" href="https://www.owenyoung.com/" target="_blank" rel="noopener noreferrer" aria-label="Owen的博客">
					<title>Owen的博客</title>
					<g transform="translate(922.6,403.3)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="938.6" y="399.3" text-anchor="middle">Owen的博客</text>
				</a>

				<a class="hotspot village-house" href="https://hsu.cy/posts/" target="_blank" rel="noopener noreferrer" aria-label="Posts on neverland">
					<title>Posts on neverland</title>
					<g transform="translate(932.0,345.1)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="948.0" y="341.1" text-anchor="middle">Posts on neverland</text>
				</a>

				<a class="hotspot village-house" href="https://www.pseudoyu.com/" target="_blank" rel="noopener noreferrer" aria-label="pseudoyu">
					<title>pseudoyu</title>
					<g transform="translate(473.5,229.6)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="489.5" y="225.6" text-anchor="middle">pseudoyu</text>
				</a>

				<a class="hotspot village-house" href="https://weblog.contained.love/" target="_blank" rel="noopener noreferrer" aria-label="r0k1s#i">
					<title>r0k1s#i</title>
					<g transform="translate(313.2,432.1)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="329.2" y="428.1" text-anchor="middle">r0k1s#i</text>
				</a>

				<a class="hotspot village-house" href="https://rayepeng.net" target="_blank" rel="noopener noreferrer" aria-label="Raye's Journey">
					<title>Raye's Journey</title>
					<g transform="translate(322.7,316.3)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="338.7" y="312.3" text-anchor="middle">Raye's Journey</text>
				</a>

				<a class="hotspot village-house" href="https://skywt.cn/" target="_blank" rel="noopener noreferrer" aria-label="SkyWT">
					<title>SkyWT</title>
					<g transform="translate(761.7,321.1)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="777.7" y="317.1" text-anchor="middle">SkyWT</text>
				</a>

				<a class="hotspot village-house" href="https://blog.solazy.me/" target="_blank" rel="noopener noreferrer" aria-label="So!azy">
					<title>So!azy</title>
					<g transform="translate(591.4,370.1)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="607.4" y="366.1" text-anchor="middle">So!azy</text>
				</a>

				<a class="hotspot village-house" href="https://sqybi.com/blog/" target="_blank" rel="noopener noreferrer" aria-label="SQYBI.com Blog">
					<title>SQYBI.com Blog</title>
					<g transform="translate(691.7,368.0)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="707.7" y="364.0" text-anchor="middle">SQYBI.com Blog</text>
				</a>

				<a class="hotspot village-house" href="https://www.taober.blog/" target="_blank" rel="noopener noreferrer" aria-label="Taober">
					<title>Taober</title>
					<g transform="translate(639.7,233.1)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="655.7" y="229.1" text-anchor="middle">Taober</text>
				</a>

				<a class="hotspot village-house" href="https://taxodium.ink/" target="_blank" rel="noopener noreferrer" aria-label="Taxodium">
					<title>Taxodium</title>
					<g transform="translate(865.5,379.5)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="881.5" y="375.5" text-anchor="middle">Taxodium</text>
				</a>

				<a class="hotspot village-house" href="https://tw93.fun/" target="_blank" rel="noopener noreferrer" aria-label="Tw93 Blog">
					<title>Tw93 Blog</title>
					<g transform="translate(464.5,342.9)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="480.5" y="338.9" text-anchor="middle">Tw93 Blog</text>
				</a>

				<a class="hotspot village-house" href="https://zishu.me" target="_blank" rel="noopener noreferrer" aria-label="Weekly on 子舒的博客">
					<title>Weekly on 子舒的博客</title>
					<g transform="translate(713.7,165.5)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="729.7" y="161.5" text-anchor="middle">Weekly on 子舒的博客</text>
				</a>

				<a class="hotspot village-house" href="https://blog.itswincer.com/" target="_blank" rel="noopener noreferrer" aria-label="Wincer's Blog ATOM">
					<title>Wincer's Blog ATOM</title>
					<g transform="translate(254.6,402.9)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="270.6" y="398.9" text-anchor="middle">Wincer's Blog ATOM</text>
				</a>

				<a class="hotspot village-house" href="https://nelsonboss.ink/" target="_blank" rel="noopener noreferrer" aria-label="一直游到海水变蓝">
					<title>一直游到海水变蓝</title>
					<g transform="translate(172.8,436.4)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="188.8" y="432.4" text-anchor="middle">一直游到海水变蓝</text>
				</a>

				<a class="hotspot village-house" href="https://ihaihe.cn/" target="_blank" rel="noopener noreferrer" aria-label="三十海河">
					<title>三十海河</title>
					<g transform="translate(762.6,269.4)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="778.6" y="265.4" text-anchor="middle">三十海河</text>
				</a>

				<a class="hotspot village-house" href="https://dongjunke.cn/" target="_blank" rel="noopener noreferrer" aria-label="东评西就">
					<title>东评西就</title>
					<g transform="translate(542.0,331.9)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="558.0" y="327.9" text-anchor="middle">东评西就</text>
				</a>

				<a class="hotspot village-house" href="https://doin.pages.dev/" target="_blank" rel="noopener noreferrer" aria-label="主页 on Doin的赛博空间">
					<title>主页 on Doin的赛博空间</title>
					<g transform="translate(663.7,175.0)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="679.7" y="171.0" text-anchor="middle">主页 on Doin的赛博空间</text>
				</a>

				<a class="hotspot village-house" href="https://wiki.eryajf.net/" target="_blank" rel="noopener noreferrer" aria-label="二丫讲梵">
					<title>二丫讲梵</title>
					<g transform="translate(518.2,286.2)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="534.2" y="282.2" text-anchor="middle">二丫讲梵</text>
				</a>

				<a class="hotspot village-house" href="https://jefftay.com/" target="_blank" rel="noopener noreferrer" aria-label="仿生猫梦见电子猫粮">
					<title>仿生猫梦见电子猫粮</title>
					<g transform="translate(495.0,186.8)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="511.0" y="182.8" text-anchor="middle">仿生猫梦见电子猫粮</text>
				</a>

				<a class="hotspot village-house" href="https://vjo.cc/" target="_blank" rel="noopener noreferrer" aria-label="刘郎阁">
					<title>刘郎阁</title>
					<g transform="translate(437.9,301.5)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="453.9" y="297.5" text-anchor="middle">刘郎阁</text>
				</a>

				<a class="hotspot village-house" href="https://yinji.org/" target="_blank" rel="noopener noreferrer" aria-label="印记">
					<title>印记</title>
					<g transform="translate(955.0,445.7)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="971.0" y="441.7" text-anchor="middle">印记</text>
				</a>

				<a class="hotspot village-house" href="https://quaily.com/" target="_blank" rel="noopener noreferrer" aria-label="印记-周报">
					<title>印记-周报</title>
					<g transform="translate(674.1,292.4)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="690.1" y="288.4" text-anchor="middle">印记-周报</text>
				</a>

				<a class="hotspot village-house" href="https://zhoutian.com/" target="_blank" rel="noopener noreferrer" aria-label="周天记">
					<title>周天记</title>
					<g transform="translate(1013.6,375.3)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="1029.6" y="371.3" text-anchor="middle">周天记</text>
				</a>

				<a class="hotspot village-house" href="https://www.weiwenchao.com/" target="_blank" rel="noopener noreferrer" aria-label="四季·花开——魏文超's Blog">
					<title>四季·花开——魏文超's Blog</title>
					<g transform="translate(385.3,350.9)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="401.3" y="346.9" text-anchor="middle">四季·花开——魏文超's Blog</text>
				</a>

				<a class="hotspot village-house" href="https://wangyurui.com/" target="_blank" rel="noopener noreferrer" aria-label="太隐">
					<title>太隐</title>
					<g transform="translate(590.3,158.3)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="606.3" y="154.3" text-anchor="middle">太隐</text>
				</a>

				<a class="hotspot village-house" href="https://www.weisay.com/blog" target="_blank" rel="noopener noreferrer" aria-label="威言威语">
					<title>威言威语</title>
					<g transform="translate(726.9,423.4)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="742.9" y="419.4" text-anchor="middle">威言威语</text>
				</a>

				<a class="hotspot village-house" href="https://xyzbz.cn/" target="_blank" rel="noopener noreferrer" aria-label="子夜松声">
					<title>子夜松声</title>
					<g transform="translate(385.3,249.3)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="401.3" y="245.3" text-anchor="middle">子夜松声</text>
				</a>

				<a class="hotspot village-house" href="https://cuixiping.com/blog/" target="_blank" rel="noopener noreferrer" aria-label="崔话记 ATOM 1.0">
					<title>崔话记 ATOM 1.0</title>
					<g transform="translate(332.0,363.1)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="348.0" y="359.1" text-anchor="middle">崔话记 ATOM 1.0</text>
				</a>

				<a class="hotspot village-house" href="https://www.fengxiaoqiang.com/" target="_blank" rel="noopener noreferrer" aria-label="强少来了">
					<title>强少来了</title>
					<g transform="translate(662.7,443.9)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="678.7" y="439.9" text-anchor="middle">强少来了</text>
				</a>

				<a class="hotspot village-house" href="https://write.laily.net/zh-cn/" target="_blank" rel="noopener noreferrer" aria-label="我与我周旋久">
					<title>我与我周旋久</title>
					<g transform="translate(758.9,200.5)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="774.9" y="196.5" text-anchor="middle">我与我周旋久</text>
				</a>

				<a class="hotspot village-house" href="https://www.glowisle.me/" target="_blank" rel="noopener noreferrer" aria-label="映屿">
					<title>映屿</title>
					<g transform="translate(581.6,207.5)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="597.6" y="203.5" text-anchor="middle">映屿</text>
				</a>

				<a class="hotspot village-house" href="https://nxxy335.top/" target="_blank" rel="noopener noreferrer" aria-label="暖心向阳335">
					<title>暖心向阳335</title>
					<g transform="translate(811.1,379.8)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="827.1" y="375.8" text-anchor="middle">暖心向阳335</text>
				</a>

				<a class="hotspot village-house" href="https://www.geedea.pro/" target="_blank" rel="noopener noreferrer" aria-label="極客死亡計劃">
					<title>極客死亡計劃</title>
					<g transform="translate(534.0,439.8)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="550.0" y="435.8" text-anchor="middle">極客死亡計劃</text>
				</a>

				<a class="hotspot village-house" href="https://weekly.tw93.fun/" target="_blank" rel="noopener noreferrer" aria-label="潮流周刊">
					<title>潮流周刊</title>
					<g transform="translate(801.5,431.8)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="817.5" y="427.8" text-anchor="middle">潮流周刊</text>
				</a>

				<a class="hotspot village-house" href="https://blog.southfox.me/" target="_blank" rel="noopener noreferrer" aria-label="狐狸反走矣">
					<title>狐狸反走矣</title>
					<g transform="translate(605.8,434.5)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="621.8" y="430.5" text-anchor="middle">狐狸反走矣</text>
				</a>

				<a class="hotspot village-house" href="https://blog.bxaw.name/" target="_blank" rel="noopener noreferrer" aria-label="白熊阿丸的小屋">
					<title>白熊阿丸的小屋</title>
					<g transform="translate(806.4,265.9)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="822.4" y="261.9" text-anchor="middle">白熊阿丸的小屋</text>
				</a>

				<a class="hotspot village-house" href="https://blog.mzh.ren/zh/" target="_blank" rel="noopener noreferrer" aria-label="码农真经的博客">
					<title>码农真经的博客</title>
					<g transform="translate(378.3,421.7)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="394.3" y="417.7" text-anchor="middle">码农真经的博客</text>
				</a>

				<a class="hotspot village-house" href="https://pewae.com/" target="_blank" rel="noopener noreferrer" aria-label="破袜子">
					<title>破袜子</title>
					<g transform="translate(620.4,324.8)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="636.4" y="320.8" text-anchor="middle">破袜子</text>
				</a>

				<a class="hotspot village-house" href="https://www.suiyan.cc/" target="_blank" rel="noopener noreferrer" aria-label="碎言 - SuiYan Blog">
					<title>碎言 - SuiYan Blog</title>
					<g transform="translate(141.5,396.9)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="157.5" y="392.9" text-anchor="middle">碎言 - SuiYan Blog</text>
				</a>

				<a class="hotspot village-house" href="https://darmau.co/zh" target="_blank" rel="noopener noreferrer" aria-label="积薪 - 文章">
					<title>积薪 - 文章</title>
					<g transform="translate(896.2,442.4)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="912.2" y="438.4" text-anchor="middle">积薪 - 文章</text>
				</a>

				<a class="hotspot village-house" href="https://blog.zhilu.site/" target="_blank" rel="noopener noreferrer" aria-label="纸鹿摸鱼处">
					<title>纸鹿摸鱼处</title>
					<g transform="translate(880.8,322.7)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="896.8" y="318.7" text-anchor="middle">纸鹿摸鱼处</text>
				</a>

				<a class="hotspot village-house" href="https://lawtee.com/" target="_blank" rel="noopener noreferrer" aria-label="老T博客">
					<title>老T博客</title>
					<g transform="translate(647.5,388.9)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="663.5" y="384.9" text-anchor="middle">老T博客</text>
				</a>

				<a class="hotspot village-house" href="https://weekly.howie6879.com/" target="_blank" rel="noopener noreferrer" aria-label="老胡的周刊">
					<title>老胡的周刊</title>
					<g transform="translate(528.0,385.1)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="544.0" y="381.1" text-anchor="middle">老胡的周刊</text>
				</a>

				<a class="hotspot village-house" href="https://weekly.shawnxie.top/" target="_blank" rel="noopener noreferrer" aria-label="肖恩技术周刊">
					<title>肖恩技术周刊</title>
					<g transform="translate(427.3,191.2)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="443.3" y="187.2" text-anchor="middle">肖恩技术周刊</text>
				</a>

				<a class="hotspot village-house" href="https://hulatu.com/" target="_blank" rel="noopener noreferrer" aria-label="胡拉图">
					<title>胡拉图</title>
					<g transform="translate(226.9,445.8)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="242.9" y="441.8" text-anchor="middle">胡拉图</text>
				</a>

				<a class="hotspot village-house" href="https://onojyun.com/" target="_blank" rel="noopener noreferrer" aria-label="莫比乌斯">
					<title>莫比乌斯</title>
					<g transform="translate(538.1,177.9)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="554.1" y="173.9" text-anchor="middle">莫比乌斯</text>
				</a>

				<a class="hotspot village-house" href="https://www.loyhome.com/" target="_blank" rel="noopener noreferrer" aria-label="落园">
					<title>落园</title>
					<g transform="translate(525.9,226.2)">
						<rect class="fill-wall" x="6" y="8" width="20" height="28"/>
						<polygon class="fill-roof" points="4,8 16,0 28,8"/>
						<rect class="fill-window house-window" x="11" y="13" width="6" height="5"/>
						<rect class="fill-window house-window" x="11" y="22" width="6" height="5"/>
						<rect class="fill-door" x="10" y="30" width="8" height="6"/>
					</g>
					<text class="hotspot-label village-label" x="541.9" y="222.2" text-anchor="middle">落园</text>
				</a>

				<a class="hotspot village-house" href="https://1q43.blog/" target="_blank" rel="noopener noreferrer" aria-label="虹线">
					<title>虹线</title>
					<g transform="translate(966.2,385.4)">
						<rect class="fill-wall" x="2" y="16" width="28" height="20"/>
						<polygon class="fill-roof" points="0,16 16,0 32,16"/>
						<rect class="fill-window house-window" x="7" y="21" width="6" height="6"/>
						<rect class="fill-window house-window" x="19" y="21" width="6" height="6"/>
						<rect class="fill-door" x="12" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="982.2" y="381.4" text-anchor="middle">虹线</text>
				</a>

				<a class="hotspot village-house" href="https://sugarat.top/weekly" target="_blank" rel="noopener noreferrer" aria-label="视野修炼 - 技术周刊">
					<title>视野修炼 - 技术周刊</title>
					<g transform="translate(923.4,282.3)">
						<rect class="fill-wall" x="2" y="10" width="30" height="26"/>
						<rect class="fill-roof" x="0" y="8" width="34" height="4"/>
						<rect class="fill-window house-window" x="6" y="15" width="8" height="6"/>
						<rect class="fill-window house-window" x="20" y="15" width="8" height="6"/>
						<rect class="fill-door" x="13" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="939.4" y="278.3" text-anchor="middle">视野修炼 - 技术周刊</text>
				</a>

				<a class="hotspot village-house" href="http://www.ruanyifeng.com/blog/" target="_blank" rel="noopener noreferrer" aria-label="阮一峰的网络日志">
					<title>阮一峰的网络日志</title>
					<g transform="translate(563.3,282.4)">
						<rect class="fill-wall" x="0" y="14" width="38" height="22"/>
						<polygon class="fill-roof" points="-2,14 19,4 40,14"/>
						<rect class="fill-window house-window" x="4" y="19" width="7" height="5"/>
						<rect class="fill-window house-window" x="27" y="19" width="7" height="5"/>
						<rect class="fill-door" x="15" y="28" width="8" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="579.3" y="278.4" text-anchor="middle">阮一峰的网络日志</text>
				</a>

				<a class="hotspot village-house" href="https://ameow.xyz/categories/weekly" target="_blank" rel="noopener noreferrer" aria-label="阿猫的博客">
					<title>阿猫的博客</title>
					<g transform="translate(429.9,260.0)">
						<rect class="fill-wall" x="0" y="12" width="24" height="24"/>
						<rect class="fill-wall-dark" x="24" y="20" width="14" height="16"/>
						<polygon class="fill-roof" points="-2,12 12,2 26,12"/>
						<rect class="fill-roof" x="22" y="17" width="18" height="4"/>
						<rect class="fill-window house-window" x="5" y="18" width="5" height="5"/>
						<rect class="fill-window house-window" x="28" y="24" width="5" height="5"/>
						<rect class="fill-door" x="13" y="28" width="7" height="8"/>
					</g>
					<text class="hotspot-label village-label" x="445.9" y="256.0" text-anchor="middle">阿猫的博客</text>
				</a>

				<!-- Return path -->
				<a class="hotspot" href="neighbors.html" aria-label="邻邦 — Return to neighbors">
					<title>邻邦 — Return</title>
					<path class="hotspot-shape fill-path" d="M475 680 L505 680 L500 620 L480 620 Z"/>
					<text class="hotspot-label" x="490" y="710" text-anchor="middle">邻邦</text>
				</a>
				</svg>
			</div>
		</div>

		<nav class="realm-nav" style="margin-top:var(--space-xl)">
			<a href="neighbors.html">← 返回领地</a>
		<nav id="scene-nav-friends" class="scene-nav" aria-label="友邻导航">
			<ul class="scene-nav__list">
				<li><a class="scene-nav__link" href="https://lab.gb0.dev/" target="_blank" rel="noopener noreferrer">/var/log/gblab</a></li>
				<li><a class="scene-nav__link" href="https://pathos.page/" target="_blank" rel="noopener noreferrer">2750 words</a></li>
				<li><a class="scene-nav__link" href="https://blog.ursb.me/" target="_blank" rel="noopener noreferrer">Airing 的博客</a></li>
				<li><a class="scene-nav__link" href="https://anotherdayu.com/" target="_blank" rel="noopener noreferrer">Another Dayu</a></li>
				<li><a class="scene-nav__link" href="https://blog.est.im/" target="_blank" rel="noopener noreferrer">est の 输入 输出和出入</a></li>
				<li><a class="scene-nav__link" href="https://fav0.com/" target="_blank" rel="noopener noreferrer">FAV0周刊</a></li>
				<li><a class="scene-nav__link" href="https://hellogithub.com/" target="_blank" rel="noopener noreferrer">HelloGitHub 月刊</a></li>
				<li><a class="scene-nav__link" href="https://liangmouyin.com/" target="_blank" rel="noopener noreferrer">Home on 梁某银的博客</a></li>
				<li><a class="scene-nav__link" href="https://www.immarcus.com/blog" target="_blank" rel="noopener noreferrer">I'm Marcus Blog</a></li>
				<li><a class="scene-nav__link" href="https://imqi1.com/" target="_blank" rel="noopener noreferrer">ImQi1</a></li>
				<li><a class="scene-nav__link" href="https://blog.zzbd.org/" target="_blank" rel="noopener noreferrer">J.F's BLOG</a></li>
				<li><a class="scene-nav__link" href="https://jakearchibald.com/" target="_blank" rel="noopener noreferrer">Jake Archibald's blog</a></li>
				<li><a class="scene-nav__link" href="https://justgoidea.com/" target="_blank" rel="noopener noreferrer">JustGoIdea</a></li>
				<li><a class="scene-nav__link" href="https://www.justzht.com/" target="_blank" rel="noopener noreferrer">JustZht's EchoChamber</a></li>
				<li><a class="scene-nav__link" href="http://study.tczhong.com/" target="_blank" rel="noopener noreferrer">Learn More</a></li>
				<li><a class="scene-nav__link" href="https://blog.liuzhen932.top/" target="_blank" rel="noopener noreferrer">liuzhen932 的小窝</a></li>
				<li><a class="scene-nav__link" href="https://markonreview.com/" target="_blank" rel="noopener noreferrer">Markon Review</a></li>
				<li><a class="scene-nav__link" href="https://h4ck.org.cn/" target="_blank" rel="noopener noreferrer">obaby@mars</a></li>
				<li><a class="scene-nav__link" href="https://www.owenyoung.com/" target="_blank" rel="noopener noreferrer">Owen的博客</a></li>
				<li><a class="scene-nav__link" href="https://hsu.cy/posts/" target="_blank" rel="noopener noreferrer">Posts on neverland</a></li>
				<li><a class="scene-nav__link" href="https://www.pseudoyu.com/" target="_blank" rel="noopener noreferrer">pseudoyu</a></li>
				<li><a class="scene-nav__link" href="https://weblog.contained.love/" target="_blank" rel="noopener noreferrer">r0k1s#i</a></li>
				<li><a class="scene-nav__link" href="https://rayepeng.net" target="_blank" rel="noopener noreferrer">Raye's Journey</a></li>
				<li><a class="scene-nav__link" href="https://skywt.cn/" target="_blank" rel="noopener noreferrer">SkyWT</a></li>
				<li><a class="scene-nav__link" href="https://blog.solazy.me/" target="_blank" rel="noopener noreferrer">So!azy</a></li>
				<li><a class="scene-nav__link" href="https://sqybi.com/blog/" target="_blank" rel="noopener noreferrer">SQYBI.com Blog</a></li>
				<li><a class="scene-nav__link" href="https://www.taober.blog/" target="_blank" rel="noopener noreferrer">Taober</a></li>
				<li><a class="scene-nav__link" href="https://taxodium.ink/" target="_blank" rel="noopener noreferrer">Taxodium</a></li>
				<li><a class="scene-nav__link" href="https://tw93.fun/" target="_blank" rel="noopener noreferrer">Tw93 Blog</a></li>
				<li><a class="scene-nav__link" href="https://zishu.me" target="_blank" rel="noopener noreferrer">Weekly on 子舒的博客</a></li>
				<li><a class="scene-nav__link" href="https://blog.itswincer.com/" target="_blank" rel="noopener noreferrer">Wincer's Blog ATOM</a></li>
				<li><a class="scene-nav__link" href="https://nelsonboss.ink/" target="_blank" rel="noopener noreferrer">一直游到海水变蓝</a></li>
				<li><a class="scene-nav__link" href="https://ihaihe.cn/" target="_blank" rel="noopener noreferrer">三十海河</a></li>
				<li><a class="scene-nav__link" href="https://dongjunke.cn/" target="_blank" rel="noopener noreferrer">东评西就</a></li>
				<li><a class="scene-nav__link" href="https://doin.pages.dev/" target="_blank" rel="noopener noreferrer">主页 on Doin的赛博空间</a></li>
				<li><a class="scene-nav__link" href="https://wiki.eryajf.net/" target="_blank" rel="noopener noreferrer">二丫讲梵</a></li>
				<li><a class="scene-nav__link" href="https://jefftay.com/" target="_blank" rel="noopener noreferrer">仿生猫梦见电子猫粮</a></li>
				<li><a class="scene-nav__link" href="https://vjo.cc/" target="_blank" rel="noopener noreferrer">刘郎阁</a></li>
				<li><a class="scene-nav__link" href="https://yinji.org/" target="_blank" rel="noopener noreferrer">印记</a></li>
				<li><a class="scene-nav__link" href="https://quaily.com/" target="_blank" rel="noopener noreferrer">印记-周报</a></li>
				<li><a class="scene-nav__link" href="https://zhoutian.com/" target="_blank" rel="noopener noreferrer">周天记</a></li>
				<li><a class="scene-nav__link" href="https://www.weiwenchao.com/" target="_blank" rel="noopener noreferrer">四季·花开——魏文超's Blog</a></li>
				<li><a class="scene-nav__link" href="https://wangyurui.com/" target="_blank" rel="noopener noreferrer">太隐</a></li>
				<li><a class="scene-nav__link" href="https://www.weisay.com/blog" target="_blank" rel="noopener noreferrer">威言威语</a></li>
				<li><a class="scene-nav__link" href="https://xyzbz.cn/" target="_blank" rel="noopener noreferrer">子夜松声</a></li>
				<li><a class="scene-nav__link" href="https://cuixiping.com/blog/" target="_blank" rel="noopener noreferrer">崔话记 ATOM 1.0</a></li>
				<li><a class="scene-nav__link" href="https://www.fengxiaoqiang.com/" target="_blank" rel="noopener noreferrer">强少来了</a></li>
				<li><a class="scene-nav__link" href="https://write.laily.net/zh-cn/" target="_blank" rel="noopener noreferrer">我与我周旋久</a></li>
				<li><a class="scene-nav__link" href="https://www.glowisle.me/" target="_blank" rel="noopener noreferrer">映屿</a></li>
				<li><a class="scene-nav__link" href="https://nxxy335.top/" target="_blank" rel="noopener noreferrer">暖心向阳335</a></li>
				<li><a class="scene-nav__link" href="https://www.geedea.pro/" target="_blank" rel="noopener noreferrer">極客死亡計劃</a></li>
				<li><a class="scene-nav__link" href="https://weekly.tw93.fun/" target="_blank" rel="noopener noreferrer">潮流周刊</a></li>
				<li><a class="scene-nav__link" href="https://blog.southfox.me/" target="_blank" rel="noopener noreferrer">狐狸反走矣</a></li>
				<li><a class="scene-nav__link" href="https://blog.bxaw.name/" target="_blank" rel="noopener noreferrer">白熊阿丸的小屋</a></li>
				<li><a class="scene-nav__link" href="https://blog.mzh.ren/zh/" target="_blank" rel="noopener noreferrer">码农真经的博客</a></li>
				<li><a class="scene-nav__link" href="https://pewae.com/" target="_blank" rel="noopener noreferrer">破袜子</a></li>
				<li><a class="scene-nav__link" href="https://www.suiyan.cc/" target="_blank" rel="noopener noreferrer">碎言 - SuiYan Blog</a></li>
				<li><a class="scene-nav__link" href="https://darmau.co/zh" target="_blank" rel="noopener noreferrer">积薪 - 文章</a></li>
				<li><a class="scene-nav__link" href="https://blog.zhilu.site/" target="_blank" rel="noopener noreferrer">纸鹿摸鱼处</a></li>
				<li><a class="scene-nav__link" href="https://lawtee.com/" target="_blank" rel="noopener noreferrer">老T博客</a></li>
				<li><a class="scene-nav__link" href="https://weekly.howie6879.com/" target="_blank" rel="noopener noreferrer">老胡的周刊</a></li>
				<li><a class="scene-nav__link" href="https://weekly.shawnxie.top/" target="_blank" rel="noopener noreferrer">肖恩技术周刊</a></li>
				<li><a class="scene-nav__link" href="https://hulatu.com/" target="_blank" rel="noopener noreferrer">胡拉图</a></li>
				<li><a class="scene-nav__link" href="https://onojyun.com/" target="_blank" rel="noopener noreferrer">莫比乌斯</a></li>
				<li><a class="scene-nav__link" href="https://www.loyhome.com/" target="_blank" rel="noopener noreferrer">落园</a></li>
				<li><a class="scene-nav__link" href="https://1q43.blog/" target="_blank" rel="noopener noreferrer">虹线</a></li>
				<li><a class="scene-nav__link" href="https://sugarat.top/weekly" target="_blank" rel="noopener noreferrer">视野修炼 - 技术周刊</a></li>
				<li><a class="scene-nav__link" href="http://www.ruanyifeng.com/blog/" target="_blank" rel="noopener noreferrer">阮一峰的网络日志</a></li>
				<li><a class="scene-nav__link" href="https://ameow.xyz/categories/weekly" target="_blank" rel="noopener noreferrer">阿猫的博客</a></li>
				<li><a class="scene-nav__link" href="neighbors.html">邻邦 — 返回邻邦</a></li>
			</ul>
		</nav>

		<noscript>
			<p style="padding:var(--space-md);color:var(--text-secondary);">
				以下是所有友邻链接:
			</p>
			<ul style="padding:var(--space-md);list-style:disc;color:var(--text-secondary);">
				<li><a href="https://lab.gb0.dev/" target="_blank" rel="noopener noreferrer">/var/log/gblab</a></li>
				<li><a href="https://pathos.page/" target="_blank" rel="noopener noreferrer">2750 words</a></li>
				<li><a href="https://blog.ursb.me/" target="_blank" rel="noopener noreferrer">Airing 的博客</a></li>
				<li><a href="https://anotherdayu.com/" target="_blank" rel="noopener noreferrer">Another Dayu</a></li>
				<li><a href="https://blog.est.im/" target="_blank" rel="noopener noreferrer">est の 输入 输出和出入</a></li>
				<li><a href="https://fav0.com/" target="_blank" rel="noopener noreferrer">FAV0周刊</a></li>
				<li><a href="https://hellogithub.com/" target="_blank" rel="noopener noreferrer">HelloGitHub 月刊</a></li>
				<li><a href="https://liangmouyin.com/" target="_blank" rel="noopener noreferrer">Home on 梁某银的博客</a></li>
				<li><a href="https://www.immarcus.com/blog" target="_blank" rel="noopener noreferrer">I'm Marcus Blog</a></li>
				<li><a href="https://imqi1.com/" target="_blank" rel="noopener noreferrer">ImQi1</a></li>
				<li><a href="https://blog.zzbd.org/" target="_blank" rel="noopener noreferrer">J.F's BLOG</a></li>
				<li><a href="https://jakearchibald.com/" target="_blank" rel="noopener noreferrer">Jake Archibald's blog</a></li>
				<li><a href="https://justgoidea.com/" target="_blank" rel="noopener noreferrer">JustGoIdea</a></li>
				<li><a href="https://www.justzht.com/" target="_blank" rel="noopener noreferrer">JustZht's EchoChamber</a></li>
				<li><a href="http://study.tczhong.com/" target="_blank" rel="noopener noreferrer">Learn More</a></li>
				<li><a href="https://blog.liuzhen932.top/" target="_blank" rel="noopener noreferrer">liuzhen932 的小窝</a></li>
				<li><a href="https://markonreview.com/" target="_blank" rel="noopener noreferrer">Markon Review</a></li>
				<li><a href="https://h4ck.org.cn/" target="_blank" rel="noopener noreferrer">obaby@mars</a></li>
				<li><a href="https://www.owenyoung.com/" target="_blank" rel="noopener noreferrer">Owen的博客</a></li>
				<li><a href="https://hsu.cy/posts/" target="_blank" rel="noopener noreferrer">Posts on neverland</a></li>
				<li><a href="https://www.pseudoyu.com/" target="_blank" rel="noopener noreferrer">pseudoyu</a></li>
				<li><a href="https://weblog.contained.love/" target="_blank" rel="noopener noreferrer">r0k1s#i</a></li>
				<li><a href="https://rayepeng.net" target="_blank" rel="noopener noreferrer">Raye's Journey</a></li>
				<li><a href="https://skywt.cn/" target="_blank" rel="noopener noreferrer">SkyWT</a></li>
				<li><a href="https://blog.solazy.me/" target="_blank" rel="noopener noreferrer">So!azy</a></li>
				<li><a href="https://sqybi.com/blog/" target="_blank" rel="noopener noreferrer">SQYBI.com Blog</a></li>
				<li><a href="https://www.taober.blog/" target="_blank" rel="noopener noreferrer">Taober</a></li>
				<li><a href="https://taxodium.ink/" target="_blank" rel="noopener noreferrer">Taxodium</a></li>
				<li><a href="https://tw93.fun/" target="_blank" rel="noopener noreferrer">Tw93 Blog</a></li>
				<li><a href="https://zishu.me" target="_blank" rel="noopener noreferrer">Weekly on 子舒的博客</a></li>
				<li><a href="https://blog.itswincer.com/" target="_blank" rel="noopener noreferrer">Wincer's Blog ATOM</a></li>
				<li><a href="https://nelsonboss.ink/" target="_blank" rel="noopener noreferrer">一直游到海水变蓝</a></li>
				<li><a href="https://ihaihe.cn/" target="_blank" rel="noopener noreferrer">三十海河</a></li>
				<li><a href="https://dongjunke.cn/" target="_blank" rel="noopener noreferrer">东评西就</a></li>
				<li><a href="https://doin.pages.dev/" target="_blank" rel="noopener noreferrer">主页 on Doin的赛博空间</a></li>
				<li><a href="https://wiki.eryajf.net/" target="_blank" rel="noopener noreferrer">二丫讲梵</a></li>
				<li><a href="https://jefftay.com/" target="_blank" rel="noopener noreferrer">仿生猫梦见电子猫粮</a></li>
				<li><a href="https://vjo.cc/" target="_blank" rel="noopener noreferrer">刘郎阁</a></li>
				<li><a href="https://yinji.org/" target="_blank" rel="noopener noreferrer">印记</a></li>
				<li><a href="https://quaily.com/" target="_blank" rel="noopener noreferrer">印记-周报</a></li>
				<li><a href="https://zhoutian.com/" target="_blank" rel="noopener noreferrer">周天记</a></li>
				<li><a href="https://www.weiwenchao.com/" target="_blank" rel="noopener noreferrer">四季·花开——魏文超's Blog</a></li>
				<li><a href="https://wangyurui.com/" target="_blank" rel="noopener noreferrer">太隐</a></li>
				<li><a href="https://www.weisay.com/blog" target="_blank" rel="noopener noreferrer">威言威语</a></li>
				<li><a href="https://xyzbz.cn/" target="_blank" rel="noopener noreferrer">子夜松声</a></li>
				<li><a href="https://cuixiping.com/blog/" target="_blank" rel="noopener noreferrer">崔话记 ATOM 1.0</a></li>
				<li><a href="https://www.fengxiaoqiang.com/" target="_blank" rel="noopener noreferrer">强少来了</a></li>
				<li><a href="https://write.laily.net/zh-cn/" target="_blank" rel="noopener noreferrer">我与我周旋久</a></li>
				<li><a href="https://www.glowisle.me/" target="_blank" rel="noopener noreferrer">映屿</a></li>
				<li><a href="https://nxxy335.top/" target="_blank" rel="noopener noreferrer">暖心向阳335</a></li>
				<li><a href="https://www.geedea.pro/" target="_blank" rel="noopener noreferrer">極客死亡計劃</a></li>
				<li><a href="https://weekly.tw93.fun/" target="_blank" rel="noopener noreferrer">潮流周刊</a></li>
				<li><a href="https://blog.southfox.me/" target="_blank" rel="noopener noreferrer">狐狸反走矣</a></li>
				<li><a href="https://blog.bxaw.name/" target="_blank" rel="noopener noreferrer">白熊阿丸的小屋</a></li>
				<li><a href="https://blog.mzh.ren/zh/" target="_blank" rel="noopener noreferrer">码农真经的博客</a></li>
				<li><a href="https://pewae.com/" target="_blank" rel="noopener noreferrer">破袜子</a></li>
				<li><a href="https://www.suiyan.cc/" target="_blank" rel="noopener noreferrer">碎言 - SuiYan Blog</a></li>
				<li><a href="https://darmau.co/zh" target="_blank" rel="noopener noreferrer">积薪 - 文章</a></li>
				<li><a href="https://blog.zhilu.site/" target="_blank" rel="noopener noreferrer">纸鹿摸鱼处</a></li>
				<li><a href="https://lawtee.com/" target="_blank" rel="noopener noreferrer">老T博客</a></li>
				<li><a href="https://weekly.howie6879.com/" target="_blank" rel="noopener noreferrer">老胡的周刊</a></li>
				<li><a href="https://weekly.shawnxie.top/" target="_blank" rel="noopener noreferrer">肖恩技术周刊</a></li>
				<li><a href="https://hulatu.com/" target="_blank" rel="noopener noreferrer">胡拉图</a></li>
				<li><a href="https://onojyun.com/" target="_blank" rel="noopener noreferrer">莫比乌斯</a></li>
				<li><a href="https://www.loyhome.com/" target="_blank" rel="noopener noreferrer">落园</a></li>
				<li><a href="https://1q43.blog/" target="_blank" rel="noopener noreferrer">虹线</a></li>
				<li><a href="https://sugarat.top/weekly" target="_blank" rel="noopener noreferrer">视野修炼 - 技术周刊</a></li>
				<li><a href="http://www.ruanyifeng.com/blog/" target="_blank" rel="noopener noreferrer">阮一峰的网络日志</a></li>
				<li><a href="https://ameow.xyz/categories/weekly" target="_blank" rel="noopener noreferrer">阿猫的博客</a></li>
			</ul>
		</noscript>
	</main>

</body>

A friends.opml => friends.opml +96 -0
@@ 0,0 1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<opml xmlns:frss="https://freshrss.org/opml" version="2.0">
  <head>
    <title>FreshRSS</title>
    <dateCreated>Sun, 08 Mar 2026 01:57:30 -0500</dateCreated>
  </head>
  <body>
    <outline text="未分类"/>
    <outline text="第伍区">
      <outline text="FAV0周刊" type="rss" xmlUrl="https://fav0.com/feed.xml" htmlUrl="https://fav0.com/" description="《FAV0周刊》:记录每周所见所闻,主要关注前端、AI领域、独立开发以及计算机相关内容"/>
      <outline text="Raye's Journey" type="rss" xmlUrl="https://rayepeng.net/rss.xml" htmlUrl="https://rayepeng.net" description="无人调护,自去经心"/>
      <outline text="Weekly on 子舒的博客" type="rss" xmlUrl="https://zishu.me/index.xml" htmlUrl="https://zishu.me" description="想留下点什么,证明我来过。"/>
      <outline text="印记-周报" type="rss" xmlUrl="https://quaily.com/yinji/feed/atom" description="印记-周报,记录小胡同学过去一周的所见所闻。&#10;&#10;每一期周报主要由这些内容构成:&#10;&#10;- 1-3个话题讨论&#10;- 有趣的事与物&#10;&#10;根据这一周发生或经历的事情,分成1-3个话题,展开叙述和讨论;整理这一周阅读过的文章、书籍,观看过的电影,以及我的零碎想法和思考,最后分享收藏的软件、网站或工具。&#10;&#10;形式只是参考,实际内容可能会有所变化,因为人生不是彩排,每一刻都是现场直播。&#10;&#10;博客和 Quail 会同步发布,如想查看周报之外的内容,请移步博客。&#10;&#10;你可以在以下平台继续关注我:&#10;- [X/Twitter](https://x.com/huhexian)&#10;- [Telegram](https://t.me/findblog)&#10;- [博客](https://yinji.org)"/>
      <outline text="视野修炼 - 技术周刊" type="rss" xmlUrl="https://sugarat.top/weekly.rss" htmlUrl="https://sugarat.top/weekly" description="每周会精选出一些 优质&amp;有趣 的内容做推送(大前端为主),包含但不限于 优质文章,开源库,工具网站,有意思的知识"/>
    </outline>
    <outline text="第叁区">
      <outline text="/var/log/gblab" type="rss" xmlUrl="https://lab.gb0.dev/rss.xml" htmlUrl="https://lab.gb0.dev/" description="此处会不定时产生包含大量废话的日志文件"/>
      <outline text="Another Dayu" type="rss" xmlUrl="https://anotherdayu.com/feed/" htmlUrl="https://anotherdayu.com/" description="&quot;Seize the day, gather ye rosebuds while ye may.&quot;"/>
      <outline text="est の 输入 输出和出入" type="rss" xmlUrl="https://feeds.feedburner.com/initiative" htmlUrl="https://blog.est.im/" description="This blog is rated 🔞, viewer discretion is advised"/>
      <outline text="ImQi1" type="rss" xmlUrl="https://imqi1.com/feed/" htmlUrl="https://imqi1.com/" description="做技术的分享者、生活的摄影师、时事的评论员。"/>
      <outline text="J.F's BLOG" type="rss" xmlUrl="https://blog.zzbd.org/atom.xml" htmlUrl="https://blog.zzbd.org/"/>
      <outline text="Jake Archibald's blog" type="rss" xmlUrl="https://jakearchibald.com/posts.rss" htmlUrl="https://jakearchibald.com/"/>
      <outline text="JustGoIdea" type="rss" xmlUrl="https://justgoidea.com/rss.xml" htmlUrl="https://justgoidea.com/" description="Observation|Exploration|Zen Life"/>
      <outline text="JustZht's EchoChamber" type="rss" xmlUrl="https://www.justzht.com/rss/" htmlUrl="https://www.justzht.com/" description="Haotian Zheng (Justin Fincher)'s blog. Software engineer by weekdays, photographer by weekends. 郑昊天的碎碎念博客,日常记事 / 独立软件。"/>
      <outline text="liuzhen932 的小窝" type="rss" xmlUrl="https://blog.liuzhen932.top/rss.xml" htmlUrl="https://blog.liuzhen932.top/" description="只要愿意去做,人无所不通。欢迎来到 liuzhen932 的小窝"/>
      <outline text="obaby@mars" type="rss" xmlUrl="https://h4ck.org.cn/feed"/>
      <outline text="Owen的博客" type="rss" xmlUrl="https://www.owenyoung.com/atom.xml" htmlUrl="https://www.owenyoung.com/" description="主要关注技术,读书,摘抄,杂谈,文章评论,工具分享,工作流,灵感,英文学习,注意力管理,深度工作等方向。"/>
      <outline text="Posts on neverland" type="rss" xmlUrl="https://hsu.cy/posts/feed.xml" htmlUrl="https://hsu.cy/posts/" description="Recent content in Posts on neverland"/>
      <outline text="pseudoyu" type="rss" xmlUrl="https://www.pseudoyu.com/zh/index.xml" htmlUrl="https://www.pseudoyu.com/" description="pseudoyu's Blog"/>
      <outline text="r0k1s#i" type="rss" xmlUrl="https://weblog.contained.love/rss.xml" htmlUrl="https://weblog.contained.love/"/>
      <outline text="SkyWT" type="rss" xmlUrl="https://skywt.cn/rss.xml" htmlUrl="https://skywt.cn/" description="SkyWT 的网站."/>
      <outline text="SQYBI.com Blog" type="rss" xmlUrl="https://sqybi.com/blog/rss.xml" htmlUrl="https://sqybi.com/blog/" description="Change is a part of life and takes part in finding us who we are."/>
      <outline text="Taober" type="rss" xmlUrl="https://www.taober.blog/feed.xml" htmlUrl="https://www.taober.blog/" description="Hey, I am Taober."/>
      <outline text="Tw93 Blog" type="rss" xmlUrl="https://tw93.fun/feed.xml" htmlUrl="https://tw93.fun/" description="一个喜欢开源和折腾的工程师"/>
      <outline text="Wincer's Blog ATOM" type="rss" xmlUrl="https://blog.itswincer.com/atom.xml"/>
      <outline text="一直游到海水变蓝" type="rss" xmlUrl="https://nelsonboss.ink/rss.xml" htmlUrl="https://nelsonboss.ink/" description="Nelson Boss' Blog"/>
      <outline text="三十海河" type="rss" xmlUrl="https://ihaihe.cn/feed" htmlUrl="https://ihaihe.cn/" description="我们叁,彩虹家庭,两男一娃。"/>
      <outline text="东评西就" type="rss" xmlUrl="https://dongjunke.cn/atom.xml" htmlUrl="https://dongjunke.cn/"/>
      <outline text="主页 on Doin的赛博空间" type="rss" xmlUrl="https://doin.pages.dev/index.xml" htmlUrl="https://doin.pages.dev/" description="Recent content in 主页 on Doin的赛博空间"/>
      <outline text="二丫讲梵" type="rss" xmlUrl="https://wiki.eryajf.net/rss.xml" htmlUrl="https://wiki.eryajf.net/" description="💻学习📝记录🔗分享&#10;学无止境是永远前进的基础,跃然纸上是对知识的总结交代,与众分享则是实现价值的最好方式。"/>
      <outline text="仿生猫梦见电子猫粮" type="rss" xmlUrl="https://jefftay.com/index.xml" htmlUrl="https://jefftay.com/" description="最近的17条笔记 on 仿生猫梦见电子猫粮"/>
      <outline text="刘郎阁" type="rss" xmlUrl="https://vjo.cc/feed/" htmlUrl="https://vjo.cc/" description="记录生活、学习心得、资源分享、技术分享。"/>
      <outline text="印记" type="rss" xmlUrl="https://yinji.org/feed" htmlUrl="https://yinji.org/" description="Live a life you will remember."/>
      <outline text="周天记" type="rss" xmlUrl="https://zhoutian.com/rss.xml" htmlUrl="https://zhoutian.com/" description="记录生活里的小美好"/>
      <outline text="四季·花开——魏文超's Blog" type="rss" xmlUrl="https://www.weiwenchao.com/rss.xml" htmlUrl="https://www.weiwenchao.com/" description="静观吾心及众人心,开爱与恶之花。"/>
      <outline text="威言威语" type="rss" xmlUrl="https://www.weisay.com/blog/feed" htmlUrl="https://www.weisay.com/blog" description="我愿像茶,苦涩留心,清香予人。"/>
      <outline text="子夜松声" type="rss" xmlUrl="https://xyzbz.cn/feed/" htmlUrl="https://xyzbz.cn/" description="小宋的IT知识学习"/>
      <outline text="崔话记 ATOM 1.0" type="rss" xmlUrl="https://cuixiping.com/blog/feed/atom/" htmlUrl="https://cuixiping.com/blog/" description="向着理想的方向,爬一会儿,躺一会儿"/>
      <outline text="我与我周旋久" type="rss" xmlUrl="https://write.laily.net/zh-cn/index.xml" htmlUrl="https://write.laily.net/zh-cn/" description="Recent content on 我与我周旋久"/>
      <outline text="暖心向阳335" type="rss" xmlUrl="https://nxxy335.top/feed.xml" htmlUrl="https://nxxy335.top/" description="永不言败,砥砺前行"/>
      <outline text="白熊阿丸的小屋" type="rss" xmlUrl="https://blog.bxaw.name/feed/" htmlUrl="https://blog.bxaw.name/" description="在这里可以看到一个真实的我,我会在这里书写我的一切"/>
      <outline text="码农真经的博客" type="rss" xmlUrl="https://blog.mzh.ren/zh/index.xml" htmlUrl="https://blog.mzh.ren/zh/" description="Recent content on 码农真经的博客"/>
      <outline text="破袜子" type="rss" xmlUrl="https://pewae.com/feed" htmlUrl="https://pewae.com/" description="一个脱离不了低级趣味的人"/>
      <outline text="碎言 - SuiYan Blog" type="rss" xmlUrl="https://www.suiyan.cc/feed.xml" htmlUrl="https://www.suiyan.cc/" description="坚持深度阅读,持续写作输出,复盘技术实践。以终生学习对抗不确定性,把固执与坚持,All in 在值得的事情上。"/>
      <outline text="纸鹿摸鱼处" type="rss" xmlUrl="https://blog.zhilu.site/atom.xml" htmlUrl="https://blog.zhilu.site/" description="纸鹿至麓不知路,支炉制露不止漉"/>
      <outline text="落园" type="rss" xmlUrl="https://www.loyhome.com/feed/" htmlUrl="https://www.loyhome.com/" description="来者皆客"/>
      <outline text="虹线" type="rss" xmlUrl="https://1q43.blog/feed/" htmlUrl="https://1q43.blog/" description="评论尸的自留地"/>
      <outline text="陈仓颉" type="rss" xmlUrl="https://imzm.im/feed/" htmlUrl="https://imzm.im/" description="以有涯随无涯"/>
      <outline text="非理勿试" type="rss" xmlUrl="https://www.ntiy.com/feed" htmlUrl="https://www.ntiy.com/" description="NEVER TRY IT YOURSELF"/>
      <outline text="风雨行者" type="rss" xmlUrl="http://stuit.cn/Xiaolu/Feed.php" htmlUrl="http://stuit.cn/Xiaolu/" description="始建于2001年12月21日"/>
    </outline>
    <outline text="第壹区">
      <outline text="Taxodium" type="rss" xmlUrl="https://taxodium.ink/rss.xml" htmlUrl="https://taxodium.ink/" description="That the powerful play goes on, and you may contribute a verse."/>
      <outline text="極客死亡計劃" type="rss" xmlUrl="https://www.geedea.pro/index.xml" htmlUrl="https://www.geedea.pro/" description="極客死亡計劃"/>
      <outline text="莫比乌斯" type="rss" xmlUrl="https://onojyun.com/feed/" htmlUrl="https://onojyun.com/" description="写作,一场自我悖驳的旅程"/>
      <outline text="阮一峰的网络日志" type="rss" xmlUrl="http://feeds.feedburner.com/ruanyifeng" htmlUrl="http://www.ruanyifeng.com/blog/" description="Ruan YiFeng's Blog"/>
    </outline>
    <outline text="第肆区">
      <outline text="2750 words" type="rss" xmlUrl="https://pathos.page/feed.xml" htmlUrl="https://pathos.page/" description="一个法哲学研究者的博客,记录了他的学术之路和社会观察"/>
      <outline text="Learn More" type="rss" xmlUrl="https://study.tczhong.com/index.xml" htmlUrl="http://study.tczhong.com/" description="Recent content on Learn More"/>
      <outline text="Markon Review" type="rss" xmlUrl="https://markonreview.com/rss/" htmlUrl="https://markonreview.com/" description="游戏评论、资讯,来自一小撮爱玩游戏的玩家"/>
      <outline text="太隐" type="rss" xmlUrl="https://wangyurui.com/feed.xml" htmlUrl="https://wangyurui.com/" description="一个人的思想发育史就是他的阅读史"/>
      <outline text="强少来了" type="rss" xmlUrl="https://fengxiaoqiang.com/rss.xml" htmlUrl="https://www.fengxiaoqiang.com/" description="fengxiaoqiang.com,公众号「强少来了」主理人"/>
      <outline text="积薪 - 文章" type="rss" xmlUrl="https://darmau.co/zh/article/rss.xml" htmlUrl="https://darmau.co/zh" description="李大毛的个人博客。包括文章、摄影和碎片想法。"/>
      <outline text="老胡的周刊" type="rss" xmlUrl="https://weekly.howie6879.com/rss/rss.xml" htmlUrl="https://weekly.howie6879.com/" description="老胡的信息周刊,每周记录我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。(feedId:41477724771147777+userId:66667360730893312)"/>
      <outline text="肖恩技术周刊" type="rss" xmlUrl="https://weekly.shawnxie.top/rss.xml" htmlUrl="https://weekly.shawnxie.top/" description="记录有价值的技术内容"/>
    </outline>
    <outline text="第贰区">
      <outline text="Airing 的博客" type="rss" xmlUrl="https://blog.ursb.me/feed.xml" htmlUrl="https://blog.ursb.me/" description="哲学硕士|小学老师 |终端全栈"/>
      <outline text="HelloGitHub 月刊" type="rss" xmlUrl="https://hellogithub.com/rss" htmlUrl="https://hellogithub.com/" description="HelloGitHub 是一个分享有趣、 入门级开源项目的平台。 希望大家能够在这里找到编程的快乐、 轻松搞定问题的技术方案、 大呼过瘾的开源神器, 顺其自然地开启开源之旅。"/>
      <outline text="Home on 梁某银的博客" type="rss" xmlUrl="https://liangmouyin.com/index.xml" htmlUrl="https://liangmouyin.com/" description="Recent content on 梁某银的博客"/>
      <outline text="I'm Marcus Blog" type="rss" xmlUrl="https://immarcus.com/blog/rss.xml" htmlUrl="https://www.immarcus.com/blog" description="I'm Marcus Blog"/>
      <outline text="So!azy" type="rss" xmlUrl="https://blog.solazy.me/feed/" htmlUrl="https://blog.solazy.me/" description="Just a Lazy Sol..."/>
      <outline text="映屿" type="rss" xmlUrl="https://www.glowisle.me/atom.xml" htmlUrl="https://www.glowisle.me/" description="Recent content on 映屿"/>
      <outline text="潮流周刊" type="rss" xmlUrl="https://weekly.tw93.fun/rss.xml" htmlUrl="https://weekly.tw93.fun/" description="记录工程师 Tw93 的不枯燥生活"/>
      <outline text="狐狸反走矣" type="rss" xmlUrl="https://blog.southfox.me/feed.xml" htmlUrl="https://blog.southfox.me/" description="Recent Posts"/>
      <outline text="老T博客" type="rss" xmlUrl="https://lawtee.com/index.xml" htmlUrl="https://lawtee.com/" description="Recent content on 老T博客"/>
      <outline text="胡拉图" type="rss" xmlUrl="https://hulatu.com/feed.xml" htmlUrl="https://hulatu.com/" description="Recent content on 胡拉图的后花园"/>
      <outline text="阿猫的博客" type="rss" xmlUrl="https://ameow.xyz/feed/categories/weekly.xml" htmlUrl="https://ameow.xyz/categories/weekly" description="Code for fun, and for ever."/>
    </outline>
    <outline text="第零区">
      <outline text="Cytrogen 的个人博客" type="rss" xmlUrl="https://blog.cytrogen.icu/atom.xml" htmlUrl="https://blog.cytrogen.icu/" description="万圣节恶魔的领地"/>
      <outline text="Hexo Theme Ares Demo Page" type="rss" xmlUrl="https://hexo-theme-ares-demo.netlify.app/atom.xml" htmlUrl="https://hexo-theme-ares-demo.netlify.app/"/>
    </outline>
  </body>
</opml>

M realm.css => realm.css +87 -0
@@ 1315,6 1315,93 @@
		min-height: 0;
	}

	/* --- Village (友邻村落) --- */

	.village-viewport {
		flex: 1;
		min-height: 0;
		min-width: 0;
		overflow: auto;
		background: var(--bg-deep);
	}

	.village-canvas {
		min-width: 100%;
		min-height: 100%;
	}

	.village-canvas svg {
		display: block;
		width: 100%;
		height: 100%;
	}

	.village-controls {
		display: flex;
		align-items: center;
		justify-content: center;
		gap: var(--space-sm);
		padding: var(--space-sm);
		background: var(--bg-abyss);
		flex-shrink: 0;
	}

	.village-zoom-label {
		background: var(--bg-surface);
		color: var(--text-primary);
		font-family: var(--font-mono);
		font-size: var(--text-sm);
		padding: var(--space-xs) var(--space-sm);
		cursor: pointer;
		transition: background var(--duration-fast) var(--ease-default);
	}

	.village-zoom-label:hover {
		background: var(--accent-dim);
	}

	.village-zoom-label:focus-visible {
		outline: 2px solid var(--accent);
		outline-offset: 2px;
	}

	/* Active zoom level indicator */
	#vz1:checked ~ .village-controls [for="vz1"],
	#vz2:checked ~ .village-controls [for="vz2"],
	#vz3:checked ~ .village-controls [for="vz3"],
	#vz4:checked ~ .village-controls [for="vz4"] {
		background: var(--accent-dim);
		color: var(--text-primary);
	}

	/* Zoom levels via canvas sizing — SVG fills canvas, canvas overflows viewport */
	#vz2:checked ~ .village-viewport .village-canvas { width: 150%; height: 150%; }
	#vz3:checked ~ .village-viewport .village-canvas { width: 200%; height: 200%; }
	#vz4:checked ~ .village-viewport .village-canvas { width: 300%; height: 300%; }

	/* Village house hover: roof accent, window glow */
	.village-house:hover .fill-roof,
	.village-house:focus-visible .fill-roof {
		fill: var(--accent-dim);
	}

	.village-house:hover .house-window,
	.village-house:focus-visible .house-window {
		fill: var(--accent);
	}

	/* Village labels: smaller font, hidden by default */
	.village-label {
		font-size: 9px;
	}

	/* Show labels at zoom ≥ 2× */
	#vz3:checked ~ .village-viewport .village-canvas .village-label,
	#vz4:checked ~ .village-viewport .village-canvas .village-label {
		opacity: 1;
		fill: var(--text-secondary);
	}

	/* --- Responsive scene rules --- */

	@container (max-width: 25rem) {