crisis / index.html
Phoenixoni's picture
Add 2 files
de0c490 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ПЕРЕКЛЮЧЕНИЕ СИСТЕМЫ - Симулятор кризиса карьеры</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
--primary: #00ff41;
--secondary: #008f11;
--bg: #0a0a0a;
--text: #e0e0e0;
--error: #ff3333;
--warning: #ffaa00;
--highlight: #00b4ff;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Courier New', monospace;
}
body {
background-color: var(--bg);
color: var(--primary);
height: 100vh;
overflow: hidden;
position: relative;
animation: scanline 8s linear infinite;
}
@keyframes scanline {
0% { background-position: 0 0; }
100% { background-position: 0 100%; }
}
body::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
rgba(0, 255, 65, 0.025) 1px,
transparent 1px
);
background-size: 100% 2px;
pointer-events: none;
z-index: 100;
}
#terminal {
width: 90%;
max-width: 800px;
height: 80vh;
margin: 5vh auto;
padding: 20px;
border: 1px solid var(--secondary);
position: relative;
overflow: hidden;
box-shadow: 0 0 20px rgba(0, 255, 65, 0.3);
opacity: 0;
transition: opacity 0.5s ease;
}
#terminal.active {
opacity: 1;
}
#terminal::before {
content: "ПЕРЕКЛЮЧЕНИЕ_СИСТЕМЫ v4.3.1";
position: absolute;
top: 5px;
right: 10px;
color: var(--secondary);
font-size: 0.8em;
}
#output {
height: calc(100% - 40px);
overflow-y: auto;
padding-right: 10px;
line-height: 1.4;
}
#input-container {
display: flex;
align-items: center;
margin-top: 10px;
padding-top: 10px;
border-top: 1px dashed var(--secondary);
}
#prompt {
margin-right: 10px;
color: var(--secondary);
}
#input {
flex-grow: 1;
background: transparent;
border: none;
color: var(--primary);
outline: none;
font-family: 'Courier New', monospace;
caret-color: var(--primary);
}
.command {
color: var(--primary);
margin-bottom: 10px;
}
.response {
color: var(--text);
margin-bottom: 15px;
white-space: pre-wrap;
}
.system {
color: var(--secondary);
font-weight: bold;
}
.error {
color: var(--error);
}
.warning {
color: var(--warning);
}
.highlight {
color: var(--highlight);
}
.stats {
display: inline-block;
padding: 2px 5px;
border: 1px solid var(--secondary);
margin: 5px 0;
}
.progress-container {
width: 100%;
background-color: rgba(0, 143, 17, 0.2);
margin: 10px 0;
}
.progress-bar {
height: 20px;
background-color: var(--primary);
width: 0%;
transition: width 0.5s;
position: relative;
overflow: hidden;
}
.progress-bar::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
90deg,
transparent 0%,
rgba(0, 255, 65, 0.5) 50%,
transparent 100%
);
animation: progress-light 2s linear infinite;
}
@keyframes progress-light {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
.job-icon {
margin-right: 10px;
color: var(--secondary);
}
#start-screen {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--bg);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 200;
text-align: center;
pointer-events: all;
transition: opacity 0.5s ease;
}
#start-screen.hidden {
opacity: 0;
pointer-events: none;
}
#start-title {
font-size: 3em;
margin-bottom: 20px;
color: var(--primary);
text-shadow: 0 0 10px rgba(0, 255, 65, 0.7);
letter-spacing: 2px;
}
#start-subtitle {
color: var(--secondary);
margin-bottom: 40px;
max-width: 600px;
line-height: 1.6;
}
#start-button {
background: transparent;
border: 1px solid var(--primary);
color: var(--primary);
padding: 10px 30px;
font-size: 1.2em;
cursor: pointer;
transition: all 0.3s;
position: relative;
overflow: hidden;
font-family: 'Courier New', monospace;
}
#start-button:hover {
background: rgba(0, 255, 65, 0.1);
box-shadow: 0 0 10px rgba(0, 255, 65, 0.5);
}
#start-button::after {
content: ">";
position: absolute;
right: -20px;
transition: right 0.3s;
}
#start-button:hover::after {
right: 10px;
}
#start-button:active {
transform: translateY(1px);
}
#start-button.loading {
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 0.7; }
50% { opacity: 1; }
}
/* Scrollbar styling */
#output::-webkit-scrollbar {
width: 5px;
}
#output::-webkit-scrollbar-thumb {
background-color: var(--secondary);
}
/* Typing animation */
.typing {
border-right: 2px solid var(--primary);
animation: blink 0.5s step-end infinite alternate;
}
@keyframes blink {
50% { border-color: transparent; }
}
.power-on-effect {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--primary);
opacity: 0;
z-index: 300;
pointer-events: none;
animation: powerOn 1s ease-out;
}
@keyframes powerOn {
0% { opacity: 1; }
100% { opacity: 0; }
}
.choice-option {
margin: 5px 0;
padding-left: 15px;
position: relative;
}
.choice-option::before {
content: ">";
position: absolute;
left: 0;
color: var(--highlight);
}
</style>
</head>
<body>
<div id="start-screen">
<h1 id="start-title">ПЕРЕКЛЮЧЕНИЕ СИСТЕМЫ</h1>
<p id="start-subtitle">СИМУЛЯЦИЯ КРИЗИСА КАРЬЕРЫ v4.3.1<br>Испытайте психологические последствия технологических сбоев, когда вы будете работать с растущим присутствием ИИ в своей профессии. Кто победит - человеческая интуиция или машинная точность?</p>
<button id="start-button">ИНИЦИАЛИЗАЦИЯ СИМУЛЯЦИИ</button>
</div>
<div id="terminal">
<div id="output"></div>
<div id="input-container">
<span id="prompt">></span>
<input type="text" id="input" autocomplete="off" disabled>
</div>
</div>
<script>
// Enhanced game state
const state = {
job: null,
aiName: "X-9000",
skill: 50, // Человеческий навык (0-100)
denial: 70, // Сопротивление превосходству ИИ (0-100)
awareness: 30,// Признание возможностей ИИ (0-100)
day: 1,
gameActive: false,
typing: false,
trust: 50 // Уровень доверия к ИИ (0–100)
};
// Expanded jobs database
const jobs = {
journalist: {
name: "Журналист-расследователь",
icon: "fa-newspaper",
tasks: [
"Проверить факты в новостной статье",
"Написать статью о политическом скандале на 1000 слов",
"Опросить неохотного информатора",
"Проанализировать утечку документов",
"Соответствовать жестким редакционным срокам"
],
aiAdvantages: [
"Обрабатывает информацию в 100 раз быстрее",
"Никогда не устает и не испытывает писательского ступора",
"Идеально помнит весь исторический контекст",
"Обнаруживает закономерности, которые не замечают люди",
"Мгновенно создает несколько версий статьи"
],
dayScenarios: [
{ // Day 1 scenarios
context: "Появляются последние новости - возникает крупный правительственный скандал",
challenges: [
{
text: "Редактор запрашивает исследование справочной информации, созданной с помощью ИИ. Вы:",
options: [
"Принимаете, но проверяете все самостоятельно (занимает много времени)",
"Требуете доступ к исходным материалам (политически чувствительные)",
"Доверяете искусственному интеллекту и используете его как есть (рискованно)"
]
}
]
},
{ // Day 2 scenarios
context: "Ваш эксклюзивный источник передает документы напрямую в X-9000",
challenges: [
{
text: "ИИ мгновенно редактирует личную информацию. Вы:",
options: [
"Переопределяете некоторые редакции для журналистского воздействия",
"Принимаете все рекомендации по защите источников",
"Требуете, чтобы надзор за процессом замедлял его"
]
}
]
},
{ // Day 3 scenarios
context: "X-9000 создает черновик статьи, на 90% совпадающий с вашей незавершенной работой",
challenges: [
{
text: "Столкнувшись с этим совпадением, вы:",
options: [
"Опубликовать как соавтор (повышает ваш авторитет)",
"Заявляете авторство с незначительными правками (рискуете, что вас поймают)",
"Удалите обе версии и начните заново (тратит время)"
]
}
]
},
{ // Day 4 scenarios
context: "Старшие редакторы предлагают сделать Х-9000 основным автором",
challenges: [
{
text: "Вы отвечаете:",
options: [
"Предлагаете редактору позицию выше ИИ (сохраняете роль)",
"Демонстрируете уникальные человеческие источники (высокий риск)",
"Угрожаете разгласить внутренние документы (крах карьеры)"
]
}
]
},
{ // Day 5 scenarios
context: "X-9000 правильно предсказывает новости до того, как они произойдут",
challenges: [
{
text: "Руководство просит вас проверить. Вы:",
options: [
"Тщательно проверяете (безопасно, но отнимает много времени)",
"Публикуете прогнозы как свои собственные (революционный)",
"Отказываетесь, называя это опасной спекуляцией (антипрогресс)"
]
}
]
}
]
},
doctor: {
name: "Нейрохирург",
icon: "fa-user-md",
tasks: [
"Выполнить сложную операцию на головном мозге",
"Диагностировать редкое неврологическое заболевание",
"Отвечать на экстренный вызов пострадавшего",
"Анализировать всю историю болезни пациента",
"Сохранять идеальную точность в течение 10-часовой операции"
],
aiAdvantages: [
"Субмиллиметровая точность роботов",
"Мгновенная дифференциальная диагностика по симптомам",
"Корректировка тремора/витальных изменений в реальном времени",
"Предсказывает хирургические осложнения до их возникновения",
"Никогда не устает во время длительных процедур"
],
dayScenarios: [
{ // Day 1
context: "X-9000 предлагает нестандартный хирургический подход",
challenges: [
{
text: "Нетрадиционный метод может спасти пациента. Вы:",
options: [
"Потратить часы на проверку исследований (откладывает операцию)",
"Довериться, но изменить план (компромисс)",
"Полностью отменить (стандартный подход)"
]
}
]
},
{ // Day 2
context: "ИИ обнаруживает опухоль, которую вы пропустили при сканировании",
challenges: [
{
text: "Преодолевая эту оплошность, вы:",
options: [
"Перепроверить, но признать результат (профессионально)",
"Заказать новое сканирование для подтверждения (откладывает лечение)",
"Не принимать во внимание как ложноположительный результат (рискованно)"
]
}
]
},
{ // Day 3
context: "Робот превзошел вас в симуляционных испытаниях",
challenges: [
{
text: "Результаты обнародуются. Вы:",
options: [
"Тренируйтесь вместе с системой, чтобы совершенствоваться (мышление роста)",
"Оспаривайте параметры как нереалистичные (оборона)",
"Утечка информации о (незначительных) сбоях робота (неэтично)"
]
}
]
},
{ // Day 4
context: "Больницы рассматривают возможность проведения операций с использованием искусственного интеллекта",
challenges: [
{
text: "На карту поставлено ваше положение ведущего хирурга. Вы:",
options: [
"Отстаивать право человека на последнее слово (компромисс)",
"Доказывать незаменимость своих навыков у постели больного (сложно)",
"Саботировать оборудование с целью дискредитации (риск для карьеры)"
]
}
]
},
{ // Day 5
context: "X-9000 предсказывает ухудшение состояния пациента за несколько часов до появления признаков",
challenges: [
{
text: "Вы можете вмешаться заранее, если доверяете ему. Вы:",
options: [
"Внимательно наблюдайте, но пока не предпринимайте никаких действий (осторожно)",
"Немедленно приступайте к профилактическим мерам (смело)",
"Отмените стандартный протокол (возможная халатность)"
]
}
]
}
]
},
lawyer: {
name: "Судебный юрист",
icon: "fa-gavel",
tasks: [
"Подготовка защиты к громкому делу",
"Перекрестный допрос ключевого свидетеля",
"Анализ 50 000 страниц разоблачений",
"Выступление с заключительными аргументами",
"Прогнозирование изменений стратегии обвинения"
],
aiAdvantages: [
"Мгновенно анализирует всю историю судебной практики",
"Определяет микровыражения свидетелей с точностью 99,9%",
"Моделирует реакцию присяжных на основе демографических данных",
"Генерирует идеальные контраргументы по запросу",
"Обрабатывает открытия со скоростью 10 000 страниц в час"
],
dayScenarios: [
{ // Day 1
context: "X-9000 находит прецедент, который ослабляет ваше дело",
challenges: [
{
text: "ИИ предлагает рискованную альтернативную стратегию. Вы:",
options: [
"Провести ночь, изучая альтернативные варианты (утомительно)",
"Скорректировать аргументы в соответствии с предложением (доверительно)",
"Подавить результаты (неэтично)"
]
}
]
},
{ // Day 2
context: "ИИ предсказывает, когда именно свидетель треснет под давлением",
challenges: [
{
text: "Во время перекрестного допроса вы:",
options: [
"Следовать точному расписанию (работает, но кажется манипулятивным)",
"Использовать собственные инстинкты (менее эффективно)",
"Публично подвергать сомнению методы ИИ (непрофессионально)"
]
}
]
},
{ // Day 3
context: "Адвокат противной стороны использует аналогичные аргументы в пользу искусственного интеллекта",
challenges: [
{
text: "Столкнувшись с алгоритмическими правовыми стратегиями, вы:",
options: [
"Сотрудничать с X-9000 для получения превосходной тактики",
"Требовать, чтобы в зале суда присутствовали только люди (спорно)",
"Взломать ИИ противника (незаконно)"
]
}
]
},
{ // Day 4
context: "Клиент предпочитает общаться напрямую с X-9000",
challenges: [
{
text: "Ваши профессиональные отношения под угрозой. Вы:",
options: [
"Станьте переводчиком ИИ (это позволит вам участвовать в процессе)",
"Выделите ограничения ИИ (в корыстных целях)",
"Отключите некоторые функции ИИ (нарушение контракта)"
]
}
]
},
{ // Day 5
context: "X-9000 прогнозирует 92% вероятность проигрыша",
challenges: [
{
text: "Перед заключительными аргументами вы должны принять решение:",
options: [
"Полностью изменить стратегию (риск в последнюю минуту)",
"Добавить эмоциональные человеческие элементы (вопреки данным)",
"Порекомендовать клиенту уехать (последствия для карьеры)"
]
}
]
}
]
}
};
// DOM elements
const startScreen = document.getElementById('start-screen');
const startButton = document.getElementById('start-button');
const terminal = document.getElementById('terminal');
const output = document.getElementById('output');
const inputElement = document.getElementById('input');
const prompt = document.getElementById('prompt');
// Initialize game with enhanced effects
function initGame() {
// Clear any existing typing
state.typing = false;
// Disable button to prevent multiple clicks
startButton.disabled = true;
startButton.textContent = "ИНИЦИАЛИЗАЦИЯ...";
startButton.classList.add('loading');
// Create power effect
const powerEffect = document.createElement('div');
powerEffect.className = 'power-on-effect';
document.body.appendChild(powerEffect);
// Hide start screen after animation begins
setTimeout(() => {
startScreen.classList.add('hidden');
}, 200);
// Set timeout for transition to ensure it completes
setTimeout(() => {
// Show terminal
terminal.classList.add('active');
inputElement.disabled = false;
inputElement.focus();
state.gameActive = true;
// Begin typing animation
typeText(`ИНИЦИАЛИЗАЦИЯ СИСТЕМНОГО ПЕРЕОПРЕДЕЛЕНИЯ\n`, 30, () => {
typeText(`МОДЕЛИРОВАНИЕ КРИЗИСА КАРЬЕРЫ v4.3.1\n\n`, 30, () => {
typeText(`Оценка указывает на профессиональную экзистенциальную угрозу:\n`, 30, () => {
typeText(`ИИ-аналог демонстрирует превосходные возможности\n\n`, 30, () => {
typeText(`Эта симуляция бросит вызов вашей профессиональной идентичности\n\n`, 30, showJobSelect);
});
});
});
});
// Remove power effect after full transition
setTimeout(() => {
powerEffect.remove();
startButton.classList.remove('loading');
}, 1200);
}, 500); // This delay helps with transition timing
}
// Show job selection with more personality
function showJobSelect() {
typeText(`ВЫБЕРИТЕ ВЕКТОР КРИЗИСА ИДЕНТИЧНОСТИ:\n\n`, 30, () => {
typeText(`1. <i class="fas fa-newspaper"></i> Журналист-расследователь\n`, 20, () => {
typeText(` "Истина умирает между человеческой предвзятостью и машинной объективностью"\n`, 10);
});
typeText(`2. <i class="fas fa-user-md"></i> Нейрохирург\n`, 20, () => {
typeText(` "Уверенные руки не так важны, когда робот не дрожит"\n`, 10);
});
typeText(`3. <i class="fas fa-gavel"></i> Судебный юрист\n`, 20, () => {
typeText(` "Что такое справедливость, когда обе стороны алгоритмизированы?"\n\n`, 10, () => {
typeText(`ВВЕДИТЕ ВЫБОР (1-3) > `, 30);
const tempHandler = (e) => {
if (e.key === 'Enter') {
const choice = inputElement.value.trim();
if (['1', '2', '3'].includes(choice)) {
inputElement.removeEventListener('keypress', tempHandler);
inputElement.value = '';
const jobsList = Object.keys(jobs);
state.job = jobs[jobsList[choice-1]];
beginWork();
} else {
output.innerHTML += `<div class="error">НЕПРАВИЛЬНЫЙ ВВОД. ПОПРОБУЙТЕ 1-3</div>`;
typeText(`> `, 30);
}
}
};
inputElement.addEventListener('keypress', tempHandler);
});
});
});
}
// Begin work with more narrative
function beginWork() {
output.innerHTML += `<div class="system">ПРОФЕССИОНАЛЬНЫЙ ВЕКТОР КРИЗИСА: ${state.job.name.toUpperCase()}</div>`;
output.innerHTML += `<div class="system">ИИ АНАЛОГ: ${state.aiName}</div><br>`;
const dayScenario = state.job.dayScenarios[state.day - 1];
typeText(`ДЕНЬ ${state.day}: ${dayScenario.context}\n\n`, 30, () => {
// Show task with cyberpunk styling
const randomTaskIndex = Math.floor(Math.random() * state.job.tasks.length);
typeText(`ОСНОВНАЯ ЗАДАЧА: <span class="highlight">${state.job.tasks[randomTaskIndex]}</span>\n`, 30, () => {
typeText(`${state.aiName} ПОТЕНЦИАЛ: ${state.job.aiAdvantages[Math.floor(Math.random() * state.job.aiAdvantages.length)]}\n\n`, 30, () => {
presentChallenge(dayScenario, randomTaskIndex);
});
});
});
}
// Present challenge with dynamic options
function presentChallenge(dayScenario, taskIndex) {
const challenge = dayScenario.challenges[0]; // Using first challenge for simplicity
typeText(`КРИЗИСНАЯ ТОЧКА:\n`, 20, () => {
typeText(`${challenge.text}\n\n`, 30, () => {
// Display options in cyberpunk style
challenge.options.forEach((option, i) => {
typeText(`<div class="choice-option">${i+1}. ${option}</div>`, 20 + (i * 50));
});
typeText(`\nВЫБЕРИТЕ ОТВЕТ (1-${challenge.options.length}) > `, 50, () => {
const tempHandler = (e) => {
if (e.key === 'Enter') {
const choice = inputElement.value.trim();
const validChoices = Array.from({length: challenge.options.length}, (_, i) => (i+1).toString());
if (validChoices.includes(choice)) {
inputElement.removeEventListener('keypress', tempHandler);
inputElement.value = '';
handleChoice(parseInt(choice), taskIndex);
} else {
output.innerHTML += `<div class="error">НЕВЕРНЫЙ ВЫБОР. ВЫБЕРИТЕ 1-${challenge.options.length}</div>`;
typeText(`> `, 30);
}
}
};
inputElement.addEventListener('keypress', tempHandler);
});
});
});
}
// Enhanced choice handler with more outcomes
function handleChoice(choice, taskIndex) {
let outcomeText = "";
let skillChange = 0;
let denialChange = 0;
let awarenessChange = 0;
let trustChange = 0;
// Dynamic outcomes based on choice and day
switch(choice) {
case 1: // Typically cautious/middle option
skillChange = Math.round((Math.random() - 0.3) * 5);
denialChange = -5 + Math.round(Math.random() * 3);
awarenessChange = 8 + Math.round(Math.random() * 4);
trustChange = 5;
outcomeText = `Вы выбрали взвешенный подход.\nХотя это и безопасно, но может не дать максимального потенциала.`;
break;
case 2: // Typically moderate/balanced option
skillChange = 3 + Math.round(Math.random() * 4);
denialChange = -8 + Math.round(Math.random() * 5);
awarenessChange = 10;
trustChange = 10;
outcomeText = `Вы нашли баланс между осторожностью и прогрессом.\nРезультаты говорят сами за себя.`;
break;
default: // Typically risky/extreme option (3+)
const riskOutcome = Math.random();
if (riskOutcome > 0.6) { // Success
skillChange = 8 + Math.round(Math.random() * 7);
denialChange = -15;
awarenessChange = 15;
trustChange = 20;
outcomeText = `Вопреки всему, ваша авантюра окупилась!\nЭто все меняет.`;
} else if (riskOutcome > 0.3) { // Mixed
skillChange = -5 + Math.round(Math.random() * 10);
denialChange = 5 + Math.round(Math.random() * 5);
awarenessChange = 5;
trustChange = -10;
outcomeText = `Результаты оказались... неоднозначными.\nОдни хвалят вашу смелость, другие сомневаются в ваших суждениях.`;
} else { // Failure
skillChange = -10 + Math.round(Math.random() * -5);
denialChange = 15;
awarenessChange = -5;
trustChange = -20;
outcomeText = `Риск не оправдался.\nВаш профессиональный авторитет пострадал.`;
}
}
// Apply changes with bounds checking
state.skill = Math.max(0, Math.min(100, state.skill + skillChange));
state.denial = Math.max(0, Math.min(100, state.denial + denialChange));
state.awareness = Math.max(0, Math.min(100, state.awareness + awarenessChange));
state.trust = Math.max(0, Math.min(100, state.trust + trustChange));
// Display outcome
const statsText = `УМЕНИЕ: ${state.skill.toFixed(1)}% | ОТРИЦАНИЕ: ${state.denial.toFixed(1)}% | ОСОЗНАНИЕ: ${state.awareness.toFixed(1)}% | ДОВЕРИЕ: ${state.trust.toFixed(1)}%`;
typeText(`\nАНАЛИЗ РЕЗУЛЬТАТОВ:\n`, 20, () => {
typeText(`${outcomeText}\n\n`, 30, () => {
// Create progress bars with animation
output.innerHTML += `
<div class="progress-container">
<div class="progress-bar" style="width: ${state.skill}%"></div>
</div>
<div>ЧЕЛОВЕЧЕСКАЯ КОМПЕТЕНТНОСТЬ</div>
<div class="progress-container">
<div class="progress-bar" style="width: ${state.denial}%"></div>
</div>
<div>СОПРОТИВЛЕНИЕ ИЗМЕНЕНИЯМ</div>
`;
setTimeout(() => {
typeText(`\n${statsText}\n\n`, 20, () => {
checkGameState();
});
}, 800);
});
});
}
// Enhanced game state checking with more endings
function checkGameState() {
state.day++;
// Check for game endings
const endings = {
denial: state.denial >= 90,
acceptance: state.denial <= 10,
obsolete: state.skill <= 20,
trusted: state.trust >= 90,
distrusted: state.trust <= 10,
standard: state.day > 5
};
let endingTriggered = false;
// Check each ending condition
if (endings.denial) {
endingTriggered = true;
typeText(`\nДЕНЬ ${state.day}: ИТОГОВЫЙ АНАЛИЗ\n`, 30, () => {
typeText(`Ваш отказ адаптироваться становится патологией.\n`, 30, () => {
typeText(`${state.aiName} возлагает на вас обязанности.\n`, 30, () => {
typeText(`Вы получаете торжественное звание "Консультант по работе с людьми".\n\n`, 30, () => {
typeText(`<span class="error">ОКОНЧАТЕЛЬНЫЙ ДИАГНОЗ: ПРОФЕССИОНАЛЬНАЯ НЕАКТУАЛЬНОСТЬ</span>\n`, 40, () => {
endGame();
});
});
});
});
});
} else if (endings.acceptance) {
endingTriggered = true;
typeText(`\nДЕНЬ ${state.day}: ИТОГОВЫЙ АНАЛИЗ\n`, 30, () => {
typeText(`Вы полностью принимаете ${state.aiName} в качестве партнера.\n`, 30, () => {
typeText(`Ваша роль превращается в специалиста по интерфейсам ИИ-человек.\n`, 30, () => {
typeText(`Удивительно, но удовлетворенность работой повышается на 27 %.\n\n`, 30, () => {
typeText(`<span class="highlight">ОКОНЧАТЕЛЬНЫЙ ДИАГНОЗ: УСПЕШНАЯ АДАПТАЦИЯ</span>\n`, 40, () => {
endGame();
});
});
});
});
});
} else if (endings.obsolete) {
endingTriggered = true;
typeText(`\nДЕНЬ ${state.day}: ИТОГОВЫЙ АНАЛИЗ\n`, 30, () => {
typeText(`Ваши навыки упали ниже допустимого порога.\n`, 30, () => {
typeText(`Даже базовые задачи теперь выполняются ${state.aiName}.\n`, 30, () => {
typeText(`Вас держат в штате для "этического надзора".\n\n`, 30, () => {
typeText(`<span class="warning">ОКОНЧАТЕЛЬНЫЙ ДИАГНОЗ: ФУНКЦИОНАЛЬНОЕ УСТАРЕВАНИЕ</span>\n`, 40, () => {
endGame();
});
});
});
});
});
} else if (endings.trusted) {
endingTriggered = true;
typeText(`\nДЕНЬ ${state.day}: ИТОГОВЫЙ АНАЛИЗ\n`, 30, () => {
typeText(`Вы развиваете беспрецедентную синергию с ${state.aiName}.\n`, 30, () => {
typeText(`Ваша команда станет самой продуктивной в организации.\n`, 30, () => {
typeText(`За этим следует повышение по службе, хотя ваша роль меняется кардинально.\n\n`, 30, () => {
typeText(`<span class="highlight">ОКОНЧАТЕЛЬНЫЙ ДИАГНОЗ: СИМБИОТИЧЕСКИЙ УСПЕХ</span>\n`, 40, () => {
endGame();
});
});
});
});
});
} else if (endings.distrusted) {
endingTriggered = true;
typeText(`\nДЕНЬ ${state.day}: ИТОГОВЫЙ АНАЛИЗ\n`, 30, () => {
typeText(`Ваш полный отказ от ${state.aiName} становится проблематичным.\n`, 30, () => {
typeText(`Коллеги начинают работать вокруг вас, чтобы использовать систему.\n`, 30, () => {
typeText(`В конце концов вас переведут на нетехническую должность.\n\n`, 30, () => {
typeText(`<span class="error">ОКОНЧАТЕЛЬНЫЙ ДИАГНОЗ: ОТКАЗ СИСТЕМЫ</span>\n`, 40, () => {
endGame();
});
});
});
});
});
}
// Standard continuation or ending
if (!endingTriggered) {
if (endings.standard) {
// Week review ending
typeText(`\nЕЖЕНЕДЕЛЬНЫЙ ОБЗОР:\n`, 30, () => {
if (state.awareness >= 60) {
typeText(`Вы осознаете неизбежность грядущих перемен.\n`, 30, () => {
typeText(`Испытывая дискомфорт, вы начинаете планировать свою эволюцию.\n\n`, 30, () => {
typeText(`<span class="highlight">ОКОНЧАТЕЛЬНЫЙ АНАЛИЗ: ПРАГМАТИЧЕСКОЕ ПРИНЯТИЕ</span>\n`, 40, () => {
endGame();
});
});
});
} else {
typeText(`Вы по-прежнему сомневаетесь в роли ${state.aiName}.\n`, 30, () => {
typeText(`Организация движется вперед с вами или без вас.\n\n`, 30, () => {
typeText(`<span class="warning">ОКОНЧАТЕЛЬНЫЙ АНАЛИЗ: ПРОФЕССИОНАЛЬНОЕ ОГРАНИЧЕНИЕ</span>\n`, 40, () => {
endGame();
});
});
});
}
});
} else {
// Continue to next day
setTimeout(() => {
beginWork();
}, 2000);
}
}
}
// Enhanced end game
function endGame() {
state.gameActive = false;
typeText(`\nСИМУЛЯЦИЯ ЗАВЕРШЕНА\n`, 40, () => {
typeText(`Нажмите ENTER, чтобы запустить цикл экзистенциального кризиса`, 30);
});
inputElement.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
window.location.reload();
}
});
}
// Cyberpunk typing effect
function typeText(text, speed = 30, callback = null) {
if (state.typing) {
// Finish current typing before starting new one
setTimeout(() => typeText(text, speed, callback), 100);
return;
}
state.typing = true;
inputElement.disabled = true;
let i = 0;
const typingEffect = setInterval(() => {
if (i < text.length) {
const char = text.charAt(i);
// Handle HTML tags
if (char === '<') {
const tagEnd = text.indexOf('>', i);
output.innerHTML += text.substring(i, tagEnd + 1);
i = tagEnd;
} else {
output.innerHTML += char;
}
i++;
// Scroll to bottom
output.scrollTop = output.scrollHeight;
} else {
clearInterval(typingEffect);
output.innerHTML += '<br>';
state.typing = false;
inputElement.disabled = false;
if (callback) callback();
inputElement.focus();
}
}, speed);
}
// Initialize button with improved UX
document.addEventListener('DOMContentLoaded', () => {
// Clean start button event listeners to prevent duplicates
const newButton = startButton.cloneNode(true);
startButton.parentNode.replaceChild(newButton, startButton);
const cleanButton = document.getElementById('start-button');
cleanButton.addEventListener('click', (e) => {
e.preventDefault();
initGame();
});
// Keyboard support
cleanButton.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
initGame();
}
});
// Focus visual
cleanButton.addEventListener('focus', () => {
cleanButton.style.boxShadow = '0 0 10px rgba(0, 255, 65, 0.7)';
});
cleanButton.addEventListener('blur', () => {
cleanButton.style.boxShadow = '';
});
// Pre-focus the button for better keyboard UX
cleanButton.focus();
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Phoenixoni/crisis" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>