<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Калькуляция фаершоу — Mardis Calc</title>
<link rel="stylesheet" href="assets/fonts/phosphor-icons/src/css/icons.css">
<link rel="stylesheet" href="css/kit.css">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<header class="page-header">
<div class="page-header-content">
<h1 class="page-header-title"><i class="ph ph-fire"></i> Mardis Calc</h1>
<p class="page-header-subtitle">Калькуляция переменных для фаершоу</p>
</div>
<div class="page-header-actions">
<button class="btn btn-secondary btn-small with-icon" type="button" id="btn-export">
<i class="ph ph-download-simple"></i> Экспорт
</button>
<button class="btn btn-danger btn-small with-icon" type="button" id="btn-reset">
<i class="ph ph-arrow-counter-clockwise"></i> Сброс
</button>
</div>
</header>
<main class="container">
<!-- Message alert -->
<div id="calc-message" class="alert alert-info" hidden></div>
<!-- Tabs -->
<div class="tabs" role="tablist" aria-label="Разделы калькулятора">
<button class="tab tab-active" type="button" role="tab" aria-selected="true" data-tab="params">
<i class="ph ph-sliders-horizontal"></i> Параметры
</button>
<button class="tab" type="button" role="tab" aria-selected="false" data-tab="royalties">
<i class="ph ph-currency-circle-dollar"></i> Роялти
</button>
<button class="tab" type="button" role="tab" aria-selected="false" data-tab="artists">
<i class="ph ph-users"></i> Артисты
</button>
</div>
<!-- Mode selector -->
<div class="chip-group mb-4" aria-label="Режим расчёта" id="mode-selector">
<button class="chip chip-selected" type="button" data-mode="sum" aria-pressed="true">
<i class="ph ph-currency-circle-dollar"></i> Считаем сумму
</button>
<button class="chip" type="button" data-mode="payout" aria-pressed="false">
<i class="ph ph-users"></i> Считаем выплаты
</button>
</div>
<!-- Tab: Parameters -->
<div class="tab-panel tab-panel-active" id="panel-params">
<p class="text-muted" id="mode-hint">Режим «Сумма»: введите материалы и зарплату — общая сумма посчитается автоматически.</p>
<div class="form-grid">
<div class="form-group">
<label class="label">
Общая сумма (S)
<input type="number" class="input" id="input-s" step="0.01" placeholder="0.00">
</label>
</div>
<div class="form-group">
<label class="label">
Пиротехника (Pz)
<input type="number" class="input" id="input-pz" step="0.01" placeholder="0.00">
</label>
</div>
<div class="form-group">
<label class="label">
Титан (Tz)
<input type="number" class="input" id="input-tz" step="0.01" placeholder="0.00">
</label>
</div>
<div class="form-group">
<label class="label">
Керосин за литр (Lz)
<input type="number" class="input" id="input-lz" step="0.01" placeholder="0.00">
</label>
</div>
<div class="form-group">
<label class="label">
Литры керосина (Nl)
<input type="number" class="input" id="input-nl" step="0.01" placeholder="0.00">
</label>
</div>
<div class="form-group">
<label class="label">
Зарплата артиста (Z)
<input type="number" class="input" id="input-z" step="0.01" placeholder="0.00">
</label>
</div>
<div class="form-group">
<label class="label">
Количество артистов (Na)
<input type="number" class="input" id="input-na" step="1" placeholder="0" readonly>
</label>
</div>
</div>
</div>
<!-- Tab: Royalties -->
<div class="tab-panel" id="panel-royalties" hidden>
<p class="text-muted">Рассчитываются от чистой суммы (S − материальные расходы). Rom — фиксированный расход в бюджет команды.</p>
<div class="form-grid">
<div class="form-group">
<label class="label">
Организация (Rom)
<span class="badge badge-primary">10%</span>
<input type="number" class="input" id="input-rom" step="0.01" readonly>
</label>
</div>
<div class="form-group">
<label class="label">
Постановщик (Rop)
<span class="badge badge-primary">5%</span>
<input type="number" class="input" id="input-rop" step="0.01" readonly>
</label>
</div>
<div class="form-group">
<label class="label">
Техник (Rot)
<span class="badge badge-primary">5%</span>
<input type="number" class="input" id="input-rot" step="0.01" readonly>
</label>
</div>
<div class="form-group">
<label class="label">
Комиссионер (Rok)
<span class="badge badge-primary">10%</span>
<input type="number" class="input" id="input-rok" step="0.01" readonly>
</label>
</div>
</div>
</div>
<!-- Tab: Artists -->
<div class="tab-panel" id="panel-artists" hidden>
<div class="block form-group">
<label class="label">
Добавить артиста
<div class="select-wrap">
<select class="input select" id="artist-select">
<option value="">Выберите артиста...</option>
</select>
</div>
</label>
<button class="btn btn-accent with-icon mt-2" type="button" id="btn-add-artist">
<i class="ph ph-plus"></i> Добавить
</button>
</div>
<div class="table-wrapper mt-4">
<table class="table table-compact" id="artists-table">
<caption class="table-caption">Участники шоу</caption>
<thead class="table-head">
<tr class="table-row">
<th scope="col">Артист</th>
<th scope="col">Артист (Z)</th>
<th scope="col">Постановщик (Rop)</th>
<th scope="col">Техник (Rot)</th>
<th scope="col">Комиссионер (Rok)</th>
<th scope="col">Выплата</th>
<th scope="col"></th>
</tr>
</thead>
<tbody class="table-body" id="artists-tbody">
<tr class="table-row table-row-muted" id="empty-row">
<td colspan="7" class="text-center">Нет добавленных артистов</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Summary metrics -->
<section class="section">
<h2 class="section-title"><i class="ph ph-chart-bar"></i> Итоговый расчёт</h2>
<div class="row g-4">
<div class="card metric-card">
<div class="card-content">
<div class="metric-card-header">
<p class="metric-card-label">Материальные расходы</p>
<span class="metric-card-icon"><i class="ph ph-cube"></i></span>
</div>
<p class="metric-card-value" id="summary-materials">0.00</p>
</div>
</div>
<div class="card metric-card">
<div class="card-content">
<div class="metric-card-header">
<p class="metric-card-label">Чистая сумма (Base)</p>
<span class="metric-card-icon"><i class="ph ph-scales"></i></span>
</div>
<p class="metric-card-value" id="summary-base">0.00</p>
</div>
</div>
<div class="card metric-card">
<div class="card-content">
<div class="metric-card-header">
<p class="metric-card-label">Всего роялти</p>
<span class="metric-card-icon"><i class="ph ph-coins"></i></span>
</div>
<p class="metric-card-value" id="summary-royalties">0.00</p>
</div>
</div>
<div class="card metric-card">
<div class="card-content">
<div class="metric-card-header">
<p class="metric-card-label">Зарплаты артистов</p>
<span class="metric-card-icon"><i class="ph ph-user"></i></span>
</div>
<p class="metric-card-value" id="summary-salaries">0.00</p>
</div>
</div>
<div class="card metric-card metric-card-accent">
<div class="card-content">
<div class="metric-card-header">
<p class="metric-card-label">Общая сумма (S)</p>
<span class="metric-card-icon"><i class="ph ph-currency-circle-dollar"></i></span>
</div>
<p class="metric-card-value" id="summary-s">0.00</p>
</div>
</div>
</div>
</section>
<!-- Import / Export -->
<section class="section">
<div class="card action-card">
<div class="card-content">
<span class="action-card-kicker">Данные</span>
<h3 class="action-card-title">Импорт / Экспорт расчёта</h3>
<p class="action-card-text">Сохраните текущий расчёт в файл или загрузите ранее сохранённый.</p>
<div class="action-card-actions">
<button class="btn btn-secondary btn-small with-icon" type="button" id="btn-import-trigger">
<i class="ph ph-upload-simple"></i> Импорт JSON
</button>
<input type="file" id="btn-import-file" accept="application/json" hidden>
<button class="btn btn-secondary btn-small with-icon" type="button" id="btn-export-action">
<i class="ph ph-download-simple"></i> Экспорт JSON
</button>
</div>
</div>
</div>
</section>
</main>
<script src="gnexus-ui-kit/dist/js/gnexus-ui-kit.js"></script>
<script>
window.__ARTISTS__ = [
{ "name": "Маша (капитан)" },
{ "name": "Маша Физрук" },
{ "name": "Даша" },
{ "name": "Фаина" },
{ "name": "Дима" },
{ "name": "Саша" },
{ "name": "Катя" },
{ "name": "Кристина" },
{ "name": "Ростик" },
{ "name": "Маруся" }
];
// Tab switching
document.querySelectorAll('.tab').forEach(tab => {
tab.addEventListener('click', () => {
const target = tab.dataset.tab;
document.querySelectorAll('.tab').forEach(t => {
t.classList.toggle('tab-active', t.dataset.tab === target);
t.setAttribute('aria-selected', t.dataset.tab === target);
});
document.querySelectorAll('.tab-panel').forEach(p => {
const isActive = p.id === 'panel-' + target;
p.classList.toggle('tab-panel-active', isActive);
p.hidden = !isActive;
});
});
});
</script>
<script src="js/app.js"></script>
</body>
</html>