Beautiful language switcher + streaming for all movies

This commit is contained in:
Quanysh 2026-09-03 12:28:22 +00:00
parent 6ac1fad853
commit c06f2ade6f
3 changed files with 227 additions and 91 deletions

View File

@ -24,11 +24,20 @@
<header class="header">
<div class="logo">FILMORA</div>
<div class="header-controls">
<select class="language-select" id="languageSelect">
<option value="ru">🇷🇺 RU</option>
<option value="en">🇺🇸 EN</option>
<option value="kk">🇰🇿 KZ</option>
</select>
<div class="language-switcher">
<button class="lang-btn" data-lang="ru" title="Русский">
<span class="lang-flag">🇷🇺</span>
<span class="lang-code">RU</span>
</button>
<button class="lang-btn" data-lang="en" title="English">
<span class="lang-flag">🇺🇸</span>
<span class="lang-code">EN</span>
</button>
<button class="lang-btn" data-lang="kk" title="Қазақша">
<span class="lang-flag">🇰🇿</span>
<span class="lang-code">KZ</span>
</button>
</div>
<nav class="nav">
<button class="nav-btn" data-page="favorites">
<span class="nav-icon">❤️</span>

197
script.js
View File

@ -212,7 +212,8 @@ const MOVIES = [
genres: ["crime", "drama"],
moods: ["think", "drive"],
description: "Крёстный отец — драма о мафиозной семье Корлеоне. История о власти, семье и предательстве в мире организованной преступности.",
poster: "https://image.tmdb.org/t/p/w500/3bhkrj58Vtu7enYsRolD1fZdja1.jpg"
poster: "https://image.tmdb.org/t/p/w500/3bhkrj58Vtu7enYsRolD1fZdja1.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 3,
@ -224,7 +225,8 @@ const MOVIES = [
genres: ["action", "crime", "drama"],
moods: ["drive", "think"],
description: "Бэтмен поднимает ставки в войне с криминалом. С помощью лейтенанта Джима Гордона и прокурора Харви Дента он намерен очистить улицы от преступности.",
poster: "https://image.tmdb.org/t/p/w500/qJ2tW6WMUDux911r6m7haRef0WH.jpg"
poster: "https://image.tmdb.org/t/p/w500/qJ2tW6WMUDux911r6m7haRef0WH.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 4,
@ -236,7 +238,8 @@ const MOVIES = [
genres: ["scifi", "action", "thriller"],
moods: ["think", "drive", "unusual"],
description: "Кобб — талантливый вор, лучший в опасном искусстве извлечения секретов подсознания во время сна. Он получает шанс начать всё заново.",
poster: "https://image.tmdb.org/t/p/w500/9gk7adHYeDvHkCSEqAvQNLV5Uge.jpg"
poster: "https://image.tmdb.org/t/p/w500/9gk7adHYeDvHkCSEqAvQNLV5Uge.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 5,
@ -248,7 +251,8 @@ const MOVIES = [
genres: ["scifi", "drama", "adventure"],
moods: ["think", "unusual"],
description: "Когда засуха и пыльные бури приводят человечество к продовольственному кризису, бывший пилот НАСА Купер отправляется в миссию через червоточину.",
poster: "https://image.tmdb.org/t/p/w500/gEU2QniL6E8AHtMYfHM159D5xh.jpg"
poster: "https://image.tmdb.org/t/p/w500/gEU2QniL6E8AHtMYfHM159D5xh.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 6,
@ -260,7 +264,8 @@ const MOVIES = [
genres: ["crime", "thriller"],
moods: ["drive", "unusual", "fun"],
description: "Два бандита Винсент Вега и Джулс Винфилд обсуждают свои предпочтения в еде и разница между европейской и американской поп-культурой.",
poster: "https://image.tmdb.org/t/p/w500/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg"
poster: "https://image.tmdb.org/t/p/w500/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
},
{
id: 7,
@ -272,7 +277,8 @@ const MOVIES = [
genres: ["drama", "thriller"],
moods: ["think", "drive", "unusual"],
description: "Сотрудник страховой компании страдает хронической бессонницей и отчаянно пытается вырваться из мучительно скучной жизни.",
poster: "https://image.tmdb.org/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
poster: "https://image.tmdb.org/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg",
streaming: [{ name: "Rakuten", icon: "🛒", url: "https://rakuten.tv" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 8,
@ -284,7 +290,8 @@ const MOVIES = [
genres: ["drama", "romance", "comedy"],
moods: ["fun", "romance", "sad"],
description: "История простого человека с большим сердцем, который становится свидетелем и участником ключевых событий американской истории.",
poster: "https://image.tmdb.org/t/p/w500/arw2vcBveWOVZr6pxd9XTd1TdQa.jpg"
poster: "https://image.tmdb.org/t/p/w500/arw2vcBveWOVZr6pxd9XTd1TdQa.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }]
},
{
id: 9,
@ -296,7 +303,8 @@ const MOVIES = [
genres: ["scifi", "action"],
moods: ["drive", "think", "unusual"],
description: "Хакер Нео узнаёт, что наш мир — это иллюзия, созданная машинами. Он присоединяется к восстанию против машин.",
poster: "https://image.tmdb.org/t/p/w500/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg"
poster: "https://image.tmdb.org/t/p/w500/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg",
streaming: [{ name: "Hulu", icon: "🎬", url: "https://www.hulu.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 10,
@ -308,7 +316,8 @@ const MOVIES = [
genres: ["action", "adventure"],
moods: ["drive", "fun"],
description: "Три охотника за сокровищами конкурируют в поисках конфедеративного золота во время Гражданской войны в США.",
poster: "https://image.tmdb.org/t/p/w500/bX2xnavhMYjWDoZp1VM6VnU1xwe.jpg"
poster: "https://image.tmdb.org/t/p/w500/bX2xnavhMYjWDoZp1VM6VnU1xwe.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 11,
@ -320,7 +329,8 @@ const MOVIES = [
genres: ["fantasy", "adventure", "action"],
moods: ["drive", "think"],
description: "Фродо и Сэм приближаются к Роковой горе, чтобы уничтожить Кольцо, в то время как Арагорн ведёт битву за Гондор.",
poster: "https://image.tmdb.org/t/p/w500/rCzpDGLbOoPwLjy3OAm5NUPOTrC.jpg"
poster: "https://image.tmdb.org/t/p/w500/rCzpDGLbOoPwLjy3OAm5NUPOTrC.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 12,
@ -332,7 +342,8 @@ const MOVIES = [
genres: ["drama"],
moods: ["think", "unusual"],
description: "Офисный работник встречает харизматичного продавца мыла и создаёт подпольный бойцовский клуб.",
poster: "https://image.tmdb.org/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
poster: "https://image.tmdb.org/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 13,
@ -344,7 +355,8 @@ const MOVIES = [
genres: ["scifi", "adventure", "fantasy"],
moods: ["drive", "fun"],
description: "Люк Скайуокер начинает обучение джедая у магистра Йоды, в то время как Дарт Вейдер преследует друзей Люка.",
poster: "https://image.tmdb.org/t/p/w500/2l05cFWJacyIsTpsqSgH0wQXe4V.jpg"
poster: "https://image.tmdb.org/t/p/w500/2l05cFWJacyIsTpsqSgH0wQXe4V.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 14,
@ -356,7 +368,8 @@ const MOVIES = [
genres: ["comedy", "adventure"],
moods: ["fun", "comedy"],
description: "Восьмилетний Кевин остаётся один дома на Рождество и должен защитить свой дом от двух грабителей.",
poster: "https://image.tmdb.org/t/p/w500/onTSipZ8R3amIkoc8xWrLXl5hV.jpg"
poster: "https://image.tmdb.org/t/p/w500/onTSipZ8R3amIkoc8xWrLXl5hV.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 15,
@ -368,7 +381,8 @@ const MOVIES = [
genres: ["animation", "fantasy", "adventure"],
moods: ["unusual", "think"],
description: "Девочка попадает в таинственный мир духов и должна найти способ освободить себя и своих родителей.",
poster: "https://image.tmdb.org/t/p/w500/39wmItIWsg5sZMyRUKGnDbALpd1.jpg"
poster: "https://image.tmdb.org/t/p/w500/39wmItIWsg5sZMyRUKGnDbALpd1.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
},
{
id: 16,
@ -380,7 +394,8 @@ const MOVIES = [
genres: ["horror", "thriller"],
moods: ["scary", "think"],
description: "Писатель Джек Торранс становится зимним смотрителем отеля «Оверлук», где происходят сверхъестественные события.",
poster: "https://image.tmdb.org/t/p/w500/b6ko0IKC8MdYBBPkkA1aBPLe2yz.jpg"
poster: "https://image.tmdb.org/t/p/w500/b6ko0IKC8MdYBBPkkA1aBPLe2yz.jpg",
streaming: [{ name: "Rakuten", icon: "🛒", url: "https://rakuten.tv" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 17,
@ -392,7 +407,8 @@ const MOVIES = [
genres: ["horror", "scifi"],
moods: ["scary", "drive"],
description: "Экипаж космического корабля сталкивается с смертоносным инопланетным существом.",
poster: "https://image.tmdb.org/t/p/w500/vfrQk5IPloGg1v9Rzbh2Eg3VGyM.jpg"
poster: "https://image.tmdb.org/t/p/w500/vfrQk5IPloGg1v9Rzbh2Eg3VGyM.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }]
},
{
id: 18,
@ -404,7 +420,8 @@ const MOVIES = [
genres: ["romance", "drama"],
moods: ["romance", "sad"],
description: "История любви между аристократкой и художником из бедных слоёв общества на борту обречённого лайнера.",
poster: "https://image.tmdb.org/t/p/w500/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg"
poster: "https://image.tmdb.org/t/p/w500/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg",
streaming: [{ name: "Hulu", icon: "🎬", url: "https://www.hulu.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 19,
@ -416,7 +433,8 @@ const MOVIES = [
genres: ["comedy", "romance", "fantasy"],
moods: ["fun", "comedy", "romance"],
description: "Циничный метеоролог попадает в временную петлю и вынужден проживать один и тот же день снова и снова.",
poster: "https://image.tmdb.org/t/p/w500/gCgt1WARPZaXnq5zeJRYrWwFZ2.jpg"
poster: "https://image.tmdb.org/t/p/w500/gCgt1WARPZaXnq5zeJRYrWwFZ2.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 20,
@ -428,7 +446,8 @@ const MOVIES = [
genres: ["thriller", "drama", "comedy"],
moods: ["think", "unusual", "drive"],
description: "Бедная семья обманом проникает в богатый дом, выдавая себя за квалифицированных специалистов.",
poster: "https://image.tmdb.org/t/p/w500/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg"
poster: "https://image.tmdb.org/t/p/w500/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 21,
@ -440,7 +459,8 @@ const MOVIES = [
genres: ["crime", "thriller", "drama"],
moods: ["think", "sad", "drive"],
description: "История происхождения самого известного злодея вселенной DC — Артура Флека.",
poster: "https://image.tmdb.org/t/p/w500/udDclJoHjfjb8EkGsdr7ZKRN44.jpg"
poster: "https://image.tmdb.org/t/p/w500/udDclJoHjfjb8EkGsdr7ZKRN44.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 22,
@ -452,7 +472,8 @@ const MOVIES = [
genres: ["action", "adventure", "scifi"],
moods: ["drive", "fun"],
description: "Мстители собираются в последний раз, чтобы восстановить порядок во вселенной после событий Войны Бесконечности.",
poster: "https://image.tmdb.org/t/p/w500/or06FN3Dka5tukK1e9sl16pB3iy.jpg"
poster: "https://image.tmdb.org/t/p/w500/or06FN3Dka5tukK1e9sl16pB3iy.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 23,
@ -464,7 +485,8 @@ const MOVIES = [
genres: ["romance", "drama", "comedy"],
moods: ["romance", "fun", "sad"],
description: "История любви между начинающей актрисой и талантливым музыкантом в Лос-Анджелесе.",
poster: "https://image.tmdb.org/t/p/w500/uDO8zWDhfWu7x6O0k0006Oe2M7.jpg"
poster: "https://image.tmdb.org/t/p/w500/uDO8zWDhfWu7x6O0k0006Oe2M7.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 24,
@ -476,7 +498,8 @@ const MOVIES = [
genres: ["scifi", "adventure"],
moods: ["think", "drive", "unusual"],
description: "Пол Атрейдес отправляется на самую опасную планету во Вселенной, чтобы обеспечить будущее своей семьи.",
poster: "https://image.tmdb.org/t/p/w500/d5NXSklXo0qyIYkgV94XAgMIckC.jpg"
poster: "https://image.tmdb.org/t/p/w500/d5NXSklXo0qyIYkgV94XAgMIckC.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
},
{
id: 25,
@ -488,7 +511,8 @@ const MOVIES = [
genres: ["fantasy", "adventure"],
moods: ["fun", "drive"],
description: "Мальчик-сирота узнаёт, что он волшебник, и отправляется в школу магии Хогвартс.",
poster: "https://image.tmdb.org/t/p/w500/wuMc08IPKEatf9rnMNXvIDxqP4W.jpg"
poster: "https://image.tmdb.org/t/p/w500/wuMc08IPKEatf9rnMNXvIDxqP4W.jpg",
streaming: [{ name: "Rakuten", icon: "🛒", url: "https://rakuten.tv" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 26,
@ -500,7 +524,8 @@ const MOVIES = [
genres: ["action", "scifi"],
moods: ["drive", "fun"],
description: "Киборг отправляется в прошлое, чтобы защитить будущего лидера сопротивления машин.",
poster: "https://image.tmdb.org/t/p/w500/5M0j0B18abtBI5gi2RhfjjurTqb.jpg"
poster: "https://image.tmdb.org/t/p/w500/5M0j0B18abtBI5gi2RhfjjurTqb.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }]
},
{
id: 27,
@ -512,7 +537,8 @@ const MOVIES = [
genres: ["scifi", "adventure", "comedy"],
moods: ["fun", "drive", "comedy"],
description: "Подросток Марти Макфлай случайно отправляется в 1955 год на машине времени.",
poster: "https://image.tmdb.org/t/p/w500/fNOH9f9aA7XRTzl1sAd7k1i0qHc.jpg"
poster: "https://image.tmdb.org/t/p/w500/fNOH9f9aA7XRTzl1sAd7k1i0qHc.jpg",
streaming: [{ name: "Hulu", icon: "🎬", url: "https://www.hulu.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 28,
@ -524,7 +550,8 @@ const MOVIES = [
genres: ["crime", "thriller", "mystery"],
moods: ["scary", "think"],
description: "Агент ФБР обращается за помощью к каннибалу Ганнибалу Лектеру, чтобы поймать другого серийного убийцу.",
poster: "https://image.tmdb.org/t/p/w500/uS9m8OBk1A8eM9I042bx8XXpqAq.jpg"
poster: "https://image.tmdb.org/t/p/w500/uS9m8OBk1A8eM9I042bx8XXpqAq.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 29,
@ -536,7 +563,8 @@ const MOVIES = [
genres: ["drama", "history", "action"],
moods: ["think", "sad", "drive"],
description: "Отряд солдат отправляется на поиски парашютиста, чьи три брата погибли в бою.",
poster: "https://image.tmdb.org/t/p/w500/uqx37cS8cpHg8U35f9U5IBlrCV3.jpg"
poster: "https://image.tmdb.org/t/p/w500/uqx37cS8cpHg8U35f9U5IBlrCV3.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 30,
@ -548,7 +576,8 @@ const MOVIES = [
genres: ["drama", "fantasy"],
moods: ["think", "sad"],
description: "История о тюремном охраннике и заключённом с божественным даром.",
poster: "https://image.tmdb.org/t/p/w500/velWPhVMQeQKcxggNEU8YmIo51R.jpg"
poster: "https://image.tmdb.org/t/p/w500/velWPhVMQeQKcxggNEU8YmIo51R.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 31,
@ -560,7 +589,8 @@ const MOVIES = [
genres: ["action", "drama", "history"],
moods: ["drive", "think"],
description: "Римский генерал становится гладиатором и ищет мести за убийство своей семьи.",
poster: "https://image.tmdb.org/t/p/w500/ty8TGRuvJLPUmAR1H1nRIsgwvim.jpg"
poster: "https://image.tmdb.org/t/p/w500/ty8TGRuvJLPUmAR1H1nRIsgwvim.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 32,
@ -572,7 +602,8 @@ const MOVIES = [
genres: ["animation", "adventure", "drama"],
moods: ["fun", "sad"],
description: "Лев Симба должен принять свою судьбу и стать королём Прайдленда.",
poster: "https://image.tmdb.org/t/p/w500/sKCr78MXSLixwmZ8DyJLrpMsd15.jpg"
poster: "https://image.tmdb.org/t/p/w500/sKCr78MXSLixwmZ8DyJLrpMsd15.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 33,
@ -584,7 +615,8 @@ const MOVIES = [
genres: ["romance", "scifi", "drama"],
moods: ["romance", "think", "sad"],
description: "Пара проходит процедуру удаления воспоминаний о болезненных отношениях.",
poster: "https://image.tmdb.org/t/p/w500/5MwkWH9tYHv3m89PXxNulFo7Xug.jpg"
poster: "https://image.tmdb.org/t/p/w500/5MwkWH9tYHv3m89PXxNulFo7Xug.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
},
{
id: 34,
@ -596,7 +628,8 @@ const MOVIES = [
genres: ["crime", "thriller", "drama"],
moods: ["drive", "think"],
description: "Два крота работают по обе стороны закона в полицейском департаменте Бостона.",
poster: "https://image.tmdb.org/t/p/w500/nT97ifVT2J1yMQmeq20Qblg61T.jpg"
poster: "https://image.tmdb.org/t/p/w500/nT97ifVT2J1yMQmeq20Qblg61T.jpg",
streaming: [{ name: "Rakuten", icon: "🛒", url: "https://rakuten.tv" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 35,
@ -608,7 +641,8 @@ const MOVIES = [
genres: ["mystery", "thriller", "drama"],
moods: ["think", "unusual"],
description: "Два фокусника ведут ожесточённую борьбу, которая приводит к трагическим последствиям.",
poster: "https://image.tmdb.org/t/p/w500/tRNlZbgNCNOpLpbPEz5L8G8A0JN.jpg"
poster: "https://image.tmdb.org/t/p/w500/tRNlZbgNCNOpLpbPEz5L8G8A0JN.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }]
},
{
id: 36,
@ -620,7 +654,8 @@ const MOVIES = [
genres: ["animation", "adventure", "comedy"],
moods: ["fun", "comedy", "sad"],
description: "78-летний Карл Фредриксен отправляется в приключение на воздушных шарах.",
poster: "https://image.tmdb.org/t/p/w500/mFvoEwSfLqbr3N7xzWF8vB5lSj.jpg"
poster: "https://image.tmdb.org/t/p/w500/mFvoEwSfLqbr3N7xzWF8vB5lSj.jpg",
streaming: [{ name: "Hulu", icon: "🎬", url: "https://www.hulu.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 37,
@ -632,7 +667,8 @@ const MOVIES = [
genres: ["animation", "adventure", "fantasy"],
moods: ["fun", "sad"],
description: "Мальчик Мигель мечтает стать музыкантом и попадает в страну мёртвых.",
poster: "https://image.tmdb.org/t/p/w500/gGEsBPAijhVUFoiNpgZXqRVWJt2.jpg"
poster: "https://image.tmdb.org/t/p/w500/gGEsBPAijhVUFoiNpgZXqRVWJt2.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 38,
@ -644,7 +680,8 @@ const MOVIES = [
genres: ["action", "drama"],
moods: ["drive", "fun"],
description: "Освобождённый раб Джанго отправляется спасать свою жену от жестокого владельца плантации.",
poster: "https://image.tmdb.org/t/p/w500/7oWY8VDWW7thTzWh3OKYRkWUlD5.jpg"
poster: "https://image.tmdb.org/t/p/w500/7oWY8VDWW7thTzWh3OKYRkWUlD5.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 39,
@ -656,7 +693,8 @@ const MOVIES = [
genres: ["animation", "scifi", "adventure"],
moods: ["fun", "think"],
description: "Робот-уборщик на заброшенной Земле влюбляется в робота-разведчика ЕВУ.",
poster: "https://image.tmdb.org/t/p/w500/hBnYqza876OMhRJRXxkFz4jjZPt.jpg"
poster: "https://image.tmdb.org/t/p/w500/hBnYqza876OMhRJRXxkFz4jjZPt.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 40,
@ -668,7 +706,8 @@ const MOVIES = [
genres: ["comedy", "drama"],
moods: ["fun", "sad", "think"],
description: "Отец использует своё воображение, чтобы защитить сына от ужасов концлагеря.",
poster: "https://image.tmdb.org/t/p/w500/74hLDKjD5aGYOotO6esUVaeISa2.jpg"
poster: "https://image.tmdb.org/t/p/w500/74hLDKjD5aGYOotO6esUVaeISa2.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 41,
@ -680,7 +719,8 @@ const MOVIES = [
genres: ["action", "scifi"],
moods: ["drive", "think"],
description: "Нео и его друзья готовятся к войне против машин.",
poster: "https://image.tmdb.org/t/p/w500/9TGHDvWrqKBzwDxDodHYXEmOE5J.jpg"
poster: "https://image.tmdb.org/t/p/w500/9TGHDvWrqKBzwDxDodHYXEmOE5J.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 42,
@ -692,7 +732,8 @@ const MOVIES = [
genres: ["scifi", "adventure", "fantasy"],
moods: ["drive", "unusual"],
description: "Морпех Джейк Салли оказывается на планете Пандора и становится частью народа На'ви.",
poster: "https://image.tmdb.org/t/p/w500/6EiRUJpuoeQPghrs3YNktfnqOVh.jpg"
poster: "https://image.tmdb.org/t/p/w500/6EiRUJpuoeQPghrs3YNktfnqOVh.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
},
{
id: 43,
@ -704,7 +745,8 @@ const MOVIES = [
genres: ["action", "adventure", "scifi"],
moods: ["drive", "fun"],
description: "Мстители и их союзники должны остановить безумного титана Таноса.",
poster: "https://image.tmdb.org/t/p/w500/7WsyChQLEftFiDOVTGkv3hFpyyt.jpg"
poster: "https://image.tmdb.org/t/p/w500/7WsyChQLEftFiDOVTGkv3hFpyyt.jpg",
streaming: [{ name: "Rakuten", icon: "🛒", url: "https://rakuten.tv" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 44,
@ -716,7 +758,8 @@ const MOVIES = [
genres: ["animation", "romance", "fantasy"],
moods: ["romance", "think", "unusual"],
description: "Два подростка mysteriously меняются телами и пытаются найти друг друга.",
poster: "https://image.tmdb.org/t/p/w500/q719jXXEzOoYaps6babgKnONONX.jpg"
poster: "https://image.tmdb.org/t/p/w500/q719jXXEzOoYaps6babgKnONONX.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }]
},
{
id: 45,
@ -728,7 +771,8 @@ const MOVIES = [
genres: ["drama", "comedy"],
moods: ["fun", "comedy", "think"],
description: "Аристократ-инвалид нанимает парня из гетто в качестве сиделки.",
poster: "https://image.tmdb.org/t/p/w500/323BP0QQpxYZxhI7nwmANpLHR0u.jpg"
poster: "https://image.tmdb.org/t/p/w500/323BP0QQpxYZxhI7nwmANpLHR0u.jpg",
streaming: [{ name: "Hulu", icon: "🎬", url: "https://www.hulu.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 46,
@ -740,7 +784,8 @@ const MOVIES = [
genres: ["drama"],
moods: ["sad", "think"],
description: "История о преданной собаке, которая ждёт своего хозяина на вокзале.",
poster: "https://image.tmdb.org/t/p/w500/8Vt7mXHRo6bEj8nT5sD7bL8pF0.jpg"
poster: "https://image.tmdb.org/t/p/w500/8Vt7mXHRo6bEj8nT5sD7bL8pF0.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 47,
@ -752,7 +797,8 @@ const MOVIES = [
genres: ["crime", "drama", "comedy"],
moods: ["think", "drive"],
description: "Мать убитой дочери требует справедливости через три билборда.",
poster: "https://image.tmdb.org/t/p/w500/pZRhqJj0DBy4ghB7g6pG7MG9xW.jpg"
poster: "https://image.tmdb.org/t/p/w500/pZRhqJj0DBy4ghB7g6pG7MG9xW.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 48,
@ -764,7 +810,8 @@ const MOVIES = [
genres: ["comedy", "crime"],
moods: ["fun", "comedy", "unusual"],
description: "Чувака путают с миллионером и втягивают в странную историю.",
poster: "https://image.tmdb.org/t/p/w500/d4ftZu4dWypDlVE5p3V0p3e3i4.jpg"
poster: "https://image.tmdb.org/t/p/w500/d4ftZu4dWypDlVE5p3V0p3e3i4.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 49,
@ -776,7 +823,8 @@ const MOVIES = [
genres: ["crime", "drama"],
moods: ["drive", "think"],
description: "История о жизни в фавелах Рио-де-Жанейро на протяжении нескольких десятилетий.",
poster: "https://image.tmdb.org/t/p/w500/k7eYdWvhYQyDYR1p5MjZnJ4n2.jpg"
poster: "https://image.tmdb.org/t/p/w500/k7eYdWvhYQyDYR1p5MjZnJ4n2.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 50,
@ -788,7 +836,8 @@ const MOVIES = [
genres: ["drama", "history"],
moods: ["think", "sad"],
description: "История Оскара Шиндлера, спасшего более тысячи евреев во время Холокоста.",
poster: "https://image.tmdb.org/t/p/w500/sF1U4EUQS8YHUYjNl3pTXMYC4mV.jpg"
poster: "https://image.tmdb.org/t/p/w500/sF1U4EUQS8YHUYjNl3pTXMYC4mV.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 51,
@ -800,7 +849,8 @@ const MOVIES = [
genres: ["adventure", "fantasy", "action"],
moods: ["fun", "drive", "comedy"],
description: "Кузнец Уилл Тёрнер объединяется с эксцентричным пиратом Джеком Воробьём.",
poster: "https://image.tmdb.org/t/p/w500/z8onk7LV9Mmw6zKz4hT6pzzvmvl.jpg"
poster: "https://image.tmdb.org/t/p/w500/z8onk7LV9Mmw6zKz4hT6pzzvmvl.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
},
{
id: 52,
@ -812,7 +862,8 @@ const MOVIES = [
genres: ["comedy", "drama"],
moods: ["fun", "comedy"],
description: "Молодая девушка становится ассистенткой жестокого редактора модного журнала.",
poster: "https://image.tmdb.org/t/p/w500/8916As6Y7bYPVr9pWzuBQQnrTHU.jpg"
poster: "https://image.tmdb.org/t/p/w500/8916As6Y7bYPVr9pWzuBQQnrTHU.jpg",
streaming: [{ name: "Rakuten", icon: "🛒", url: "https://rakuten.tv" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 53,
@ -824,7 +875,8 @@ const MOVIES = [
genres: ["mystery", "thriller", "drama"],
moods: ["think", "unusual", "scary"],
description: "Женщина с амнезией и начинающая актриса исследуют тёмные стороны Голливуда.",
poster: "https://image.tmdb.org/t/p/w500/tVxGt7uffR6IIbGlQpSP3yJhqqa.jpg"
poster: "https://image.tmdb.org/t/p/w500/tVxGt7uffR6IIbGlQpSP3yJhqqa.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }]
},
{
id: 54,
@ -836,7 +888,8 @@ const MOVIES = [
genres: ["crime", "mystery", "thriller"],
moods: ["scary", "think", "drive"],
description: "Два детектива ищут серийного убийцу, который наказывает жертв за семь смертных грехов.",
poster: "https://image.tmdb.org/t/p/w500/6yoghtyTpznpBik8EngEmJskVUO.jpg"
poster: "https://image.tmdb.org/t/p/w500/6yoghtyTpznpBik8EngEmJskVUO.jpg",
streaming: [{ name: "Hulu", icon: "🎬", url: "https://www.hulu.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 55,
@ -848,7 +901,8 @@ const MOVIES = [
genres: ["comedy", "adventure"],
moods: ["fun", "comedy", "unusual"],
description: "История о легендарном консьерже Густаве и его друге Zero.",
poster: "https://image.tmdb.org/t/p/w500/eWdyYQreja6JGCzqHWXpWHDrrPo.jpg"
poster: "https://image.tmdb.org/t/p/w500/eWdyYQreja6JGCzqHWXpWHDrrPo.jpg",
streaming: [{ name: "Netflix", icon: "🎬", url: "https://www.netflix.com" }, { name: "Kinopoisk", icon: "🎭", url: "https://www.kinopoisk.ru" }]
},
{
id: 56,
@ -860,7 +914,8 @@ const MOVIES = [
genres: ["action", "adventure", "scifi"],
moods: ["drive", "fun"],
description: "В постапокалиптической пустоши Макс и Фуриоса бегут от тирана.",
poster: "https://image.tmdb.org/t/p/w500/hA2ple9q4qnwxp3hKVNhroipsir.jpg"
poster: "https://image.tmdb.org/t/p/w500/hA2ple9q4qnwxp3hKVNhroipsir.jpg",
streaming: [{ name: "HBO Max", icon: "🎬", url: "https://www.hbomax.com" }, { name: "Ivi", icon: "📺", url: "https://www.ivi.ru" }]
},
{
id: 57,
@ -872,7 +927,8 @@ const MOVIES = [
genres: ["crime", "thriller", "drama"],
moods: ["think", "scary", "drive"],
description: "Охотник находит деньги от наркосделки и становится мишенью психопата.",
poster: "https://image.tmdb.org/t/p/w500/bj1v6YKF8yHqA489VFfnQvOJp9n.jpg"
poster: "https://image.tmdb.org/t/p/w500/bj1v6YKF8yHqA489VFfnQvOJp9n.jpg",
streaming: [{ name: "Amazon Prime", icon: "📦", url: "https://www.primevideo.com" }, { name: "Okko", icon: "🎪", url: "https://okko.tv" }]
},
{
id: 58,
@ -884,7 +940,8 @@ const MOVIES = [
genres: ["scifi", "drama"],
moods: ["think", "unusual"],
description: "Учёный из будущего отправляется на планету, где застряла средневековая цивилизация.",
poster: "https://image.tmdb.org/t/p/w500/iR79ieYRZ5fBmXVL7fOe0y7xIJ.jpg"
poster: "https://image.tmdb.org/t/p/w500/iR79ieYRZ5fBmXVL7fOe0y7xIJ.jpg",
streaming: [{ name: "Disney+", icon: "🏰", url: "https://www.disneyplus.com" }, { name: "Premier", icon: "🎭", url: "https://premier.one" }]
},
{
id: 59,
@ -896,7 +953,8 @@ const MOVIES = [
genres: ["drama"],
moods: ["think", "drive"],
description: "Молодой барабанщик мечтает стать великим, но сталкивается с жестоким преподавателем.",
poster: "https://image.tmdb.org/t/p/w500/7fn624j5lj3xTme2SgiZErnGSwC.jpg"
poster: "https://image.tmdb.org/t/p/w500/7fn624j5lj3xTme2SgiZErnGSwC.jpg",
streaming: [{ name: "Apple TV+", icon: "🍎", url: "https://tv.apple.com" }, { name: "More.tv", icon: "📱", url: "https://more.tv" }]
},
{
id: 60,
@ -908,7 +966,8 @@ const MOVIES = [
genres: ["crime", "thriller"],
moods: ["fun", "drive", "unusual"],
description: "Несколько переплетающихся историй из криминального мира Лос-Анджелеса.",
poster: "https://image.tmdb.org/t/p/w500/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg"
poster: "https://image.tmdb.org/t/p/w500/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg",
streaming: [{ name: "YouTube", icon: "▶️", url: "https://www.youtube.com/movies" }]
}
];
@ -1409,14 +1468,24 @@ function updateTexts() {
}
// Language switcher
const languageSelect = document.getElementById('languageSelect');
if (languageSelect) {
languageSelect.value = currentLang;
languageSelect.addEventListener('change', (e) => {
currentLang = e.target.value;
const langBtns = document.querySelectorAll('.lang-btn');
langBtns.forEach(btn => {
btn.addEventListener('click', () => {
const lang = btn.dataset.lang;
currentLang = lang;
// Update active state
langBtns.forEach(b => b.classList.remove('active'));
btn.classList.add('active');
updateTexts();
});
// Set initial active state
if (btn.dataset.lang === currentLang) {
btn.classList.add('active');
}
});
// ==================== INITIALIZATION ====================
document.addEventListener('DOMContentLoaded', () => {

100
style.css
View File

@ -140,32 +140,74 @@ body {
gap: 16px;
}
.language-select {
padding: 10px 16px;
/* Beautiful Language Switcher */
.language-switcher {
display: flex;
background: linear-gradient(145deg, var(--bg-card), var(--bg-hover));
border: 1px solid rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: var(--border-radius-sm);
color: var(--text-primary);
padding: 4px;
gap: 4px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.lang-btn {
display: flex;
align-items: center;
gap: 6px;
padding: 8px 12px;
background: transparent;
border: none;
border-radius: 8px;
color: var(--text-secondary);
cursor: pointer;
transition: var(--transition);
font-size: 14px;
font-size: 13px;
font-weight: 600;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23f5a623' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 12px center;
background-size: 18px;
padding-right: 40px;
position: relative;
overflow: hidden;
}
.language-select:hover {
border-color: var(--accent);
.lang-btn::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(245, 166, 35, 0.1), transparent);
opacity: 0;
transition: var(--transition);
}
.language-select:focus {
outline: none;
border-color: var(--accent);
box-shadow: 0 0 20px var(--accent-glow);
.lang-btn:hover::before {
opacity: 1;
}
.lang-btn:hover {
color: var(--text-primary);
transform: translateY(-1px);
}
.lang-btn.active {
background: linear-gradient(135deg, var(--accent), var(--accent-hover));
color: var(--bg-primary);
box-shadow: 0 4px 12px var(--accent-glow);
}
.lang-btn.active .lang-flag {
transform: scale(1.1);
}
.lang-flag {
font-size: 16px;
transition: var(--transition);
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
}
.lang-code {
font-weight: 700;
letter-spacing: 0.5px;
}
.header::after {
@ -1166,11 +1208,20 @@ body {
.header-controls {
width: 100%;
justify-content: space-between;
justify-content: center;
order: 2;
flex-wrap: wrap;
gap: 12px;
}
.language-switcher {
order: 1;
width: 100%;
justify-content: center;
}
.nav {
order: 2;
gap: 8px;
}
@ -1186,9 +1237,16 @@ body {
font-size: 22px;
}
.language-select {
padding: 10px 14px;
font-size: 13px;
.lang-btn {
padding: 6px 10px;
}
.lang-flag {
font-size: 14px;
}
.lang-code {
display: none;
}
.hero {