[html]<style>
/* ОСНОВНОЙ КОНТЕЙНЕР (ПАПКА) */
.timeline-folder {
display: flex;
max-width: 850px;
height: 550px;
margin: 20px auto;
background: #0f0f0f;
border: 2px solid #D4AF37;
border-radius: 10px 15px 15px 10px;
box-shadow: 5px 5px 15px rgba(0,0,0,0.5);
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
overflow: hidden;
}
/* ЛЕВАЯ ПАНЕЛЬ (ВКЛАДКИ) */
.tl-tabs {
width: 150px;
background: #0f0f0f;
display: flex;
flex-direction: column;
padding-top: 30px;
border-right: 1px solid #222;
}
.tl-tab-btn {
background: transparent;
color: #fff;
border: none;
padding: 15px 15px;
text-align: left;
font-size: 15px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
border-left: 4px solid transparent;
position: relative;
}
.tl-tab-btn:hover {
color: #D4AF37;
}
/* АКТИВНАЯ ВКЛАДКА (СЛИВАЕТСЯ С БЕЛЫМ ЛИСТОМ) */
.tl-tab-btn.active {
background: #ffffff;
color: #000;
border-left: 4px solid #D4AF37;
border-radius: 10px 0 0 10px;
}
/* ПРАВАЯ ПАНЕЛЬ (СОДЕРЖИМОЕ) */
.tl-content {
flex: 1;
background: #ffffff;
position: relative;
overflow: hidden;
}
.tl-pane {
display: none;
padding: 30px;
height: 100%;
overflow-y: auto;
box-sizing: border-box;
}
.tl-pane.active {
display: block;
animation: fadeIn 0.5s ease;
}
/* КАСТОМНЫЙ СКРОЛЛБАР */
.tl-pane::-webkit-scrollbar { width: 8px; }
.tl-pane::-webkit-scrollbar-track { background: #f0f0f0; border-radius: 4px; }
.tl-pane::-webkit-scrollbar-thumb { background: #D4AF37; border-radius: 4px; }
/* БЛОКИ ЭПИЗОДОВ */
.tl-item {
background: #fafafa;
border-left: 3px solid #0f0f0f;
margin-bottom: 20px;
padding: 15px 20px;
border-radius: 0 8px 8px 0;
box-shadow: 2px 2px 5px rgba(0,0,0,0.05);
transition: transform 0.2s;
}
.tl-item:hover {
transform: translateX(5px);
border-left-color: #D4AF37;
}
/* ЗАГОЛОВОК БЛОКА (ДАТА + ССЫЛКА) */
.tl-item-head {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px dashed #ccc;
padding-bottom: 8px;
margin-bottom: 8px;
}
.tl-date {
font-weight: 800;
color: #0f0f0f;
font-size: 15px;
}
.tl-link {
color: #0f0f0f;
text-decoration: none;
font-weight: bold;
font-size: 16px;
transition: color 0.3s;
}
.tl-link:hover {
color: #D4AF37;
}
/* ФОРМАТ И СТАТУС */
.tl-meta {
display: flex;
gap: 10px;
font-size: 11px;
text-transform: uppercase;
font-weight: bold;
letter-spacing: 0.5px;
}
.tag-format { background: #eee; color: #555; padding: 3px 8px; border-radius: 4px; }
/* Цвета статусов */
.tag-done { background: #0f0f0f; color: #fff; padding: 3px 8px; border-radius: 4px; }
.tag-process { background: #D4AF37; color: #fff; padding: 3px 8px; border-radius: 4px; }
.tag-frozen { background: #fff; color: #0f0f0f; border: 1px solid #0f0f0f; padding: 2px 7px; border-radius: 4px; }
/* ОПИСАНИЕ ЭПИЗОДА */
.tl-desc {
margin-top: 12px;
padding-top: 10px;
border-top: 1px dotted #e0e0e0;
font-size: 13px;
color: #333;
line-height: 1.5;
text-align: justify;
}
/* ЗАБЛОКИРОВАННЫЙ БЛОК */
.tl-item.locked {
background: #ececec;
border-left: 3px solid #888;
background-image: repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(0,0,0,0.03) 10px, rgba(0,0,0,0.03) 20px);
}
.tl-item.locked .tl-date { color: #555; }
.tl-item.locked .tl-link { color: #555; }
.tl-item.locked .tl-desc { color: #555; border-top: 1px dotted #ccc; }
.tl-lock-icon { color: #D4AF37; margin-right: 5px; }
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* Адаптивность для узких экранов */
@media (max-width: 600px) {
.timeline-folder { flex-direction: column; height: 700px; }
.tl-tabs { width: 100%; flex-direction: row; padding-top: 0; border-right: none; border-bottom: 2px solid #D4AF37; overflow-x: auto;}
.tl-tab-btn { border-left: none; border-bottom: 4px solid transparent; text-align: center; white-space: nowrap; }
.tl-tab-btn.active { border-radius: 10px 10px 0 0; border-left: none; border-bottom: 4px solid #D4AF37; }
.tl-item-head { flex-direction: column; align-items: flex-start; gap: 5px; }
}
</style>
<div class="timeline-folder">
<!-- ВКЛАДКИ -->
<div class="tl-tabs">
<button class="tl-tab-btn active" onclick="openYear(event, 'past')">Прошлое</button>
<button class="tl-tab-btn" onclick="openYear(event, 'y2025')">2025</button>
<button class="tl-tab-btn" onclick="openYear(event, 'y2026')">2026</button>
<button class="tl-tab-btn" onclick="openYear(event, 'y2027')">2027</button>
<button class="tl-tab-btn" onclick="openYear(event, 'alt')">Альтернативы</button>
</div>
<!-- КОНТЕНТ -->
<div class="tl-content">
<!-- ПРОШЛОЕ -->
<div id="past" class="tl-pane active">
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">27 декабря 2024</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=358" class="tl-link">Адаптационный синдром</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Адриан не так давно попал в академию. Документы, проверки... Психологическая диагностика. Так он попадает на беседу к психологу София Тарро.
</div>
</div>
</div>
<!-- 2025 -->
<div id="y2025" class="tl-pane">
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">6 января</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=314" class="tl-link">At the edge of singularity. Pt. I</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-done">Завершен</span>
</div>
<div class="tl-desc">
Первый день в классе. Чувство дискомфорта и отчужденности. Первая встреча со своим фамильяром и желание провалиться под землю.
</div>
</div>
<!-- ЗАБЛОКИРОВАННЫЙ БЛОК -->
<div class="tl-item locked">
<div class="tl-item-head">
<span class="tl-date">8 января</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=412" class="tl-link">Srocze przygody</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-frozen">Заморожен. Отменен</span>
</div>
<div class="tl-desc">
Адриан и Вивьен не поладили сразу. И очевидно, что Рук был последним, кого Адриан предпочел бы поймать в своей комнате за кражей. Не перегнул ли он палку, не позволяя Вивьену выйти, даже истекая кровью?.. А к черту, все равно все теперь отмывать.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">7 апреля</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=407" class="tl-link">Царапины</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Прошлое продолжает нагонять, сколько от него не беги. Головные боли и следы абстиненции. Кто-то замечает. Все понимает. Бессмысленно отрицать. Хотя, пересекаясь во время перерыва с Селиной, Адриан и отчаянно пытается. У них завязывается разговор и они раскуривают сигуреты.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">5 мая</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=314" class="tl-link">At the edge of singularity. Pt. II</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-done">Завершен</span>
</div>
<div class="tl-desc">
Адриан долго откладывал эту встречу, сделал все, чтобы измениться, стать лучше, прежде чем решился пригласить Гленна в Оранжерею и переговорить с ним о Связи. Фингал под глазом — не то, чем он рассчитывал закончить.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">9 мая</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=522" class="tl-link">Практика философии добра и зла</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Конец занятий. Все спокойно, когда в кабинет вламывается Курт и обвиняет Эдана в краже телефона. Адриан встает на защиту одногруппника, но скоро осознает, что все далеко не так просто, как казалось на первый взгляд.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">23 мая</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=364" class="tl-link">Endurance</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-done">Завершен</span>
</div>
<div class="tl-desc">
Адриан застает Гленна в спортивном зале. Он знал, что найдет его здесь. Не впервые замечал, куда он направляется после занятий, и вот решился. Гленн помогает Адриану освоиться, но им все еще тяжело найти общий язык. Несмотря на это, Гленн соглашается помогать Адриану в тренировках.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">Летние каникулы</span>
</div>
<div class="tl-meta">
<span class="tag-format">Иное</span>
</div>
<div class="tl-desc">
В течение лета Адриан сдает долги по учебе, нагоняет программу и все более погружается в атмосферу Академии. Он хочет добиться большего, занять место в этом мире, но понимает, что не может сделать это в одиночку. Он ждёт начала учебных будней, чтобы встретиться с Гленном. В это время он также помогает персоналу и занимается выполнением их мелких поручений. Договаривается с Никодимом Беркой о том, чтобы с началам учебы он подвозил его в ближайшую церковь на воскресные мессы.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">27 августа</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=541" class="tl-link">Bring the lion out</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Гленн приезжает заранее, чтобы устроиться в автошколу и подготовиться к обучению и обнаруживает, что Адриан заселился в его комнату. Адриан решает помочь ему в подготовке, кроме того, он берется за то, чтобы основательно поработать над укреплением связи и выбросами Гленна из звериной формы. Результаты его не удовлетворяют. Он заставляет себя раз за разом забывать о милосердии в погоне за чем-то большим.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">1 сентября</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=627" class="tl-link">Бесконечные повороты</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Адриан сталкивается с одним из новеньких — Дорианом Дерденом. Он не он, если не попытается помочь ему освоиться в Академии.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">7 октября</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=615" class="tl-link">honest</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Адриан застает Кароля и Мэтта за интимной ситуацией в библиотеке. Он не вмешивается, но старые раны уже потревожены. После завершения собрания дисциплинарной комиссии Адриан подходит к Каролю, чтобы поговорить с ним.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">15 октября</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=553#p107721" class="tl-link">In the grove is a heart that's still in slumber</a>
</div>
<div class="tl-meta">
<span class="tag-format">Зарисовка</span>
<span class="tag-done">Завершена</span>
</div>
<div class="tl-desc">
Адриан и Гленн выполняют вместе задание по теории Связи и отправляются на вылазку, чтобы сделать фотографии белохвостых оленей.
</div>
</div>
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">31 октября</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=341" class="tl-link">Ночь сорванных замков</a>
</div>
<div class="tl-meta">
<span class="tag-format">Эпизод</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
Норберт, Адриан и Глен находились в одной из алхимических лабораторий, когда тишину разорвала система оповещения.<br>
Свет несколько раз мигнул, множество экранчиков на входах лабораторий вспыхнули красным цветом, погасли, а затем вспыхнули вновь, выдавая короткое сообщение об аварийной изоляции сектора. Почти сразу за этим с глухим металлическим ударом захлопнулись ударопрочные двери. Магические руны вторили монитором, активируя печати, отсекающие коридоры, лифты и лаборатории друг от друга.<br>
Где-то в глубине корпуса прошёлся низкий гул, словно по стенам пропустили ток. Лаборатория оказалась отрезана от остальной Академии. Связь в ней нестабильна, автоматика живёт своей собственной логикой, а за стеклянными перегородками медленно приходят в движение механизмы безопасности.
</div>
</div>
</div>
<!-- 2026 -->
<div id="y2026" class="tl-pane">
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">14 февраля</span>
<a href="https://kindredspirits.ru/viewtopic.php?id=553#p107721" class="tl-link">The curiosity killed the cat...</a>
</div>
<div class="tl-meta">
<span class="tag-format">Зарисовка</span>
<span class="tag-done">Завершена</span>
</div>
<div class="tl-desc">
Адриан хочет устроить "хороший вечер". Сомнительными способами: заманить и оглушить Гленна, связать его, чтобы он не ушел. Похоже, весь мир пытается намекнуть ему, что он перегибает.
</div>
</div>
</div>
<!-- 2027 -->
<div id="y2027" class="tl-pane">
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">...</span>
<span class="tl-link">...</span>
</div>
<div class="tl-meta">
<span class="tag-format">...</span>
</div>
<div class="tl-desc">
...
</div>
</div>
</div>
<!-- АЛЬТЕРНАТИВЫ -->
<div id="alt" class="tl-pane">
<div class="tl-item">
<div class="tl-item-head">
<span class="tl-date">AU</span>
<a href="ССЫЛКА" class="tl-link">...</a>
</div>
<div class="tl-meta">
<span class="tag-format">Зарисовка</span>
<span class="tag-process">В процессе</span>
</div>
<div class="tl-desc">
</div>
</div>
</div>
</div>
</div>
<script>
function openYear(evt, yearName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tl-pane");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
tabcontent[i].classList.remove("active");
}
tablinks = document.getElementsByClassName("tl-tab-btn");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(yearName).style.display = "block";
document.getElementById(yearName).classList.add("active");
evt.currentTarget.className += " active";
}
</script>[/html]
Отредактировано Adrian Elita-Lichtenberg (21-06-2026 01:29:06)