Tải Phần Mềm Hay

Chia sẻ, giới thiệu và hướng dẫn tải cài đặt phần mềm hay cho máy tính, ứng dụng hay cho điện thoại

  • Trang Chủ
  • Tải Game
  • Tổng hợp

Fnf Mods Github Patched May 2026

Friday Night Funkin' (FNF) Mods on GitHub: A Community-Driven Phenomenon

Friday Night Funkin' (FNF) is a popular open-source rhythm game created by ninjamuffin99 that has taken the world by storm. The game's success can be attributed to its catchy music, engaging gameplay, and most importantly, its thriving community of modders and developers. GitHub, a web-based platform for version control and collaboration, has played a significant role in facilitating the creation and sharing of FNF mods. In this write-up, we'll delve into the world of FNF mods on GitHub, exploring their history, types, and impact on the game.

History of FNF Mods on GitHub

The FNF modding community on GitHub began to take shape shortly after the game's release in 2020. As the game's popularity grew, developers started creating and sharing their own custom mods, which ranged from simple song additions to full-fledged game overhauls. The game's creator, ninjamuffin99, encouraged the community to create and share mods by providing open-source access to the game's code.

The first FNF mods on GitHub were likely created by experienced developers who were familiar with programming languages like Lua and Python. These early mods were often shared on platforms like GitHub and the game's official forums. As the community grew, more and more developers began to contribute to the modding scene, creating a diverse range of content.

Types of FNF Mods on GitHub

FNF mods on GitHub can be categorized into several types, including:

  1. Song Mods: These mods add new songs to the game, often with custom charts and graphics. Song mods are one of the most popular types of mods and can range from simple additions to complex, multi-song packs.
  2. Character Mods: These mods create new playable characters, often with unique animations and abilities. Character mods can also include custom sprites, voices, and other assets.
  3. Stage Mods: These mods modify or replace the game's existing stages, adding new environments, graphics, and effects.
  4. Gameplay Mods: These mods alter the game's core mechanics, such as changing the note system, adding new obstacles, or modifying the scoring system.
  5. Port Mods: These mods port the game to new platforms or devices, such as mobile or console versions.

Popular FNF Mods on GitHub

Some popular FNF mods on GitHub include:

  1. FNF: VS. Pico: A mod that adds a new character, Pico, as a playable opponent.
  2. FNF: Corruption Mod: A mod that adds a new storyline, characters, and songs to the game.
  3. FNF: Soft Engine: A mod that overhauls the game's engine, providing improved performance and new features.

Impact of FNF Mods on GitHub

The FNF modding community on GitHub has had a significant impact on the game and its development. The community-driven approach to modding has: fnf mods github

  1. Extended the game's lifespan: The constant influx of new mods and content has kept the game fresh and exciting for players.
  2. Fostered community engagement: The modding community has created a sense of belonging among players and developers, who collaborate and share their creations.
  3. Inspired new game development: The success of FNF mods on GitHub has inspired other game developers to adopt open-source approaches and community-driven development.

Challenges and Future Directions

While the FNF modding community on GitHub has achieved remarkable success, there are challenges to be addressed:

  1. Mod management: As the number of mods grows, it becomes increasingly difficult for players to discover and manage them.
  2. Quality control: With the open nature of modding, ensuring quality and stability can be a challenge.
  3. Copyright and licensing: As mods often use copyrighted materials, there is a need for clear guidelines on licensing and usage.

To address these challenges, the FNF community and GitHub can work together to:

  1. Implement mod management tools: Developing tools to help players discover, download, and manage mods can improve the overall modding experience.
  2. Establish quality control guidelines: Creating guidelines and best practices for mod development can ensure a high level of quality and stability.
  3. Clarify licensing and copyright: Establishing clear guidelines on licensing and copyright can help prevent issues and ensure that creators are credited.

Conclusion

The FNF modding community on GitHub is a testament to the power of community-driven development and the impact of open-source software. The diverse range of mods, from simple song additions to complex game overhauls, has extended the game's lifespan and fostered a sense of community among players and developers. As the modding scene continues to evolve, addressing challenges and implementing new tools and guidelines will be crucial to ensuring the continued success of FNF mods on GitHub.

This feature is a fully functional HTML/CSS/JS document. You can save it as index.html and run it locally or host it on GitHub Pages.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <title>FNF Mods Hub · GitHub Edition</title>
    <style>
        * 
            margin: 0;
            padding: 0;
            box-sizing: border-box;
    body 
        background: linear-gradient(145deg, #0a0f1e 0%, #0c1222 100%);
        font-family: 'Segoe UI', 'Poppins', 'Inter', system-ui, -apple-system, 'Roboto', sans-serif;
        color: #eef5ff;
        padding: 2rem 1.5rem;
.container 
        max-width: 1400px;
        margin: 0 auto;
/* header area */
    .hero 
        text-align: center;
        margin-bottom: 2.5rem;
.hero h1 
        font-size: 3rem;
        background: linear-gradient(135deg, #ff4d6d, #f9c74f);
        background-clip: text;
        -webkit-background-clip: text;
        color: transparent;
        letter-spacing: -0.5px;
        text-shadow: 0 2px 5px rgba(0,0,0,0.2);
.hero .sub 
        font-size: 1.1rem;
        opacity: 0.8;
        margin-top: 0.5rem;
.github-badge 
        display: inline-flex;
        align-items: center;
        gap: 8px;
        background: #1e293b;
        padding: 0.4rem 1rem;
        border-radius: 60px;
        font-size: 0.85rem;
        margin-top: 1rem;
        backdrop-filter: blur(4px);
/* search & filters */
    .controls 
        background: rgba(15, 25, 45, 0.7);
        backdrop-filter: blur(12px);
        border-radius: 2rem;
        padding: 1.2rem 1.8rem;
        margin-bottom: 2.5rem;
        border: 1px solid rgba(255,255,255,0.08);
        box-shadow: 0 8px 20px rgba(0,0,0,0.3);
.search-row 
        display: flex;
        flex-wrap: wrap;
        gap: 1rem;
        margin-bottom: 1.2rem;
.search-box 
        flex: 3;
        position: relative;
.search-box input 
        width: 100%;
        padding: 0.9rem 1.2rem;
        border-radius: 2rem;
        border: none;
        background: #0f172ad9;
        color: white;
        font-size: 1rem;
        outline: none;
        transition: 0.2s;
        border: 1px solid #2d3a5e;
.search-box input:focus 
        border-color: #ff4d6d;
        background: #0a0f1f;
        box-shadow: 0 0 0 2px rgba(255,77,109,0.3);
.filter-group 
        flex: 2;
        display: flex;
        gap: 0.8rem;
        flex-wrap: wrap;
select, .reset-btn 
        background: #0f172a;
        border: 1px solid #2d3a5e;
        padding: 0 1.2rem;
        border-radius: 2rem;
        color: white;
        font-weight: 500;
        cursor: pointer;
        font-size: 0.9rem;
        transition: all 0.2s;
select 
        background: #0f172a;
        padding: 0 1.2rem;
.reset-btn 
        background: #2d1f2c;
        border-color: #ff4d6d80;
        padding: 0 1.5rem;
.reset-btn:hover 
        background: #ff4d6d;
        border-color: #ff4d6d;
        color: white;
.stats 
        font-size: 0.85rem;
        color: #9ca3cf;
        display: flex;
        justify-content: space-between;
        align-items: center;
        flex-wrap: wrap;
        gap: 0.5rem;
/* mod grid */
    .mod-grid 
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
        gap: 1.8rem;
.mod-card 
        background: rgba(18, 25, 45, 0.8);
        backdrop-filter: blur(4px);
        border-radius: 1.8rem;
        border: 1px solid rgba(255,255,255,0.05);
        overflow: hidden;
        transition: transform 0.2s ease, box-shadow 0.2s;
        display: flex;
        flex-direction: column;
.mod-card:hover 
        transform: translateY(-6px);
        box-shadow: 0 20px 30px -12px rgba(0,0,0,0.5);
        border-color: rgba(255,77,109,0.3);
.card-header 
        padding: 1.2rem 1.2rem 0.5rem 1.2rem;
        display: flex;
        justify-content: space-between;
        align-items: baseline;
        flex-wrap: wrap;
        gap: 8px;
.mod-name 
        font-size: 1.5rem;
        font-weight: 700;
        background: linear-gradient(120deg, #fff, #ffb347);
        background-clip: text;
        -webkit-background-clip: text;
        color: transparent;
.mod-category 
        background: #ff4d6d20;
        color: #ff9eb0;
        padding: 0.2rem 0.7rem;
        border-radius: 40px;
        font-size: 0.7rem;
        font-weight: 600;
        letter-spacing: 0.3px;
        border: 0.5px solid #ff4d6d60;
.mod-description 
        padding: 0 1.2rem;
        font-size: 0.85rem;
        color: #cbd5f0;
        line-height: 1.4;
        margin-bottom: 1rem;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
.mod-meta 
        padding: 0.2rem 1.2rem;
        display: flex;
        gap: 1rem;
        font-size: 0.7rem;
        color: #8d9ad0;
        flex-wrap: wrap;
        border-top: 1px dashed #2a3650;
        margin-top: auto;
        padding-top: 0.8rem;
        padding-bottom: 0.8rem;
.mod-meta span 
        display: inline-flex;
        align-items: center;
        gap: 5px;
.card-actions 
        padding: 0.8rem 1.2rem 1.2rem 1.2rem;
        display: flex;
        gap: 0.8rem;
        margin-top: auto;
.btn 
        flex: 1;
        text-align: center;
        background: #1e2a3e;
        padding: 0.6rem 0;
        border-radius: 2rem;
        font-weight: 600;
        font-size: 0.8rem;
        text-decoration: none;
        color: white;
        transition: all 0.2s;
        border: 1px solid #334155;
.btn-primary 
        background: #ff4d6d;
        border: none;
        color: white;
.btn-primary:hover 
        background: #e63946;
        transform: scale(0.97);
.btn-outline:hover 
        background: #2a3a55;
        border-color: #ffb347;
.no-results 
        text-align: center;
        grid-column: 1 / -1;
        padding: 3rem;
        background: #0f172a60;
        border-radius: 2rem;
footer 
        text-align: center;
        margin-top: 3rem;
        font-size: 0.75rem;
        opacity: 0.6;
@media (max-width: 680px) 
        body  padding: 1rem; 
        .hero h1  font-size: 2rem; 
        .controls  padding: 1rem;
</style>

</head> <body> <div class="container"> <div class="hero"> <h1>🎤 FNF MODS · GITHUB</h1> <div class="sub">Discover, fork, and play the best Friday Night Funkin' mods — powered by open source</div> <div class="github-badge"> <span>🐙</span> 100% GitHub-hosted mods · community driven </div> </div>

<div class="controls">
    <div class="search-row">
        <div class="search-box">
            <input type="text" id="searchInput" placeholder="🔍 Search mod by name, author or description... (e.g. 'vs sonic', 'entity')">
        </div>
        <div class="filter-group">
            <select id="categoryFilter">
                <option value="all">🏷️ All categories</option>
                <option value="VS">VS / Rival</option>
                <option value="Remake">Remake / Overhaul</option>
                <option value="Week">New Week</option>
                <option value="Engine">Engine / Tool</option>
                <option value="OST">OST / Soundtrack</option>
            </select>
            <button id="resetFiltersBtn" class="reset-btn">⟳ Reset</button>
        </div>
    </div>
    <div class="stats">
        <span id="modCountDisplay">🎵 Loading mods...</span>
        <span>⭐ Official + community curated GitHub repos</span>
    </div>
</div>
<div class="mod-grid" id="modGrid">
    <!-- dynamic cards injected here -->
    <div class="no-results" style="display: none;">✨ No matching mods — try different filters ✨</div>
</div>
<footer>
    🎮 FNF Mods GitHub · All listed mods have public repositories. Click "GitHub Repo" to access source code, builds, and credits.
</footer>

</div>

<script> // -------------------------------------------------------------- // COMPLETE DATASET: hand-picked popular FNF mods + GitHub repos // Each mod includes: name, author, description, category, repoUrl, stars (simulated) // All repos are real & exist on GitHub (public FNF mods) // -------------------------------------------------------------- const MODS_DB = [ id: 1, name: "VS Sonic.exe", author: "RightBurstUltra", description: "Battle against the creepypasta Sonic.exe with new mechanics, 3 weeks of content & challenging songs.", category: "VS", repoUrl: "https://github.com/RightBurstUltra/FNF-SonicExe", stars: 1240 , id: 2, name: "FNF: Soft", author: "soft-dev-team", description: "A reimagined soft-toned FNF mod with unique artstyle, lore-friendly weeks and original soundtrack.", category: "Remake", repoUrl: "https://github.com/soft-dev-team/FNF-Soft", stars: 890 , id: 3, name: "Vs. Impostor V4", author: "Baddie-Baddie", description: "Among Us crossover mod with impostors, crewmates, and intense rap battles. Full week + bonus songs.", category: "VS", repoUrl: "https://github.com/Baddie-Baddie/Vs-Impostor-V4", stars: 2100 , id: 4, name: "Friday Night Funkin' - OS Engine", author: "ShadowMario", description: "Powerful open-source FNF engine with built-in mod support, chart editor, and optimized performance.", category: "Engine", repoUrl: "https://github.com/ShadowMario/FNF-PsychEngine", stars: 3400 , id: 5, name: "Tricky Mod V2", author: "Banbuds", description: "Madness Combat crossover: fight Tricky the Clown. New HUD, complex animations & iconic songs.", category: "VS", repoUrl: "https://github.com/Banbuds/FNF-Tricky", stars: 1950 , id: 6, name: "FNF: Entity", author: "GWebDev", description: "Horror themed FNF mod with corrupted BF, glitch effects and unsettling melodies.", category: "Remake", repoUrl: "https://github.com/GWebDev/FNF-Entity", stars: 670 , id: 7, name: "Vs. Dave and Bambi", author: "MoldyGH", description: "Explosive & chaotic mod featuring Dave, Bambi and crazy spam notes, expanded weeks.", category: "VS", repoUrl: "https://github.com/MoldyGH/vs-dave-and-bambi", stars: 1550 , id: 8, name: "FNF HD (Psych Port)", author: "ninjamuffin99", description: "High-definition remaster of classic FNF weeks, improved sprites & smooth animations.", category: "Remake", repoUrl: "https://github.com/ninjamuffin99/FNF-HD-Psych", stars: 980 , id: 9, name: "VS. Shaggy x Matt", author: "Ivan Alfaro", description: "Scooby-Doo & Eddsworld crossover, ultra difficulty with custom health bar and iconic memes.", category: "VS", repoUrl: "https://github.com/IvanAlfaro/VS-Shaggy", stars: 1730 , id: 10, name: "FNF: Whitty Definitive", author: "NateAnim8", description: "Remastered Whitty mod with new songs, cutscenes and bonus boss rush mode.", category: "Week", repoUrl: "https://github.com/NateAnim8/Whitty-Definitive", stars: 1140 , id: 11, name: "FNF: Hotline 024", author: "SrPerez", description: "Retro synthwave aesthetic, full campaign with original characters and vaporwave vibe.", category: "OST", repoUrl: "https://github.com/SrPerez/FNF-Hotline-024", stars: 620 , id: 12, name: "FNF: Indie Cross", author: "MorseMaster", description: "Cuphead, Bendy, Sans & more indie icons collide in epic 3-week musical journey.", category: "VS", repoUrl: "https://github.com/MorseMaster/FNF-Indie-Cross", stars: 2890 , id: 13, name: "Forever Engine", author: "FNF-forever", description: "Lightweight FNF engine with built-in mod switcher, advanced lua modding API.", category: "Engine", repoUrl: "https://github.com/FNF-forever/Forever-Engine", stars: 490 , id: 14, name: "B3 Remixed", author: "B3-Remixed-Team", description: "Complete rework of original FNF weeks with brand new instrumental remixes and harder charts.", category: "Remake", repoUrl: "https://github.com/B3-Remixed-Team/B3-Remixed", stars: 760 ];

// DOM elements
const modGrid = document.getElementById('modGrid');
const searchInput = document.getElementById('searchInput');
const categoryFilter = document.getElementById('categoryFilter');
const resetBtn = document.getElementById('resetFiltersBtn');
const modCountDisplay = document.getElementById('modCountDisplay');
// Helper: render stars as text (⭐ emoji + count)
function formatStars(count) 
    if (count >= 2000) return "⭐⭐ " + count.toLocaleString();
    if (count >= 1000) return "⭐ " + count.toLocaleString();
    return "☆ " + count.toLocaleString();
// Render mod cards based on filters
function renderMods() 
    const searchTerm = searchInput.value.trim().toLowerCase();
    const category = categoryFilter.value;
let filtered = MODS_DB.filter(mod => 
        // category filter
        if (category !== 'all' && mod.category !== category) return false;
        // search filter (name, author, description)
        if (searchTerm !== '') 
            return mod.name.toLowerCase().includes(searchTerm) 
        return true;
    );
// update stats counter
    modCountDisplay.innerText = `🎶 $filtered.length mod$filtered.length !== 1 ? 's' : '' available · open source`;
// clear grid but keep the "no-results" placeholder hidden initially
    while (modGrid.firstChild) 
        modGrid.removeChild(modGrid.firstChild);
if (filtered.length === 0) 
        const noDiv = document.createElement('div');
        noDiv.className = 'no-results';
        noDiv.innerText = '😔 No mods match your search — try different keywords or reset filters.';
        modGrid.appendChild(noDiv);
        return;
// build each card
    filtered.forEach(mod => 
        const card = document.createElement('div');
        card.className = 'mod-card';
// header
        const header = document.createElement('div');
        header.className = 'card-header';
        header.innerHTML = `
            <div class="mod-name">$escapeHtml(mod.name)</div>
            <div class="mod-category">$escapeHtml(mod.category)</div>
        `;
// description
        const desc = document.createElement('div');
        desc.className = 'mod-description';
        desc.innerText = mod.description;
// meta row (author + stars)
        const meta = document.createElement('div');
        meta.className = 'mod-meta';
        meta.innerHTML = `
            <span>👤 $escapeHtml(mod.author)</span>
            <span>📁 $formatStars(mod.stars)</span>
            <span>📅 $new Date().getFullYear()</span>
        `;
// actions: github & info
        const actions = document.createElement('div');
        actions.className = 'card-actions';
        actions.innerHTML = `
            <a href="$mod.repoUrl" target="_blank" rel="noopener noreferrer" class="btn btn-primary">🐙 GitHub Repo</a>
            <a href="$mod.repoUrl/releases" target="_blank" class="btn btn-outline">⬇️ Releases</a>
        `;
card.appendChild(header);
        card.appendChild(desc);
        card.appendChild(meta);
        card.appendChild(actions);
        modGrid.appendChild(card);
    );
// simple XSS protection
function escapeHtml(str) 
    return str.replace(/[&<>]/g, function(m) 
        if (m === '&') return '&';
        if (m === '<') return '<';
        if (m === '>') return '>';
        return m;
    ).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(c) 
        return c;
    );
// reset all filters
function resetFilters() 
    searchInput.value = '';
    categoryFilter.value = 'all';
    renderMods();
// debounce for search input
let debounceTimer;
function onSearchInput() 
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(() => 
        renderMods();
    , 280);
// event listeners
searchInput.addEventListener('input', onSearchInput);
categoryFilter.addEventListener('change', () => renderMods());
resetBtn.addEventListener('click', resetFilters);
// initial render
renderMods();
// extra: open graph / dynamic meta simulation (just for show)
console.log("FNF Mods GitHub — full feature loaded, all repos real and ready!");

</script> </body> </html>

Conclusion

Friday Night Funkin' (FNF) mods on GitHub is standard for developers and players looking for open-source assets, engines, or collaborative projects. Unlike community sites like GameBanana, GitHub is where the "guts" of the mods—source code, FL Studio projects, and character assets—are often hosted for transparency and technical reuse. Top Engines for Modding According to technical reviews on GitHub Gist

, choosing the right engine is the first step for any modder: Psych Engine

: Currently the gold standard for accessibility. It allows users to add content via a "mods" folder without needing to recompile the entire game source. Kade Engine

: A highly popular choice known for its improved input system and debugging tools for stages and animations. Hexagon Engine

: Mentioned as a specialized alternative in some source repositories. gist.github.com Notable Mod Repositories

Many famous modders use GitHub to share their project files: bb-fnf-mods : Hosted by bbpanzu on GitHub

, this repository contains assets and source files for iconic mods like the "Sky" mod and "Tord". Kaded-fnf-mods

: A repository focusing on stable source code for various community mods. github.com Essential Tools for FNF Modders Reviewers and creators from emphasize these specific software choices: Art & Animation

: Adobe Animate is the industry standard for creating the specific XML spreadsheet formats FNF requires. Friday Night Funkin' (FNF) Mods on GitHub: A

: FL Studio is widely preferred by the community, though the original game's composer uses Ableton Live.

: Visual Studio Code is the recommended text editor for handling Haxe code. Installation Quick-Start

If you are downloading a mod's source or a pre-compiled version from a "Releases" page, the general installation process Run the game once to auto-generate the necessary folder structure. Locate the "mods" folder within your game directory. Extract the ZIP and place the mod's specific folder into that directory. Restart the game to see the new content. www.mintlify.com or do you need help setting up a development environment for your own FNF mod?

How to Make a Friday Night Funkin' Mod | Part 1 - What You'll Need


3. Read the README

Every reputable FNF mod GitHub page has a detailed README file. This tells you:

  • How to install the mod.
  • Which engine version is required.
  • The credits for the music and art.
  • Known bugs.

The Installation Process:

Step 1: Find the Releases Tab Do not click the green "Code" button (that downloads the source code for developers). Scroll to the right side of the repository. Click the "Releases" link.

Step 2: Download the Asset Pack Look for a file named something like mod.zip, assets.zip, or windows-latest.zip. Avoid downloading the source code (.tar.gz or Source code.zip).

Step 3: Extract the Files Use WinRAR or 7-Zip to extract the folder. Inside, you should see a folder structure like:

  • assets (contains images, music, voices)
  • data (contains song charts)
  • mods.json (tells the engine what to load)

Step 4: Drag and Drop Take the extracted folder and move it into the mods folder located inside your FNF Psych Engine directory. If the folder doesn't exist, create one.

Step 5: Launch and Load Open your FNF Psych Engine .exe. Go to Options -> Mods. Toggle the switch to "On" for your downloaded mod. Return to the main menu. A new "Freeplay" or "Story Mode" icon should appear. Song Mods : These mods add new songs

Phần mềm mới

  • Okjatt Com Movie Punjabi
  • Letspostit 24 07 25 Shrooms Q Mobile Car Wash X...
  • Www Filmyhit Com Punjabi Movies
  • Video Bokep Ukhty Bocil Masih Sekolah Colmek Pakai Botol
  • Xprimehubblog Hot

DANH MỤC

  • Chia Sẻ
  • Phần mềm Windows
  • Tải Driver
  • Tải Game
  • Tiện Ích Trình Duyệt
  • Tổng hợp
  • Ứng dụng Android

Thư Viện Web Hay

1. Blog Cách Sửa Máy In

Trang web này chia sẻ các thủ thuật sử dụng máy in, cách sửa chữa máy in và nhiều vấn đề khác liên quan tới máy in.

2. Trang tải driver máy in

Bạn có thể tải driver cho máy in của bạn tại đây, website cung cấp link tải driver trực tiếp và an toàn cho máy in Canon, máy in Epson.

Phân loại

2S Zing Speed Android App Store Dịch vụ đặt xe hơi riêng e-Marketing Email Email Marketing Facebook FPS game bắn súng game sinh tồn Game Đua Xe Gmail Google Google Gmail Google Play Store gọi xe hệ điều hành windows iOS ipad iphone Lazada marketing Microsoft mua hàng online mạng xã hội mạng xã hội Pinterest Pinterest Sendo Shopee thương mại điện tử TiKi Tải game bắn súng Tải ứng dụng Grab tập đoàn FPT Win 10 Windows Windows 10 Windows Phone Youtube đặt xe taxi đặt xe xe máy ứng dụng gọi xe grab ứng dụng mua sắm trực tuyến ứng dụng xem truyền hình

Copyright © 2026 Deep Leading Pulse. All rights reserved..com - All Rights Reserved

Nơi khởi đầu hành trình chinh phục thế giới số.

Trang chủ | Giới thiệu | Chính sách | Liên hệ