
Селин
Сообщений 1 страница 9 из 9
Поделиться22026-05-10 18:26:44
<!----------------- хтмл в постах с допуском по группам --------------->
<!-- HTML в постах -->
<script type="text/javascript" src="http://forumstatic.ru/files/0018/25/96/94151.js"></script>
<script type="text/javascript">
HTMLinPost.groups = [1,2,3,4,5,6,7,8]; // Группы, допущенные к вставке HTML в посты
HTMLinPost.noAccess = []; // Пользователи с запретом вставки HTML в посты
HTMLinPost.parseHTMLinPosts()
</script>
Поделиться32026-05-10 18:26:59
[html]<div style="max-width:700px; margin:30px auto; border:2px solid #555; border-radius:12px; padding:24px; background:#6f3531; color:#fff; box-shadow:0 8px 25px rgba(0,0,0,0.6);">
<div style="font-size:24px; text-align:center; margin-bottom:22px; font-weight:bold; color:#ffd700;">
Калькулятор постов
</div>
<!-— Монеты на профиле -->
<div style="margin-bottom:20px; max-width:260px;">
<input type="number" id="start" placeholder="Монеты на профиле" style="width:100%; padding:11px; background:#3f1f1d; color:#fff; border:1px solid #777; border-radius:8px;">
</div>
<!-— Бонусы -->
<div style="margin-bottom:20px; background:#3f1f1d; padding:14px; border-radius:8px;">
<label style="display:block; margin-bottom:6px;"><input type="checkbox" id="epComplete"> Завершённый эпизод (+300)</label>
<label style="display:block; margin-bottom:6px;"><input type="checkbox" id="epigraph"> Эпиграф (+15)</label>
<label style="display:block;"><input type="checkbox" id="openEp"> Открытие эпизода (+15)</label>
</div>
<!-— Посты -->
<div style="margin-bottom:20px;">
<div style="background:#3f1f1d; padding:14px; border-radius:8px; margin-bottom:12px;">
<b>Пост 1</b><br>
<textarea id="p1" rows="3" style="width:100%; margin:8px 0; background:#2c1614; color:white; border:1px solid #666; border-radius:6px; resize:vertical;"></textarea>
<input type="text" id="l1" placeholder="Ссылка на пост" style="width:100%; padding:8px; background:#2c1614; color:#fff; border:1px solid #666; border-radius:6px;">
<div style="margin-top:8px; font-size:14px;">
<label><input type="checkbox" id="d1"> x2 (в сутки)</label>
<label style="margin-left:15px;"><input type="checkbox" id="t1"> x2 (10-й пост)</label>
</div>
</div>
<div style="background:#3f1f1d; padding:14px; border-radius:8px; margin-bottom:12px;">
<b>Пост 2</b><br>
<textarea id="p2" rows="3" style="width:100%; margin:8px 0; background:#2c1614; color:white; border:1px solid #666; border-radius:6px; resize:vertical;"></textarea>
<input type="text" id="l2" placeholder="Ссылка на пост" style="width:100%; padding:8px; background:#2c1614; color:#fff; border:1px solid #666; border-radius:6px;">
<div style="margin-top:8px; font-size:14px;">
<label><input type="checkbox" id="d2"> x2 (в сутки)</label>
<label style="margin-left:15px;"><input type="checkbox" id="t2"> x2 (10-й пост)</label>
</div>
</div>
<div style="background:#3f1f1d; padding:14px; border-radius:8px; margin-bottom:12px;">
<b>Пост 3</b><br>
<textarea id="p3" rows="3" style="width:100%; margin:8px 0; background:#2c1614; color:white; border:1px solid #666; border-radius:6px; resize:vertical;"></textarea>
<input type="text" id="l3" placeholder="Ссылка на пост" style="width:100%; padding:8px; background:#2c1614; color:#fff; border:1px solid #666; border-radius:6px;">
<div style="margin-top:8px; font-size:14px;">
<label><input type="checkbox" id="d3"> x2 (в сутки)</label>
<label style="margin-left:15px;"><input type="checkbox" id="t3"> x2 (10-й пост)</label>
</div>
</div>
<div style="background:#3f1f1d; padding:14px; border-radius:8px;">
<b>Пост 4</b><br>
<textarea id="p4" rows="3" style="width:100%; margin:8px 0; background:#2c1614; color:white; border:1px solid #666; border-radius:6px; resize:vertical;"></textarea>
<input type="text" id="l4" placeholder="Ссылка на пост" style="width:100%; padding:8px; background:#2c1614; color:#fff; border:1px solid #666; border-radius:6px;">
<div style="margin-top:8px; font-size:14px;">
<label><input type="checkbox" id="d4"> x2 (в сутки)</label>
<label style="margin-left:15px;"><input type="checkbox" id="t4"> x2 (10-й пост)</label>
</div>
</div>
</div>
<button onclick="let s=parseInt(document.getElementById('start').value)||0; let epC=document.getElementById('epComplete').checked?300:0; let epG=document.getElementById('epigraph').checked?15:0; let openE=document.getElementById('openEp').checked?15:0; let t=0; let o=`Монет в профиле: ${s}\nЭпиграф: ${epG?'+15':'нет'}\nОткрытие эпизода: ${openE?'+15':'нет'}\nЗавершённый эпизод: ${epC?'+300':'нет'}\n\nПОСТЫ:\n`; for(let i=1;i<=4;i++){ let len=document.getElementById('p'+i).value.trim().length; let pl=document.getElementById('l'+i).value.trim(); let day=document.getElementById('d'+i).checked; let ten=document.getElementById('t'+i).checked; let c=0; if(len>0){ c=50; if(len>4000)c+=Math.floor((len-4000)/1000)*15; if(day)c*=2; if(ten)c*=2; } t+=c; o+=`Пост ${i} (${len} симв.)`; if(pl)o+=' — '+pl; if(day)o+=' • x2 сутки'; if(ten)o+=' • x2 10-й'; o+=` → ${c}\n`; } o+=`\n━━━━━━━━ ИТОГО ━━━━━━━━\nС постов: ${t}\nБонусы: +${epC+epG+openE}\nВсего: ${s+t+epC+epG+openE} монет`; document.getElementById('result').innerText=o; document.getElementById('result').style.display='block';"
style="width:100%; padding:16px; background:#8b4a46; color:white; font-weight:bold; border:none; border-radius:8px; font-size:17px; cursor:pointer;">
Посчитать всё
</button>
<div id="result" style="display:none; margin-top:24px; padding:20px; background:#3f1f1d; border-radius:8px; white-space:pre-wrap; line-height:1.6; font-size:15.2px; border:1px solid #664444;"></div>
</div>[/html]
Поделиться42026-05-14 09:57:43
[html]<!-- === MEMO 8×6 (48 карточек), серый, American Typewriter, хороший рандом === -->
<style>
.memo{
--tile:96px; --gap:12px; --radius:14px; --cols:8; /* кол-во колонок и размер ячейки */
--front:#1d1d1f; --back:#2a2a2c; --accent:#9aa0a6;
--ok:#9b9b9b; --text:#e6e6e6; --muted:#b5b5b5; --blank:#242426;
font-family:"American Typewriter","Georgia","Times New Roman",serif;
max-width:950px; margin:16px auto; padding:14px;
background:linear-gradient(180deg,#151516,#1c1c1e);
border-radius:20px; box-shadow:10 10px 28px rgba(0,0,0,.45); color:var(--text)
}
.memo h3{margin:0 0 .5rem;font-size:20px}
.memo .memo__controls{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}
.memo .memo__btn{appearance:none;border:1px solid #3a3a3c;background:#171718;color:var(--text);padding:6px 10px;border-radius:10px;cursor:pointer;font-size:13px}
.memo .memo__btn:hover{border-color:var(--accent);box-shadow:0 0 0 2px rgba(154,160,166,.15) inset}
.memo .memo__status{font-size:13px;color:var(--muted)}
.memo .grid{display:grid;grid-template-columns:repeat(var(--cols),var(--tile));gap:var(--gap);justify-content:center}
@media (max-width:880px){.memo{--tile:86px}}
@media (max-width:760px){.memo{--cols:7;--tile:78px}}
@media (max-width:620px){.memo{--cols:6;--tile:70px}}
@media (max-width:520px){.memo{--cols:5;--tile:64px}}
.memo input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.memo .memo-card{width:var(--tile);height:var(--tile);border-radius:var(--radius);position:relative;perspective:900px}
.memo .memo-face{position:absolute;inset:0;display:grid;place-items:center;border-radius:var(--radius);
transition:transform .5s,box-shadow .2s;backface-visibility:hidden;user-select:none}
.memo .memo-front{background:var(--front);border:1px solid #2c2c2e;box-shadow:inset 0 0 0 1px rgba(255,255,255,.03)}
.memo .memo-back{background:var(--back);border:1px dashed rgba(255,255,255,.12);transform:rotateY(180deg);
font-size:28px; letter-spacing:.6px}
.memo input:checked + label .memo-front{transform:rotateY(180deg)}
.memo input:checked + label .memo-back{transform:rotateY(360deg)}
.memo label{display:block;width:100%;height:100%;cursor:pointer;outline:none}
.memo label:focus-visible .memo-front{box-shadow:0 0 0 3px rgba(154,160,166,.35)}
.memo label:hover .memo-front{box-shadow:0 0 0 2px rgba(154,160,166,.18) inset}
/* Цифры/иконки на обороте из data-symbol */
.memo label .memo-back::before{content:attr(data-symbol); transform:translateY(-1px)}
/* Зафиксированная пара */
.memo label[data-locked]{pointer-events:none}
.memo label[data-locked] .memo-back{
box-shadow:0 0 0 2px rgba(155,155,155,.35) inset, 0 6px 14px rgba(0,0,0,.25);
border-color:rgba(200,200,200,.4)
}
</style>
<div class="memo" id="memo48">
<form>
<h3>MEMO — найди пары</h3>
<div class="memo__controls">
<small>Открывай по две карточки</small>
<div class="memo__status">Найдено: <b class="memo__found">0</b> / 24</div>
<button class="memo__btn" type="reset">СБРОС</button>
</div>
<div class="grid" id="memo-grid"></div>
</form>
</div>
<script>
(() => {
const root = document.getElementById('memo48');
if (!root) return;
const grid = root.querySelector('#memo-grid');
const form = root.querySelector('form');
const foundEl = root.querySelector('.memo__found');
const TOTAL = 24; // число пар
const symbols = Array.from({length: TOTAL}, (_,i) => String(i+1).padStart(2,'0'));
let opened = [];
let lock = false;
let found = 0;
// криптографически стойкий (при наличии) Фишер–Йетс
function rndInt(max){
if (window.crypto && crypto.getRandomValues){
const buf = new Uint32Array(1);
crypto.getRandomValues(buf);
return buf[0] % max;
}
return Math.floor(Math.random() * max);
}
function shuffle(arr){
for (let m = arr.length; m; ){
const i = rndInt(m--);
[arr[m], arr[i]] = [arr[i], arr[m]];
}
return arr;
}
function buildDeck(){
grid.innerHTML = '';
const deck = shuffle(symbols.concat(symbols)); // дублируем и мешаем
deck.forEach((sym, idx) => {
const card = document.createElement('div'); card.className = 'memo-card';
const input = document.createElement('input'); input.type='checkbox'; input.id = `mc${idx}`;
const label = document.createElement('label'); label.setAttribute('for', input.id);
const front = document.createElement('span'); front.className = 'memo-face memo-front';
const back = document.createElement('span'); back.className = 'memo-face memo-back'; back.dataset.symbol = sym;
label.append(front, back); card.append(input, label); grid.append(card);
});
// сброс внутренних состояний
opened = [];
lock = false;
found = 0;
foundEl.textContent = '0';
}
function getSymbol(input){
return input.nextElementSibling.querySelector('.memo-back').dataset.symbol;
}
function lockPair(a,b){
a.nextElementSibling.dataset.locked = '1';
b.nextElementSibling.dataset.locked = '1';
}
root.addEventListener('change', (e) => {
const input = e.target;
if (input.tagName !== 'INPUT') return;
if (input.nextElementSibling.dataset.locked){ input.checked = true; return; }
if (lock && input.checked){ input.checked = false; return; }
if (input.checked){
opened.push(input);
if (opened.length === 2){
lock = true;
const [a,b] = opened;
const sa = getSymbol(a), sb = getSymbol(b);
if (sa === sb){
lockPair(a,b);
found++;
foundEl.textContent = String(found);
opened = [];
lock = false;
} else {
const toClose = opened.slice();
opened = [];
setTimeout(() => {
toClose.forEach(inp => inp.checked = false);
lock = false;
}, 700);
}
}
} else {
opened = opened.filter(x => x !== input);
}
});
form.addEventListener('reset', () => {
setTimeout(buildDeck, 0); // при сбросе — новая случайная раскладка
});
buildDeck(); // старт
})();
</script>[/html]
[hideprofile]
Поделиться52026-05-14 16:25:46
— СТО ВОСЕМЬДЕСЯТ ШЕСТАЯ НЕДЕЛЯ — Сто восемьдесят шестая неделя нашей телестройки, друзья, мы еще живы, веселы и готовы к новому! Начать хочу с восхищения @Atticus Goyle, @Abraxas Malfoy и @Thomas Miller: свидетели Мерлина дописаны и выложены для глаз публики! Они (свидетели) ждут, когда их будут активно играть, вообще-то! Матчасть получилась подробной, интересной и заслуживающей внимания. В самом деле, сколько ее ждали! На проекте ряд новшеств, которые никто не просил, но получите: облегчили поход в банк, теперь у нас есть свой калькулятор, который сам считает ваши символы и конвертирует их в монеты, более того, подтягивает ссылки, вам остается только скопировать bb-код нажав на кнопку revelio. Важное замечание: система не считает х2 за отпись поста в течении суток, каждый 10й пост, открытие/закрытие эпизода, эпиграф, это вы можете посчитать в ручную, но так как я об этом пишу, значит вопрос уже взят в работу) Так же на главной странице появилась легкая мини-игра с письмами! Нажимайте на конвертик в правом нижнем углу экрана, ловите письма и на каждом 20 письме получайте предсказание, а так же устанавливайте рекорд по форуму, пока рекорд принадлежит @ Charlotte Bott! Она собрала больше ЧЕТЫРЕХ ТЫСЯЧ писем, с ума сойти. Остановить игру можно просто обновив страницу) Продолжаем собирать пазлы и получать монеты. Так же готовится ивент для постописцев, разминаем пальцы и готовимся писать! В последнее время на форуме упало количество пользователей в сутки, мы видим это, стараемся делать всем составом амс все, что от нас зависит, поэтому надеемся, что вы тоже отнесетесь лояльно: будете писать во флуд, посты, а так же не будете забывать выгуливать своих твинков. Было бы еще чудеснее, если бы вы приглашали своих игроков к нам, мы всем рады) Особенно прошу зайти в "омут памяти" и посмотреть свои эпизоды, которые больше играться не будут. Можете написать мне в лс о переносе, можете в вопросы и предложения, как пожелаете) Если у вас есть идеи, чтобы вы хотели видеть на форуме, на что стоит обратить внимание, вы можете так же прийти в лс ко мне, к @Atticus Goyle или написать в тему Что у нас в квестах? Родные, я сидела в кустах двое суток, чтобы собрать комментарии наших волшебников и колдунов о событиях в Малфой-Мэноре Первый мне попался молодой аврор по имени Джеймс Поттер. Нашу программу интересовало нравится ли молодому поколению работать в Аврорате? Конечно, мы не пальцем деланы, друзья, и спросили о событиях в меноре. Вот что говорит @James Potter :
Что имел ввиду Джеймс говоря о своей жене, мы не знаем, но похоже ему не поможет даже самая скоростная метла, чтобы уклониться от этих вопросов! Так же под внимание моего взгляда и моего микрофона попал несравненный красавчик (Он буквально Ален Делон, ок?) консультант-судмедэксперт Герхард Тодд. И несмотря на то как он уклонялся от тысячи вопросов, ускорял шаг, я все равно добилась от него ответа, жалко, что не адреса для совы. Так вот @Gerhard Todd сообщает про обыск:
Глава департамента обеспечения магической безопасности - @Renard R. Rosier, наследник богатейшего рода @Lucius Malfoy и юный стажер @Sirius Black отказались давать комментарии. И последний, но не по значимости, Абраксас Малфой! Выловить такую крупную рыбу, знаете непросто, но у меня свои наживки, иногда родство помогает, так вот, его мнение по теме: @Abraxas Malfoy
[indent] |
— АКТИВИСТЫ — | — ПОСТОПИСЦЫ — |
— П О С Т Н Е Д Е Л И — | ||
— Э П И З О Д Н Е Д Е Л И — |
[sign] [/sign]
Поделиться62026-05-14 16:28:25
[html]<style>
/* Красивый фон для всех аудиоплееров */
audio {
background: #dcdcd2 !important;
border: 2px solid #b8b8b0 !important;
border-radius: 10px !important;
width: 100% !important;
max-width: 520px !important;
margin: 8px 0 !important;
padding: 2px !important;
}
audio::-webkit-media-controls-panel,
.mejs-container .mejs-controls {
background: #dcdcd2 !important;
}
audio::-webkit-media-controls-timeline {
background: #c4c4bc !important;
}
</style>[/html]
Поделиться72026-05-14 16:29:24

<div style="background:#dcdcd2; padding:12px; border-radius:12px; display:inline-block; max-width:520px; border:2px solid #b8b8b0;">
<audio controls src="https://videotourl.com/audio/1778759825174-453b8e9a-ea04-4186-9163-df77790254c5.ogg" preload="none" style="width:100%; min-width:380px;">
Загруженное mp3
</audio>
</div>
Поделиться82026-05-14 16:29:34
[html]
<div style="background:#dcdcd2; padding:12px; border-radius:12px; display:inline-block; max-width:520px; border:2px solid #b8b8b0;">
<audio controls src="https://videotourl.com/audio/1778759825174-453b8e9a-ea04-4186-9163-df77790254c5.ogg" preload="none" style="width:100%; min-width:380px;">
Загруженное mp3
</audio>
</div>
[/html]
Поделиться92026-05-14 18:38:31
[removeprofile]
[html]
<style>
.memo{
--tile:98px;
--gap:14px;
--radius:16px;
--cols:8;
--main: #763c38;
--secondary: #918f82;
--front: #5c2f2a;
--back: #918f82;
--accent: #763c38;
--ok: #c4a38a;
--text: #f5e9d8;
--muted: #d4c4b0;
font-family: "American Typewriter", "Georgia", "Times New Roman", serif;
max-width: 1000px;
margin: 20px auto;
padding: 18px;
background: linear-gradient(180deg, #3f2a26, #52423d);
border-radius: 24px;
box-shadow: 0 12px 32px rgba(0,0,0,.55);
color: var(--text);
}
.memo h3{margin:0 0 .6rem; font-size:22px; color:var(--text)}
.memo .memo__controls{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.memo .memo__btn{
appearance:none;
border:1px solid #a16e64;
background:#3f2a26;
color:var(--text);
padding:7px 12px;
border-radius:12px;
cursor:pointer;
font-size:13.5px;
}
.memo .memo__btn:hover{
border-color:var(--accent);
box-shadow:0 0 0 3px rgba(118,60,56,.3) inset;
}
.memo .memo__status{font-size:14px;color:var(--muted)}
.memo .grid{
display:grid;
grid-template-columns:repeat(var(--cols),var(--tile));
gap:var(--gap);
justify-content:center;
}
/* Адаптив */
@media (max-width:920px){.memo{--tile:88px}}
@media (max-width:780px){.memo{--cols:7;--tile:82px}}
@media (max-width:680px){.memo{--cols:6;--tile:76px}}
@media (max-width:560px){.memo{--cols:5;--tile:68px}}
.memo input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.memo .memo-card{width:var(--tile);height:var(--tile);border-radius:var(--radius);position:relative;perspective:1000px}
.memo .memo-face{
position:absolute; inset:0; border-radius:var(--radius);
transition:transform .55s cubic-bezier(0.23,1,0.32,1);
backface-visibility:hidden;
display:grid; place-items:center;
user-select:none;
box-shadow: inset 0 0 0 1px rgba(0,0,0,.4);
}
.memo .memo-front{
background:var(--front);
border:2px solid #8a5a52;
}
.memo .memo-back{
background:var(--back);
border:2px solid var(--main);
transform:rotateY(180deg);
overflow:hidden;
}
.memo .memo-back img{
width:100%; height:100%; object-fit:cover;
}
.memo input:checked + label .memo-front{transform:rotateY(180deg)}
.memo input:checked + label .memo-back{transform:rotateY(360deg)}
.memo label{display:block;width:100%;height:100%;cursor:pointer}
.memo label:focus-visible .memo-front{box-shadow:0 0 0 4px rgba(118,60,56,.6)}
.memo label:hover .memo-front{box-shadow:0 0 0 3px rgba(118,60,56,.35) inset}
.memo label[data-locked]{pointer-events:none}
.memo label[data-locked] .memo-back{
box-shadow:0 0 0 3px rgba(196,163,138,.7) inset;
filter: brightness(1.1);
}
</style>
<div class="memo" id="memo40">
<form>
<h3>MEMO — найди пары</h3>
<div class="memo__controls">
<small>Открывай по две карточки</small>
<div class="memo__status">Найдено: <b class="memo__found">0</b> / 20</div>
<button class="memo__btn" type="reset">НОВАЯ ИГРА</button>
</div>
<div class="grid" id="memo-grid"></div>
</form>
</div>
<script>
(() => {
const root = document.getElementById('memo40');
if (!root) return;
const grid = root.querySelector('#memo-grid');
const foundEl = root.querySelector('.memo__found');
const imageUrls = [
"https://upforme.ru/uploads/001c/a5/42/2/928103.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/796942.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/920791.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/210253.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/539522.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/570476.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/142848.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/792870.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/364056.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/940122.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/216561.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/193804.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/313646.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/539420.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/498050.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/805098.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/84622.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/958212.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/592960.jpg",
"https://upforme.ru/uploads/001c/a5/42/2/387049.jpg"
];
let opened = [];
let lock = false;
let found = 0;
function rndInt(max) {
if (window.crypto?.getRandomValues) {
const buf = new Uint32Array(1);
crypto.getRandomValues(buf);
return buf[0] % max;
}
return Math.floor(Math.random() * max);
}
function shuffle(arr) {
for (let m = arr.length; m; ) {
const i = rndInt(m--);
[arr[m], arr[i]] = [arr[i], arr[m]];
}
return arr;
}
function buildDeck() {
grid.innerHTML = '';
const deck = shuffle([...imageUrls, ...imageUrls]);
deck.forEach((imgUrl, idx) => {
const card = document.createElement('div'); card.className = 'memo-card';
const input = document.createElement('input'); input.type='checkbox'; input.id = `mc${idx}`;
const label = document.createElement('label'); label.setAttribute('for', input.id);
const front = document.createElement('span'); front.className = 'memo-face memo-front';
const back = document.createElement('span'); back.className = 'memo-face memo-back';
const img = document.createElement('img');
img.src = imgUrl;
img.alt = '';
back.appendChild(img);
label.append(front, back);
card.append(input, label);
grid.appendChild(card);
});
opened = []; lock = false; found = 0;
foundEl.textContent = '0';
}
root.addEventListener('change', (e) => {
const input = e.target;
if (input.tagName !== 'INPUT') return;
if (input.nextElementSibling.dataset.locked) { input.checked = true; return; }
if (lock && input.checked) { input.checked = false; return; }
if (input.checked) {
opened.push(input);
if (opened.length === 2) {
lock = true;
const [a, b] = opened;
const imgA = a.nextElementSibling.querySelector('img').src;
const imgB = b.nextElementSibling.querySelector('img').src;
if (imgA === imgB) {
a.nextElementSibling.dataset.locked = '1';
b.nextElementSibling.dataset.locked = '1';
found++;
foundEl.textContent = found;
opened = [];
lock = false;
} else {
const toClose = opened.slice();
opened = [];
setTimeout(() => {
toClose.forEach(inp => inp.checked = false);
lock = false;
}, 800);
}
}
} else {
opened = opened.filter(x => x !== input);
}
});
root.querySelector('form').addEventListener('reset', () => setTimeout(buildDeck, 10));
buildDeck();
})();
</script>[/html]





































