Здесь делается вжух 🪄

test

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » test » Тестовый форум » Тестовое сообщение


Тестовое сообщение

Сообщений 31 страница 60 из 65

31

[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Постапокалиптический шаблон персонажа</title>
<style>
body {
  margin: 0;
  padding: 40px;
  background: #0d0d0d url('https://i.imgur.com/8zTxwFZ.jpeg') center/cover fixed no-repeat;
  font-family: 'Courier New', monospace;
  color: #d8c8b0;
}

.postapo-card {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  background: rgba(25,25,25,0.85);
  border: 2px solid rgba(160,90,40,0.4);
  box-shadow: 0 0 25px rgba(255,140,60,0.2);
  border-radius: 10px;
  overflow: hidden;
}

.postapo-header {
  text-align: center;
  background: linear-gradient(180deg, rgba(50,30,20,0.8), rgba(20,10,0,0.9));
  padding: 20px;
  border-bottom: 1px solid rgba(160,90,40,0.4);
}

.postapo-header img {
  width: 250px;
  border-radius: 5px;
  opacity: 0.9;
  filter: grayscale(40%) contrast(110%);
}

.postapo-name {
  font-size: 35px;
  text-transform: uppercase;
  color: #ffb366;
  letter-spacing: 3px;
  margin-top: 10px;
}

.postapo-face {
  font-size: 11px;
  color: #999;
}

.postapo-info {
  text-align: center;
  font-size: 14px;
  color: #c8b89f;
  padding: 10px 0;
  background: rgba(40,30,20,0.4);
  border-top: 1px solid rgba(100,60,30,0.3);
  border-bottom: 1px solid rgba(100,60,30,0.3);
  letter-spacing: 1px;
}

.postapo-quote {
  padding: 30px 40px;
  text-align: justify;
  font-size: 15px;
  line-height: 1.7;
  background: rgba(15,10,5,0.6);
  position: relative;
}

.postapo-quote::before {
  content: "❝";
  color: rgba(255,180,100,0.4);
  font-size: 28px;
  margin-right: 6px;
}

.postapo-quote::after {
  content: "❞";
  color: rgba(255,180,100,0.4);
  font-size: 28px;
  margin-left: 6px;
}
</style>
</head>
<body>

<div class="postapo-card">
  <div class="postapo-header">
    <img src="https://upforme.ru/uploads/001c/0f/f1/3/624268.gif" alt="аватар персонажа">
    <div class="postapo-name">Имя персонажа</div>
    <div class="postapo-face">занимаемая внешность (на англ)</div>
  </div>
  <div class="postapo-info">
    кем приходится | возраст | фракция
  </div>
  <div class="postapo-quote">
Религиозный нацист со своим личным кодексом чести, может вспыхнуть за секунду, а через две уже затеять драку, но за 8 месяцев, что Пес пробыл в Своре, большинство нашли к нему подход. Ему светило пожизненное, но зомби-апокалипсис сыграл ему на руку, позволив оказаться снова на свободе.
Человек он не сдержанный и вспыльчивый, сначала делает, а после – думает. И именно это качество помогло ему спасти укушенного за запястье товарища, отрубив тому конечность в первые же секунды, пока вирус не успел распространиться по организму. В кризисных ситуациях Пес быстро принимает решения, за это его и ценят больше всего.

С Кэтрин, пусть и не сразу, но смогли найти общий язык, она спасла его, а Пес не любит оставаться в долгу.
  </div>
</div>

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

0

32

[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Карточка персонажа — Постапокалипсис</title>
<style>
body {
  margin: 0;
  padding: 40px;
  background: #e7e3da;
  font-family: 'Courier New', monospace;
  color: #2b2b2b;
}

/* ——— Карточка ——— */
.postapo-card {
  width: 100%;
  max-width: 1000px;
  margin: 0 auto;
  background: #f8f6f2;
  border: 2px solid #b8a58b;
  border-radius: 8px;
  box-shadow: 0 0 15px rgba(60,40,20,0.15);
}

/* ——— Заголовок ——— */
.postapo-header {
  text-align: center;
  padding: 20px;
  border-bottom: 1px solid #cbbda4;
}

.postapo-header img {
  width: 220px;
  border-radius: 6px;
  border: 1px solid #bca57f;
  opacity: 0.95;
}

/* ——— Имя и внешность ——— */
.postapo-name {
  font-size: 32px;
  text-transform: uppercase;
  color: #5b4028;
  letter-spacing: 2px;
  margin-top: 10px;
}

.postapo-face {
  font-size: 11px;
  color: #666;
}

/* ——— Информация ——— */
.postapo-info {
  text-align: center;
  font-size: 13px;
  color: #3b3b3b;
  padding: 8px 0;
  background: #ede7df;
  border-top: 1px solid #cbbda4;
  border-bottom: 1px solid #cbbda4;
  letter-spacing: 0.5px;
}

/* ——— Описание ——— */
.postapo-quote {
  padding: 25px 40px;
  text-align: justify;
  font-size: 14px;
  line-height: 1.6;
  color: #2a2a2a;
}
</style>
</head>
<body>

<div class="postapo-card">
  <div class="postapo-header">
    <img src="https://upforme.ru/uploads/001c/0f/f1/3/624268.gif" alt="аватар персонажа">
    <div class="postapo-name">Имя персонажа</div>
    <div class="postapo-face">занимаемая внешность (на англ)</div>
  </div>

  <div class="postapo-info">
    кем приходится | возраст | фракция
  </div>

  <div class="postapo-quote">
    О персонаже. Здесь кратко описывается история, привычки, характер и место в мире после катастрофы. 
    Никакой воды — только факты и атмосфера.
  </div>
</div>

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

0

33

[html][dohtml]
<style>
.postapo-card {
  position: relative;
  width: 700px; /* ширина карточки */
  margin: 20px auto;
  background: #fdfcf9;
  border: 2px solid #b8a58b;
  border-radius: 10px;
  box-shadow: 0 0 15px rgba(60,40,20,0.2);
  overflow: visible;
  font-family: 'Courier New', monospace;
  color: #2b2b2b;
}

/* Метка "Свора" — прямоугольная */
.postapo-label {
  position: absolute;
  top: -12px;
  right: -12px;
  background: #5b3722;
  color: #fffbea;
  padding: 6px 14px;
  border-radius: 4px;
  border: 2px solid #d4b78a;
  font-weight: bold;
  letter-spacing: 1px;
  font-size: 14px;
  box-shadow: 0 4px 12px rgba(40,20,10,0.2);
  text-align: center;
  white-space: nowrap;
}

/* Верхняя часть: аватар + описание */
.postapo-top {
  display: flex;
  flex-wrap: wrap;
  border-bottom: 1px solid #cbbda4;
}

/* Левая колонка (аватар) */
.postapo-left {
  flex: 0 0 180px;
  background: #f2eee6;
  text-align: center;
  padding: 15px 10px;
  border-right: 1px solid #d6c7ac;
}

.postapo-left img {
  width: 160px;
  border-radius: 10px;
  border: 1px solid #bca57f;
}

.postapo-name {
  font-size: 20px;
  text-transform: uppercase;
  color: #5b4028;
  letter-spacing: 1px;
  margin-top: 8px;
}

.postapo-face {
  font-size: 10px;
  color: #666;
}

/* Правая колонка (описание) */
.postapo-right {
  flex: 1;
  padding: 20px 25px;
  background: #fffdfa;
}

.postapo-quote {
  font-size: 13px;
  line-height: 1.6;
  text-align: justify;
  color: #2a2a2a;
}

/* Нижний блок с основной информацией */
.postapo-info {
  text-align: center;
  font-size: 12px;
  color: #3b3b3b;
  background: #ede7df;
  border-top: 1px solid #cbbda4;
  padding: 8px 0;
  letter-spacing: 0.5px;
}

.postapo-info span {
  display: inline-block;
  margin: 0 10px;
  color: #4a3b2a;
}

/* Адаптивность */
@media (max-width: 650px) {
  .postapo-card { width: 100%; }
  .postapo-top { flex-direction: column; }
  .postapo-left { border-right: none; border-bottom: 1px solid #d6c7ac; }
  .postapo-label { position: relative; top: 10px; left: 15px; }
}
</style>

<div class="postapo-card">
  <div class="postapo-label">Свора</div>

  <div class="postapo-top">
    <div class="postapo-left">
      <img src="https://upforme.ru/uploads/001c/80/ee/3/96296.png" alt="аватар персонажа">
      <div class="postapo-name">Имя персонажа</div>
      <div class="postapo-face">занимаемая внешность (на англ)</div>
    </div>

    <div class="postapo-right">
      <div class="postapo-quote">
        Здесь текст описания персонажа. 
        Кто он, что пережил, как выжил. 
        Его привычки, цели, отношение к миру, который остался после катастрофы.
      </div>
    </div>
  </div>

  <div class="postapo-info">
    <span><b>Возраст:</b> 32</span>
    <span><b>Фракция:</b> Синдикат Пепла</span>
    <span><b>Роль:</b> разведчик</span>
  </div>
</div>
[/dohtml][/html]

0

34

[html]
<div style="position: relative; width: 200px; height: 300px; background: linear-gradient(to bottom, #d9c59d, #bfa06b); border-radius: 15px; box-shadow: 0 4px 8px rgba(0,0,0,0.5); font-family: Arial, sans-serif; color: #fff; overflow: visible; margin: 10px auto;">

  <!-- Круг с цифрой -->
  <div style="position: absolute; top: -10px; left: -10px; width: 30px; height: 30px; background-color: #f2b632; border-radius: 50%; display: flex; justify-content: center; align-items: center; font-weight: bold; font-size: 18px; border: 3px solid #fff; box-shadow: 0 2px 5px rgba(0,0,0,0.4); z-index: 10;">
    5
  </div>

  <!-- Название карты -->
  <div style="position: absolute; top: 10px; left: 0; width: 100%; text-align: center; background: rgba(0,0,0,0.5); padding: 5px 0; font-weight: bold; font-size: 16px; text-shadow: 1px 1px 2px #000;">
    Мертвый зомби
  </div>

  <!-- Контейнер для картинки -->
  <div style="position: absolute; top: 40px; left: 50%; transform: translateX(-50%); width: 160px; height: 160px;">
    <img src="https://upforme.ru/uploads/001c/84/76/2/735286.jpg" alt="Карта" style="width: 100%; height: 100%; border-radius: 10px; object-fit: cover; box-shadow: 0 3px 6px rgba(0,0,0,0.5);">
  </div>

  <!-- Описание характеристик -->
  <div style="position: absolute; bottom: 10px; left: 10px; right: 10px; background: rgba(0,0,0,0.6); padding: 5px; border-radius: 5px; font-size: 14px; line-height: 1.3; text-align: center;">
    Атака: 7<br>
    Защита: 5<br>
    Способность: Огненный взрыв
  </div>

</div>
[/html]

0

35

[html]<div id="tarotContainer"></div>

<script>
const yourID = 57;
const allowedPlayers = [yourID];
const drawIntervalHours = 0;
const drawIntervalMinutes = 0;

let tarotCards = [
  { name: "Башня", img: "https://upforme.ru/uploads/001c/84/76/2/735286.jpg", desc: "1Резкие перемены. Разрушение старого ради нового." },
  { name: "Звезда", img: "https://upforme.ru/uploads/001c/84/76/2/735286.jpg", desc: "2Надежда, вдохновение, свет впереди." },
  { name: "Солнце", img: "https://upforme.ru/uploads/001c/84/76/2/735286.jpg", desc: "3Радость, успех и ясность в делах." },
  { name: "Луна", img: "https://upforme.ru/uploads/001c/84/76/2/735286.jpg", desc: "4Интуиция, сны, тайные страхи и желания." },
  { name: "Мир", img: "https://upforme.ru/uploads/001c/84/76/2/735286.jpg", desc: "5Завершение цикла, гармония и успех." }
];

// ------------------ ✅ Храним использованные карты -------------------
let usedCards = JSON.parse(localStorage.getItem("tarotUsedCards")||"[]");

// Удаляем использованные карты из колоды
tarotCards = tarotCards.filter(c=>!usedCards.includes(c.name));

// ---------------------------------------------------------------------

const container = document.getElementById('tarotContainer');
container.innerHTML = `
  <div style="width:100%;max-width:450px;margin:20px auto;padding:20px;border-radius:16px;
              background: radial-gradient(circle at top,#222 0%,#111 100%);
              box-shadow:0 0 20px rgba(0,0,0,0.7);text-align:center;color:#eee;font-family:'Trebuchet MS',sans-serif;">
    <h3 style="color:#c9b6ff;text-shadow:0 0 6px #9b7eff;">🌒 Твоя карта судьбы</h3>
    <button id="tarotButton" style="background:linear-gradient(90deg,#6b48ff,#3b2d80);
            color:white;border:none;padding:10px 20px;border-radius:10px;cursor:pointer;
            font-size:15px;transition:all 0.3s ease;box-shadow:0 0 10px rgba(155,126,255,0.4);">Вытянуть карту</button>
    <div id="tarotResult" style="margin-top:20px;font-size:14px;color:#ddd;
         background:rgba(0,0,0,0.4);border-radius:12px;padding:15px;
         box-shadow:inset 0 0 12px rgba(155,126,255,0.2);white-space:pre-line;position:relative;"></div>
  </div>
`;

const btn = document.getElementById('tarotButton');
const result = document.getElementById('tarotResult');
const userID = yourID;
const intervalMs = (drawIntervalHours*3600000)+(drawIntervalMinutes*60000);

// ✅ Если карты закончились
if(tarotCards.length === 0){
   btn.disabled = true;
   btn.textContent = "Карты закончились";
}

// Проверка доступа
if(allowedPlayers !== "all" && !allowedPlayers.includes(userID)){
    btn.disabled = true;
    btn.textContent = "Нет доступа";
}else{
    const now = Date.now();
    const lastDraw = localStorage.getItem("tarotDrawTime_"+userID);
    const saved = localStorage.getItem("tarotCard_"+userID);

    if(lastDraw && now - lastDraw < intervalMs){
        btn.disabled = true;
        btn.textContent = "Карта уже вытянута";
        if(saved) result.innerHTML = saved;
        const remaining = intervalMs-(now-lastDraw);
        const remHours = Math.floor(remaining/3600000);
        const remMinutes = Math.ceil((remaining%3600000)/60000);
        result.innerHTML += `<br><small>Повторная попытка через ${remHours} ч. ${remMinutes} мин.</small>`;
    }

    btn.addEventListener('click',()=>{
        const random = tarotCards[Math.floor(Math.random()*tarotCards.length)];

        // ✅ Записываем карту в список использованных
        usedCards.push(random.name);
        localStorage.setItem("tarotUsedCards", JSON.stringify(usedCards));

// ----- Сброс колоды -----
function resetDeck() {
  if (!(punbb && punbb.user && punbb.user.id == 1)) {
    alert("Недостаточно прав");
    return;
  }
  used = [];
  localStorage.setItem("taro_used","[]");
  document.getElementById("cardResult").innerHTML = "Колода сброшена!";
  updateInfo();
}

        // (✨ остальной код отрисовки без изменений)
        const copyableHTML = `
<div style="text-align:center;margin:15px auto;padding:75px;border-radius:22px;
            background: rgba(0,0,0);box-shadow:0 0 12px rgba(155,126,255,0.3);
            width:260px;color:#eee;font-family:'Trebuchet MS',sans-serif;">
  <b style="color:#cbbaff;">${random.name}</b><br>
  <img src="${random.img}" style="width:200px;border-radius:8px;margin:8px 0;
       box-shadow:0 0 12px rgba(155,126,255,0.4);"><br>
  <i style="color:#ddd;">${random.desc}</i>
</div>`;

        result.innerHTML = `
<b style="color:#cbbaff;font-size:16px;">${random.name}</b><br>
<img src="${random.img}" style="width:180px;border-radius:8px;margin:8px 0;"><br>
<i>${random.desc}</i><br><br>
<b>Код для вставки:</b><br>
<textarea style="width:100%;height:160px;">${copyableHTML}</textarea>
`;

        localStorage.setItem("tarotDrawTime_"+userID, now);
        localStorage.setItem("tarotCard_"+userID, result.innerHTML);
        btn.disabled = true;
        btn.textContent = "Карта получена";
    });
}
</script>[/html]

0

36

[html]
<style>
/* Общий стиль */
.vote-box {
  width: 650px; background:#2a1c11; margin-bottom: 25px; border:3px solid #000; padding:15px;
  font-family:'Georgia', serif; position: relative;
}
.vote-left {
  float:left; width:150px; height:150px; border:3px solid #000;
  text-align:center; padding:5px;
}
.vote-text {
  margin-left:170px; background:rgba(60,45,30,0.9); color:#fff;
  padding:20px; height:118px; border:3px solid #000; font-size:18px;
}
.btn-get {
  position:absolute; bottom:-28px; left:340px; background:#f3d7a3;
border:3px solid #000;
  padding:8px 20px; font-size:18px; cursor:pointer;
}
.btn-get:hover { background:#fff4c7; }

/* Popup */
#getgift { display:none; }

/* затемнение */
.popup-bg {
  position:fixed; top:0; left:0; width:100%; height:100%;
display:none; z-index:10;
}

/* показываем затемнение */
#getgift:checked + .popup-bg { display:block; }

/* маленькое узкое окно */
.popup-window {
  background:#2a1c11; border:3px solid #000; padding:15px;
  width:200px; margin:90px 0 0 290px; color:#fff; font-size:16px;
  text-align:center; position:relative; box-shadow:0 0 10px #000;
}

/* крестик */
.close-x {
  position:absolute; top:-12px; right:-12px;
  background:#f3d7a3; border:3px solid #000; width:22px; height:22px;
  font-size:14px; line-height:18px; text-align:center; cursor:pointer;
  font-weight:bold;
}
.close-x:hover { background:#fff4c7; }

/* клик вне окна = закрыть */
.popup-bg label {
  position:absolute; top:0; left:0; width:100%; height:100%;
}
.popup-window label { all:unset; }
</style>

<div class="vote-box">
  <div class="vote-left">
    <img src="https://upforme.ru/uploads/001c/84/76/2/172520.png" style="max-width:100%; max-height:100%;">
  </div>

  <div class="vote-text">Итоги голосования</div>

  <!-- кнопка -->
  <label for="getgift" class="btn-get">получить</label>

  <div style="clear:both;"></div>
</div>

<!-- чекбокс -->
<input type="checkbox" id="getgift">

<!-- затемнение -->
<div class="popup-bg">
  <label for="getgift"></label> <!-- клик вне окна закрывает -->

  <div class="popup-window">
    <label for="getgift" class="close-x">✕</label>
    подарок зачислен
  </div>
</div>
[/html]

0

37

[html]<div style="width: 650px; margin: 30px auto; font-family: 'Georgia', serif; text-align: center; position: relative;">
 

<div class="sticker-container" style="width:150px; position:absolute;top:90px;right:100px;z-index:15;transform: rotate(-10deg);">
  <img src="https://upforme.ru/uploads/001c/84/76/2/103573.png" alt="тыква" class="sticker">
</div>
<div class="sticker-container" style="width:150px; position:absolute;top:100px;right:550px;z-index:15;transform: rotate(30deg);">
  <img src="https://upforme.ru/uploads/001c/84/76/2/592117.png" alt="череп" class="sticker">
</div>
<div class="sticker-container" style="position:absolute;top:10px;right:450px; width:150px; transform: rotate(-30deg);">
  <img src="https://upforme.ru/uploads/001c/84/76/2/65000.png" alt="надгробье" class="sticker">
</div>
<div class="sticker-container" style="position:absolute;top:100px;right:50px; width:50px; transform: rotate(20deg);">
  <img src="https://upforme.ru/uploads/001c/84/76/2/420890.png" alt="колба" class="sticker">
</div>
<div class="sticker-container" style="position:absolute;top:10px;right:-10px; width:180px; transform: rotate(-10deg);">
  <img src="https://upforme.ru/uploads/001c/84/76/2/424675.png" alt="шляпа" class="sticker">
</div>
<div class="sticker-container" style="position:absolute;top:100px;right:400px; width:100px; transform: rotate(30deg);">
  <img src="https://upforme.ru/uploads/001c/84/76/2/888128.png" alt="котел" class="sticker">
</div>

  <!-- Совсем верхний блок -->
  <div style="
    background: linear-gradient(180deg, #2d1a22, #000);
background-size: cover; /* или contain */
background-blend-mode: overlay; /* даёт мрачный эффект */
    color: #ff9623;
top: 30px;
    width: 330px;
    text-align: center;
margin-top:-15px; position: relative; z-index:1;
    margin: -10px auto 0 auto;
  border: 1px solid #ff8c00;

    border-radius: 10px 10px 10px 10px;
    box-shadow: 0 5px 15px rgba(0,0,0,0.5);
    letter-spacing: 1px;
    text-align: center;
  ">

    <div style="font-size: 35px; color: #f6b874; line-height: 1.5; text-transform: none; text-shadow: 2px 2px 4px #000;">
Победители!
    </div>
  </div>

  <!-- Верхний блок -->
  <div style="
    background: linear-gradient(180deg, #2d1a22, #000);
background-image: url('https://upforme.ru/uploads/001c/84/76/2/250865.png');
background-size: cover; /* или contain */
background-blend-mode: overlay; /* даёт мрачный эффект */
    color: #ff8c00;
  border: 1px solid #ff8c00;
    padding: 35px 25px;
    border-radius: 10px 10px 10px 10px;
    box-shadow: 0 5px 15px rgba(0,0,0,0.5);
    letter-spacing: 1px;
    text-transform: uppercase;
  ">

    <div style="font-size: 28px; font-weight: bold; margin-bottom: 10px; text-shadow: 2px 2px 4px #000;">

    </div>

    <div style="font-size: 15px; color: #f6b874; line-height: 1.5; text-transform: none; text-shadow: 2px 2px 4px #000; margin-top: 120px; ">
      Сладость или гадость?!<br>
Последние тыквы утащили Миротворцы, Альянс употребил крепкие зеленые жидкости, а Свора добавила себе в коллекцию последние черепа... Праздник урожая и праздник мертвых подошел к концу, и последняя свеча потухла. Вы смогли разыскать даже больше, чем <s>смогли унести</s> планировалось, задобрили злых зомбо-духов, и духи приготовили вам подарки в ответ.<br>
Ниже представлен список, нажмите на имя и увидите полученные награды и статистику. Всем спасибо за участие, мы рады, что вы с таким рвением поддержали поиски!

    </div>
  </div>

  <!-- Нижний блок -->
  <div style="
    margin: -10px auto 0 auto;
    background: #2d1a22;
    border: 1px solid #ff8c00;
    padding: 2px 6px;
    font-size: 17px;
    background: linear-gradient(180deg, #2d1a22, #000);
    color: #f6b874;
background-blend-mode: overlay; /* даёт мрачный эффект */
    text-align: center;
  ">

<style>
  .winner-name{
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    padding: 2px 6px;
    transition: 0.3s ease;
justify-content: center; /* <-- Центровка в строке */
  }
  .winner-name:hover{
    color: #ff8c00;
    text-shadow: 0 0 6px #ff6200, 0 0 10px #ff4500;
    transform: scale(1.05);
  }

  .info{
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    background: rgba(0,0,0,0.6);
    color: #ffdfb3;
    border: 1px solid #ff8c00;
    margin: 0 0 8px 0;
    padding: 0 6px;
    transition: max-height .4s ease, opacity .4s ease, padding .4s ease;
  }

  .info.open{
    max-height: 200px;
    opacity: 1;
    padding: 6px;
  }
</style>

<script>
function toggleInfo(id){
  const all = document.querySelectorAll('.info');
  all.forEach(b=>{
    if(b.id!==id){
      b.classList.remove('open');
    }
  });
  document.getElementById(id).classList.toggle('open');
}
</script>

<div onclick="toggleInfo('i1')" class="winner-name">ИМЯ 1 <img src="https://upforme.ru/uploads/001c/84/76/2/175372.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/346600.png" width="16"></div>
<div id="i1" class="info">Текст под именем 1</div>

<div onclick="toggleInfo('i2')" class="winner-name">Hiram Crowe<img src="https://upforme.ru/uploads/001c/84/76/2/854945.png" width="16"></div>
<div id="i2" class="info">Текст для Хайрема</div>

<div onclick="toggleInfo('i3')" class="winner-name">ИМЯ 3 <img src="https://upforme.ru/uploads/001c/84/76/2/12256.png" width="16"></div>
<div id="i3" class="info">Текст под именем 3</div>

<div onclick="toggleInfo('i4')" class="winner-name">ИМЯ 4 <img src="https://upforme.ru/uploads/001c/84/76/2/448822.png" width="16"></div>
<div id="i4" class="info">Текст под именем 4</div>

<div onclick="toggleInfo('i5')" class="winner-name">Hiram Crowe<img src="https://upforme.ru/uploads/001c/84/76/2/387215.png" width="16"></div>
<div id="i5" class="info">Текст для Хайрема</div>

<div onclick="toggleInfo('i6')" class="winner-name">ИМЯ 4 <img src="https://upforme.ru/uploads/001c/84/76/2/829533.png" width="16"></div>
<div id="i6" class="info">Текст под именем 4</div>

  </div>
</div>


[/html]

0

38

[html]<div style="width: 90%; max-width: 700px; margin: 30px auto; font-family: 'Georgia', serif; text-align: center; position: relative;">
 

  <!-- Совсем верхний блок -->
  <div style="
    background: linear-gradient(180deg, #2d1a22, #000);
background-size: cover; /* или contain */
background-blend-mode: overlay; /* даёт мрачный эффект */
    color: #ff9623;
top: 30px;
    width: 60%;
min-width: 240px;
    text-align: center;
margin-top:-15px; position: relative; z-index:1;
    margin: -10px auto 0 auto;
  border: 1px solid #ff8c00;
    border-radius: 10px 10px 10px 10px;
    box-shadow: 0 5px 15px rgba(0,0,0,0.5);
    letter-spacing: 1px;
    text-align: center;
  ">

    <div style="font-size: 35px; color: #f6b874; line-height: 1.5; text-transform: none; text-shadow: 2px 2px 4px #000;">
Победители!
    </div>
  </div>

  <!-- Верхний блок -->
  <div style="
    background: linear-gradient(180deg, #2d1a22, #000);
background-image: url('https://upforme.ru/uploads/001c/84/76/2/250865.png');
background-size: cover; /* или contain */
background-blend-mode: overlay; /* даёт мрачный эффект */
    color: #ff8c00;
  border: 1px solid #ff8c00;
    padding: 35px 5%;
    border-radius: 10px 10px 10px 10px;
    box-shadow: 0 5px 15px rgba(0,0,0,0.5);
    letter-spacing: 1px;
    text-transform: uppercase;
  ">

    <div style="font-size: 28px; font-weight: bold; margin-bottom: 10px; text-shadow: 2px 2px 4px #000;">

    </div>

    <div style="font-size: 15px; color: #f6b874; line-height: 1.5; text-transform: none; text-shadow: 2px 2px 4px #000; margin-top: 120px; ">
      Сладость или гадость?!<br>
Последние тыквы утащили Миротворцы, Альянс употребил крепкие зеленые жидкости, а Свора добавила себе в коллекцию завоеванные черепа... Праздник урожая и праздник мертвых подошел к концу, и последняя свеча потухла. Вы смогли разыскать даже больше, чем <s>смогли унести</s> планировалось, задобрили злых зомбо-духов, и духи приготовили вам подарки в ответ.<br>
Ниже представлен список, нажмите на имя и увидите полученные награды и статистику. Всем спасибо за участие, мы рады, что вы с таким рвением поддержали поиски!

    </div>
  </div>

  <!-- Нижний блок -->
  <div style="
    margin: -10px auto 0 auto;
    background: #2d1a22;
    border: 1px solid #ff8c00;
    padding: 2px 6px;
    font-size: 17px;
    background: linear-gradient(180deg, #2d1a22, #000);
    color: #f6b874;
background-blend-mode: overlay; /* даёт мрачный эффект */
    text-align: center;
  ">

<style>
  .winner-name{
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    padding: 2px 6px;
    transition: 0.3s ease;
justify-content: center; /* <-- Центровка в строке */
  }
  .winner-name:hover{
    color: #ff8c00;
    text-shadow: 0 0 6px #ff6200, 0 0 10px #ff4500;
    transform: scale(1.05);
  }

  .info{
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    background: rgba(0,0,0,0.6);
    color: #ffdfb3;
    border: 1px solid #ff8c00;
    margin: 0 0 8px 0;
    padding: 0 6px;
    transition: max-height .4s ease, opacity .4s ease, padding .4s ease;
  }

  .info.open{
    max-height: 200px;
    opacity: 1;
    padding: 6px;
  }
</style>

<script>
function toggleInfo(id){
  const all = document.querySelectorAll('.info');
  all.forEach(b=>{
    if(b.id!==id){
      b.classList.remove('open');
    }
  });
  document.getElementById(id).classList.toggle('open');
}
</script>

<div onclick="toggleInfo('i1')" class="winner-name">Jamie McClane<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i1" class="info">Лучшая ищейка всея Пульса!<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 90 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i2')" class="winner-name">Marco Rossi<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i2" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 84 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i3')" class="winner-name">Dolores Kruger<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i3" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 84 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i4')" class="winner-name">Ricky Wachowski<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i4" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 80 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i5')" class="winner-name">Talia Montero<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i5" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 79 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i6')" class="winner-name">Anna Hartman<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i6" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 72 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i7')" class="winner-name">Hope Miller<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"></div>
<div id="i7" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 62 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
</div>

<div onclick="toggleInfo('i8')" class="winner-name">Jacob Monroe<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"></div>
<div id="i8" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 57 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
</div>

<div onclick="toggleInfo('i9')" class="winner-name">James White<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i9" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 53 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i10')" class="winner-name">Remington Delaney<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"></div>
<div id="i10" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 43 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
</div>

<div onclick="toggleInfo('i11')" class="winner-name">Daire Heany<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> <img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i11" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/382241.png" width="16"> 43 найденных предметов - в награду можешь выбрать любую иконку из разыскиваемых предметов (отпишись ниже)<br>
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i12')" class="winner-name">Graham Chase<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i12" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i13')" class="winner-name">Hardy Knight<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i13" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i14')" class="winner-name">Correy Sullivan<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i14" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i15')" class="winner-name">Sunset Daley<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i15" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i16')" class="winner-name">Miranda Reynolds<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i16" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i17')" class="winner-name">Robert Rogers<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i17" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i18')" class="winner-name">Hiram Crowe<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i18" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i19')" class="winner-name">Laura Singer<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i19" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i20')" class="winner-name">Sergey Hartman<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i20" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

<div onclick="toggleInfo('i21')" class="winner-name">Antoinette Moon<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"></div>
<div id="i21" class="info">
<img src="https://upforme.ru/uploads/001c/84/76/2/409862.png" width="16"> Собран фул набор! (включая проклятый котел) - аватар в награду</div>

  </div>
</div>


[/html]

0

39

[html]
<style>
/* Общий стиль */
.vote-box {
  width: 100%; max-width:90%; background:#2a1c11; margin-bottom: 35px; border:3px solid #000; padding:2%;
  font-family:'Georgia', serif; position: relative; top:10px;
}
.vote-left {
  float:left; width:25%; border:3px solid #000;
  text-align:center; padding:1%;
}

.vote-left img {
  width:100%;
  height:auto;
  max-height:150px;
}

.vote-text {
  margin-left:30%; background:rgba(60,45,30,0.9); color:#fff;
  padding:6%; height:118px; border:3px solid #000; font-size:18px;
}
.btn-get {
  position:absolute; bottom:-28px; left:63%; transform:translateX(-50%); background:#f3d7a3;
border:3px solid #000;
  padding:8px 20px; font-size:18px; cursor:pointer;
}
.btn-get:hover { background:#fff4c7; }

/* Popup */
#getgift { display:none; }

/* затемнение */
.popup-bg {
  position:fixed; top:0; left:0; width:100%; height:100%;
display:none; z-index:10;
}

/* показываем затемнение */
#getgift:checked + .popup-bg { display:block; }

/* маленькое узкое окно */
.popup-window {
  background:#2a1c11; border:3px solid #000; padding:15px;
  width:30%; margin:22% 42% 10%; color:#fff; font-size:16px;
  text-align:center; position:relative; box-shadow:0 0 10px #000;
}

/* крестик */
.close-x {
  position:absolute; top:-12px; right:-12px;
  background:#f3d7a3; border:3px solid #000; width:22px; height:22px;
  font-size:14px; line-height:18px; text-align:center; cursor:pointer;
  font-weight:bold;
}
.close-x:hover { background:#fff4c7; }

/* клик вне окна = закрыть */
.popup-bg label {
  position:absolute; top:0; left:0; width:100%; height:100%;
}
.popup-window label { all:unset; }
</style>

<div class="vote-box">
  <div class="vote-left">
    <img src="https://upforme.ru/uploads/001c/84/76/2/172520.png" style="max-width:100%; max-height:100%;">
  </div>

  <div class="vote-text">Итоги голосования</div>

  <!-- кнопка -->
  <label for="getgift" class="btn-get">получить</label>

  <div style="clear:both;"></div>
</div>

<!-- чекбокс -->
<input type="checkbox" id="getgift">

<!-- затемнение -->
<div class="popup-bg">
  <label for="getgift"></label> <!-- клик вне окна закрывает -->

  <div class="popup-window">
    <label for="getgift" class="close-x">✕</label>
    подарок зачислен
  </div>
</div>
[/html]

0

40

[html]<style>
  .item-container {
    display: flex;
    max-width: 900px;
    border-radius: 12px;
    overflow: hidden;
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    box-shadow: 0 6px 12px rgba(0,0,0,0.2);
  }

  .tabs {
    width: 220px;
    background: #1f2a38;
    color: #fff;
    display: flex;
    flex-direction: column;
  }

  .tab {
    display: flex;
    align-items: center;
    padding: 12px 16px;
    cursor: pointer;
    border-bottom: 1px solid #2a3b50;
    transition: background 0.3s, transform 0.2s;
  }

  .tab img {
    width: 32px;
    height: 32px;
    margin-right: 10px;
  }

  .tab:hover {
    background: #2a3b50;
    transform: translateX(3px);
  }

  .tab.active {
    background: #3a4b60;
  }

  .details {
    flex: 1;
    padding: 20px;
    background: #f0f0f5;
    position: relative;
    border-left: 2px solid #1f2a38;
    display: flex;
    flex-direction: column;
    align-items: center;
  }

  .detail {
    display: none;
    animation: fadeIn 0.4s ease-in-out;
    width: 100%;
    max-width: 500px;
    border: 2px solid #888;
    border-radius: 10px;
    padding: 15px;
    background: #fff;
    box-shadow: 0 4px 8px rgba(0,0,0,0.15);
    text-align: center;
  }

  .detail.active {
    display: block;
  }

  .item-icon {
    width: 80px;
    height: 80px;
    margin-bottom: 12px;
  }

  .item-title {
    font-size: 22px;
    font-weight: bold;
    margin-bottom: 10px;
    color: #1f2a38;
  }

  .ingredients {
    margin-top: 12px;
  }

  .ingredients ul {
    margin-left: 20px;
  }

  .ingredient {
    margin-bottom: 4px;
  }

  /* Подсветка редкости: обычный - серый, редкий - синий, эпический - фиолетовый */
  .rarity-common { border-color: #888; }
  .rarity-rare { border-color: #3498db; }
  .rarity-epic { border-color: #9b59b6; }

  @keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
  }
</style>

<div class="item-container">
  <div class="tabs">
    <div class="tab active" data-item="potion"><img src="https://i.imgur.com/qb7K1S6.png" alt="">Блюда и Ингредиенты</div>
    <div class="tab" data-item="elixir"><img src="https://i.imgur.com/5H1xAzi.png" alt="">ОБЫЧНЫЕ блюда</div>
    <div class="tab" data-item="bomb"><img src="https://i.imgur.com/f9u5cB3.png" alt="">РЕДКИЕ блюда</div>
  </div>
  <div class="details">
    <div class="detail active rarity-common" id="potion">
      <img class="item-icon" src="https://i.imgur.com/qb7K1S6.png" alt="">
      <div class="item-title">Зелье исцеления</div>
      <p>Восстанавливает здоровье персонажа.</p>
      <div class="ingredients">
        <strong>Ингредиенты:</strong>
        <ul>
          <li class="ingredient">Травы</li>
          <li class="ingredient">Вода</li>
          <li class="ingredient">Кристалл здоровья</li>
        </ul>
      </div>
    </div>
    <div class="detail rarity-rare" id="elixir">
      <img class="item-icon" src="https://i.imgur.com/5H1xAzi.png" alt="">
      <div class="item-title">Эликсир маны</div>
      <p>Восстанавливает ману персонажа.</p>
      <div class="ingredients">
        <strong>Ингредиенты:</strong>
        <ul>
          <li class="ingredient">Магические ягоды</li>
          <li class="ingredient">Вода</li>
          <li class="ingredient">Лунный цветок</li>
        </ul>
      </div>
    </div>
    <div class="detail rarity-epic" id="bomb">
      <img class="item-icon" src="https://i.imgur.com/f9u5cB3.png" alt="">
      <div class="item-title">Бомба огненная</div>
      <p>Наносит огненный урон врагам.</p>
      <div class="ingredients">
        <strong>Ингредиенты:</strong>
        <ul>
          <li class="ingredient">Порох</li>
          <li class="ingredient">Фитиль</li>
          <li class="ingredient">Огненный камень</li>
        </ul>
      </div>
    </div>
  </div>
</div>

<script>
  const tabs = document.querySelectorAll('.tab');
  const details = document.querySelectorAll('.detail');

  tabs.forEach(tab => {
    tab.addEventListener('click', () => {
      tabs.forEach(t => t.classList.remove('active'));
      tab.classList.add('active');

      details.forEach(d => d.classList.remove('active'));
      const selected = document.getElementById(tab.dataset.item);
      if (selected) selected.classList.add('active');
    });
  });
</script>[/html]

0

41

[html]<style>
/* --- Стили для контейнера и боковой панели --- */
.tab-container {
    display: flex;
    width: 100%;
    max-width: 900px;
    margin: 20px auto;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
    font-family: Arial, sans-serif;
}

.tab-sidebar {
    width: 200px;
    flex-shrink: 0;
    background: #474747;
    padding-top: 5px;
}

.tab-content-area {
    flex-grow: 1;
    padding: 10px;
    min-height: 400px;
    position: relative;
}

.tab-radio {
    display: none; /* Скрытие радиокнопок для вкладок */
}

/* --- Стили для вкладок (Меток) --- */
.tab-label {
    display: block;
    padding: 10px 10px;
    text-align: left;
    color: #fff;
    font-weight: bold;
    font-size: 13px;
    line-height: 1.2;
    cursor: pointer;
    background: #5b5b5b; /* Исходный цвет вкладки */
    border-bottom: 1px solid #3d3b37;
    transition: background 0.2s;
}

.tab-label:hover {
    background: #4a4a4a; /* Цвет при наведении */
}

/* --- Стили для контента (Области справа) --- */
.tab-content {
    display: none;
    position: absolute;
    top: 10px;
    left: 10px;
    right: 10px;
    bottom: 10px;
    background: #f0ede1;
    padding: 0;
    overflow: auto;
}

.recipe-block {
    margin-bottom: 10px;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    padding: 10px;
    display: flex;
    flex-direction: column;
}

.recipe-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #a8a39a;
    padding: 5px 10px;
    font-weight: bold;
}

.recipe-ingredients {
    display: flex;
    gap: 5px;
    padding: 10px 0;
}

.ingredient-icon {
    width: 45px;
    height: 45px;
    background-size: cover;
    background-repeat: no-repeat;
    border: 1px solid #3d3b37;
}

/* Заглушки иконок (замените на свои, если эти не загрузятся) */
.icon-kettle { background-image: url('https://upforme.ru/uploads/001c/84/76/2/652792.png'); }
.icon-meat { background-image: url('https://upforme.ru/uploads/001c/84/76/2/54680.png'); }
.icon-bird { background-image: url('https://upforme.ru/uploads/001c/84/76/2/802958.png'); }
.icon-boot { background-image: url('https://upforme.ru/uploads/001c/84/76/2/734200.png'); }
.icon-jar { background-image: url('https://i.imgur.com/P4jWq2L.png'); }
.icon-cabbage { background-image: url('https://i.imgur.com/x0H7Z2L.png'); }
.icon-potato { background-image: url('https://i.imgur.com/jD1uN8e.png'); }
.icon-carrot { background-image: url('https://i.imgur.com/i9qV5hJ.png'); }
.icon-onion { background-image: url('https://i.imgur.com/R3aXN8a.png'); }

/* --- Стили для Квадратика (Чекбокса) --- */

.done-checkbox {
    display: none; /* Скрываем стандартный чекбокс */
}

.checkbox-label {
    display: block;
    width: 20px;
    height: 20px;
    border: 2px solid #3a3a3a; /* Черная рамка */
    background: #f0ede1; /* Светлый фон квадрата */
    cursor: pointer;
    line-height: 18px;
    text-align: center;
    font-size: 14px;
    color: green; /* Цвет галочки */
    transition: background 0.1s;
}

/* Скрываем галочку по умолчанию */
.checkbox-label::after {
    content: '✓';
    display: none;
}

/* Показываем галочку при отмеченном чекбоксе */
.done-checkbox:checked + .checkbox-label::after {
    display: inline;
}

/* --- Логика активации вкладок --- */

/* Меняем цвет метки (вкладки) при активном состоянии */
#tab1:checked ~ .tab-sidebar .label-1,
#tab2:checked ~ .tab-sidebar .label-2,
#tab3:checked ~ .tab-sidebar .label-3,
#tab4:checked ~ .tab-sidebar .label-4 {
    background: #3a3a3a;
}

/* Показываем соответствующий контент при активной вкладке */
#tab1:checked ~ .tab-content-area .content-1,
#tab2:checked ~ .tab-content-area .content-2,
#tab3:checked ~ .tab-content-area .content-3,
#tab4:checked ~ .tab-content-area .content-4 {
    display: block;
}
</style>

<div class="tab-container">
    <input type="radio" id="tab1" name="tab-group" class="tab-radio" checked>
    <input type="radio" id="tab2" name="tab-group" class="tab-radio">
    <input type="radio" id="tab3" name="tab-group" class="tab-radio">
    <input type="radio" id="tab4" name="tab-group" class="tab-radio">

    <div class="tab-sidebar">
        <label for="tab1" class="tab-label label-1">БЛЮДА И<br>ИНГРЕДИЕНТЫ</label>
        <label for="tab2" class="tab-label label-2">ОБЫЧНЫЕ<br>БЛЮДА</label>
        <label for="tab3" class="tab-label label-3">РЕДКИЕ<br>БЛЮДА</label>
        <label for="tab4" class="tab-label label-4">ПРОФЕССИОНАЛЬНЫЕ<br>БЛЮДА</label>
    </div>

    <div class="tab-content-area">
       
        <div class="tab-content content-1">
            <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                Выберите вкладку слева, чтобы увидеть рецепты.
            </p>
        </div>

        <div class="tab-content content-2">
           
            <div class="recipe-block">
                <div class="recipe-header">
                    <span>Вода из лужи (кипячёная, наверное)</span>
                    <div style="width: 25px; height: 25px;">
                        <input type="checkbox" id="recipe1_done" class="done-checkbox">
                        <label for="recipe1_done" class="checkbox-label"></label>
                    </div>
                </div>
                <div class="recipe-header" style="background: #e7e3d8; border-bottom: none; font-weight: normal; font-size: 12px; padding-top: 0;">
                    Пахнет болотом, но выживешь.
                </div>
                <div class="recipe-ingredients">
                    <div class="ingredient-icon icon-kettle"></div>
                    <div class="ingredient-icon icon-meat"></div>
                    <div class="ingredient-icon icon-bird"></div>
                </div>
            </div>

            <div class="recipe-block">
                <div class="recipe-header">
                    <span>Второй рецепт</span>
                    <div style="width: 25px; height: 25px;">
                        <input type="checkbox" id="recipe2_done" class="done-checkbox">
                        <label for="recipe2_done" class="checkbox-label"></label>
                    </div>
                </div>
                <div class="recipe-header" style="background: #e7e3d8; border-bottom: none; font-weight: normal; font-size: 12px; padding-top: 0;">
                    Описание второго блюда.
                </div>
                <div class="recipe-ingredients">
                    <div class="ingredient-icon icon-boot"></div>
                    <div class="ingredient-icon icon-jar"></div>
                </div>
            </div>

        </div>

        <div class="tab-content content-3">
             <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                Контент для редких блюд пока пуст.
            </p>
        </div>

        <div class="tab-content content-4">
           
             <div class="recipe-block">
                <div class="recipe-header">
                    <span>Сложный профессиональный суп</span>
                    <div style="width: 25px; height: 25px;">
                        <input type="checkbox" id="recipe3_done" class="done-checkbox">
                        <label for="recipe3_done" class="checkbox-label"></label>
                    </div>
                </div>
                <div class="recipe-header" style="background: #e7e3d8; border-bottom: none; font-weight: normal; font-size: 12px; padding-top: 0;">
                    Рецепт для настоящих мастеров.
                </div>
                <div class="recipe-ingredients">
                    <div class="ingredient-icon icon-potato"></div>
                    <div class="ingredient-icon icon-carrot"></div>
                    <div class="ingredient-icon icon-onion"></div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
// Функция для сохранения состояния чекбокса
function saveCheckboxState(checkbox) {
    // Используем localStorage для сохранения состояния по ID
    localStorage.setItem(checkbox.id, checkbox.checked);
}

// Функция для загрузки состояния чекбокса
function loadCheckboxState(checkbox) {
    // Получаем сохраненное состояние из localStorage
    const savedState = localStorage.getItem(checkbox.id);
   
    // Если состояние было сохранено, применяем его
    if (savedState !== null) {
        checkbox.checked = (savedState === 'true'); // localStorage хранит как строку
    }
}

// Находим все чекбоксы с классом 'done-checkbox'
const checkboxes = document.querySelectorAll('.done-checkbox');

// Применяем логику ко всем найденным чекбоксам
checkboxes.forEach(checkbox => {
    // 1. При загрузке страницы: загружаем сохраненное состояние
    loadCheckboxState(checkbox);
   
    // 2. При изменении: сохраняем новое состояние
    checkbox.addEventListener('change', () => {
        saveCheckboxState(checkbox);
    });
});
</script>[/html]

0

42

[html]<style>
/* --- Стили для контейнера и боковой панели --- */
.tab-container {
    display: flex;
    width: 100%;
    max-width: 900px;
    margin: 20px auto;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
    font-family: Arial, sans-serif;
}

.tab-sidebar {
    width: 200px;
    flex-shrink: 0;
    background: #474747;
    padding-top: 5px;
}

.tab-content-area {
    flex-grow: 1;
    padding: 10px;
    min-height: 400px;
    position: relative;
}

.tab-radio {
    display: none; /* Скрытие радиокнопок для вкладок */
}

/* --- Стили для вкладок (Меток) --- */
.tab-label {
    display: block;
    padding: 10px 10px;
    text-align: left;
    color: #fff;
    font-weight: bold;
    font-size: 13px;
    line-height: 1.2;
    cursor: pointer;
    background: #5b5b5b;
    border-bottom: 1px solid #3d3b37;
    transition: background 0.2s;
}

.tab-label:hover {
    background: #4a4a4a;
}

/* --- Стили для контента (Области справа) --- */
.tab-content {
    display: none;
    position: absolute;
    top: 10px;
    left: 10px;
    right: 10px;
    bottom: 10px;
    background: #f0ede1;
    padding: 0;
    overflow: auto;
}

.recipe-block {
    margin-bottom: 10px;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    padding: 10px;
    display: flex;
    flex-direction: column;
}

/* --- НОВЫЕ СТИЛИ ДЛЯ ШАПКИ БЛЮДА --- */
.recipe-header {
    display: flex;
    justify-content: space-between;
    align-items: stretch; /* Растягиваем дочерние элементы по высоте */
    border: 1px solid #3d3b37;
    margin-bottom: 5px; /* Отступ от ингредиентов */
}

.recipe-info {
    display: flex; /* Для размещения чекбокса и текста в ряд */
    background: #a8a39a;
    padding: 5px 10px;
    flex-grow: 1; /* Занимает все место, кроме картинки */
    flex-direction: column;
    justify-content: center;
}

.recipe-title-line {
    display: flex;
    align-items: center;
    font-weight: bold;
    margin-bottom: 2px;
}

.recipe-description {
    font-weight: normal;
    font-size: 12px;
    line-height: 1.2;
}

.recipe-image-box {
    width: 80px; /* Ширина блока картинки */
    flex-shrink: 0;
    background: #4a4a4a; /* Фоновая заливка, если картинка не загрузится */
}

.recipe-image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover; /* Картинка будет покрывать весь блок */
}
/* --- КОНЕЦ НОВЫХ СТИЛЕЙ --- */

.recipe-ingredients {
    display: flex;
    gap: 5px;
    padding: 10px 0;
}

.ingredient-icon {
    width: 45px;
    height: 45px;
    background-size: cover;
    background-repeat: no-repeat;
    border: 1px solid #3d3b37;
}

/* Заглушки иконок (замените на свои) */
.icon-kettle { background-image: url('https://i.imgur.com/gK9J63n.png'); }
.icon-meat { background-image: url('https://i.imgur.com/Gj3cO9h.png'); }
.icon-bird { background-image: url('https://i.imgur.com/Q2yD7fE.png'); }
.icon-boot { background-image: url('https://i.imgur.com/wP0c5d5.png'); }
.icon-jar { background-image: url('https://i.imgur.com/P4jWq2L.png'); }
.icon-cabbage { background-image: url('https://i.imgur.com/x0H7Z2L.png'); }
.icon-potato { background-image: url('https://i.imgur.com/jD1uN8e.png'); }
.icon-carrot { background-image: url('https://i.imgur.com/i9qV5hJ.png'); }
.icon-onion { background-image: url('https://i.imgur.com/R3aXN8a.png'); }

/* --- Стили для Квадратика (Чекбокса) --- */

.done-checkbox {
    display: none; /* Скрываем стандартный чекбокс */
}

.checkbox-label {
    display: block;
    width: 20px;
    height: 20px;
    border: 2px solid #3a3a3a; /* Черная рамка */
    background: #f0ede1; /* Светлый фон квадрата */
    cursor: pointer;
    line-height: 18px;
    text-align: center;
    font-size: 14px;
    color: green; /* Цвет галочки */
    margin-right: 5px; /* Отступ от названия блюда */
    flex-shrink: 0;
}

/* Скрываем галочку по умолчанию */
.checkbox-label::after {
    content: '✓';
    display: none;
}

/* Показываем галочку при отмеченном чекбоксе */
.done-checkbox:checked + .checkbox-label::after {
    display: inline;
}

/* --- Логика активации вкладок --- */

/* Меняем цвет метки (вкладки) при активном состоянии */
#tab1:checked ~ .tab-sidebar .label-1,
#tab2:checked ~ .tab-sidebar .label-2,
#tab3:checked ~ .tab-sidebar .label-3,
#tab4:checked ~ .tab-sidebar .label-4 {
    background: #3a3a3a;
}

/* Показываем соответствующий контент при активной вкладке */
#tab1:checked ~ .tab-content-area .content-1,
#tab2:checked ~ .tab-content-area .content-2,
#tab3:checked ~ .tab-content-area .content-3,
#tab4:checked ~ .tab-content-area .content-4 {
    display: block;
}
</style>

<div class="tab-container">
    <input type="radio" id="tab1" name="tab-group" class="tab-radio" checked>
    <input type="radio" id="tab2" name="tab-group" class="tab-radio">
    <input type="radio" id="tab3" name="tab-group" class="tab-radio">
    <input type="radio" id="tab4" name="tab-group" class="tab-radio">

    <div class="tab-sidebar">
        <label for="tab1" class="tab-label label-1">БЛЮДА И<br>ИНГРЕДИЕНТЫ</label>
        <label for="tab2" class="tab-label label-2">ОБЫЧНЫЕ<br>БЛЮДА</label>
        <label for="tab3" class="tab-label label-3">РЕДКИЕ<br>БЛЮДА</label>
        <label for="tab4" class="tab-label label-4">ПРОФЕССИОНАЛЬНЫЕ<br>БЛЮДА</label>
    </div>

    <div class="tab-content-area">
       
        <div class="tab-content content-1">
            <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                Выберите вкладку слева, чтобы увидеть рецепты.
            </p>
        </div>

        <div class="tab-content content-2">
           
            <div class="recipe-block">
                <div class="recipe-header">
                   
                    <div class="recipe-info">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe1_done" class="done-checkbox">
                            <label for="recipe1_done" class="checkbox-label"></label>
                            <span>Вода из лужи (кипячёная, наверное)</span>
                        </div>
                        <div class="recipe-description">
                            Пахнет болотом, но выживешь.
                        </div>
                    </div>
                   
                    <div class="recipe-image-box">
                        <img src="https://i.imgur.com/jS72S9F.png" alt="Вода из лужи" class="recipe-image">
                    </div>
                </div>

                <div class="recipe-ingredients">
                    <div class="ingredient-icon icon-kettle"></div>
                    <div class="ingredient-icon icon-meat"></div>
                    <div class="ingredient-icon icon-bird"></div>
                </div>
            </div>

            <div class="recipe-block">
                <div class="recipe-header">
                   
                    <div class="recipe-info">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe2_done" class="done-checkbox">
                            <label for="recipe2_done" class="checkbox-label"></label>
                            <span>Второй рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание второго блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-image-box">
                         <img src="https://i.imgur.com/k9vYl8g.png" alt="Второй рецепт" class="recipe-image">
                    </div>
                </div>
               
                <div class="recipe-ingredients">
                    <div class="ingredient-icon icon-boot"></div>
                    <div class="ingredient-icon icon-jar"></div>
                </div>
            </div>

        </div>

        <div class="tab-content content-3">
             <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                Контент для редких блюд пока пуст.
            </p>
        </div>

        <div class="tab-content content-4">
           
             <div class="recipe-block">
                <div class="recipe-header">
                   
                    <div class="recipe-info">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe3_done" class="done-checkbox">
                            <label for="recipe3_done" class="checkbox-label"></label>
                            <span>Сложный профессиональный суп</span>
                        </div>
                        <div class="recipe-description">
                            Рецепт для настоящих мастеров.
                        </div>
                    </div>
                   
                    <div class="recipe-image-box">
                         <img src="https://i.imgur.com/T0bS18K.png" alt="Профессиональный суп" class="recipe-image">
                    </div>
                </div>
               
                <div class="recipe-ingredients">
                    <div class="ingredient-icon icon-potato"></div>
                    <div class="ingredient-icon icon-carrot"></div>
                    <div class="ingredient-icon icon-onion"></div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
// Функция для сохранения состояния чекбокса
function saveCheckboxState(checkbox) {
    localStorage.setItem(checkbox.id, checkbox.checked);
}

// Функция для загрузки состояния чекбокса
function loadCheckboxState(checkbox) {
    const savedState = localStorage.getItem(checkbox.id);
    if (savedState !== null) {
        checkbox.checked = (savedState === 'true');
    }
}

// Находим все чекбоксы с классом 'done-checkbox'
const checkboxes = document.querySelectorAll('.done-checkbox');

// Применяем логику ко всем найденным чекбоксам
checkboxes.forEach(checkbox => {
    // 1. При загрузке страницы: загружаем сохраненное состояние
    loadCheckboxState(checkbox);
   
    // 2. При изменении: сохраняем новое состояние
    checkbox.addEventListener('change', () => {
        saveCheckboxState(checkbox);
    });
});
</script>[/html]

0

43

[html]<style>
/* --- Стили для контейнера и боковой панели --- */
.tab-container {
    display: flex;
    width: 100%;
    max-width: 900px;
    margin: 20px auto;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
    font-family: Arial, sans-serif;
}

.tab-sidebar {
    width: 25%;
    flex-shrink: 0;
    background: #474747;
    padding-top: 5px;
}

.tab-content-area {
    flex-grow: 1;
    padding: 10px;
    min-height: 400px;
    position: relative;
}

.tab-radio {
    display: none;
}

/* --- Стили для вкладок --- */
.tab-label {
    display: block;
    padding: 10px 10px;
    text-align: left;
    color: #fff;
    font-weight: bold;
    font-size: 13px;
    line-height: 1.2;
    cursor: pointer;
    background: #5b5b5b;
    border-bottom: 1px solid #3d3b37;
    transition: background 0.2s;
}

.tab-label:hover {
    background: #4a4a4a;
}

/* --- Стили для области контента --- */
.tab-content {
    display: none;
    position: absolute;
    top: 10px;
    left: 10px;
    right: 10px;
    bottom: 10px;
    background: #f0ede1;
    padding: 10px; /* Добавим небольшой внутренний отступ */
    overflow: auto;
}

/* --- НОВЫЕ СТИЛИ ДЛЯ БЛОКА РЕЦЕПТОВ ВНУТРИ ВКЛАДКИ --- */
.recipe-line {
    display: flex;
    justify-content: space-between; /* Для разделения рецепта и картинки */
    gap: 10px;
    margin-bottom: 20px; /* Отступ между строками рецептов */
    align-items: flex-start;
}

/* Блок, содержащий чекбокс, название, описание и ингредиенты */
.recipe-details {
    flex-grow: 1;
    display: flex;
    flex-direction: column;
}

/* Блок, содержащий картинку блюда справа */
.recipe-image-side {
    width: 100px; /* Ширина правой картинки (Черного квадрата) */
    height: 100px;
    flex-shrink: 0;
    border: 1px solid #3d3b37;
    background: #4a4a4a; /* Черный/темный фон */
}

.recipe-image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Заголовок (название + описание) */
.recipe-header {
    background: #a8a39a;
    border: 1px solid #3d3b37;
    padding: 5px;
    margin-bottom: 5px; /* Отступ от ингредиентов */
    display: flex;
    flex-direction: column;
}

.recipe-title-line {
    display: flex;
    align-items: center;
    font-weight: bold;
    font-size: 14px;
    padding-bottom: 2px;
}

.recipe-description {
    font-weight: normal;
    font-size: 12px;
    line-height: 1.2;
    padding-left: 27px; /* Отступ, равный чекбоксу + отступ, чтобы описание начиналось под названием */
}

/* Блок ингредиентов */
.recipe-ingredients {
    display: flex;
    gap: 5px;
    padding: 0;
}

.ingredient-icon {
    width: 45px;
    height: 45px;
    background-size: cover;
    background-repeat: no-repeat;
    border: 1px solid #3d3b37;
}

/* Заглушки иконок */
.icon-kettle { background-image: url('https://upforme.ru/uploads/001c/84/76/2/54680.png'); }
.icon-meat { background-image: url('https://i.imgur.com/Gj3cO9h.png'); }
.icon-bird { background-image: url('https://i.imgur.com/Q2yD7fE.png'); }
.icon-boot { background-image: url('https://i.imgur.com/wP0c5d5.png'); }
.icon-jar { background-image: url('https://i.imgur.com/P4jWq2L.png'); }
.icon-cabbage { background-image: url('https://upforme.ru/uploads/001c/84/76/2/54680.png'); }
.icon-potato { background-image: url('https://upforme.ru/uploads/001c/84/76/2/54680.png'); }
.icon-carrot { background-image: url('https://i.imgur.com/i9qV5hJ.png'); }
.icon-onion { background-image: url('https://i.imgur.com/R3aXN8a.png'); }

/* --- Стили для Квадратика (Чекбокса) --- */

.done-checkbox {
    display: none;
}

.checkbox-label {
    display: block;
    width: 20px;
    height: 20px;
    border: 2px solid #3a3a3a;
    background: #f0ede1;
    cursor: pointer;
    line-height: 18px;
    text-align: center;
    font-size: 14px;
    color: green;
    margin-right: 5px;
    flex-shrink: 0;
}

/* Скрываем галочку по умолчанию */
.checkbox-label::after {
    content: '✓';
    display: none;
}

/* Показываем галочку при отмеченном чекбоксе */
.done-checkbox:checked + .checkbox-label::after {
    display: inline;
}

/* --- Логика активации вкладок --- */

#tab1:checked ~ .tab-sidebar .label-1,
#tab2:checked ~ .tab-sidebar .label-2,
#tab3:checked ~ .tab-sidebar .label-3,
#tab4:checked ~ .tab-sidebar .label-4 {
    background: #3a3a3a;
}

#tab1:checked ~ .tab-content-area .content-1,
#tab2:checked ~ .tab-content-area .content-2,
#tab3:checked ~ .tab-content-area .content-3,
#tab4:checked ~ .tab-content-area .content-4 {
    display: block;
}
</style>

<div class="tab-container">
    <input type="radio" id="tab1" name="tab-group" class="tab-radio" checked>
    <input type="radio" id="tab2" name="tab-group" class="tab-radio">
    <input type="radio" id="tab3" name="tab-group" class="tab-radio">
    <input type="radio" id="tab4" name="tab-group" class="tab-radio">

    <div class="tab-sidebar">
        <label for="tab1" class="tab-label label-1">БЛЮДА И<br>ИНГРЕДИЕНТЫ</label>
        <label for="tab2" class="tab-label label-2">ОБЫЧНЫЕ<br>БЛЮДА</label>
        <label for="tab3" class="tab-label label-3">РЕДКИЕ<br>БЛЮДА</label>
        <label for="tab4" class="tab-label label-4">ПРОФЕССИОНАЛЬНЫЕ<br>БЛЮДА</label>
    </div>

    <div class="tab-content-area">
       
        <div class="tab-content content-1">
            <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                Выберите вкладку слева, чтобы увидеть рецепты.
            </p>
        </div>

        <div class="tab-content content-2">
           
            <div class="recipe-line">
               
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe1_done" class="done-checkbox">
                            <label for="recipe1_done" class="checkbox-label"></label>
                            <span>Вода из лужи (кипячёная, наверное)</span>
                        </div>
                        <div class="recipe-description">
                            Пахнет болотом, но выживешь.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-kettle"></div>
                        <div class="ingredient-icon icon-meat"></div>
                        <div class="ingredient-icon icon-bird"></div>
                        <div class="ingredient-icon icon-boot"></div>
                        <div class="ingredient-icon icon-jar"></div>
                        <div class="ingredient-icon icon-cabbage"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://i.imgur.com/k9vYl8g.png" alt="Вода из лужи" class="recipe-image">
                </div>
            </div>
           
            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe2_done" class="done-checkbox">
                            <label for="recipe2_done" class="checkbox-label"></label>
                            <span>Второй обычный рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание второго блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-boot"></div>
                        <div class="ingredient-icon icon-jar"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/54680.png" alt="Второй рецепт" class="recipe-image">
                </div>
            </div>

        </div>

        <div class="tab-content content-3">
             <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                Контент для редких блюд пока пуст.
            </p>
        </div>

        <div class="tab-content content-4">
           
             <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe3_done" class="done-checkbox">
                            <label for="recipe3_done" class="checkbox-label"></label>
                            <span>Сложный профессиональный суп</span>
                        </div>
                        <div class="recipe-description">
                            Рецепт для настоящих мастеров.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-potato"></div>
                        <div class="ingredient-icon icon-carrot"></div>
                        <div class="ingredient-icon icon-onion"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://i.imgur.com/jS72S9F.png" alt="Профессиональный суп" class="recipe-image">
                </div>
            </div>

        </div>
    </div>
</div>

<script>
// Функция для сохранения состояния чекбокса
function saveCheckboxState(checkbox) {
    localStorage.setItem(checkbox.id, checkbox.checked);
}

// Функция для загрузки состояния чекбокса
function loadCheckboxState(checkbox) {
    const savedState = localStorage.getItem(checkbox.id);
    if (savedState !== null) {
        checkbox.checked = (savedState === 'true');
    }
}

// Находим все чекбоксы с классом 'done-checkbox'
const checkboxes = document.querySelectorAll('.done-checkbox');

// Применяем логику ко всем найденным чекбоксам
checkboxes.forEach(checkbox => {
    loadCheckboxState(checkbox);
   
    checkbox.addEventListener('change', () => {
        saveCheckboxState(checkbox);
    });
});
</script>[/html]

0

44

[html]<style>
/* -------------------------------------------------------------------
|  ОБЩИЕ СТИЛИ КОНТЕЙНЕРА И ВКЛАДОК
|-------------------------------------------------------------------- */
.tab-container {
    display: flex;
    width: 100%;
    max-width: 900px;
    margin: 20px auto;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
    font-family: Arial, sans-serif;
}

.tab-sidebar {
    width: 25%;
    flex-shrink: 0;
    background: #474747;
    padding-top: 5px;
}

.tab-content-area {
    flex-grow: 1;
    padding: 10px;
    min-height: 400px;
    position: relative;
}

.tab-radio {
    display: none;
}

/* Стили для меток-вкладок */
.tab-label {
    display: block;
    padding: 10px 10px;
    text-align: left;
    color: #fff;
    font-weight: bold;
    font-size: 13px;
    line-height: 1.2;
    cursor: pointer;
    background: #5b5b5b;
    border-bottom: 1px solid #3d3b37;
    transition: background 0.2s;
}

.tab-label:hover {
    background: #4a4a4a;
}

/* --- Логика активации вкладок --- */
#tab1:checked ~ .tab-sidebar .label-1,
#tab2:checked ~ .tab-sidebar .label-2,
#tab3:checked ~ .tab-sidebar .label-3,
#tab4:checked ~ .tab-sidebar .label-4 {
    background: #3a3a3a;
}

.tab-content {
    display: none;
    position: absolute;
    top: 10px;
    left: 10px;
    right: 2%;
    bottom: 10px;
    background: #f0ede1;
    padding: 10px;
    overflow: auto;
}

#tab1:checked ~ .tab-content-area .content-1,
#tab2:checked ~ .tab-content-area .content-2,
#tab3:checked ~ .tab-content-area .content-3,
#tab4:checked ~ .tab-content-area .content-4 {
    display: block;
}

/* -------------------------------------------------------------------
|  СТИЛИ ДЛЯ КОНТЕНТА 1 (БЛЮДА И ИНГРЕДИЕНТЫ)
|-------------------------------------------------------------------- */

.ingredients-list-header {
    background: #a8a39a;
    border: 1px solid #3d3b37;
    padding: 5px 10px;
    text-align: center;
    font-weight: bold;
    margin-bottom: 10px;
}

.ingredients-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 2%;
    justify-content: flex-start;
    padding-left: 5px;
}

.ingredient-item {
    text-align: center;
    width: 80px; /* Ширина элемента с подписью */
}

.main-ingredient-icon {
    width: 80px;
    height: 80px;
    margin-bottom: 5px;
    background-size: cover;
    background-repeat: no-repeat;
    border: 1px solid #3d3b37;
}

.ing-icon-egg { background-image: url('https://upforme.ru/uploads/001c/84/76/2/916238.png'); } /* Замените на ваши ссылки */
.ing-icon-flour { background-image: url('https://i.imgur.com/k6wT3bS.png'); }
.ing-icon-meat-raw { background-image: url('https://i.imgur.com/S8hS5QW.png'); }
.ing-icon-pigeon { background-image: url('https://i.imgur.com/Q2yD7fE.png'); }

/* -------------------------------------------------------------------
|  СТИЛИ ДЛЯ РЕЦЕПТОВ (КОНТЕНТ 2, 3, 4)
|-------------------------------------------------------------------- */

.recipe-line {
    display: flex;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 20px;
    align-items: flex-start;
}

.recipe-details {
    flex-grow: 1;
    display: flex;
    flex-direction: column;
}

.recipe-image-side {
    width: 100px;
    height: 100px;
    flex-shrink: 0;
    border: 1px solid #3d3b37;
    background: #4a4a4a;
}

.recipe-image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.recipe-header {
    background: #a8a39a;
    border: 1px solid #3d3b37;
    padding: 5px;
    margin-bottom: 5px;
    display: flex;
    flex-direction: column;
}

.recipe-title-line {
    display: flex;
    align-items: center;
    font-weight: bold;
    font-size: 14px;
    padding-bottom: 2px;
}

.recipe-description {
    font-weight: normal;
    font-size: 12px;
    line-height: 1.2;
    padding-left: 27px;
}

.recipe-ingredients {
    display: flex;
    gap: 5px;
    padding: 0;
}

.ingredient-icon {
    width: 45px;
    height: 45px;
    background-size: cover;
    background-repeat: no-repeat;
    border: 1px solid #3d3b37;
}

/* Заглушки иконок ингредиентов для рецептов */
.icon-kettle { background-image: url('https://upforme.ru/uploads/001c/84/76/2/714226.png'); }
.icon-meat { background-image: url('https://upforme.ru/uploads/001c/84/76/2/935896.png'); }
.icon-bird { background-image: url('https://upforme.ru/uploads/001c/84/76/2/108191.png'); }
.icon-boot { background-image: url('https://upforme.ru/uploads/001c/84/76/2/837022.png'); }
.icon-jar { background-image: url('https://upforme.ru/uploads/001c/84/76/2/414360.png'); }
.icon-cabbage { background-image: url('https://upforme.ru/uploads/001c/84/76/2/709377.png'); }
.icon-potato { background-image: url('https://upforme.ru/uploads/001c/84/76/2/857076.png'); }
.icon-carrot { background-image: url('https://upforme.ru/uploads/001c/84/76/2/709377.png'); }
.icon-onion { background-image: url('https://upforme.ru/uploads/001c/84/76/2/709377.png'); }

/* --- Стили для Квадратика (Чекбокса) --- */
.done-checkbox {
    display: none;
}
.checkbox-label {
    display: block;
    width: 20px;
    height: 20px;
    border: 2px solid #3a3a3a;
    background: #f0ede1;
    cursor: pointer;
    line-height: 18px;
    text-align: center;
    font-size: 14px;
    color: green;
    margin-right: 5px;
    flex-shrink: 0;
}
.checkbox-label::after {
    content: '✓';
    display: none;
}
.done-checkbox:checked + .checkbox-label::after {
    display: inline;
}

</style>

<div class="tab-container">
    <input type="radio" id="tab1" name="tab-group" class="tab-radio" checked>
    <input type="radio" id="tab2" name="tab-group" class="tab-radio">
    <input type="radio" id="tab3" name="tab-group" class="tab-radio">
    <input type="radio" id="tab4" name="tab-group" class="tab-radio">

    <div class="tab-sidebar">
        <label for="tab1" class="tab-label label-1">БЛЮДА И<br>ИНГРЕДИЕНТЫ</label>
        <label for="tab2" class="tab-label label-2">ОБЫЧНЫЕ<br>БЛЮДА</label>
        <label for="tab3" class="tab-label label-3">РЕДКИЕ<br>БЛЮДА</label>
        <label for="tab4" class="tab-label label-4">ПРОФЕССИОНАЛЬНЫЕ<br>БЛЮДА</label>
    </div>

    <div class="tab-content-area">
       
        <div class="tab-content content-1">
            <p style="border: 1px solid #3d3b37; background: #f0ede1; padding: 15px; margin-bottom: 10px;">
                Выберите вкладку слева, чтобы увидеть рецепты.
            </p>
           
            <div class="ingredients-list-header">ИНГРЕДИЕНТЫ</div>
           
            <div class="ingredients-grid">
                <div class="ingredient-item">
                    <div class="main-ingredient-icon ing-icon-egg"></div>
                    <span style="font-size: 12px; font-weight: bold;">НАЗВАНИЕ</span>
                </div>
                <div class="ingredient-item">
                    <div class="main-ingredient-icon ing-icon-flour"></div>
                    <span style="font-size: 12px; font-weight: bold;">НАЗВАНИЕ</span>
                </div>
                <div class="ingredient-item">
                    <div class="main-ingredient-icon ing-icon-meat-raw"></div>
                    <span style="font-size: 12px; font-weight: bold;">НАЗВАНИЕ</span>
                </div>
                <div class="ingredient-item">
                    <div class="main-ingredient-icon ing-icon-pigeon"></div>
                    <span style="font-size: 12px; font-weight: bold;">НАЗВАНИЕ</span>
                </div>
                </div>
        </div>

        <div class="tab-content content-2">
           
            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe1_done" class="done-checkbox">
                            <label for="recipe1_done" class="checkbox-label"></label>
                            <span>Вода из лужи (кипячёная, наверное)</span>
                        </div>
                        <div class="recipe-description">
                            Пахнет болотом, но выживешь.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-kettle"></div>
                        <div class="ingredient-icon icon-meat"></div>
                        <div class="ingredient-icon icon-bird"></div>
                        <div class="ingredient-icon icon-boot"></div>
                        <div class="ingredient-icon icon-jar"></div>
                        <div class="ingredient-icon icon-cabbage"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/718861.png" alt="Вода из лужи" class="recipe-image">
                </div>
            </div>
           
            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe2_done" class="done-checkbox">
                            <label for="recipe2_done" class="checkbox-label"></label>
                            <span>Второй обычный рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание второго блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-boot"></div>
                        <div class="ingredient-icon icon-jar"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/157323.png" alt="Второй рецепт" class="recipe-image">
                </div>
            </div>

            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe3_done" class="done-checkbox">
                            <label for="recipe3_done" class="checkbox-label"></label>
                            <span>Второй обычный рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание второго блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-boot"></div>
                        <div class="ingredient-icon icon-jar"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/157323.png" alt="Второй рецепт" class="recipe-image">
                </div>
            </div>

        </div>

        <div class="tab-content content-3">
             <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                [ЗДЕСЬ МОЖНО ДОБАВИТЬ РЕДКИЕ РЕЦЕПТЫ]
            </p>
        </div>

        <div class="tab-content content-4">
           
             <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe3_done" class="done-checkbox">
                            <label for="recipe3_done" class="checkbox-label"></label>
                            <span>Сложный профессиональный суп</span>
                        </div>
                        <div class="recipe-description">
                            Рецепт для настоящих мастеров.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <div class="ingredient-icon icon-potato"></div>
                        <div class="ingredient-icon icon-carrot"></div>
                        <div class="ingredient-icon icon-onion"></div>
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://i.imgur.com/jS72S9F.png" alt="Профессиональный суп" class="recipe-image">
                </div>
            </div>

        </div>
    </div>
</div>

<script>
// Функция для сохранения состояния чекбокса
function saveCheckboxState(checkbox) {
    localStorage.setItem(checkbox.id, checkbox.checked);
}

// Функция для загрузки состояния чекбокса
function loadCheckboxState(checkbox) {
    const savedState = localStorage.getItem(checkbox.id);
    if (savedState !== null) {
        checkbox.checked = (savedState === 'true');
    }
}

// Находим все чекбоксы с классом 'done-checkbox'
const checkboxes = document.querySelectorAll('.done-checkbox');

// Применяем логику ко всем найденным чекбоксам
checkboxes.forEach(checkbox => {
    loadCheckboxState(checkbox);
   
    checkbox.addEventListener('change', () => {
        saveCheckboxState(checkbox);
    });
});
</script>[/html]

0

45

[html]

<style> /* ------------------- ОБЩИЕ СТИЛИ ------------------- */ .tab-container { display: flex; width: 100%; max-width: 900px; margin: 20px auto; border: 1px solid #3d3b37; background: #e7e3d8; box-shadow: 2px 2px 5px rgba(0,0,0,0.5); font-family: Arial, sans-serif; } .tab-sidebar { width: 25%; flex-shrink: 0; background: #474747; padding-top: 5px; } .tab-content-area { flex-grow: 1; padding: 10px; min-height: 400px; position: relative; } .tab-radio { display: none; } .tab-label { display: block; padding: 10px; color: #fff; font-weight: bold; font-size: 13px; background: #5b5b5b; border-bottom: 1px solid #3d3b37; cursor: pointer; } .tab-label:hover { background: #4a4a4a; } #tab1:checked ~ .tab-sidebar .label-1, #tab2:checked ~ .tab-sidebar .label-2, #tab3:checked ~ .tab-sidebar .label-3, #tab4:checked ~ .tab-sidebar .label-4 { background: #3a3a3a; } .tab-content { display: none; position: absolute; top: 10px; left: 10px; right: 2%; bottom: 10px; background: #f0ede1; padding: 10px; overflow: auto; } #tab1:checked ~ .tab-content-area .content-1, #tab2:checked ~ .tab-content-area .content-2, #tab3:checked ~ .tab-content-area .content-3, #tab4:checked ~ .tab-content-area .content-4 { display: block; } /* ------------------- РЕЦЕПТЫ ------------------- */ .recipe-item { display: flex; justify-content: space-between; margin-bottom: 20px; border-bottom: 1px dashed #999; padding-bottom: 10px; } .recipe-details { flex-grow: 1; display: flex; flex-direction: column; } .recipe-header { background: #a8a39a; border: 1px solid #3d3b37; padding: 5px; margin-bottom: 5px; } .recipe-title-line { display: flex; align-items: center; font-weight: bold; font-size: 14px; } .recipe-description { font-size: 12px; padding-left: 25px; } .recipe-ingredients { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 5px; } .ingredient-icon { width: 45px; height: 45px; background-size: cover; border: 1px solid #3d3b37; } .recipe-image-side { width: 100px; height: 100px; border: 1px solid #3d3b37; background: #4a4a4a; flex-shrink: 0; } .recipe-image { width: 100%; height: 100%; object-fit: cover; } /* Чекбоксы выполнения */ .done-checkbox { display: none; } .checkbox-label { display: block; width: 20px; height: 20px; border: 2px solid #3a3a3a; background: #f0ede1; text-align: center; font-size: 14px; color: green; margin-right: 5px; cursor: pointer; } .checkbox-label::after { content: '✓'; display: none; } .done-checkbox:checked + .checkbox-label::after { display: inline; } </style> <div class="tab-container"> <input type="radio" id="tab1" name="tab-group" class="tab-radio" checked> <input type="radio" id="tab2" name="tab-group" class="tab-radio"> <input type="radio" id="tab3" name="tab-group" class="tab-radio"> <input type="radio" id="tab4" name="tab-group" class="tab-radio"> <div class="tab-sidebar"> <label for="tab1" class="tab-label label-1">ИНГРЕДИЕНТЫ</label> <label for="tab2" class="tab-label label-2">ОБЫЧНЫЕ</label> <label for="tab3" class="tab-label label-3">РЕДКИЕ</label> <label for="tab4" class="tab-label label-4">ПРОФЕССИОНАЛЬНЫЕ</label> </div> <div class="tab-content-area">
<!-- Вкладка 1 -->
<div class="tab-content content-1">
  <p style="border:1px solid #3d3b37; background:#f0ede1; padding:15px;">Выберите вкладку слева, чтобы увидеть рецепты.</p>
</div>

<!-- Вкладка 1 -->
<div class="tab-content content-1">
  <p style="border:1px solid #3d3b37; background:#f0ede1; padding:15px;">Выберите вкладку слева, чтобы увидеть рецепты.</p>
</div>

<!-- Вкладка 2 — ОБЫЧНЫЕ -->
<div class="tab-content content-2">
  <div class="recipe-item"
       data-title="Вода из лужи (кипячёная, наверное)"
       data-desc="Пахнет болотом, но выживешь."
       data-image="https://upforme.ru/uploads/001c/84/76/2/718861.png">
    <div class="recipe-details">
      <div class="recipe-header">
        <div class="recipe-title-line">
          <input type="checkbox" id="r1" class="done-checkbox"><label for="r1" class="checkbox-label"></label>
          <span class="recipe-title"></span>
        </div>
        <div class="recipe-description"></div>
      </div>
      <div class="recipe-ingredients">
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/714226.png')"></div>
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/935896.png')"></div>
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/108191.png')"></div>
      </div>
    </div>
    <div class="recipe-image-side"><img class="recipe-image"></div>
  </div>

  <div class="recipe-item"
       data-title="Второй обычный рецепт"
       data-desc="Описание второго блюда."
       data-image="https://upforme.ru/uploads/001c/84/76/2/157323.png">
    <div class="recipe-details">
      <div class="recipe-header">
        <div class="recipe-title-line">
          <input type="checkbox" id="r2" class="done-checkbox"><label for="r2" class="checkbox-label"></label>
          <span class="recipe-title"></span>
        </div>
        <div class="recipe-description"></div>
      </div>
      <div class="recipe-ingredients">
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/837022.png')"></div>
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/414360.png')"></div>
      </div>
    </div>
    <div class="recipe-image-side"><img class="recipe-image"></div>
  </div>
</div>

<!-- Вкладка 3 — РЕДКИЕ -->
<div class="tab-content content-3">
  <p style="padding:15px; border:1px solid #3d3b37; background:#f0ede1; font-style:italic;">Добавь свои редкие рецепты здесь</p>
</div>

<!-- Вкладка 4 — ПРОФЕССИОНАЛЬНЫЕ -->
<div class="tab-content content-4">
  <div class="recipe-item"
       data-title="Сложный профессиональный суп"
       data-desc="Рецепт для настоящих мастеров."
       data-image="https://i.imgur.com/jS72S9F.png">
    <div class="recipe-details">
      <div class="recipe-header">
        <div class="recipe-title-line">
          <input type="checkbox" id="r3" class="done-checkbox"><label for="r3" class="checkbox-label"></label>
          <span class="recipe-title"></span>
        </div>
        <div class="recipe-description"></div>
      </div>
      <div class="recipe-ingredients">
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/857076.png')"></div>
        <div class="ingredient-icon" style="background-image:url('https://upforme.ru/uploads/001c/84/76/2/709377.png')"></div>
      </div>
    </div>
    <div class="recipe-image-side"><img class="recipe-image"></div>
  </div>
</div>
</div> </div> <script> // Подставляем данные в карточки document.querySelectorAll('.recipe-item').forEach(item => { const title = item.dataset.title; const desc = item.dataset.desc; const img = item.dataset.image; item.querySelector('.recipe-title').textContent = title; item.querySelector('.recipe-description').textContent = desc; item.querySelector('.recipe-image').src = img; }); // Сохраняем состояние чекбоксов function saveCheckboxState(checkbox) { localStorage.setItem(checkbox.id, checkbox.checked); } function loadCheckboxState(checkbox) { const saved = localStorage.getItem(checkbox.id); if (saved !== null) checkbox.checked = saved === 'true'; } document.querySelectorAll('.done-checkbox').forEach(cb => { loadCheckboxState(cb); cb.addEventListener('change', () => saveCheckboxState(cb)); }); </script>

[/html]

0

46

[html]<style>
/* -------------------------------------------------------------------
|  ОБЩИЕ СТИЛИ КОНТЕЙНЕРА И ВКЛАДОК
|-------------------------------------------------------------------- */
.tab-container {
    display: flex;
    width: 100%;
    max-width: 100%;
    margin: 20px auto;
    border: 1px solid #3d3b37;
    background: #e7e3d8;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
    font-family: Arial, sans-serif;
}

.tab-sidebar {
    width: 18%; /* Установил фиксированную ширину, чтобы избежать проблем с 25% */
    flex-shrink: 0;
    background: #474747;
    padding-top: 5px;
}

.tab-content-area {
    flex-grow: 1;
    padding: 10px;
    min-height: 400px;
    position: relative;
}

.tab-radio {
    display: none;
}

/* Стили для меток-вкладок */
.tab-label {
    display: block;
    padding: 10% 10%;
    text-align: left;
    color: #fff;
    font-weight: bold;
    font-size: 13px;
    line-height: 1.2;
    cursor: pointer;
    background: #5b5b5b;
    border-bottom: 1px solid #3d3b37;
    transition: background 0.2s;
}

.tab-label:hover {
    background: #4a4a4a;
}

/* --- Логика активации вкладок --- */
#tab1:checked ~ .tab-sidebar .label-1,
#tab2:checked ~ .tab-sidebar .label-2,
#tab3:checked ~ .tab-sidebar .label-3,
#tab4:checked ~ .tab-sidebar .label-4,
#tab5:checked ~ .tab-sidebar .label-5,
#tab6:checked ~ .tab-sidebar .label-6 {
    background: #3a3a3a;
}

.tab-content {
    display: none;
    position: absolute;
    top: 10px;
    left: 10px;
    right: 10px; /* Убрал 2% для лучшего растяжения */
    bottom: 10px;
    background: #f0ede1;
    padding: 10px;
    overflow: auto;
}

#tab1:checked ~ .tab-content-area .content-1,
#tab2:checked ~ .tab-content-area .content-2,
#tab3:checked ~ .tab-content-area .content-3,
#tab4:checked ~ .tab-content-area .content-4,
#tab5:checked ~ .tab-content-area .content-5,
#tab6:checked ~ .tab-content-area .content-6 {
    display: block;
}

/* -------------------------------------------------------------------
|  СТИЛИ ДЛЯ КОНТЕНТА 1 (ИНГРЕДИЕНТЫ)
|-------------------------------------------------------------------- */

.ingredients-list-header {
    background: #a8a39a;
    border: 1px solid #3d3b37;
    padding: 5px 10px;
    text-align: center;
    font-weight: bold;
    margin-bottom: 10px;
}

.ingredients-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 15px;
    justify-content: flex-start;
    padding-left: 5px;
}

.ingredient-item {
    text-align: center;
    width: 80px;
}

.ingredient-item {
    text-align: center;
    width: 80px;
}

.ingredient-img {
    width: 50px;
    height: 50px;
    border: 1px solid #3d3b37;
    object-fit: cover;
    margin-bottom: 5px;
}

.ingredient-item span {
    display: block;
    font-size: 12px;
    font-weight: bold;
}


/* -------------------------------------------------------------------
|  СТИЛИ ДЛЯ РЕЦЕПТОВ (КОНТЕНТ 2, 3, 4)
|-------------------------------------------------------------------- */

.recipe-line {
    display: flex;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 20px;
    align-items: flex-start;
}

.recipe-details {
    flex-grow: 1;
    display: flex;
    flex-direction: column;
}

.recipe-image-side {
    width: 100px;
    height: 100px;
    flex-shrink: 0;
    border: 2px solid #3d3b37;
    background: #b4a378;
}

.recipe-image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.recipe-header {
    background: #a8a39a;
    border: 1px solid #3d3b37;
    padding: 5px;
    margin-bottom: 5px;
    display: flex;
    flex-direction: column;
}

.recipe-title-line {
    display: flex;
    align-items: center;
    font-weight: bold;
    font-size: 14px;
    padding-bottom: 2px;
}

.recipe-description {
    font-weight: normal;
    font-size: 12px;
    line-height: 1.2;
    padding-left: 27px;
}

.recipe-ingredients {
    display: flex;
    gap: 5px;
    padding: 0;
}

/* Стиль для IMG тегов, используемых как иконки ингредиентов */
.ingredient-icon-img {
    width: 45px;
    height: 45px;
    border: 1px solid #3d3b37;
}

/* --- Стили для Квадратика (Чекбокса) --- */
.done-checkbox {
    display: none;
}
.checkbox-label {
    display: block;
    width: 20px;
    height: 20px;
    border: 2px solid #3a3a3a;
    background: #f0ede1;
    cursor: pointer;
    line-height: 18px;
    text-align: center;
    font-size: 14px;
    color: green;
    margin-right: 5px;
    flex-shrink: 0;
}
.checkbox-label::after {
    content: '✓';
    display: none;
}
.done-checkbox:checked + .checkbox-label::after {
    display: inline;
}

</style>

<div class="tab-container">
    <input type="radio" id="tab1" name="tab-group" class="tab-radio" checked>
    <input type="radio" id="tab2" name="tab-group" class="tab-radio">
    <input type="radio" id="tab3" name="tab-group" class="tab-radio">
    <input type="radio" id="tab4" name="tab-group" class="tab-radio">
    <input type="radio" id="tab5" name="tab-group" class="tab-radio">
    <input type="radio" id="tab6" name="tab-group" class="tab-radio">

    <div class="tab-sidebar">
        <label for="tab1" class="tab-label label-1">БЛЮДА И<br>ИНГРЕДИЕНТЫ</label>
        <label for="tab2" class="tab-label label-2">ПРОСТЫЕ<br>БЛЮДА</label>
        <label for="tab3" class="tab-label label-3">КАЧЕСТВЕННЫЕ<br>БЛЮДА</label>
        <label for="tab4" class="tab-label label-4">РЕДКИЕ<br>БЛЮДА</label>
        <label for="tab5" class="tab-label label-5">ЭКСКЛЮЗИВНЫЕ<br>БЛЮДА</label>
        <label for="tab6" class="tab-label label-6">ОСОБЕННЫЕ<br>БЛЮДА</label>
    </div>

    <div class="tab-content-area">
       
<div class="tab-content content-1">
    <p style="border: 1px solid #3d3b37; background: #f0ede1; padding: 15px; margin-bottom: 10px;">
        Выберите вкладку слева, чтобы увидеть рецепты.
    </p>

    <div class="ingredients-list-header">ИНГРЕДИЕНТЫ</div>

    <div class="ingredients-grid">
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/871685.png" alt="Ингредиент" class="ingredient-img">
            <span>картофель</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/961762.png" alt="Ингредиент" class="ingredient-img">
            <span>морковь</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/512221.png" alt="Ингредиент" class="ingredient-img">
            <span>лук</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/162271.png" alt="Ингредиент" class="ingredient-img">
            <span>мука</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
        <div class="ingredient-item">
            <img src="https://upforme.ru/uploads/001c/84/76/2/447452.png" alt="Ингредиент" class="ingredient-img">
            <span>вода</span>
        </div>
    </div>
</div>

        <div class="tab-content content-2">
           
            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe1_done" class="done-checkbox">
                            <label for="recipe1_done" class="checkbox-label"></label>
                            <span>Вода из лужи (кипячёная, наверное)</span>
                        </div>
                        <div class="recipe-description">
                            Пахнет болотом, но выживешь.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/714226.png" alt="Чайник" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/935896.png" alt="Мясо" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/108191.png" alt="Птица" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/837022.png" alt="Сапог" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/709377.png" alt="Капуста" class="ingredient-icon-img">
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/718861.png" alt="Вода из лужи" class="recipe-image">
                </div>
            </div>
           
            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe2_done" class="done-checkbox">
                            <label for="recipe2_done" class="checkbox-label"></label>
                            <span>Второй обычный рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание второго блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/837022.png" alt="Сапог" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/157323.png" alt="Второй рецепт" class="recipe-image">
                </div>
            </div>

           <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe3_done" class="done-checkbox">
                            <label for="recipe3_done" class="checkbox-label"></label>
                            <span>Третий обычный рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание третьего блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/837022.png" alt="Сапог" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/157323.png" alt="Третий рецепт" class="recipe-image">
                </div>
            </div>

            <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe4_done" class="done-checkbox">
                            <label for="recipe4_done" class="checkbox-label"></label>
                            <span>Четвертый обычный рецепт</span>
                        </div>
                        <div class="recipe-description">
                            Описание четвертого блюда.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/837022.png" alt="Сапог" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/414360.png" alt="Банка" class="ingredient-icon-img">
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://upforme.ru/uploads/001c/84/76/2/157323.png" alt="Четвертый рецепт" class="recipe-image">
                </div>
            </div>

        </div>

        <div class="tab-content content-3">
             <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                [ЗДЕСЬ МОЖНО ДОБАВИТЬ РЕДКИЕ РЕЦЕПТЫ]
            </p>
        </div>

        <div class="tab-content content-4">
           
             <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe4_done" class="done-checkbox">
                            <label for="recipe4_done" class="checkbox-label"></label>
                            <span>Сложный профессиональный суп</span>
                        </div>
                        <div class="recipe-description">
                            Рецепт для настоящих мастеров.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/857076.png" alt="Картошка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/709377.png" alt="Морковка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/709377.png" alt="Лук" class="ingredient-icon-img">
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://i.imgur.com/jS72S9F.png" alt="Профессиональный суп" class="recipe-image">
                </div>
            </div>
            </div>

        <div class="tab-content content-5">
           
             <div class="recipe-line">
                <div class="recipe-details">
                    <div class="recipe-header">
                        <div class="recipe-title-line">
                            <input type="checkbox" id="recipe5_done" class="done-checkbox">
                            <label for="recipe5_done" class="checkbox-label"></label>
                            <span>ЧТО ТО профессиональный суп</span>
                        </div>
                        <div class="recipe-description">
                            Рецепт для настоящих мастеров.
                        </div>
                    </div>
                   
                    <div class="recipe-ingredients">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/857076.png" alt="Картошка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/709377.png" alt="Морковка" class="ingredient-icon-img">
                        <img src="https://upforme.ru/uploads/001c/84/76/2/709377.png" alt="Лук" class="ingredient-icon-img">
                    </div>
                </div>
               
                <div class="recipe-image-side">
                    <img src="https://i.imgur.com/jS72S9F.png" alt="Профессиональный суп" class="recipe-image">
                </div>
            </div>
            </div>

        <div class="tab-content content-6">
             <p style="padding: 15px; border: 1px solid #3d3b37; background: #f0ede1; font-style: italic;">
                [ЗДЕСЬ МОЖНО ДОБАВИТЬ РЕДКИЕ РЕЦЕПТЫ]
            </p>
        </div>

        </div>
    </div>
</div>

<script>
// Функция для сохранения состояния чекбокса
function saveCheckboxState(checkbox) {
    localStorage.setItem(checkbox.id, checkbox.checked);
}

// Функция для загрузки состояния чекбокса
function loadCheckboxState(checkbox) {
    const savedState = localStorage.getItem(checkbox.id);
    if (savedState !== null) {
        checkbox.checked = (savedState === 'true');
    }
}

// Находим все чекбоксы с классом 'done-checkbox'
const checkboxes = document.querySelectorAll('.done-checkbox');

// Применяем логику ко всем найденным чекбоксам
checkboxes.forEach(checkbox => {
    loadCheckboxState(checkbox);
   
    checkbox.addEventListener('change', () => {
        saveCheckboxState(checkbox);
    });
});
</script>[/html]

0

47

[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Загрузка</title>
<style>
  .loader-box {
    width: 300px;
    height: 20px;
    border: 2px solid #555;
    border-radius: 10px;
    overflow: hidden;
    margin: 50px auto;
  }

  .loader-line {
    height: 100%;
    width: 0;
    background: linear-gradient(90deg, #ff6b6b, #feca57);
    animation: load 3s linear forwards;
  }

  @keyframes load {
    from { width: 0; }
    to   { width: 100%; }
  }
</style>
</head>
<body>

<div class="loader-box">
  <div class="loader-line"></div>
</div>

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

0

48

[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Don't Starve Loader</title>

<style>
body {
    background: #1a1a1a;
    font-family: "Courier New", monospace;
}

/* контейнер */
.loader-box {
    width: 320px;
    height: 26px;
    border: 3px solid #ddd4b8;        /* выцветшая бумага */
    border-radius: 6px;
    background: #2a2a2a;
    margin: 100px auto;
    position: relative;
    box-shadow: 0 0 10px #000 inset;
    outline: 2px dashed #6d6048;      /* рисованная линия */
}

/* сама полоска */
.loader-line {
    height: 100%;
    width: 0;
    background: #c2b28a;
    background-image: repeating-linear-gradient(
        -45deg,
        rgba(255,255,255,0.15) 0 10px,
        rgba(0,0,0,0.15) 10px 20px
    );
    animation: load 6s linear infinite;  /* медленно + бесконечно */
    box-shadow: 0 0 6px #000 inset;
}

@keyframes load {
    0%   { width: 0%; }
    100% { width: 100%; }
}
</style>

</head>
<body>

<div class="loader-box">
    <div class="loader-line"></div>
</div>

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

0

49

[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Лотерея на профилактике</title>

<style>
body {
    background: #1a1a1a;
    font-family: "Courier New", monospace;
    color: #ddd4b8;
    text-align: center;
    margin-top: 60px;
}

/* Заголовок */
.title-big {
    font-size: 32px;
    font-weight: bold;
    margin-bottom: 10px;
    text-shadow: 2px 2px 2px #000;
    letter-spacing: 2px;
}

/* Меняющиеся фразы */
.phrase {
    font-size: 16px;
    margin-bottom: 40px;
    height: 20px;
    opacity: 0;
    animation: fade 1s ease forwards;
}

/* fade эффект */
@keyframes fade {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* контейнер загрузки */
.loader-box {
    width: 320px;
    height: 26px;
    border: 3px solid #ddd4b8;
    border-radius: 6px;
    background: #2a2a2a;
    margin: 20px auto;
    position: relative;
    box-shadow: 0 0 10px #000 inset;
    outline: 2px dashed #6d6048;
}

/* сама движущаяся линия */
.loader-line {
    height: 100%;
    width: 0;
    background: #c2b28a;
    background-image: repeating-linear-gradient(
        -45deg,
        rgba(255,255,255,0.15) 0 10px,
        rgba(0,0,0,0.15) 10px 20px
    );
    animation: load 6s linear infinite;
    box-shadow: 0 0 6px #000 inset;
}

/* ключи движения */
@keyframes load {
    0%   { width: 0%; }
    100% { width: 100%; }
}
</style>

</head>
<body>

<div class="title-big">ЛОТЕРЕЯ НА ПРОФИЛАКТИКЕ</div>
<div class="phrase" id="phraseBox">загрузка...</div>

<div class="loader-box">
    <div class="loader-line"></div>
</div>

<script>
// список фраз
const phrases = [
    "ищем монстров",
    "упаковываем подарки",
    "программируем удачу",
    "договариваемся с богом рандома",
    "перемешиваем судьбы",
    "подкручиваем шансы (шутка... наверное)",
    "кормим генератор случайностей",
    "заряжаем амулеты удачи",
];

let index = 0;
const box = document.getElementById("phraseBox");

// смена каждые 2 секунды
setInterval(() => {
    index = (index + 1) % phrases.length;
    box.style.opacity = 0;

    setTimeout(() => {
        box.textContent = phrases[index];
        box.style.animation = "none";
        void box.offsetWidth; // перезапуск анимации
        box.style.animation = "fade 1s ease forwards";
    }, 200);
}, 2000);
</script>

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

0

50

[html]<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Скретч — стираемый слой над картинкой</title>
<style>
  :root {
    --frame-width: 520px; /* можно менять */
    --frame-padding: 12px;
    --bg-color: #f0f0f0;
  }

  body {
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(180deg, #ffffff, #f7f7f7);
    padding: 24px;
    box-sizing: border-box;
  }

  .scratch-frame {
    width: var(--frame-width);
    max-width: 95vw;
    background: white;
    padding: var(--frame-padding);
    border-radius: 12px;
    box-shadow: 0 6px 20px rgba(15,15,15,0.12);
    border: 1px solid rgba(0,0,0,0.06);
  }

  .scratch-title {
    margin: 0 0 10px 0;
    font-weight: 700;
    font-size: 18px;
    text-align: center;
  }

  .scratch-container {
    position: relative;
    overflow: hidden;
    border-radius: 8px;
    border: 1px solid #e0e0e0;
    background: #ddd;
    user-select: none;
    touch-action: none; /* чтобы не прокручивалось при свайпе на мобильных */
  }

  /* картинка, которую вы подставляете */
  .scratch-container img {
    display: block;
    width: 100%;
    height: auto;
    object-fit: cover;
    vertical-align: middle;
    pointer-events: none; /* клики/тачи идут на canvas */
  }

  /* холст поверх картинки */
  .scratch-canvas {
    position: absolute;
    inset: 0;
    display: block;
  }

  .controls {
    margin-top: 10px;
    display:flex;
    gap:8px;
    justify-content:center;
  }

  .btn {
    border: none;
    background: #1976d2;
    color: white;
    padding: 8px 12px;
    border-radius: 8px;
    cursor: pointer;
    font-weight: 600;
  }
  .btn.ghost {
    background: #fafafa;
    color: #222;
    border: 1px solid #ddd;
  }

  .hint {
    margin-top:8px;
    font-size:13px;
    color:#555;
    text-align:center;
  }
</style>
</head>
<body>
  <div class="scratch-frame" role="region" aria-label="Стираем серый слой, чтобы увидеть картинку">
    <h2 class="scratch-title">Проведи мышкой (или пальцем) чтобы стереть</h2>

    <div id="scratch" class="scratch-container" style="width:100%;">
      <!--
        ЗДЕСЬ ПОДСТАВЬТЕ ВАШУ КАРТИНКУ:
        Замените значение src="your-image.jpg" на путь/URL вашей картинки.
        Например: src="https://example.com/photo.jpg" или src="/images/pic.png"
      -->
      <img id="revealImage" src="https://avatars.mds.yandex.net/i?id=64261a69575830f8e4821e4b3074d322cdea58f7-10353822-images-thumbs&n=13" alt="Скрытая картинка (замените src)" />

      <!-- canvas поверх картинки: скрипт подгонит размер автоматически -->
      <canvas id="scratchCanvas" class="scratch-canvas" aria-hidden="true"></canvas>
    </div>

    <div class="controls" aria-hidden="false">
      <button id="resetBtn" class="btn ghost" type="button">Сбросить</button>
      <button id="revealBtn" class="btn" type="button">Открыть полностью</button>
    </div>

    <div class="hint">Кисть: <span id="brushSizeLabel">28</span> px — можно менять в коде</div>
  </div>

<script>
(function(){
  const img = document.getElementById('revealImage');
  const canvas = document.getElementById('scratchCanvas');
  const resetBtn = document.getElementById('resetBtn');
  const revealBtn = document.getElementById('revealBtn');
  const brushLabel = document.getElementById('brushSizeLabel');

  // НАСТРОЙКИ:
  let brushSize = 28;         // размер кисти в пикселях (меняйте по вкусу)
  const overlayColor = '#9e9e9e'; // цвет верхнего слоя
  const minStartDistance = 2; // минимальный шаг для рисования линии

  brushLabel.textContent = brushSize;

  let isDrawing = false;
  let lastPoint = null;

  // Подгонка размера canvas под картинку и поддержка Retina
  function resizeCanvasToImage() {
    const rect = img.getBoundingClientRect();
    const dpr = window.devicePixelRatio || 1;
    canvas.width = Math.round(rect.width * dpr);
    canvas.height = Math.round(rect.height * dpr);
    canvas.style.width = rect.width + 'px';
    canvas.style.height = rect.height + 'px';
    const ctx = canvas.getContext('2d');
    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
    fillOverlay();
  }

  // Заполнить серым (или градиентом) верхний слой
  function fillOverlay() {
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0,0,canvas.width,canvas.height);
    ctx.globalCompositeOperation = 'source-over';
    // можно сделать однотонный, или градиент:
    ctx.fillStyle = overlayColor;
    ctx.fillRect(0,0,canvas.width,canvas.height);
    // добавить текст подсказки (необязательно)
    ctx.fillStyle = 'rgba(255,255,255,0.06)';
    ctx.font = '18px system-ui, Arial';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    //ctx.fillText('Потри, чтобы открыть', canvas.width/2 / (window.devicePixelRatio||1), canvas.height/2 / (window.devicePixelRatio||1));
  }

  // Преобразование координат события к координатам canvas (учитывает позиционирование)
  function getCanvasPoint(clientX, clientY) {
    const rect = canvas.getBoundingClientRect();
    return {
      x: clientX - rect.left,
      y: clientY - rect.top
    };
  }

  // Стереть (на самом деле нарисовать с globalCompositeOperation='destination-out')
  function eraseAt(point) {
    const ctx = canvas.getContext('2d');
    ctx.save();
    ctx.globalCompositeOperation = 'destination-out';
    ctx.beginPath();
    ctx.arc(point.x, point.y, brushSize/2, 0, Math.PI * 2, true);
    ctx.fill();
    ctx.restore();
  }

  // Плавная линия между точками (чтобы не были точки, а линия)
  function eraseLine(p1, p2) {
    const ctx = canvas.getContext('2d');
    ctx.save();
    ctx.globalCompositeOperation = 'destination-out';
    ctx.lineCap = 'round';
    ctx.lineJoin = 'round';
    ctx.lineWidth = brushSize;
    ctx.beginPath();
    ctx.moveTo(p1.x, p1.y);
    ctx.lineTo(p2.x, p2.y);
    ctx.stroke();
    ctx.restore();
  }

  function pointerDown(e) {
    e.preventDefault();
    isDrawing = true;
    const p = getCanvasPoint(e.clientX, e.clientY);
    lastPoint = p;
    eraseAt(p);
  }

  function pointerMove(e) {
    if (!isDrawing) return;
    e.preventDefault();
    const p = getCanvasPoint(e.clientX, e.clientY);
    const dx = p.x - lastPoint.x;
    const dy = p.y - lastPoint.y;
    const dist = Math.sqrt(dx*dx + dy*dy);
    if (dist > minStartDistance) {
      eraseLine(lastPoint, p);
      lastPoint = p;
    } else {
      eraseAt(p);
    }
  }

  function pointerUp(e) {
    if (!isDrawing) return;
    isDrawing = false;
    lastPoint = null;
    // опционально: можно проверять процент стерто и автоматически открыть картинку
    // if (getClearedPercent() > 0.6) revealFully();
  }

  // вычислить сколько пикселей стало прозрачными (приближённо)
  function getClearedPercent() {
    const ctx = canvas.getContext('2d');
    try {
      const data = ctx.getImageData(0,0,canvas.width,canvas.height).data;
      let cleared = 0;
      // берем каждый 4-й пиксель (альфа канал) для ускорения
      for (let i = 3; i < data.length; i += 8) {
        if (data[i] === 0) cleared++;
      }
      const totalSamples = data.length / 8;
      return cleared / totalSamples;
    } catch (err) {
      // безопасность: если cors/security мешает доступ к пикселям — возвращаем 0
      return 0;
    }
  }

  function revealFully() {
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0,0,canvas.width,canvas.height);
    canvas.style.pointerEvents = 'none';
  }

  function resetScratch() {
    canvas.style.pointerEvents = 'auto';
    fillOverlay();
  }

  // Поддержка pointer events (работает и для мыши и для тача)
  function addPointerListeners() {
    canvas.addEventListener('pointerdown', pointerDown);
    window.addEventListener('pointermove', pointerMove);
    window.addEventListener('pointerup', pointerUp);
    // предотвратить выделение текста/переход при долгом нажатии на мобильном
    canvas.addEventListener('touchstart', e => e.preventDefault(), {passive:false});
  }

  // Инициализация после загрузки картинки: подгоняем размер
  function init() {
    // Убедимся, что картинка загружена, затем задаем размеры
    if (img.complete && img.naturalWidth !== 0) {
      resizeCanvasToImage();
    } else {
      img.addEventListener('load', resizeCanvasToImage, {once:true});
    }

    // при ресайзе окна — пересчитать
    window.addEventListener('resize', () => {
      // немного дебаунсам
      clearTimeout(window._scratchResizeTimer);
      window._scratchResizeTimer = setTimeout(resizeCanvasToImage, 120);
    });

    addPointerListeners();

    resetBtn.addEventListener('click', () => {
      resetScratch();
    });

    revealBtn.addEventListener('click', () => {
      revealFully();
    });

    // можно управлять размером кисти через Wheel (опционально)
    canvas.addEventListener('wheel', (e) => {
      if (e.shiftKey) { // чтобы не мешать прокрутке страницы
        e.preventDefault();
        if (e.deltaY > 0) brushSize = Math.max(6, brushSize - 2);
        else brushSize = Math.min(120, brushSize + 2);
        brushLabel.textContent = brushSize;
      }
    }, {passive:false});

    // дополнительная логика: если много стерто — автоматически открыть
    let checkInterval = setInterval(() => {
      const pct = getClearedPercent();
      // если обнаружим >60% стерто — показываем полностью
      if (pct > 0.60) {
        revealFully();
        clearInterval(checkInterval);
      }
    }, 1000);
  }

  // Старт
  init();

})();
</script>
</body>
</html>[/html]

0

51

[html]<div style="max-width:600px;margin:20px auto;padding:20px;border:2px solid #ccc;border-radius:0px;background:#e7e3d8; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5); border: 1px solid #3d3b37;">
    <h2 style="text-align:center;">Калькулятор рецептов</h2>

    <p>Введите свои ингредиенты через запятую:</p>
    <textarea id="ingredientsInput" style="width:96.5%;height:80px;border:1px solid #aaa;border-radius:6px;padding:10px;"></textarea>

    <button onclick="checkRecipes()" style="margin-top:15px;width:100%;padding:10px;font-size:16px;border: 1px solid #3d3b37;background:#a8a39a;color:white;cursor:pointer;">
        Проверить рецепты
    </button>

    <div id="result" style="margin-top:20px;padding:15px;background:white;border-radius:8px;border:1px solid #ddd;"></div>
</div>

<script>
// --- Рецепты ---
const recipes = {
    "Вода из лужи": { вода: 1, соль: 1, лук: 1 },
    "Яичница бюджетная": { яйцо: 2, соль: 1 },
    "Картофельный суп-пюре": { картофель: 1, вода: 1, лук: 1 },
    "Жареные овощи": { картофель: 1, томат: 1, лук: 1, гриб: 1 },
    "Рыба и фри": { рыба: 1, картофель: 1, масло: 1 },
    "Жареное мясо": { крот: 1, соль: 1, масло: 1, лук: 1 },
    "Сушеные грибы": { гриб: 2, соль: 1, лук: 1 },
    "Шашлычок из голубя": { голубь: 1, лук: 1 },
    "Рыбный пирог": { рыба: 2, мука: 1, яйцо: 1 },
    "Томатный суп": { томат: 1, вода: 1, лук: 1 },
    "Беляши, почти как у бабушки": { яйцо: 2, соль: 1 },
    "Картофельное пюре": { яйцо: 2, соль: 1 },
    "Грибной бургер": { яйцо: 2, соль: 1 },
    "Стейк с картошкой": { яйцо: 2, соль: 1 },
    "Рулет с желе": { яйцо: 2, соль: 1 },
    "Чизкейк": { яйцо: 2, соль: 1 },
    "Пицца": { яйцо: 2, соль: 1 },
    "Голубиный пирог": { яйцо: 2, соль: 1 },
    "Кротовуха": { яйцо: 2, соль: 1 },
    "Суп из ботинка": { яйцо: 2, соль: 1 },
    "Фирменный Зомби-строганов": { яйцо: 2, соль: 1 },
    "Омлет Проклятые яйца": { яйцо: 2, соль: 1 },
    "Суп из забытого мяса": { яйцо: 2, соль: 1 },
    // можно добавлять новые рецепты сюда
};

// --- Основная функция ---
function checkRecipes() {
    const input = document.getElementById("ingredientsInput").value.toLowerCase();
    const items = input.split(",").map(s => s.trim()).filter(Boolean);

    // Подсчёт ингредиентов
    const counts = {};
    items.forEach(item => {
        counts[item] = (counts[item] || 0) + 1;
    });

    let output = "<h3>Доступные рецепты:</h3>";
    let found = false;

    // Проверка рецептов
    for (let recipe in recipes) {
        let req = recipes[recipe];
        let ok = true;

        for (let ing in req) {
            if (!counts[ing] || counts[ing] < req[ing]) {
                ok = false;
                break;
            }
        }

        if (ok) {
            output += "✔ " + recipe + "<br>";
            found = true;
        }
    }

    if (!found) {
        output += "<span style='color:#777;'>Увы, ни один рецепт не подходит.</span>";
    }

    document.getElementById("result").innerHTML = output;
}
</script>[/html]

0

52

[html]<div id="cookWrap" style="max-width:500px;margin:20px auto;padding:20px;border:1px solid #ccc;border-radius:10px;font-family:Arial;">
    <h2 style="text-align:center;margin-top:0;">Калькулятор рецептов</h2>

    <label>Ваши ингредиенты (через запятую):</label>
    <input id="playerInput" type="text" style="width:100%;padding:8px;margin:5px 0 10px;border:1px solid #aaa;border-radius:5px;" placeholder="например: вода, соль, лук, яйцо, яйцо">

    <button onclick="checkRecipes()" style="width:100%;padding:10px;background:#4caf50;color:#fff;border:none;border-radius:5px;cursor:pointer;">
        Посчитать
    </button>

    <div id="result" style="margin-top:15px;"></div>
</div>

<script>
// --- список рецептов ---
const recipes = [
    { name: "Вода из лужи", ingredients: { "вода":1, "соль":1, "лук":1 } },
    { name: "Яичница", ingredients: { "яйцо":2, "соль":1 } }
];

// --- проверка ---
function checkRecipes() {
    const input = document.getElementById("playerInput").value
        .toLowerCase()
        .split(",")
        .map(i => i.trim())
        .filter(i => i.length > 0);

    const playerInv = {};

    // считаем количество каждого ингредиента
    input.forEach(i => {
        if (!playerInv[i]) playerInv[i] = 0;
        playerInv[i]++;
    });

    let html = "<h3>Доступные рецепты:</h3>";

    let found = false;

    recipes.forEach(r => {
        let ok = true;

        for (let ing in r.ingredients) {
            if (!playerInv[ing] || playerInv[ing] < r.ingredients[ing]) {
                ok = false;
                break;
            }
        }

        if (ok) {
            html += `• <b>${r.name}</b><br>`;
            found = true;
        }
    });

    if (!found) html += "Никаких рецептов приготовить нельзя.";

    document.getElementById("result").innerHTML = html;
}
</script>[/html]

0

53

[html]<div style="max-width:600px;margin:20px auto;padding:20px;border:2px solid #ccc;border-radius:0px;background:#e7e3d8; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5); border: 1px solid #3d3b37;">
    <h2 style="text-align:center;">Калькулятор рецептов</h2>

    <p>Введите свои ингредиенты через запятую:</p>
    <textarea id="ingredientsInput" style="width:96.5%;height:80px;border:1px solid #aaa;border-radius:6px;padding:10px;"></textarea>

    <button onclick="initializeInventory()" style="margin-top:15px;width:100%;padding:10px;font-size:16px;border: 1px solid #3d3b37;background:#a8a39a;color:white;cursor:pointer;">
        Проверить рецепты
    </button>

    <div id="result" style="margin-top:20px;padding:15px;background:white;border-radius:8px;border:1px solid #ddd;"></div>

    <div id="remainingBlock" style="margin-top:20px;pad   <div class="menu-header">
        К праздничному столу я принес:
    </div>

    <div class="menu-block">
        <div class="menu-content">
/* тут напиши название блюд, каждое с новой строки */
        </div>
    </div>ding:15px;background:white;border-radius:8px;border:1px solid #ddd;"></div>
</div>

<script>
// --- Рецепты ---
const recipes = {
    "Вода из лужи": { вода: 1, соль: 1, лук: 1 },
    "Яичница бюджетная": { яйцо: 2, соль: 1 },
    "Картофельный суп-пюре": { картофель: 1, вода: 1, лук: 1 },
    "Жареные овощи": { картофель: 1, томат: 1, лук: 1, гриб: 1 },
    "Рыба и фри": { рыба: 1, картофель: 1, масло: 1 },
    "Жареное мясо": { крот: 1, соль: 1, масло: 1, лук: 1 },
    "Сушеные грибы": { гриб: 2, соль: 1, лук: 1 },
    "Шашлычок из голубя": { голубь: 1, лук: 1 },
    "Рыбный пирог": { рыба: 2, мука: 1, яйцо: 1 },
    "Томатный суп": { томат: 1, вода: 1, лук: 1 },
    "Беляши, почти как у бабушки": { мука: 1, яйцо: 2, масло: 1, крот: 1 },
    "Картофельное пюре": { картофель: 2, молоко: 1 },
    "Грибной бургер": { гриб: 1, мука: 1, томат: 1 },
    "Стейк с картошкой": { картофель: 1, крот: 1, лук: 1, масло: 1 },
    "Рулет с желе": { ягоды: 3, мука: 1 },
    "Чизкейк": { ягоды: 1, мука: 1, молоко: 1 },
    "Пицца": { крот: 1, мука: 1, молоко: 1, томат: 1 },
    "Голубиный пирог": { голубь: 1, мука: 1, яйцо: 1 },
    "Кротовуха": { крот: 1, спирт: 1 },
    "Суп из ботинка": { "старый ботинок": 1, вода: 2, лук: 1, соль: 1 },
    "Фирменный Зомби-строганов": { "пропавшее мясо": 1, лук: 2 },
    "Омлет Проклятые яйца": { "тухлое яйцо": 2, соль: 1, масло: 1 },
    "Суп из забытого мяса": { "пропавшее мясо": 1, вода: 1, лук: 1 }
};

// --- Инвентарь ---
let inventory = {};

// --- Выбранные рецепты ---
let selectedRecipes = {};

// ─────────────────────────────────────────
// Сохранение состояния
// ─────────────────────────────────────────
function saveState() {
    localStorage.setItem("ingredientsInput", document.getElementById("ingredientsInput").value);
    localStorage.setItem("selectedRecipes", JSON.stringify(selectedRecipes));
}

// ─────────────────────────────────────────
// Загружаем данные при старте
// ─────────────────────────────────────────
window.addEventListener("load", () => {
    const savedIngredients = localStorage.getItem("ingredientsInput");
    const savedSelected = localStorage.getItem("selectedRecipes");

    if (savedIngredients) {
        document.getElementById("ingredientsInput").value = savedIngredients;
        rebuildInventoryFromText(savedIngredients);
    }

    if (savedSelected) {
        selectedRecipes = JSON.parse(savedSelected);
    }

    renderRecipes();
});

// ─────────────────────────────────────────
// Пересборка инвентаря из текста
// ─────────────────────────────────────────
function rebuildInventoryFromText(text) {
    inventory = {};
    const items = text.toLowerCase().split(",").map(s => s.trim()).filter(Boolean);

    items.forEach(item => {
        inventory[item] = (inventory[item] || 0) + 1;
    });
}

// ─────────────────────────────────────────
// Инициализация по кнопке
// ─────────────────────────────────────────
function initializeInventory() {
    const text = document.getElementById("ingredientsInput").value;
    rebuildInventoryFromText(text);

    saveState();
    renderRecipes();
}

// ─────────────────────────────────────────
// Инвентарь после вычета выбранных рецептов
// ─────────────────────────────────────────
function getAdjustedInventory() {
    const adj = { ...inventory };
    for (let r in selectedRecipes) {
        if (selectedRecipes[r]) {
            for (let ing in recipes[r]) {
                adj[ing] -= recipes[r][ing];
            }
        }
    }
    return adj;
}

// ─────────────────────────────────────────
// Проверка доступности рецепта
// ─────────────────────────────────────────
function canCook(recipeName, inv) {
    const req = recipes[recipeName];
    for (let ing in req) {
        if (!inv[ing] || inv[ing] < req[ing]) return false;
    }
    return true;
}

// ─────────────────────────────────────────
// Отображение оставшихся ингредиентов
// ─────────────────────────────────────────
function renderRemainingIngredients() {
    const block = document.getElementById("remainingBlock");
    const adj = getAdjustedInventory();

    let html = "<h3>Оставшиеся ингредиенты:</h3>";

    let hasAny = false;
    for (let ing in adj) {
        if (adj[ing] > 0) {
            hasAny = true;
            html += `${ing}: ${adj[ing]}<br>`;
        }
    }

    if (!hasAny) {
        html += "<span style='color:#777;'>Пусто или всё потрачено</span>";
    }

    block.innerHTML = html;
}

// ─────────────────────────────────────────
// Отрисовка рецептов
// ─────────────────────────────────────────
function renderRecipes() {
    const result = document.getElementById("result");
    const adj = getAdjustedInventory();

    let html = "<h3>Рецепты:</h3>";

    for (let recipe in recipes) {
        const isSelected = !!selectedRecipes[recipe];
        const available = canCook(recipe, adj);

        const disabled = (!isSelected && !available) ? "disabled" : "";
        const style = (!isSelected && !available) ? "opacity:0.5;" : "";

        html += `
            <label style="display:block;margin:5px 0; cursor:pointer; ${style}">
                <input
                    type="checkbox"
                    data-recipe="${recipe}"
                    ${isSelected ? "checked" : ""}
                    ${disabled}
                >
                ${recipe}
            </label>
        `;
    }

    result.innerHTML = html;

    // Реакция на клики по галочкам
    document.querySelectorAll("input[type=checkbox]").forEach(cb => {
        cb.addEventListener("change", e => {
            const name = e.target.dataset.recipe;
            selectedRecipes[name] = e.target.checked;

            saveState();
            renderRecipes();
        });
    });

    renderRemainingIngredients(); // ← добавлено!
}
</script>[/html]

0

54

[html]<style>
/* Общий контейнер — локация выживших */
.tasks-advent {
    font-family: 'Segoe UI', Tahoma, sans-serif;
    max-width: 1200px;
    margin: 25px auto;
    padding: 25px;
    background: #0f0f0f url('https://i.imgur.com/r7E1F5M.png') repeat; /* шум */
    border: 2px solid #222;
    border-radius: 10px;
    box-shadow: 0 0 25px rgba(0,0,0,0.8);
    position: relative;
}

/* Лёгкая зелёная токсичная подсветка */
.tasks-advent:before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 10px;
    box-shadow: 0 0 35px rgba(0,255,0,0.15);
    pointer-events: none;
}

/* Заголовок */
.tasks-advent h2 {
    text-align: center;
    color: #d6ffd6;
    font-size: 28px;
    margin-bottom: 25px;
    letter-spacing: 2px;
    text-shadow: 0 0 8px rgba(0,255,0,0.35);
    position: relative;
    padding-bottom: 12px;
}
.tasks-advent h2:after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 50%;
    width: 180px;
    height: 3px;
    background: linear-gradient(90deg, #00ff66, #baff59);
    transform: translateX(-50%);
    border-radius: 3px;
}

/* Иконка под названием, настройка и размер */
.task-icon {
    width: 80px;
    height: 80px;
    margin-top: 12px;
    opacity: 0.85;
    filter: drop-shadow(0 0 4px rgba(0,255,0,0.3));
    transition: transform .2s ease, opacity .2s ease;
}

.task-card:hover .task-icon {
    transform: scale(1.08);
    opacity: 1;
}

/* Сетка карточек */
.tasks-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
}

/* Карточка */
.task-card {
    perspective: 1000px;
    height: 190px;
    cursor: pointer;
    position: relative;
}

/* Отключение стандартного чекбокса */
.task-card input {
    display: none;
}

/* Внутренний контейнер */
.card-inner {
    position: relative;
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
    transition: transform .8s cubic-bezier(.23,1,.32,1);
    border-radius: 8px;
}

/* Эффект переворота */
.task-card input:checked + .card-inner {
    transform: rotateY(180deg);
}

/* Стороны карточки */
.card-front,
.card-back {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    padding: 15px;
    box-sizing: border-box;
    border-radius: 8px;
    backface-visibility: hidden;
    text-align: center;
    font-weight: 600;
    letter-spacing: 1px;
    border: 2px solid #111;
    background-size: cover;
    background-blend-mode: overlay;
}

/* Передняя сторона — металлическая панель */
.card-front {
   
    color: #d0ffd0;
    text-shadow: 0 0 4px rgba(0,255,0,0.4);

}

/* Титры заданий */
.card-front h3 {
    font-size: 23px;
    margin: 0;
    text-transform: uppercase;
    font-weight: 700;
}

/* Малый текст */
.card-front p {
    margin-top: 10px;
    font-size: 14px;
    opacity: 0.8;
}

/* Задняя сторона — повреждённый биоконтейнер */
.card-back {
    background: #111 url('https://i.imgur.com/HhLEdwr.jpeg') center/cover;
    color: #c1ffc1;
    transform: rotateY(180deg);
    box-shadow: inset 0 0 25px rgba(0,255,0,0.15);
}

/* Заголовок описания */
.card-back h4 {
    font-size: 19px;
    margin-bottom: 12px;
    color: #80ff80;
    text-shadow: 0 0 6px rgba(0,255,0,0.3);
}

/* Текст задания */
.card-back .description {
    font-size: 14px;
    line-height: 1.4;
    opacity: .9;
}

/* Анимация при наведении */
.task-card:hover .card-front {
    transform: translateY(-4px);
    box-shadow: 0 6px 18px rgba(0,255,0,0.15);
    transition: .3s ease;
}

/* Разный металлический оттенок карточек */
.task-card:nth-child(3n+1) .card-front { filter: hue-rotate(40deg); }
.task-card:nth-child(3n+2) .card-front { filter: hue-rotate(150deg); }
.task-card:nth-child(3n+3) .card-front { filter: hue-rotate(300deg); }

/* Инструкция */
.instructions {
    margin-top: 25px;
    text-align: center;
    color: #66aa66;
    font-style: italic;
    font-size: 15px;
    padding-top: 12px;
    border-top: 1px dashed #1f3a1f;
}
</style>
<div class="tasks-advent">
    <h2>🎄 Адвент заданий 🎄</h2>
   
    <div class="tasks-grid">
        <!-- Задание 1 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 1</h3>
                        <img class="task-icon" src="https://upforme.ru/uploads/001c/0f/f1/77/226880.png" alt="">

                    </div>
                    <div class="card-back">
                        <h4>Описание 1</h4>
                        <div class="description">
                            Создайте новогодний коллаж с вашими самыми яркими моментами уходящего года.
                            Поделитесь им на своей странице с хештегом #МойГод.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 2 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 2</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 2</h4>
                        <div class="description">
                            Напишите письмо себе в будущее с целями и планами на следующий год.
                            Сохраните его и откройте 31 декабря следующего года.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 3 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 3</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 3</h4>
                        <div class="description">
                            Украсьте свою аватарку или рамку профиля новогодней тематикой.
                            Используйте снежинки, гирлянды или новогодние символы.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 4 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 4</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 4</h4>
                        <div class="description">
                            Составьте плейлист из 10 песен, которые ассоциируются у вас с этим годом.
                            Поделитесь им с друзьями.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 5 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 5</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 5</h4>
                        <div class="description">
                            Приготовьте традиционное новогоднее блюдо и поделитесь его фото.
                            Расскажите рецепт в комментариях.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 6 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 6</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 6</h4>
                        <div class="description">
                            Создайте новогоднее поздравление для участников форума в виде короткого видео или аудио.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 7 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 7</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 7</h4>
                        <div class="description">
                            Организуйте виртуальную новогоднюю вечеринку с играми и конкурсами для друзей.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 8 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 8</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 8</h4>
                        <div class="description">
                            Напишите благодарности 5 людям, которые сделали ваш год лучше.
                            Отправьте им личные сообщения.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 9 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 9</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 9</h4>
                        <div class="description">
                            Создайте новогоднюю открытку своими руками (цифровую или реальную) и покажите её.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 10 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 10</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 10</h4>
                        <div class="description">
                            Посмотрите любимый новогодний фильм и оставьте о нём отзыв в соответствующем разделе.
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 11 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 11</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 11</h4>
                        <div class="description">
                            Сделайте предновогоднюю уборку на рабочем столе компьютера и поделитесь скриншотом "до/после".
                        </div>
                    </div>
                </div>
            </label>
        </div>

        <!-- Задание 12 -->
        <div class="task-card">
            <label>
                <input type="checkbox">
                <div class="card-inner">
                    <div class="card-front">
                        <h3>Задание 12</h3>
                        <p>Нажми, чтобы узнать подробности</p>
                    </div>
                    <div class="card-back">
                        <h4>Описание 12</h4>
                        <div class="description">
                            Составьте список из 12 желаний на следующий год и сохраните его в специальной теме форума.
                        </div>
                    </div>
                </div>
            </label>
        </div>
    </div>

    <div class="instructions">
        🎅 Нажимайте на карточки, чтобы узнать задание. Выполняйте по одному в день для создания новогоднего настроения! 🎄
    </div>
</div>[/html]

0

55

[html]<div class="gallery-frame">

  <div class="gallery-grid">

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/247683.gif">
      </div>
      <div class="art-author">Автор 1</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/937993.gif">
      </div>
      <div class="art-author">Автор 2</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/195493.jpg">
      </div>
      <div class="art-author">Автор 3</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/262684.png">
      </div>
      <div class="art-author">Автор 4</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/160561.jpg">
      </div>
      <div class="art-author">Автор 5</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/195493.jpg">
      </div>
      <div class="art-author">Автор 6</div>
    </div>

  </div>
</div>

<!-- Увеличение -->
<div class="art-overlay" id="artOverlay">
  <img id="artOverlayImg">
</div>

<style>
/* ===== ОБЩИЙ ФРЕЙМ ===== */
.gallery-frame {
  max-width: 1000px;
  margin: 30px auto;
  padding: 30px;
  background: #eceae6;
  border: 4px solid #b8b5ad;
}

/* ===== СЕТКА ===== */
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 35px;
}

/* ===== КАРТОЧКА КАРТИНЫ ===== */
.art-card {
  background: #fdfdfc;
  padding: 14px;
  border: 2px solid #c8c5be;
  box-shadow:
    0 8px 18px rgba(0,0,0,0.18),
    inset 0 0 0 4px #e6e4de;
}

/* ===== РАМА ===== */
.art-frame {
  background: #f6f5f2;
  padding: 16px;
  border: 6px solid #3a2f28;
  box-shadow: inset 0 0 0 3px #8b7a66;
}

.art-frame img {
  width: 100%;
  display: block;
  cursor: pointer;
  transition: transform 0.25s ease;
}

.art-frame img:hover {
  transform: scale(1.03);
}

/* ===== ПОДПИСЬ АВТОРА ===== */
.art-author {
  margin-top: 12px;
  padding: 6px 10px;
  background: #ede9e3;
  border: 1px solid #b7b2aa;
  font-size: 14px;
  text-align: center;
  font-style: italic;
  color: #2f2f2f;
}

/* ===== ОВЕРЛЕЙ ===== */
.art-overlay {
  position: fixed;
  inset: 0;
  background: rgba(20,18,16,0.85);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}

.art-overlay img {
  max-width: 88%;
  max-height: 88%;
  border: 10px solid #3a2f28;
  background: #f6f5f2;
}
</style>

<script>
(function(){
  const overlay = document.getElementById('artOverlay');
  const overlayImg = document.getElementById('artOverlayImg');

  document.querySelectorAll('.art-frame img').forEach(img => {
    img.addEventListener('click', () => {
      overlayImg.src = img.src;
      overlay.style.display = 'flex';
    });
  });

  overlay.addEventListener('click', () => {
    overlay.style.display = 'none';
    overlayImg.src = '';
  });
})();
</script>[/html]

0

56

[html]<div class="gallery-frame">

  <!-- ОБЪЯВЛЕНИЕ -->
  <div class="gallery-announcement">
    <div class="announcement-inner">
      <h2>Галерея работ</h2>
      <p>
        Перед вами экспозиция лучших работ участников.<br>
        Нажмите на картину, чтобы рассмотреть её ближе.
      </p>
    </div>
  </div>

  <div class="gallery-grid">

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/247683.gif">
      </div>
      <div class="art-author">Автор 1</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/937993.gif">
      </div>
      <div class="art-author">Автор 2</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/195493.jpg">
      </div>
      <div class="art-author">Автор 3</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/262684.png">
      </div>
      <div class="art-author">Автор 4</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/160561.jpg">
      </div>
      <div class="art-author">Автор 5</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/195493.jpg">
      </div>
      <div class="art-author">Автор 6</div>
    </div>

  </div>
</div>

<!-- Увеличение -->
<div class="art-overlay" id="artOverlay">
  <img id="artOverlayImg">
</div>

<style>
/* ===== ОБЩИЙ ФРЕЙМ ===== */
.gallery-frame {
  max-width: 1000px;
  margin: 30px auto;
  padding: 30px;
  background: #eceae6;
  border: 4px solid #b8b5ad;
}

/* ===== ОБЪЯВЛЕНИЕ ===== */
.gallery-announcement {
  margin-bottom: 35px;
  padding: 14px;
  background: #3a2f28;
  border: 6px solid #2a211b;
}

.announcement-inner {
  background: #f3efe8;
  padding: 18px 25px;
  border: 4px solid #8b7a66;
  text-align: center;
}

.announcement-inner h2 {
  margin: 0 0 8px;
  font-size: 22px;
  letter-spacing: 1px;
}

.announcement-inner p {
  margin: 0;
  font-size: 15px;
  font-style: italic;
}

/* ===== СЕТКА ===== */
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 35px;
}

/* ===== КАРТОЧКА ===== */
.art-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: #fdfdfc;
  padding: 14px;
  border: 2px solid #c8c5be;
  box-shadow:
    0 8px 18px rgba(0,0,0,0.18),
    inset 0 0 0 4px #e6e4de;
}

/* ===== РАМА (РАСТЯГИВАЕТСЯ) ===== */
.art-frame {
  flex-grow: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #f6f5f2;
  padding: 16px;
  border: 6px solid #3a2f28;
  box-shadow: inset 0 0 0 3px #8b7a66;
}

.art-frame img {
  max-width: 100%;
  max-height: 100%;
  cursor: pointer;
  transition: transform 0.25s ease;
}

.art-frame img:hover {
  transform: scale(1.03);
}

/* ===== АВТОР — ВСЕГДА ВНИЗУ ===== */
.art-author {
  margin-top: 12px;
  padding: 6px 10px;
  background: #ede9e3;
  border: 1px solid #b7b2aa;
  font-size: 14px;
  text-align: center;
  font-style: italic;
  color: #2f2f2f;
}

/* ===== ОВЕРЛЕЙ ===== */
.art-overlay {
  position: fixed;
  inset: 0;
  background: rgba(20,18,16,0.85);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}

.art-overlay img {
  max-width: 88%;
  max-height: 88%;
  border: 10px solid #3a2f28;
  background: #f6f5f2;
}
</style>

<script>
(function(){
  const overlay = document.getElementById('artOverlay');
  const overlayImg = document.getElementById('artOverlayImg');

  document.querySelectorAll('.art-frame img').forEach(img => {
    img.addEventListener('click', () => {
      overlayImg.src = img.src;
      overlay.style.display = 'flex';
    });
  });

  overlay.addEventListener('click', () => {
    overlay.style.display = 'none';
    overlayImg.src = '';
  });
})();
</script>[/html]

0

57

[html]<div class="gallery-frame">

  <!-- ОБЪЯВЛЕНИЕ -->
  <div class="gallery-announcement">
    <div class="announcement-inner">
      <h2>Галерея работ</h2>
      <p>
        Перед вами экспозиция лучших работ участников.<br>
        Нажмите на картину, чтобы рассмотреть её ближе.
      </p>
    </div>
  </div>

  <div class="gallery-grid">

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/247683.gif">
      </div>
      <div class="art-author">Автор 1</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/937993.gif">
      </div>
      <div class="art-author">Автор 2</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/937993.gif">
      </div>
      <div class="art-author">Автор 3</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/262684.png">
      </div>
      <div class="art-author">Автор 4</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/160561.jpg">
      </div>
      <div class="art-author">Автор 5</div>
    </div>

    <div class="art-card">
      <div class="art-frame">
        <img src="https://upforme.ru/uploads/001c/84/76/2/195493.jpg">
      </div>
      <div class="art-author">Автор 6</div>
    </div>

  </div>
</div>

<!-- Увеличение -->
<div class="art-overlay" id="artOverlay">
  <img id="artOverlayImg">
</div>

<style>
/* ===== ОБЩИЙ ФРЕЙМ ===== */
.gallery-frame {
  max-width: 100%;
  margin: 30px auto;
  padding: 70px;

  background: url('https://upforme.ru/uploads/001c/84/76/2/45484.jpg') center / cover no-repeat;

  border: 4px solid #b8b5ad;
}

/* ===== ОБЪЯВЛЕНИЕ ===== */
.gallery-announcement {
  margin-bottom: 35px;
  padding: 14px;
  background: #3a2f28;
  border: 6px solid #2a211b;
}

.announcement-inner {
  background: #f3efe8;
  padding: 18px 25px;
  border: 4px solid #8b7a66;
  text-align: center;
}

.announcement-inner h2 {
  margin: 0 0 8px;
  font-size: 22px;
  letter-spacing: 1px;
}

.announcement-inner p {
  margin: 0;
  font-size: 15px;
  font-style: italic;
}

/* ===== СЕТКА ===== */
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 75px;
}

/* ===== КАРТОЧКА ===== */
.art-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: #fdfdfc;
  padding: 14px;
  border: 2px solid #c8c5be;
  box-shadow:
    0 8px 18px rgba(0,0,0,0.18),
    inset 0 0 0 4px #e6e4de;
}

/* ===== РАМА (РАСТЯГИВАЕТСЯ) ===== */
.art-frame {
  flex-grow: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #f6f5f2;
  padding: 16px;
  border: 6px solid #3a2f28;
  box-shadow: inset 0 0 0 3px #8b7a66;
}

.art-frame img {
  max-width: 100%;
  max-height: 100%;
  cursor: pointer;
  transition: transform 0.25s ease;
}

.art-frame img:hover {
  transform: scale(1.03);
}

/* ===== АВТОР — ВСЕГДА ВНИЗУ ===== */
.art-author {
  margin-top: 12px;
  padding: 6px 10px;
  background: #ede9e3;
  border: 1px solid #b7b2aa;
  font-size: 14px;
  text-align: center;
  font-style: italic;
  color: #2f2f2f;
}

/* ===== ОВЕРЛЕЙ ===== */
.art-overlay {
  position: fixed;
  inset: 0;
  background: rgba(20,18,16,0.85);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}

.art-overlay img {
  max-width: 88%;
  max-height: 88%;
  border: 10px solid #3a2f28;
  background: #f6f5f2;
}
</style>

<script>
(function(){
  const overlay = document.getElementById('artOverlay');
  const overlayImg = document.getElementById('artOverlayImg');

  document.querySelectorAll('.art-frame img').forEach(img => {
    img.addEventListener('click', () => {
      overlayImg.src = img.src;
      overlay.style.display = 'flex';
    });
  });

  overlay.addEventListener('click', () => {
    overlay.style.display = 'none';
    overlayImg.src = '';
  });
})();
</script>[/html]

0

58

[html]<!DOCTYPE html>
<html lang="ru">
<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>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
       
        body {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            color: #333;
            padding: 20px;
            min-height: 100vh;
        }
       
        .container {
            max-width: 1200px;
            margin: 0 auto;
        }
       
        header {
            text-align: center;
            margin-bottom: 40px;
            padding: 20px;
            background-color: rgba(255, 255, 255, 0.9);
            border-radius: 15px;
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
        }
       
        h1 {
            color: #2c3e50;
            margin-bottom: 10px;
            font-size: 2.8rem;
            background: linear-gradient(90deg, #3498db, #8e44ad);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
        }
       
        .subtitle {
            color: #7f8c8d;
            font-size: 1.2rem;
            max-width: 800px;
            margin: 0 auto;
            line-height: 1.6;
        }
       
        .gallery {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
            gap: 25px;
            margin-bottom: 40px;
        }
       
        .gallery-item {
            background-color: white;
            border-radius: 12px;
            overflow: hidden;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            cursor: pointer;
        }
       
        .gallery-item:hover {
            transform: translateY(-10px);
            box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15);
        }
       
        .gallery-img {
            width: 100%;
            height: 220px;
            object-fit: cover;
            display: block;
            transition: transform 0.5s ease;
        }
       
        .gallery-item:hover .gallery-img {
            transform: scale(1.05);
        }
       
        .author {
            padding: 18px 15px;
            text-align: center;
            background-color: #fff;
            border-top: 1px solid #eee;
        }
       
        .author-name {
            font-weight: 600;
            color: #2c3e50;
            font-size: 1.1rem;
        }
       
        .medal {
            display: inline-block;
            margin-right: 8px;
            color: #ffd700;
            font-size: 1.2rem;
        }
       
        .position {
            display: inline-block;
            background-color: #3498db;
            color: white;
            width: 26px;
            height: 26px;
            line-height: 26px;
            border-radius: 50%;
            text-align: center;
            margin-right: 8px;
            font-weight: bold;
            font-size: 0.9rem;
        }
       
        /* Модальное окно */
        .modal {
            display: none;
            position: fixed;
            z-index: 1000;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.9);
            justify-content: center;
            align-items: center;
            animation: fadeIn 0.3s;
        }
       
        @keyframes fadeIn {
            from {opacity: 0;}
            to {opacity: 1;}
        }
       
        .modal-content {
            max-width: 90%;
            max-height: 90%;
            border-radius: 8px;
            box-shadow: 0 0 40px rgba(255, 255, 255, 0.1);
        }
       
        .modal-author {
            position: absolute;
            bottom: 30px;
            left: 0;
            width: 100%;
            text-align: center;
            color: white;
            font-size: 1.5rem;
            padding: 15px;
            background-color: rgba(0, 0, 0, 0.7);
        }
       
        .close {
            position: absolute;
            top: 20px;
            right: 30px;
            color: white;
            font-size: 40px;
            font-weight: bold;
            cursor: pointer;
            transition: color 0.3s;
        }
       
        .close:hover {
            color: #f1c40f;
        }
       
        .nav-btn {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            color: white;
            font-size: 50px;
            cursor: pointer;
            padding: 10px 20px;
            user-select: none;
            transition: color 0.3s;
        }
       
        .nav-btn:hover {
            color: #f1c40f;
        }
       
        .prev {
            left: 20px;
        }
       
        .next {
            right: 20px;
        }
       
        .winner-info {
            display: flex;
            align-items: center;
            justify-content: center;
            margin-bottom: 5px;
        }
       
        footer {
            text-align: center;
            padding: 20px;
            color: #7f8c8d;
            font-size: 0.9rem;
            border-top: 1px solid #ddd;
            margin-top: 20px;
        }
       
        @media (max-width: 768px) {
            .gallery {
                grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
                gap: 20px;
            }
           
            h1 {
                font-size: 2.2rem;
            }
           
            .nav-btn {
                font-size: 35px;
            }
           
            .prev {
                left: 10px;
            }
           
            .next {
                right: 10px;
            }
        }
       
        @media (max-width: 480px) {
            .gallery {
                grid-template-columns: 1fr;
            }
           
            h1 {
                font-size: 1.8rem;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1><i class="fas fa-palette"></i> Победители конкурса рисования</h1>
            <p class="subtitle">Работы 10 финалистов ежегодного конкурса "Искусство будущего". Нажмите на любую картину для увеличения. Для навигации используйте стрелки на клавиатуре или кнопки в режиме просмотра.</p>
        </header>
       
        <div class="gallery" id="gallery">
            <!-- Галерея будет заполнена JavaScript -->
        </div>
       
        <!-- Модальное окно для увеличенного просмотра -->
        <div class="modal" id="imageModal">
            <span class="close" id="closeModal">&times;</span>
            <div class="nav-btn prev" id="prevBtn">❮</div>
            <div class="nav-btn next" id="nextBtn">❯</div>
            <img class="modal-content" id="modalImage">
            <div class="modal-author" id="modalAuthor"></div>
        </div>
       
        <footer>
            <p>Конкурс "Искусство будущего" • Все работы защищены авторским правом • © 2023</p>
        </footer>
    </div>

    <script>
        // Массив данных о победителях
        const winners = [
            { id: 1, name: "Александра Иванова", title: "Рассвет над озером", position: 1, imageUrl: "https://images.unsplash.com/photo-1578662996442-48f60103fc96?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 2, name: "Михаил Петров", title: "Городские огни", position: 2, imageUrl: "https://images.unsplash.com/photo-1543857778-c4a1a569e388?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 3, name: "Елена Смирнова", title: "Лесная сказка", position: 3, imageUrl: "https://images.unsplash.com/photo-1578301978693-85fa9c0320b9?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 4, name: "Дмитрий Козлов", title: "Морской бриз", position: 4, imageUrl: "https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 5, name: "Ольга Новикова", title: "Весенний букет", position: 5, imageUrl: "https://images.unsplash.com/photo-1577023311546-cdc07a8454d9?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 6, name: "Игорь Федоров", title: "Горные вершины", position: 6, imageUrl: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 7, name: "Татьяна Морозова", title: "Осенний парк", position: 7, imageUrl: "https://images.unsplash.com/photo-1501854140801-50d01698950b?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 8, name: "Антон Васильев", title: "Архитектура будущего", position: 8, imageUrl: "https://images.unsplash.com/photo-1487956382158-bb926046304a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 9, name: "Наталья Павлова", title: "Подводный мир", position: 9, imageUrl: "https://images.unsplash.com/photo-1544551763-46a013bb70d5?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 10, name: "Сергей Соколов", title: "Зимняя сказка", position: 10, imageUrl: "https://images.unsplash.com/photo-1518495978942-83cdb633d6d6?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" }
        ];

        // Элементы DOM
        const galleryElement = document.getElementById('gallery');
        const modalElement = document.getElementById('imageModal');
        const modalImageElement = document.getElementById('modalImage');
        const modalAuthorElement = document.getElementById('modalAuthor');
        const closeModalElement = document.getElementById('closeModal');
        const prevBtnElement = document.getElementById('prevBtn');
        const nextBtnElement = document.getElementById('nextBtn');

        let currentImageIndex = 0;

        // Функция для создания галереи
        function createGallery() {
            winners.forEach((winner, index) => {
                const galleryItem = document.createElement('div');
                galleryItem.className = 'gallery-item';
                galleryItem.dataset.index = index;
               
                const positionClass = winner.position <= 3 ? 'medal' : 'position';
                const positionIcon = winner.position <= 3 ?
                    (winner.position === 1 ? '<i class="fas fa-medal"></i>' :
                     winner.position === 2 ? '<i class="fas fa-medal" style="color:#c0c0c0"></i>' :
                     '<i class="fas fa-medal" style="color:#cd7f32"></i>') :
                    `<span class="position">${winner.position}</span>`;
               
                galleryItem.innerHTML = `
                    <img src="${winner.imageUrl}" alt="${winner.title}" class="gallery-img">
                    <div class="author">
                        <div class="winner-info">
                            ${positionIcon}
                            <span class="author-name">${winner.name}</span>
                        </div>
                        <div style="color: #7f8c8d; font-size: 0.9rem; margin-top: 5px;">"${winner.title}"</div>
                    </div>
                `;
               
                galleryItem.addEventListener('click', () => openModal(index));
                galleryElement.appendChild(galleryItem);
            });
        }

        // Функция для открытия модального окна
        function openModal(index) {
            currentImageIndex = parseInt(index);
            updateModalContent();
            modalElement.style.display = 'flex';
            document.body.style.overflow = 'hidden'; // Блокируем скролл страницы
        }

        // Функция для обновления содержимого модального окна
        function updateModalContent() {
            const winner = winners[currentImageIndex];
            modalImageElement.src = winner.imageUrl;
            modalImageElement.alt = winner.title;
           
            const positionIcon = winner.position <= 3 ?
                (winner.position === 1 ? '<i class="fas fa-medal"></i>' :
                 winner.position === 2 ? '<i class="fas fa-medal" style="color:#c0c0c0"></i>' :
                 '<i class="fas fa-medal" style="color:#cd7f32"></i>') :
                `<span style="background-color: #3498db; color: white; padding: 5px 10px; border-radius: 4px; margin-right: 10px;">${winner.position} место</span>`;
           
            modalAuthorElement.innerHTML = `
                ${positionIcon}
                <strong>${winner.name}</strong> - "${winner.title}"
            `;
        }

        // Функция для закрытия модального окна
        function closeModal() {
            modalElement.style.display = 'none';
            document.body.style.overflow = 'auto'; // Восстанавливаем скролл страницы
        }

        // Функция для показа следующего изображения
        function showNextImage() {
            currentImageIndex = (currentImageIndex + 1) % winners.length;
            updateModalContent();
        }

        // Функция для показа предыдущего изображения
        function showPrevImage() {
            currentImageIndex = (currentImageIndex - 1 + winners.length) % winners.length;
            updateModalContent();
        }

        // Обработчики событий для навигации с клавиатуры
        document.addEventListener('keydown', (event) => {
            if (modalElement.style.display === 'flex') {
                if (event.key === 'Escape') {
                    closeModal();
                } else if (event.key === 'ArrowRight') {
                    showNextImage();
                } else if (event.key === 'ArrowLeft') {
                    showPrevImage();
                }
            }
        });

        // Назначаем обработчики событий
        closeModalElement.addEventListener('click', closeModal);
        prevBtnElement.addEventListener('click', showPrevImage);
        nextBtnElement.addEventListener('click', showNextImage);

        // Закрытие модального окна при клике вне изображения
        modalElement.addEventListener('click', (event) => {
            if (event.target === modalElement) {
                closeModal();
            }
        });

        // Инициализация галереи
        createGallery();
    </script>
</body>
</html>
[/html]

0

59

[hideprofile]

[html]<!DOCTYPE html>
<html lang="ru">
<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>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
       
        body {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            color: #333;
            padding: 20px;
            min-height: 100vh;
        }
       
        .container {
            max-width: 1600px;
            margin: 0 auto;
            padding: 0 20px;
        }
       
        header {
            text-align: center;
            margin-bottom: 40px;
            padding: 20px;
            background-color: rgba(255, 255, 255, 0.9);
            border-radius: 15px;
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
        }
       
        h1 {
            color: #2c3e50;
            margin-bottom: 10px;
            font-size: 2.8rem;
            background: linear-gradient(90deg, #3498db, #8e44ad);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
        }
       
        .subtitle {
            color: #7f8c8d;
            font-size: 1.2rem;
            max-width: 800px;
            margin: 0 auto;
            line-height: 1.6;
        }
       
        .gallery {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 25px;
    margin-bottom: 40px;
}

       
        .gallery-item {
            background-color: white;
            border-radius: 12px;
            overflow: hidden;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            cursor: pointer;
            height: 100%;
            display: flex;
            flex-direction: column;
        }
       
        .gallery-item:hover {
            transform: translateY(-10px);
            box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15);
        }
       
        .gallery-img {
            width: 100%;
            height: 220px;
            object-fit: cover;
            display: block;
            transition: transform 0.5s ease;
            flex-grow: 1;
        }
       
        .gallery-item:hover .gallery-img {
            transform: scale(1.05);
        }
       
        .author {
            padding: 18px 15px;
            text-align: center;
            background-color: #fff;
            border-top: 1px solid #eee;
            flex-shrink: 0;
        }
       
        .author-name {
            font-weight: 600;
            color: #2c3e50;
            font-size: 1.1rem;
        }
       
        .medal {
            display: inline-block;
            margin-right: 8px;
            color: #ffd700;
            font-size: 1.2rem;
        }
       
        .position {
            display: inline-block;
            background-color: #3498db;
            color: white;
            width: 26px;
            height: 26px;
            line-height: 26px;
            border-radius: 50%;
            text-align: center;
            margin-right: 8px;
            font-weight: bold;
            font-size: 0.9rem;
        }
       
        /* Модальное окно */
        .modal {
            display: none;
            position: fixed;
            z-index: 1000;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.9);
            justify-content: center;
            align-items: center;
            animation: fadeIn 0.3s;
        }
       
        @keyframes fadeIn {
            from {opacity: 0;}
            to {opacity: 1;}
        }
       
        .modal-content {
            max-width: 90%;
            max-height: 90%;
            border-radius: 8px;
            box-shadow: 0 0 40px rgba(255, 255, 255, 0.1);
        }
       
        .modal-author {
            position: absolute;
            bottom: 30px;
            left: 0;
            width: 100%;
            text-align: center;
            color: white;
            font-size: 1.5rem;
            padding: 15px;
            background-color: rgba(0, 0, 0, 0.7);
        }
       
        .close {
            position: absolute;
            top: 20px;
            right: 30px;
            color: white;
            font-size: 40px;
            font-weight: bold;
            cursor: pointer;
            transition: color 0.3s;
        }
       
        .close:hover {
            color: #f1c40f;
        }
       
        .nav-btn {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            color: white;
            font-size: 50px;
            cursor: pointer;
            padding: 10px 20px;
            user-select: none;
            transition: color 0.3s;
        }
       
        .nav-btn:hover {
            color: #f1c40f;
        }
       
        .prev {
            left: 20px;
        }
       
        .next {
            right: 20px;
        }
       
        .winner-info {
            display: flex;
            align-items: center;
            justify-content: center;
            margin-bottom: 5px;
        }
       
        footer {
            text-align: center;
            padding: 20px;
            color: #7f8c8d;
            font-size: 0.9rem;
            border-top: 1px solid #ddd;
            margin-top: 20px;
        }
       

           
            h1 {
                font-size: 2.2rem;
            }
           
            .nav-btn {
                font-size: 35px;
            }
           
            .prev {
                left: 10px;
            }
           
            .next {
                right: 10px;
            }
           
            .gallery-img {
                height: 200px;
            }
        }
       
        @media (max-width: 480px) {
            .gallery {
                grid-template-columns: 1fr;
            }
           
            h1 {
                font-size: 1.8rem;
            }
           
            .gallery-img {
                height: 180px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1><i class="fas fa-palette"></i> Победители конкурса рисования</h1>
            <p class="subtitle">Работы 10 финалистов ежегодного конкурса "Искусство будущего". Нажмите на любую картину для увеличения. Для навигации используйте стрелки на клавиатуре или кнопки в режиме просмотра.</p>
        </header>
       
        <div class="gallery" id="gallery">
            <!-- Галерея будет заполнена JavaScript -->
        </div>
       
        <!-- Модальное окно для увеличенного просмотра -->
        <div class="modal" id="imageModal">
            <span class="close" id="closeModal">&times;</span>
            <div class="nav-btn prev" id="prevBtn">❮</div>
            <div class="nav-btn next" id="nextBtn">❯</div>
            <img class="modal-content" id="modalImage">
            <div class="modal-author" id="modalAuthor"></div>
        </div>
       
        <footer>
            <p>Конкурс "Искусство будущего" • Все работы защищены авторским правом • © 2023</p>
        </footer>
    </div>

    <script>
        // Массив данных о победителях
        const winners = [
            { id: 1, name: "Александра Иванова", title: "Рассвет над озером", position: 1, imageUrl: "https://images.unsplash.com/photo-1578662996442-48f60103fc96?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 2, name: "Михаил Петров", title: "Городские огни", position: 2, imageUrl: "https://images.unsplash.com/photo-1543857778-c4a1a569e388?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 3, name: "Елена Смирнова", title: "Лесная сказка", position: 3, imageUrl: "https://images.unsplash.com/photo-1578301978693-85fa9c0320b9?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 4, name: "Дмитрий Козлов", title: "Морской бриз", position: 4, imageUrl: "https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 5, name: "Ольга Новикова", title: "Весенний букет", position: 5, imageUrl: "https://images.unsplash.com/photo-1577023311546-cdc07a8454d9?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 6, name: "Игорь Федоров", title: "Горные вершины", position: 6, imageUrl: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 7, name: "Татьяна Морозова", title: "Осенний парк", position: 7, imageUrl: "https://images.unsplash.com/photo-1501854140801-50d01698950b?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 8, name: "Антон Васильев", title: "Архитектура будущего", position: 8, imageUrl: "https://images.unsplash.com/photo-1487956382158-bb926046304a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 9, name: "Наталья Павлова", title: "Подводный мир", position: 9, imageUrl: "https://images.unsplash.com/photo-1544551763-46a013bb70d5?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" },
            { id: 10, name: "Сергей Соколов", title: "Зимняя сказка", position: 10, imageUrl: "https://images.unsplash.com/photo-1518495978942-83cdb633d6d6?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" }
        ];

        // Элементы DOM
        const galleryElement = document.getElementById('gallery');
        const modalElement = document.getElementById('imageModal');
        const modalImageElement = document.getElementById('modalImage');
        const modalAuthorElement = document.getElementById('modalAuthor');
        const closeModalElement = document.getElementById('closeModal');
        const prevBtnElement = document.getElementById('prevBtn');
        const nextBtnElement = document.getElementById('nextBtn');

        let currentImageIndex = 0;

        // Функция для создания галереи
        function createGallery() {
            winners.forEach((winner, index) => {
                const galleryItem = document.createElement('div');
                galleryItem.className = 'gallery-item';
                galleryItem.dataset.index = index;
               
                const positionClass = winner.position <= 3 ? 'medal' : 'position';
                const positionIcon = winner.position <= 3 ?
                    (winner.position === 1 ? '<i class="fas fa-medal"></i>' :
                     winner.position === 2 ? '<i class="fas fa-medal" style="color:#c0c0c0"></i>' :
                     '<i class="fas fa-medal" style="color:#cd7f32"></i>') :
                    `<span class="position">${winner.position}</span>`;
               
                galleryItem.innerHTML = `
                    <img src="${winner.imageUrl}" alt="${winner.title}" class="gallery-img">
                    <div class="author">
                        <div class="winner-info">
                            ${positionIcon}
                            <span class="author-name">${winner.name}</span>
                        </div>
                        <div style="color: #7f8c8d; font-size: 0.9rem; margin-top: 5px;">"${winner.title}"</div>
                    </div>
                `;
               
                galleryItem.addEventListener('click', () => openModal(index));
                galleryElement.appendChild(galleryItem);
            });
        }

        // Функция для открытия модального окна
        function openModal(index) {
            currentImageIndex = parseInt(index);
            updateModalContent();
            modalElement.style.display = 'flex';
            document.body.style.overflow = 'hidden'; // Блокируем скролл страницы
        }

        // Функция для обновления содержимого модального окна
        function updateModalContent() {
            const winner = winners[currentImageIndex];
            modalImageElement.src = winner.imageUrl;
            modalImageElement.alt = winner.title;
           
            const positionIcon = winner.position <= 3 ?
                (winner.position === 1 ? '<i class="fas fa-medal"></i>' :
                 winner.position === 2 ? '<i class="fas fa-medal" style="color:#c0c0c0"></i>' :
                 '<i class="fas fa-medal" style="color:#cd7f32"></i>') :
                `<span style="background-color: #3498db; color: white; padding: 5px 10px; border-radius: 4px; margin-right: 10px;">${winner.position} место</span>`;
           
            modalAuthorElement.innerHTML = `
                ${positionIcon}
                <strong>${winner.name}</strong> - "${winner.title}"
            `;
        }

        // Функция для закрытия модального окна
        function closeModal() {
            modalElement.style.display = 'none';
            document.body.style.overflow = 'auto'; // Восстанавливаем скролл страницы
        }

        // Функция для показа следующего изображения
        function showNextImage() {
            currentImageIndex = (currentImageIndex + 1) % winners.length;
            updateModalContent();
        }

        // Функция для показа предыдущего изображения
        function showPrevImage() {
            currentImageIndex = (currentImageIndex - 1 + winners.length) % winners.length;
            updateModalContent();
        }

        // Обработчики событий для навигации с клавиатуры
        document.addEventListener('keydown', (event) => {
            if (modalElement.style.display === 'flex') {
                if (event.key === 'Escape') {
                    closeModal();
                } else if (event.key === 'ArrowRight') {
                    showNextImage();
                } else if (event.key === 'ArrowLeft') {
                    showPrevImage();
                }
            }
        });

        // Назначаем обработчики событий
        closeModalElement.addEventListener('click', closeModal);
        prevBtnElement.addEventListener('click', showPrevImage);
        nextBtnElement.addEventListener('click', showNextImage);

        // Закрытие модального окна при клике вне изображения
        modalElement.addEventListener('click', (event) => {
            if (event.target === modalElement) {
                closeModal();
            }
        });

        // Инициализация галереи
        createGallery();
    </script>
</body>
</html>[/html]

0

60

[html]<!DOCTYPE html>
<html lang="ru">
<head><meta charset="UTF-8">
<style>body {background:#d9d6ce;font-family: Arial, sans-serif;color:#2b2b2b;}
.menu-card {width: 600px;margin: 20px auto;background:#f2efe6;border: 2px solid #6b6b6b;}
.menu-header {background:#5c5c5c;color:#fff;padding: 12px;font-weight: bold;text-transform: uppercase;}
.menu-block {padding: 15px;border-top: 1px solid #9a9a9a;}
.menu-title {font-weight: bold;margin-bottom: 8px;}
.menu-content {background:#e4e1d8;border: 1px solid #9a9a9a;padding: 10px;white-space: pre-line;}
</style></head><body>

<div class="menu-card">

    <div class="menu-header">
        Я хочу купить:
    </div>

    <div class="menu-block">
        <div class="menu-content">
/* ТУТ НАПИШИ НАЗВАНИЕ ИНГРЕДИЕНТА/ИНГРЕДИЕНТОВ */
        </div>
    </div>

    <div class="menu-header">
        Список собранных ингредиентов:
    </div>

    <div class="menu-block">
        <div class="menu-content">
/* ТУТ НАПИШИ В ОДНУ СТРОКУ ВСЕ СОБРАННЫЕ ТОБОЙ ИНГРЕДИЕНТЫ, ЧЕРЕЗ ЗАПЯТУЮ */
        </div>
    </div>

   <div class="menu-header">
        К праздничному столу я принес:
    </div>

    <div class="menu-block">
        <div class="menu-content">
/* ТУТ НАПИШИ НАЗВАНИЕ БЛЮД, КАЖДОЕ С НОВОЙ СТРОКИ */
        </div>
    </div>

</div>

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

0


Вы здесь » test » Тестовый форум » Тестовое сообщение


Рейтинг форумов | Создать форум бесплатно