СПИСОК ПЕРСОНАЖЕЙ

Перечень существующих персонажей в игре.
После принятия анкеты амс сами занесут вашего персонажа в таблицу, но если этого по каким-то причинам не произошло, не стесняйтесь напомнить им об этом. Увы, но мы тоже люди и можем заработаться, задуматься, отвлечься.

Сортировка происходит по фамилии

[html]<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Галерея Личных Дел по Категориям (Прозрачная)</title>
    <style>
        /*
         * =========================================================
         * --- 1. ГЛОБАЛЬНЫЕ НАСТРОЙКИ И ПЕРЕМЕННЫЕ (ЦВЕТА, ШРИФТЫ) ---
         * =========================================================
         */

        :root {
            /* Основные цвета, которые можно легко изменить */
            --paper-color: #FDFBF2; /* Цвет бумаги, оставлен для модального окна */
            --dark-red: #660000;
            --bright-red: #cc0000;
            --text-color: #333;
            --dark-text-color: #555;
            --shadow-medium: rgba(0, 0, 0, 0.15);
            --shadow-dark: rgba(0, 0, 0, 0.2);
            --shadow-modal: rgba(0, 0, 0, 0.7);
            --stamp-color: #a01010; /* Цвет для текста печати */
        }

        /*
         * =========================================================
         * --- 2. ОБЩИЕ СТИЛИ СТРАНИЦЫ И ГАЛЕРЕИ ---
         * =========================================================
         */

        body {
            font-family: 'Arial', sans-serif;
            background-color: transparent; /* Фон всего кода - прозрачный */
            display: flex;
            justify-content: center;
            align-items: flex-start;
            min-height: 100vh;
            margin: 0;
            padding: 20px;
            box-sizing: border-box;
            color: var(--text-color);
        }

        .gallery-container {
            width: 650px;
            max-width: 100%;
            background-color: transparent; /* Контейнер галереи прозрачен */
            padding: 15px;
            box-sizing: border-box;
        }
       
        /* Стили для сворачиваемых секций (Details) */
        .category-section {
            margin-bottom: 25px;
            padding: 10px;

            border-radius: 5px;
            /* СДЕЛАНО ПРОЗРАЧНЫМ */
            background-color: transparent;
            box-shadow: 0 4px 8px var(--shadow-medium);
        }

        /* Заголовок секции (Summary) */
        .category-section summary {
            font-size: 1.4em;
            font-weight: bold;
            color: #282828;
            padding: 10px;
            cursor: pointer;
            list-style: none;
            position: relative;
            /* Чтобы текст заголовка был читаем, добавим легкую тень, если фон очень темный */
           
        }
       
        /* Кастомная стрелка для секции */
        .category-section summary::before {
            content: '▶';
            margin-right: 10px;
            display: inline-block;
            transition: transform 0.2s;
            color: #282828;
        }

        /* Кастомная стрелка для секции (для развернутого состояния) */
        .category-section[open] summary::before {
            content: '▼';
        }
       
        /* Стиль для кнопки сортировки */
        .sort-button {
            display: block;
            width: 98%;
            padding: 8px;
            margin: 15px auto;
            font-size: 1em;
            font-weight: bold;
            color: #DCDCDC;
            background-color: #282828;
           
           
            cursor: pointer;
            transition: background-color 0.2s;
        }

        .sort-button:hover {
            background-color: #490005;
        }

        /* Стили для сетки фотографий (3 колонки) */
        .photo-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 20px;
            padding: 10px;
        }

        /* Стиль для каждой отдельной карточки-поллароида */
        .grid-item {
            /* СДЕЛАНО ПОЛУПРОЗРАЧНЫМ (для сохранения легкого фона) */
            background-color: rgba(255, 255, 255, 0.3);
            /* Если нужен полностью прозрачный фон, используйте: background-color: transparent; */

            /* Убираем "зернистый" фон, так как он не будет виден на прозрачном блоке */
            /* background-image: none; */
           
            border: 1px solid rgba(0, 0, 0, 0.1);
            padding: 10px 10px 30px 10px;
            border-radius: 2px;
            box-shadow: 0 4px 8px var(--shadow-medium);
            transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
            cursor: pointer;
            text-align: center;
        }

        .grid-item:hover {
            transform: translateY(-5px) scale(1.02);
            box-shadow: 0 6px 15px var(--shadow-dark);
        }

        /* Стиль для самой фотографии внутри полароида */
        .grid-item img {
            display: block;
            width: 100%;
            aspect-ratio: 1 / 1;
            object-fit: cover;
            border: 1px solid var(--dark-text-color);
            margin-bottom: 20px;
        }

        /* Контейнер для имени в две строки */
        .grid-item .name-container {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            height: 3.5em;
            overflow: hidden;
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        /* Стиль для каждой отдельной строки имени/фамилии */
        .polaroid-name-line {
            display: block;
            margin: 0;
            font-size: 1.1em;
            font-weight: bold;
            color: #282828;
            width: 100%;
            line-height: 1.2em;
            text-align: center;
            font-family: 'Arial', sans-serif;
            word-wrap: break-word;
            white-space: normal;
            text-overflow: clip;
            text-shadow: 0 0 2px rgba(255, 255, 255, 0.5); /* Для лучшей читаемости на темном фоне */
        }
        /* Фамилия чуть крупнее */
        .polaroid-name-line:last-child {
            font-size: 1.2em;
            margin-top: 0;
        }
       
        /*
         * =========================================================
         * --- 3. СТИЛИ ДЛЯ ВСПЛЫВАЮЩЕГО ОКНА (МОДАЛА) ---
         * (Модальное окно сохраняет белый фон для читаемости "личного дела")
         * =========================================================
         */

        /* Затемняющий фон/оверлей для модального окна */
        .modal-overlay {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.7);
            justify-content: center;
            align-items: center;
            z-index: 1000;
            backdrop-filter: blur(5px);
            overflow-y: auto;
        }

        /* Стиль для самого окна "Личное дело" (сохраняет цвет бумаги) */
        .personal-file {
            background-color: var(--paper-color);
            border: 3px solid var(--dark-red);
            padding: 30px;
            width: 500px;
            max-width: 90%;
            box-shadow: 0 0 25px var(--shadow-modal);
            position: relative;
            box-sizing: border-box;
            font-family: 'Courier New', monospace;
            letter-spacing: 0.5px;
            line-height: 1.5;
            border-radius: 5px;
            margin: 20px 0;
        }
       
        /* Стили для заголовков, печатей и других элементов модала */
        .personal-file h2 { text-align: center; color: var(--bright-red); margin-top: -15px; margin-bottom: 15px; font-size: 1.8em; text-transform: uppercase; letter-spacing: 2px; border-bottom: 2px solid var(--dark-red); padding-bottom: 0px; }
        .stamp-container { position: absolute; top: 110px; right: 40px; transform: rotate(10deg); z-index: 10; }
        .realistic-stamp { font-family: 'Impact', 'Arial Black', sans-serif; font-size: 2.2em; color: var(--stamp-color); opacity: 0.7; padding: 5px 15px; border: 3px solid var(--stamp-color); border-radius: 5px; text-transform: uppercase; letter-spacing: 2px; display: inline-block; background-color: rgba(255,255,255,0.05); }
        .file-details a { color: var(--text-color); text-decoration: underline dotted var(--dark-red); font-weight: bold; transition: color 0.2s; }
        .file-details a:hover { color: var(--bright-red); }
        .file-header-wrapper { margin-bottom: 15px; }
        .file-header { display: flex; align-items: flex-start; position: relative; padding-top: 15px; }
        .file-portrait { width: 150px; height: 150px; object-fit: cover; border: 2px solid var(--dark-text-color); margin-right: 20px; flex-shrink: 0; box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); }
        .file-details { flex-grow: 1; }
        .file-details p { margin: 5px 0; font-size: 0.95em; }
        .file-details strong { color: var(--text-color); display: inline-block; min-width: 120px; }
        .file-section { margin-top: 5px; border-top: 1px dashed var(--dark-red); padding-top: 15px; }
        .file-section h3 { color: var(--bright-red); font-size: 1.2em; margin-bottom: 10px; text-transform: uppercase; }
        .close-button { position: absolute; top: 10px; right: 15px; color: var(--dark-text-color); font-size: 1.8em; cursor: pointer; transition: color 0.2s ease-in-out; }
        .close-button:hover { color: var(--bright-red); }

        /* Адаптивные стили для мобильных устройств */
        @media (max-width: 620px) {
            .photo-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }
            .gallery-container { padding: 5px; }
            .grid-item { padding: 5px 5px 20px 5px; }
            .personal-file { padding: 15px; }
            .file-header { flex-direction: column; align-items: center; text-align: center; padding-top: 10px; }
            .file-portrait { margin-right: 0; margin-bottom: 10px; }
            .file-details strong { min-width: 70px; }
            .stamp-container { position: static; transform: none; margin-top: 15px; text-align: center;}
            .realistic-stamp { font-size: 1.8em; padding: 3px 10px; }
        }
    </style>
</head>
<body>

    <div class="gallery-container">
       
        <details class="category-section" id="human-section">
            <summary>Люди</summary>
            <button class="sort-button" data-target-grid="humanGrid">Сортировать по имени (A-Z)</button>
            <div class="photo-grid" id="humanGrid">
                <div class="grid-item" data-id="1" data-name="Emily Knight" data-thumb-url="https://psv4.userapi.com/s/v1/d2/CpKSuTbRZUwcEAlRAk9krRcl4HRGQ9v6CH6bSDe4tT429RxXJ22PJPbeggrouOMk_sj0vyCdnaMorWQvPIsdxGgs0w0QFA4Z0_tqX5YzqNeaGxm8jJuISwYxSN1-KuUQ4Blo2eQqIFqG/6.png" data-category="Human">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
                <div class="grid-item" data-id="4" data-name="Alisa Warlock" data-thumb-url="https://psv4.userapi.com/s/v1/d2/c8nWwBKDBBOU7cSx4pAvLJrRzf4MDhs958RvV0q_aIxrXdzZO6OINOvwqOncSG-JCOIeUI7jZTKCnsIO_e43gI3VyAAjSbE9EXs25sMxz1-t8Hr3bSdfgWChzDoQzlR6rfL-Mj_KVIUB/5.png" data-category="Human">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
               
             
        </details>

        <details class="category-section" id="wendigo-section">
            <summary>Вендиго</summary>
            <button class="sort-button" data-target-grid="wendigoGrid">Сортировать по имени (A-Z)</button>
            <div class="photo-grid" id="wendigoGrid">
                <div class="grid-item" data-id="101" data-name="Rick White" data-thumb-url="https://psv4.userapi.com/s/v1/d2/R7GRB01gUatadvqPHiTuSQfwpVZ4IgWhyA_MFkQUGRysE29nHFXa6HfFmh1AsnSCCP6pcoK4_uTrw69cNyYh5e7MgpKS2Zo9bcJaa_A6fhQhnD8x3ONm-4py_DP9AGkGSI_tt6TfIghR/4.png" data-category="Wendigo">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
            </div>
        </details>

        <details class="category-section" id="werewolf-section">
            <summary>Оборотни</summary>
            <button class="sort-button" data-target-grid="werewolfGrid">Сортировать по имени (A-Z)</button>
            <div class="photo-grid" id="werewolfGrid">
                <div class="grid-item" data-id="201" data-name="Alexander Lynch" data-thumb-url="https://psv4.userapi.com/s/v1/d2/de4M4nuD6WVxQj9mas-KsJ-G1xE3jOOyCNsMdfCCKLygytk-NOTY7jdA23M3P31RyCA_1iSwUvq9XwiEp27ntFOSSYiUN_75fmZL09UtFJd0OFT3FoKSXc-YY0UIOMFTfy58Hdm1Na9f/document.png" data-category="Werewolf">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
               
            </div>
        </details>

        <details class="category-section" id="vampire-section">
            <summary>Вампиры</summary>
            <button class="sort-button" data-target-grid="vampireGrid">Сортировать по имени (A-Z)</button>
            <div class="photo-grid" id="vampireGrid">
                <div class="grid-item" data-id="301" data-name="Vendla Olve" data-thumb-url="https://psv4.userapi.com/s/v1/d2/D1WskFiEXQ1BY4c0nhQxVnus5M0uufJhixOhNVi1ZXoc4yD5rD5EzH9xPbW3ZHXb56c2E2QoWOjtAoP2lu5SR7-jRvIPrNz8-fJ5xSG78FS7GTEFQnI8xC3y25dBYYFdsfbbt7pi13D1/3.png" data-category="Vampire">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
            </div>
        </details>

        <details class="category-section" id="magick-section">
            <summary>Магики</summary>
            <button class="sort-button" data-target-grid="magickGrid">Сортировать по имени (A-Z)</button>
            <div class="photo-grid" id="magickGrid">
                <div class="grid-item" data-id="401" data-name="Rebecca Wyrm" data-thumb-url="https://psv4.userapi.com/s/v1/d2/tzMqGHMgbl72lXPKIVqBn8fUpGP3Mbe7KV4m5XeD4IqhsZHVYWZ5XK071ZMAxSttm4DZ0VK8Wa5dtk7QcAHUeClWFdbWxW6B30PUB0jaWSnT5yJi1AssZH3bb1GIjsQ5zI4yDLPZUnjC/7.png" data-category="Magick">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
                <div class="grid-item" data-id="402" data-name="Christopher Cross" data-thumb-url="https://psv4.userapi.com/s/v1/d2/u7esg4s-dLs9BousOslnEyvPsheYOb60f4IauOAcXk5e9ykuXmdytsSRdVn_y2wFgW3M8RIVxICi7ZUlOMiPYAKZzd02ydT4hjK1CmVMqm5mZWl8IPL66krk6Q0Gf8uC4_iSHrtTG6Ys/2.png" data-category="Magick">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
            </div>
        </details>
       
        <details class="category-section" id="sin-section">
            <summary>Грехи</summary>
            <button class="sort-button" data-target-grid="sinGrid">Сортировать по имени (A-Z)</button>
            <div class="photo-grid" id="sinGrid">
                <div class="grid-item" data-id="501" data-name="Acadia Prosper" data-thumb-url="https://psv4.userapi.com/s/v1/d2/2nx9ukSilEtKwimP7NkaN1VaenRzAMVbrazVbp757euXVBbfD9kP8JeeomqNkBHNsceaJ-QxUWFKExNtcUdgAPdyqsEkBVcEwAUEnZSaD1obIrkk9qwOlZb2IVLXysz9PhaGJ1RxkaRq/1.png" data-category="Sin">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
                <div class="grid-item" data-id="502" data-name="Daniel Menacant" data-thumb-url="https://psv4.userapi.com/s/v1/d2/PnTmJbV8tcOCkBO9S0b5UvZRCo5XgTIjF2TRGi8uZWf17it0dJ5zzc4Gsws3GKGWM0JUX0BV2g0IriDxGd0WrT0nMIi_CRU-ecJxfE41gyfWjxQj5dde3mJUIX29WynqAo4E_b28_zB7/8.png" data-category="Sin">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
                <div class="grid-item" data-id="503" data-name="Artemis Ewail" data-thumb-url="https://psv4.userapi.com/s/v1/d2/-g3MJuFI0xHiyJGLX3rXVaSOfnRr8NMsT66tinyorQ24x-I18laxs8QgDKQTmbhe6qvBpvqFXWqRLjltpR2Be2CxzU6htxRQxUoK2KmRuAOlbBBn9NmepNYprXcVAkea3nEg4qpvY6L-/9.png" data-category="Sin">
                    <img src="" alt="Портрет">
                    <div class="name-container"></div>
                </div>
            </div>
        </details>
        </div>

    <div class="modal-overlay" id="personalFileModal">
        <div class="personal-file">
            <span class="close-button" onclick="closeModal()">&times;</span>
            <h2>Личное Дело</h2>
            <div class="file-header-wrapper">
                <div class="file-header">
                    <img src="" alt="Портрет" class="file-portrait" id="filePortrait">
                    <div class="file-details">
                        <p><strong>Имя:</strong> <span id="fileName"><a href="#" target="_blank" id="fileNameLink"></a></span></p>
                        <p><strong>Дата рождения:</strong> <span id="fileDOB"></span></p>
                        <p><strong>Возраст:</strong> <span id="fileAge"></span></p>
                    </div>
                    <div class="stamp-container">
                        <span class="realistic-stamp" id="fileStampText"></span>
                    </div>
                </div>
            </div>
            <div class="file-section"><h3>Описание:</h3><p id="fileDescription"></p></div>
            <div class="file-section"><h3>Особые приметы:</h3><p id="fileDistinguishingMarks"></p></div>
        </div>
    </div>

   
    <script>
        // =========================================================
        // !!! ОБЪЕКТ С ДАННЫМИ ПЕРСОНАЖЕЙ !!!
        // =========================================================
        const peopleData = {
            // Люди (Human)
            1: { name: "Эмили Найт", dob: "27.01.1997", age: "22", link: "https://weallscream.rusff.me/viewtopic.php?id=98#p4089", portrait: "https://psv4.userapi.com/s/v1/d2/GtMo3L-SzRqqZiOKOgD9v7y7v_yFglYFZWTZgSlvhiGNH3LdUk9V3bGPUkGSURc-kHHxxmE9Fzt-GILvRrwNB3DAIOaJmIf1kEUNXWq8lav3iHuX61ZoLpwJCT_16z9EnvrAklJsmWp9/77.png", stampText: "HUMAN", description: "Радиоведущая Godfrey's Voice с добрым сердцем и открытой душой.", distinguishingMarks: "Смольно-чёрные кудрявые волосы. Голубые глаза, полные надежды и веры в светлое будущее." },
            4: { name: "Алиса Варлок", dob: "25.01.1996", age: "23", link: "https://weallscream.rusff.me/viewtopic.php?id=397", portrait: "https://psv4.userapi.com/s/v1/d2/K6OyhbiDUBrHEIqLqVio2nIRSAsvCZLzTX7hlPVbq0CQlsuC6JdP2CHoC3ToWRJ41tsQfd4Rm3PrdJBkg9a2EC0wMDPciOv3B_8V5ZQZYWAwdbmqbWS61czp5tx-r_Ct8Ln5Ccl0KIL-/66.png", stampText: "HUMAN", description: "Редактор в газете Godfrey's Daily. Нрав кроткий. Ум острый.", distinguishingMarks: "Огненно-рыжие волосы. Глаза изумрудно-зелёные. Взгляд внимательный, выискивающий детали, как у истинного журналиста." },
     

            // Вендиго (Wendigo)
            101: { name: "Рик Уайт", dob: "10.08.1986", age: "33", link: "https://weallscream.rusff.me/viewtopic.php?id=743", portrait: "https://psv4.userapi.com/s/v1/d2/PUEGINj2F6UcdITQSGXs8lGwbDvPJueH-N9-SdXdP6JcFloHbEzz38lOUjnpcWrZWCv7RhUzn296mVuhjmOXQHig266WZyyMubbma2io49VpPSCHBbKKMRbq-tTlzmAmpcbjTsY5tWWY/55.png", stampText: "WENDIGO", description: "Агент ФБР. Прибыл в Годфри вместе с братом до того, как на город опустился купол.", distinguishingMarks: "Рост выше двух метров. Седые волосы. Шрам на лице поперёк переносицы." },
           
            // Оборотни (Werewolf)
            201: { name: "Александр Линч", dob: "12.07.1987", age: "32", link: "https://weallscream.rusff.me/viewtopic.php?id=174#p13733", portrait: "https://psv4.userapi.com/s/v1/d2/9jFCn4hj-U1lrlSyJD5z9xjRcK5NvjkySCjNnA33cNyQNfyvnNRQ8F_tWni9wJntmDd6B0ybFYKvIEd9f9vDDNwWbUiDSNSZ2DJbGlOqFcDtN1H3ndt4D8kaTdwIq89eSI4g3z3tCBuM/11.png", stampText: "WEREWOLF", description: "Полицейский. Живёт и служит в Годфри с 2016-го года. Имеет ворох ментальных проблем.", distinguishingMarks: "В последнее время часто выглядит неопрятно. После инцидента 05.11.2019, каштановые волосы полностью потеряли цвет и теперь выглядят белыми. Причёска взлохмачена, лицо опухшее, синяки под глазами. Сами глаза небесно-голубого цвета (даже в обличье волка). Взгляд потухший, уставший." },

            // Вампиры (Vampire)
            301: { name: "Венера Лав", dob: "01.05.1472", age: "19/544", link: "https://weallscream.rusff.me/viewtopic.php?id=417#p38706", portrait: "https://psv4.userapi.com/s/v1/d2/me7skQ-howLFo8OZzartTArHmqVh69FYA9NL4ulbdLvFZwctijlEt3HGG0zX_SmMEiLe8yqi6o3fCvNnO5NgaD3pNMUzCtdpjiqNYFDTvIG3vHneMFSd3oS_FcK5Z5xMJFd5sdRAB_AW/44.png", stampText: "VAMPIRE", description: "Певица в борделе Fetichisme. Находится под опекой Ареты Лав. Одна из немногочисленных на сегодняшний день древних вампиров.", distinguishingMarks: "Рыжие волосы, вьющиеся мелкими длинными кудрями. Гетерохромия. Выглядит молодо: застывшая на грани совершеннолетия. Не обмануться её внешним видом могут помочь всегда удлинённые клыки, выступающие над пухлой нижней губой." },

            // Магики (Magick)
            401: { name: "Пифия Лагонико", dob: "15.07.1989", age: "30", link: "https://weallscream.rusff.me/viewtopic.php?id=213", portrait: "https://psv4.userapi.com/s/v1/d2/KfJ-V2KFmPIQtmjf-YPAQC9JTceCP9GpwAqQ5uHLNiu66H7MlWu2XsJ1O6e7LT2K6PQpNzCA5JpO7oZrdFqCZ-WK-Yh1ZgfmMKmnYMV5QEt7YRVFQ7O89fCv9P-BWzVbysFyygvmFwZZ/88.png", stampText: "MAGICK", description: "Телепат. Есть способности к Пиромантии. Частный детектив. Имеет в Годфри много связей и знакомых, как старых, так и новых.", distinguishingMarks: "Яркие рыжие волосы. Карие глаза. Лицо и тело усыпаны веснушками. За располагающим внешним видом скрывается огненная фурия. Помимо веснушек на её теле много шрамов, за каждым из которых скрыта своя кровавая история." },
            402: { name: "Кристофер Кросс", dob: "19.11.1983", age: "36", link: "https://weallscream.rusff.me/viewtopic.php?id=618", portrait: "https://psv4.userapi.com/s/v1/d2/HTfLQfwNRnjQnnzKAuIWI6gT8x7x1IpTzUPKJHPecAPjKAwr86TloJ4LwCKvceHjj-Zgt7vuz99r43SJbDyGeahviMtlw9MUTFK-IZabrvxRHu2vd9tYgeQxy_8djlcWz6B9EVLofuf7/33.png", stampText: "MAGICK", description: "Некромант. Увлекается Зельеварением. Управляющий похоронным бюро In Our Memory. Владеет частью земли на городском кладбище.", distinguishingMarks: "Ярко-красные волосы, модная стрижка. Всегда опрятен, и перед клиентами предстаёт обычно в официальном костюме. На обоих предплечьях татуировки профиля Некромантии, дополненные узорами. Два прокола в хряще левого уха. Мочки ушей так же проколоты." },

            // НОВЫЙ РАЗДЕЛ: Грехи (Sin)
            501: { name: "Акедия Проспер", dob: "21.12.1987", age: "32", link: "https://weallscream.rusff.me/viewtopic.php?id=643", portrait: "https://psv4.userapi.com/s/v1/d2/uCRt-_X6W-5aWwJNk7246QByOHGLABU3_6cvbP4xYdZfyvmgy3oreW1cJ4dyb0sjilxkGVB1HMcvHdCeemkxUubJRG88sFqINdHTbnrrvi7hCVoxmkHy2iVAfxwt1Smzy7Z17qJzzfPp/22.png", stampText: "SIN", description: "Тень, легко пропадающая из поля зрения и из памяти. В Годфри около десяти лет. О своём прошлом говорит размыто, общими фразами. При общении производит впечатление внимательного собеседника. Работает в салоне красоты.", distinguishingMarks: "С виду невозможно сходу определить пол, поскольку внешне гендерные особенности размыты. Одежда обычно мешковатая, не подчёркивающая фигуру. Волосы каштановые. Глаза зелёно-голубые." },
            502: { name: "Даниэль Мюнесон", dob: "5.10.1997", age: "22", link: "https://weallscream.rusff.me/viewtopic.php?id=102", portrait: "https://psv4.userapi.com/s/v1/d2/ru-aok4LLVjuubA2uoZ109U14k-DHxBeFUur_YIoGmraDlciqSAZa250fvCKA0WmngGCiTMiOFVpAKx39J_EkyHA9vC1lFaNku-Xex57zxI8gOoOxcdPbs4bPplSQTlJLL5anyjUSn-C/99.png", stampText: "SIN", description: " Был добрым парнем, состоял в отношениях, учился в колледже и вёл вполне обычную жизнь, пока не пробудился в Гнева. С тех пор его характер изменился, и он поселился на кладбище, где и работает. Умеренно агрессивен, источает ауру человека, с которым не стоит связываться.", distinguishingMarks: "Тёмные волосы, часто зачёсанные назад, карие глаза. Любит пиво, много курит. Вид угрюмый, взгляд тяжёлый." },
            503: { name: "Артемис Ивейл", dob: "15.08.1992", age: "29", link: "https://weallscream.rusff.me/viewtopic.php?id=601", portrait: "https://psv4.userapi.com/s/v1/d2/4ml4tBWS5C4Kk0S3w2kwjwWf2uIeGaaf-3rcmejfUXsX-YNjS8XVw5UwhTRQitnITCLQ7E0L_WjBJHewfHs86BFba1NP-CynAMG34d0-4yjdK5rAT8EnmWC3AB2VaPbamQA9VO3gQZod/00.png", stampText: "SPIRIT", description: "В прошлом обычный человек с непростой судьбой. Раньше работал в полиции. По злому стечению обстоятельств был обращён в Духа Гнева и теперь одержим идеей насадить в Городе справедливость любыми способами.", distinguishingMarks: "Рост два метра. Телосложение худощавое. Волосы белоснежные. На лице красуются огромные шрамы от когтей. Левый глаз затянут бельмом, незрячий. Правый глаз голубого цвета." }

        };

        // =========================================================
        // --- ОСНОВНАЯ ЛОГИКА СКРИПТА (НЕ МЕНЯТЬ) ---
        // =========================================================

        const personalFileModal = document.getElementById('personalFileModal');
        const personalFileContent = personalFileModal.querySelector('.personal-file');
       
        // Получение ссылок на элементы модального окна
        const filePortrait = document.getElementById('filePortrait');
        const fileNameLink = document.getElementById('fileNameLink');
        const fileDOB = document.getElementById('fileDOB');
        const fileAge = document.getElementById('fileAge');
        const fileDescription = document.getElementById('fileDescription');
        const fileDistinguishingMarks = document.getElementById('fileDistinguishingMarks');
        const fileStampText = document.getElementById('fileStampText');

        // Глобальный объект для хранения направления сортировки для каждой сетки
        const sortDirections = {};

        // Функция для разделения имени/фамилии на две строки
        function splitName(fullName) {
            const parts = fullName.split(' ');
            const firstName = parts[0] || '';
            const lastName = parts.slice(1).join(' ') || '';
            return { firstName, lastName };
        }
       
        // Функция для заполнения имени на полароидной карточке
        function updatePolaroidName(item) {
            const personName = item.dataset.name;
            const nameContainer = item.querySelector('.name-container');
            if (nameContainer) {
                const { firstName, lastName } = splitName(personName);
                nameContainer.innerHTML =
                    `<span class="polaroid-name-line">${firstName}</span>` +
                    `<span class="polaroid-name-line">${lastName}</span>`;
            }
        }
       
        /**
         * Сортирует конкретную галерею по фамилии (последнему слову в data-name).
         * @param {HTMLElement} button - Кнопка сортировки.
         */
        function sortGalleryByName(button) {
            const gridId = button.dataset.targetGrid;
            const container = document.getElementById(gridId);
            if (!container) return;
           
            let currentDirection = sortDirections[gridId] || 'asc';

            let items = Array.from(container.querySelectorAll('.grid-item'));

            items.sort((a, b) => {
                // Сортируем по фамилии (последнее слово в имени)
                const nameA = a.dataset.name.split(' ').slice(-1)[0];
                const nameB = b.dataset.name.split(' ').slice(-1)[0];
               
                // Используем локаль для корректной сортировки русских букв
                const comparison = nameA.localeCompare(nameB, ['ru', 'en'], { sensitivity: 'base' });

                return currentDirection === 'asc' ? comparison : -comparison;
            });

            // Перестраиваем сетку
            container.innerHTML = '';
            items.forEach(item => {
                container.appendChild(item);
            });
           
            // Обновляем направление и текст кнопки
            const newDirection = currentDirection === 'asc' ? 'desc' : 'asc';
            sortDirections[gridId] = newDirection;
            button.textContent = newDirection === 'asc'
                ? 'Сортировать по имени (A-Z)'
                : 'Сортировать по имени (A-Z)';
        }

        /**
         * Открывает модальное окно и позиционирует его по кликнутому полароиду.
         */
        function openModal(personId, clickedElement) {
            const person = peopleData[personId];
            if (person) {
                // Заполнение данных модального окна
                filePortrait.src = person.portrait;
                fileNameLink.textContent = person.name;
                fileNameLink.href = person.link || '#';
                fileDOB.textContent = person.dob;
                fileAge.textContent = person.age;
                fileDescription.textContent = person.description;
                fileDistinguishingMarks.textContent = person.distinguishingMarks;
                fileStampText.textContent = person.stampText || '';
               
                // --- ЛОГИКА ТОЧНОГО ПОЗИЦИОНИРОВАНИЯ ---
                const rect = clickedElement.getBoundingClientRect();
               
                personalFileModal.style.alignItems = 'flex-start';
                const newMarginTop = Math.max(20, rect.top);
               
                personalFileContent.style.marginTop = newMarginTop + 'px';
                personalFileContent.style.marginBottom = '20px';
                // --- КОНЕЦ ЛОГИКИ ПОЗИЦИОНИРОВАНИЯ ---

                personalFileModal.style.display = 'flex';
                document.body.style.overflow = 'hidden';
            }
        }

        /**
         * Закрывает модальное окно и восстанавливает стили.
         */
        function closeModal() {
            personalFileModal.style.display = 'none';
            document.body.style.overflow = '';
           
            personalFileContent.style.marginTop = '20px';
            personalFileModal.style.alignItems = 'center';
        }

        function initializeGallery() {
            const gridItems = document.querySelectorAll('.grid-item');
            const sortButtons = document.querySelectorAll('.sort-button');
           
            // 1. Инициализация всех полароидов
            gridItems.forEach(item => {
                const personId = item.dataset.id;
                const thumbUrl = item.dataset.thumbUrl;

                const imgElement = item.querySelector('img');
                if (imgElement && thumbUrl) {
                    imgElement.src = thumbUrl;
                }
               
                updatePolaroidName(item);

                item.addEventListener('click', () => {
                    openModal(personId, item);
                });
            });
           
            // 2. Инициализация кнопок сортировки
            sortButtons.forEach(button => {
                sortDirections[button.dataset.targetGrid] = 'asc';
               
                button.addEventListener('click', () => {
                    sortGalleryByName(button);
                });
            });
           
            // 3. Сортировка при открытии сворачиваемой секции
            const sections = document.querySelectorAll('.category-section');
            sections.forEach(section => {
                section.addEventListener('toggle', () => {
                    if (section.open) {
                        const gridId = section.querySelector('.sort-button').dataset.targetGrid;
                        const button = section.querySelector('.sort-button');
                       
                        // Если сортировка еще не была выполнена
                        if (sortDirections[gridId] === 'asc') {
                             sortGalleryByName(button);
                             sortGalleryByName(button);
                        }
                    }
                });
            });
        }
       
        // Закрытие по клику на фон (оверлей)
        personalFileModal.addEventListener('click', (event) => {
            if (event.target === personalFileModal) {
                closeModal();
            }
        });
       
        // Запуск инициализации при загрузке страницы
        initializeGallery();

    </script>

</body>
</html>[/html]

Персонажи, относящиеся к расе Эксперимент-17 не имеют в доступе личных дел. Если вы хотите создать персонажа этой расы, уточните такую возможность у АМС.