🎂 Для большой компании
@@ -193,6 +216,10 @@ const SEASONS=[
{id:'autumn',name:'Осень',icon:'🍂'},
{id:'winter',name:'Зима',icon:'❄️'}
];
+const AGES=[
+ {id:'all',name:'Все возраста'},
+ {id:'toddler',name:'👶 Для 3-летки'}
+];
const SEASON_MAP={spring:'🌸 Весна',summer:'☀️ Лето',autumn:'🍂 Осень',winter:'❄️ Зима',anytime:'🔄 В любое время'};
const CAT_NAME={outdoor:'На улице',board:'Настольные',dev:'Развивающие',pc:'Компьютерные',other:'Прочие',big:'Большая компания'};
const CAT_COLOR={outdoor:'var(--cat-outdoor)',board:'var(--cat-board)',dev:'var(--cat-dev)',pc:'var(--cat-pc)',other:'var(--cat-other)',big:'var(--cat-big)'};
@@ -227,7 +254,27 @@ const GAMES=[
{e:'🐱',t:'Кошачьи Олимпийские игры',c:'other',s:'anytime',p:'2–6 + 2 кошки',a:'3+',h:'Лазерная указка, удочка-дразнилка, коробки-лабиринты. Малашка — судья: считает прыжки кошек. Обязательно снимаем на видео.',d:'Заботу о животных, наблюдательность, смех'},
{e:'🍕',t:'Пицца-вечеринка',c:'other',s:'anytime',p:'2–6 чел',a:'3+',h:'Каждый лепит свою мини-пиццу, малыш раскладывает начинку. Пока пекутся — накрываем на стол и придумываем названия пиццам.',d:'Кулинарию, самостоятельность, терпение'},
{e:'🎬',t:'Кино-вечер с меню',c:'other',s:'anytime',p:'2–6 чел',a:'3+',h:'Выбираем мультфильм, готовим «кино-меню»: попкорн, фрукты, какао. Строим подушечный дом-крепость и смотрим вместе.',d:'Традиции, уют, умение выбирать'},
- {e:'📷',t:'Фотокросс из окна',c:'other',s:'winter',p:'2–6 чел',a:'3+',h:'Тема дня — например «зима», «красное» или «круглое». Каждый фотографирует с телефона, вечером устраиваем выставку на экране ТВ.',d:'Наблюдательность, творчество, внимание'}
+ {e:'📷',t:'Фотокросс из окна',c:'other',s:'winter',p:'2–6 чел',a:'3+',h:'Тема дня — например «зима», «красное» или «круглое». Каждый фотографирует с телефона, вечером устраиваем выставку на экране ТВ.',d:'Наблюдательность, творчество, внимание'},
+
+ {e:'🚢',t:'Лужи и кораблики',c:'outdoor',s:'spring',p:'2–6 чел',a:'3+',h:'После дождя пускаем бумажные или из листьев кораблики по ручейкам и лужам. Чей кораблик доплывёт до финиша первым — кричим «ура».',d:'Наблюдение, речь, причина и следствие'},
+ {e:'🐛',t:'Жучки под лупой',c:'outdoor',s:'spring',p:'1–4 чел',a:'3+',h:'Поднимаем камни и листья, ищем жучков и червячков. Рассматриваем через лупу, не трогая руками, и называем, кто ползёт.',d:'Наблюдательность, бережное отношение к природе'},
+ {e:'🌼',t:'Весенние мелки',c:'outdoor',s:'spring',p:'2–6 чел',a:'3+',h:'Рисуем на асфальте цветы, солнышко и радугу. Малашка называет цвета, а взрослые дорисовывают стебельки и пчёлок.',d:'Цвета, мелкую моторику, творчество'},
+ {e:'💦',t:'Водный бой губками',c:'outdoor',s:'summer',p:'2–6 чел',a:'3+',h:'Две миски с водой на расстоянии. Переносим воду губкой из одной в другую — кто больше натаскает за минуту.',d:'Моторику, координацию, ловкость'},
+ {e:'🫧',t:'Ловцы мыльных пузырей',c:'outdoor',s:'summer',p:'2–8 чел',a:'3+',h:'Взрослый пускает пузыри, малыш ловит и лопает. Считаем, кто больше поймал, и кто подует самый большой пузырь.',d:'Координацию, счёт, зрительное отслеживание'},
+ {e:'🏖️',t:'Песочный город',c:'outdoor',s:'summer',p:'2–6 чел',a:'3+',h:'Лепим куличики, роем каналы и рвы, строим крепость. Малашка лепит простые формы, взрослые соединяют всё в город.',d:'Моторику, воображение, сотрудничество'},
+ {e:'🌿',t:'Гербарий',c:'outdoor',s:'summer',p:'2–6 чел',a:'3+',h:'Собираем цветочки и листики, сушим между страниц книги пару дней, потом вклеиваем в альбом и подписываем названия.',d:'Терпение, классификацию, речь'},
+ {e:'🌰',t:'Жёлуди и каштаны',c:'outdoor',s:'autumn',p:'2–6 чел',a:'3+',h:'Собираем жёлуди и каштаны, дома сортируем по размеру в баночки. Делаем поделки-человечков с зубочистками.',d:'Классификацию, мелкую моторику, творчество'},
+ {e:'🍎',t:'Яблочная дегустация',c:'other',s:'autumn',p:'2–6 чел',a:'3+',h:'Режем разные сорта яблок, пробуем и описываем: сладкое, кислое, твёрдое. Голосуем за любимое и рисуем его.',d:'Вкусовые ощущения, речь, умение выбирать'},
+ {e:'🦔',t:'Кормушка для птиц',c:'outdoor',s:'autumn',p:'2–6 чел',a:'3+',h:'Делаем кормушку из коробки, насыпаем семечки и вешаем во дворе. Каждый день наблюдаем, кто прилетает обедать.',d:'Заботу о животных, наблюдательность, рутину'},
+ {e:'❄️',t:'Снежинки под лупой',c:'outdoor',s:'winter',p:'1–4 чел',a:'3+',h:'Ловим снежинки на тёмную варежку и рассматриваем форму через лупу, пока не растаяли. Ищем самые «звёздчатые».',d:'Наблюдательность, внимание, терпение'},
+ {e:'🧣',t:'Кормим синичек',c:'outdoor',s:'winter',p:'2–6 чел',a:'3+',h:'Каждое утро насыпаем семечки в кормушку. Отмечаем в дневнике, кто прилетел: синица, воробей, снегирь.',d:'Рутину, заботу, наблюдение за природой'},
+ {e:'⛄',t:'Снеговик-модник',c:'outdoor',s:'winter',p:'2–6 чел',a:'3+',h:'Лепим снеговика и наряжаем его: шарф, шапка, нос-морковка, пуговицы. Устраиваем модное дефиле с фотосессией.',d:'Моторику, творчество, воображение'},
+ {e:'🎵',t:'Музыка из крупы',c:'dev',s:'anytime',p:'2–6 чел',a:'3+',h:'Насыпаем разную крупу в одинаковые баночки — рис, гречку, горох. Трясём и сравниваем звук, собираем «оркестр».',d:'Слух, ритм, различение звуков'},
+ {e:'📚',t:'Сказка по ролям',c:'dev',s:'anytime',p:'2–6 чел',a:'3+',h:'Читаем любимую сказку и разыгрываем: взрослые — звери, малыш — герой. Повторяем фразы и добавляем свои.',d:'Речь, воображение, память'},
+ {e:'🎈',t:'Шарик не дай упасть',c:'dev',s:'anytime',p:'2–8 чел',a:'3+',h:'Подбрасываем воздушный шарик и не даём коснуться пола. Считаем, сколько раз ударили, пока он не упал.',d:'Координацию, счёт, реакцию'},
+ {e:'🔦',t:'Теневой театр',c:'dev',s:'anytime',p:'2–6 чел',a:'3+',h:'В тёмной комнате светим фонариком на стену, показываем тени из рук. Угадываем животное и придумываем сценку.',d:'Воображение, речь, внимание'},
+ {e:'🖐️',t:'Пальчиковые краски',c:'dev',s:'anytime',p:'1–4 чел',a:'2+',h:'Красим ладошки и оставляем отпечатки на большом листе, потом дорисовываем их в животных и цветы.',d:'Тактильность, креатив, речь'},
+ {e:'🧩',t:'Пазл вместе',c:'dev',s:'anytime',p:'2–6 чел',a:'3+',h:'Большой пазл 24–48 деталей: малыш ищет края и детали по цвету, взрослые собирают середину. Чья сторона быстрее?',d:'Пространственное мышление, сотрудничество'}
];
const BIG=[
@@ -239,7 +286,7 @@ const BIG=[
{e:'📸',t:'Фотобудка + челленджи',p:'6–20 чел',a:'4+',h:'Тематическая фотозона с реквизитом и челленджи: фото всей командой в прыжке, повторить позу с картины. Голосуем за лучшее — приз имениннику.',d:'Креатив, творчество, общение'}
];
-const state={cat:'all',season:'all',q:''};
+const state={cat:'all',season:'all',age:'all',q:''};
function chips(container,items,activeKey,onClick){
container.innerHTML='';
@@ -256,10 +303,12 @@ function chips(container,items,activeKey,onClick){
function renderChips(){
chips(document.getElementById('catChips'),CATS,'cat',()=>{refreshChips();renderGrid();});
chips(document.getElementById('seasonChips'),SEASONS,'season',()=>{refreshChips();renderGrid();});
+ chips(document.getElementById('ageChips'),AGES,'age',()=>{refreshChips();renderGrid();});
}
function refreshChips(){
document.querySelectorAll('#catChips .chip').forEach((c,i)=>c.classList.toggle('active',state.cat===CATS[i].id));
document.querySelectorAll('#seasonChips .chip').forEach((c,i)=>c.classList.toggle('active',state.season===SEASONS[i].id));
+ document.querySelectorAll('#ageChips .chip').forEach((c,i)=>c.classList.toggle('active',state.age===AGES[i].id));
}
function cardHTML(g,big){
@@ -286,6 +335,7 @@ function filtered(){
return GAMES.filter(g=>{
if(state.cat!=='all'&&g.c!==state.cat)return false;
if(state.season!=='all'&&g.s!==state.season)return false;
+ if(state.age==='toddler'&&g.a!=='3+'&&g.a!=='2+')return false;
if(state.q&&g.t.toLowerCase().indexOf(state.q.toLowerCase())===-1)return false;
return true;
});
@@ -306,6 +356,25 @@ function renderBig(){
document.getElementById('bigGrid').innerHTML=BIG.map(g=>cardHTML(g,true)).join('');
}
+const SEASON_GROUPS=[
+ {id:'spring',icon:'🌸',name:'Весна'},
+ {id:'summer',icon:'☀️',name:'Лето'},
+ {id:'autumn',icon:'🍂',name:'Осень'},
+ {id:'winter',icon:'❄️',name:'Зима'},
+ {id:'anytime',icon:'🔄',name:'В любое время'}
+];
+function renderBySeason(){
+ const wrap=document.getElementById('bySeason');
+ let html='';
+ SEASON_GROUPS.forEach(sg=>{
+ const items=GAMES.filter(g=>g.s===sg.id);
+ if(!items.length)return;
+ html+=`
${sg.icon}${sg.name}${items.length} игр
`;
+ html+=`
${items.map(g=>cardHTML(g,false)).join('')}
`;
+ });
+ wrap.innerHTML=html;
+}
+
/* Surprise modal */
const modal=document.getElementById('modal');
const modalCard=document.getElementById('modalCard');
@@ -336,10 +405,11 @@ modal.addEventListener('click',e=>{if(e.target===modal)modal.classList.add('hidd
document.addEventListener('keydown',e=>{if(e.key==='Escape')modal.classList.add('hidden');});
document.getElementById('search').addEventListener('input',e=>{state.q=e.target.value;renderGrid();});
-document.getElementById('reset').onclick=()=>{state.cat='all';state.season='all';state.q='';document.getElementById('search').value='';refreshChips();renderGrid();};
+document.getElementById('reset').onclick=()=>{state.cat='all';state.season='all';state.age='all';state.q='';document.getElementById('search').value='';refreshChips();renderGrid();};
renderChips();
renderGrid();
+renderBySeason();
renderBig();