initial site

This commit is contained in:
merrow committed 2026-10-11 22:24:54 +05:00
commit da5b259d06
167 files changed
+34157

No files matched your search

+365
View File
@@ -0,0 +1,365 @@
/**
* БАРНОЕ МЕНЮ: закуски, напитки и десерты, снеки, лимонады и энергетики.
*
*/
export const SNACKS_CATEGORY = "ЗАКУСКИ";
export const DRINKS_DESSERTS_CATEGORY = "НАПИТКИ И ДЕСЕРТЫ";
export const SWEETS_CATEGORY = "СНЕКИ И СЛАДОСТИ";
export const LEMONADES_CATEGORY = "ЛИМОНАДЫ И ЭНЕРГЕТИКИ";
export interface BarCategoryMeta {
id: string;
label: string;
accent: string; // неоновый акцент категории
tagline: string;
}
export const barCategories: BarCategoryMeta[] = [
{
id: SNACKS_CATEGORY,
label: SNACKS_CATEGORY,
accent: "#f59e0b", // янтарный — горячая кухня
tagline: "Горячие закуски к кальяну и пиву — хрустящие, сытные, на компанию",
},
{
id: DRINKS_DESSERTS_CATEGORY,
label: DRINKS_DESSERTS_CATEGORY,
accent: "#fb7185", // розовый — десерты
tagline: "Чай, кофе и домашние десерты — сладкое продолжение вечера",
},
{
id: SWEETS_CATEGORY,
label: SWEETS_CATEGORY,
accent: "#c084fc", // лавандовый — сладости
tagline: "Шоколад, чипсы и хрустящие снеки — то, что уходит под дым",
},
{
id: LEMONADES_CATEGORY,
label: LEMONADES_CATEGORY,
accent: "#a3e635", // электрический лайм — энергия
tagline: "Грузинские лимонады и энергетики — холодные и бодрящие",
},
];
export interface BarMenuItem {
id: string;
name: string;
category: string;
portion?: string; // «8 шт», «130 гр», «900 мл»
price: number;
priceFormatted: string;
desc: string;
icon: string; // ключ иконки, см. barMenuIcons в MenuPage
}
export const barMenuItems: BarMenuItem[] = [
/* ------------------------------ ЗАКУСКИ ------------------------------ */
{
id: "onion-rings",
name: "Луковые кольца",
category: SNACKS_CATEGORY,
portion: "8 шт",
price: 220,
priceFormatted: "220 ₽",
desc: "Хрустящие кольца лука в золотистой панировке. Подаём с сырным соусом.",
icon: "donut",
},
{
id: "fries",
name: "Картофель Фри",
category: SNACKS_CATEGORY,
portion: "130 гр",
price: 210,
priceFormatted: "210 ₽",
desc: "Классический фри с морской солью — горячий и хрустящий.",
icon: "utensils",
},
{
id: "buffalo-wings",
name: "Крылышки Баффало",
category: SNACKS_CATEGORY,
portion: "6 шт",
price: 350,
priceFormatted: "350 ₽",
desc: "Сочные крылья в остром соусе Баффало. Острота — средняя, вкус — мощный.",
icon: "drumstick",
},
{
id: "cheese-sticks",
name: "Сырные палочки",
category: SNACKS_CATEGORY,
portion: "6 шт",
price: 310,
priceFormatted: "310 ₽",
desc: "Тягучий моцарелла в хрустящей панировке. Идеально под томатный дип.",
icon: "croissant",
},
{
id: "strips",
name: "Стрипсы",
category: SNACKS_CATEGORY,
portion: "6 шт",
price: 320,
priceFormatted: "320 ₽",
desc: "Куриные стрипсы в специях — румяные снаружи, нежные внутри.",
icon: "beef",
},
{
id: "nuggets",
name: "Нагетсы",
category: SNACKS_CATEGORY,
portion: "8 шт",
price: 320,
priceFormatted: "320 ₽",
desc: "Золотистые нагетсы из куриного филе. Подаём с двумя соусами на выбор.",
icon: "egg",
},
/* ----------------------- НАПИТКИ И ДЕСЕРТЫ ----------------------- */
{
id: "black-tea",
name: "Черный чай",
category: DRINKS_DESSERTS_CATEGORY,
portion: "900 мл",
price: 250,
priceFormatted: "250 ₽",
desc: "Классический чёрный чай в стеклянном чайнике — глубокий и согревающий.",
icon: "leaf",
},
{
id: "black-tea-thyme",
name: "Черный чай с чабрецом",
category: DRINKS_DESSERTS_CATEGORY,
portion: "900 мл",
price: 250,
priceFormatted: "250 ₽",
desc: "Чёрный чай с веточкой чабреца — травяной аромат и мягкое тепло.",
icon: "leaf",
},
{
id: "milk-oolong",
name: "Молочный Улун",
category: DRINKS_DESSERTS_CATEGORY,
portion: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Нежный улун с бархатными сливочными нотами. Легенда чайной карты.",
icon: "milk",
},
{
id: "americano",
name: "Американо",
category: DRINKS_DESSERTS_CATEGORY,
portion: "150 мл",
price: 150,
priceFormatted: "150 ₽",
desc: "Крепкий зерновой кофе на свежем помоле. Чистый и бодрящий.",
icon: "coffee",
},
{
id: "cappuccino",
name: "Капучино",
category: DRINKS_DESSERTS_CATEGORY,
portion: "200 мл",
price: 200,
priceFormatted: "200 ₽",
desc: "Эспрессо с шелковистой молочной пеной. По желанию — с сиропом.",
icon: "coffee",
},
{
id: "cheesecake-ny",
name: "Чизкейк Нью-Йорк",
category: DRINKS_DESSERTS_CATEGORY,
portion: "120 гр",
price: 250,
priceFormatted: "250 ₽",
desc: "Классический сливочный чизкейк на песочной основе.",
icon: "cake",
},
{
id: "red-velvet",
name: "Торт Красный бархат",
category: DRINKS_DESSERTS_CATEGORY,
portion: "120 гр",
price: 250,
priceFormatted: "250 ₽",
desc: "Бархатные коржи с кремом из сливочного сыра.",
icon: "cake",
},
{
id: "medovik",
name: "Торт Медовик",
category: DRINKS_DESSERTS_CATEGORY,
portion: "120 гр",
price: 250,
priceFormatted: "250 ₽",
desc: "Домашний медовик со сметанным кремом — тает во рту.",
icon: "cake",
},
{
id: "cheesecake-strawberry",
name: "Чизкейк Нью-Йорк клубничный",
category: DRINKS_DESSERTS_CATEGORY,
portion: "120 гр",
price: 250,
priceFormatted: "250 ₽",
desc: "Чизкейк с клубничным соусом и свежими ягодами.",
icon: "cake",
},
{
id: "cheesecake-raspberry",
name: "Чизкейк Нью-Йорк Малина",
category: DRINKS_DESSERTS_CATEGORY,
portion: "120 гр",
price: 250,
priceFormatted: "250 ₽",
desc: "Сливочный чизкейк с малиновым кули и лёгкой кислинкой.",
icon: "cake",
},
/* ------------------------- СНЕКИ И СЛАДОСТИ ------------------------- */
{
id: "alpen-gold",
name: "Alpen Gold",
category: SWEETS_CATEGORY,
price: 210,
priceFormatted: "210 ₽",
desc: "Молочный шоколад с орехами и карамелью.",
icon: "candy",
},
{
id: "milka",
name: "Milka",
category: SWEETS_CATEGORY,
price: 230,
priceFormatted: "230 ₽",
desc: "Нежный молочный шоколад из альпийского молока.",
icon: "candy",
},
{
id: "leys",
name: "Чипсы Leys",
category: SWEETS_CATEGORY,
portion: "90 гр",
price: 210,
priceFormatted: "210 ₽",
desc: "Хрустящие картофельные чипсы — классика под дым.",
icon: "popcorn",
},
{
id: "korochki",
name: "3 Корочки",
category: SWEETS_CATEGORY,
portion: "60 гр",
price: 150,
priceFormatted: "150 ₽",
desc: "Хрустящие ржаные корочки со специями.",
icon: "popcorn",
},
{
id: "hrustim",
name: "Хрустим team",
category: SWEETS_CATEGORY,
portion: "40 гр",
price: 100,
priceFormatted: "100 ₽",
desc: "Лёгкий хрустящий снек — маленькая пачка, большое удовольствие.",
icon: "popcorn",
},
/* --------------------- ЛИМОНАДЫ И ЭНЕРГЕТИКИ --------------------- */
{
id: "natakhtari-pear",
name: "НАТАХТАРИ ГРУША",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 200,
priceFormatted: "200 ₽",
desc: "Грузинский газированный напиток со вкусом спелой груши.",
icon: "glass",
},
{
id: "strawberry-kiwi",
name: "Клубника Киви",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 150,
priceFormatted: "150 ₽",
desc: "Ягодный лимонад: клубника и киви в одном бокале.",
icon: "cupsoda",
},
{
id: "feijoa",
name: "Фейхоа",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 150,
priceFormatted: "150 ₽",
desc: "Освежающий лимонад с экзотическим вкусом фейхоа.",
icon: "cupsoda",
},
{
id: "natakhtari-feijoa",
name: "НАТАХТАРИ ФЕЙХОА",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 200,
priceFormatted: "200 ₽",
desc: "Грузинская газировка с ярким вкусом фейхоа.",
icon: "glass",
},
{
id: "natakhtari-saperavi",
name: "НАТАХТАРИ САПЕРАВИ",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 200,
priceFormatted: "200 ₽",
desc: "Виноградный напиток из грузинского сорта Саперави.",
icon: "grape",
},
{
id: "burn-original",
name: "BURN Оригинальный",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 250,
priceFormatted: "250 ₽",
desc: "Классический энергетик BURN — заряд на всю ночь.",
icon: "zap",
},
{
id: "adrenaline-rush",
name: "Adrenaline RUSH Абсолютная ЭНЕРГИЯ",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 250,
priceFormatted: "250 ₽",
desc: "Adrenaline Rush — абсолютная энергия без компромиссов.",
icon: "battery",
},
{
id: "burn-apple-kiwi",
name: "BURN Яблоко Киви",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 250,
priceFormatted: "250 ₽",
desc: "BURN со вкусом яблока и киви — кислинка плюс энергия.",
icon: "apple",
},
{
id: "burn-mango",
name: "BURN Со вкусом МАНГО",
category: LEMONADES_CATEGORY,
portion: "1 шт",
price: 250,
priceFormatted: "250 ₽",
desc: "Тропический BURN с насыщенным вкусом спелого манго.",
icon: "zap",
},
];
/** Суммарный список всех барных позиций (для поиска и счётчиков) */
export const allBarItems = barMenuItems;
+170
View File
@@ -0,0 +1,170 @@
export interface BeerItem {
id: string;
name: string;
category: string;
type: string; // "Светлое", "Тёмное", "Пшеничное", "Фруктовое / Сидр", "Лагер"
volume: string;
price: number;
priceFormatted: string;
desc: string;
accentColor: string;
}
export const BEER_CATEGORY = "ПИВНАЯ КАРТА";
export const beerList: BeerItem[] = [
{
id: "bud",
name: "Bud",
category: BEER_CATEGORY,
type: "Светлый лагер",
volume: "0,44 л",
price: 250,
priceFormatted: "250 ₽",
desc: "Легендарный американский светлый лагер с чистым освежающим вкусом и тонким хмелевым ароматом.",
accentColor: "#ef4444",
},
{
id: "kozel-dark",
name: "Kozel темный",
category: BEER_CATEGORY,
type: "Тёмный лагер",
volume: "0,45 л",
price: 220,
priceFormatted: "220 ₽",
desc: "Чешский бархатистый тёмный лагер с приятными нотами карамельного солода, шоколада и мягкой горчинкой.",
accentColor: "#a855f7",
},
{
id: "stary-melnik-light",
name: "Старый мельник светлое",
category: BEER_CATEGORY,
type: "Светлое классическое",
volume: "0,45 л",
price: 200,
priceFormatted: "200 ₽",
desc: "Традиционное светлое пиво из отборного ячменного солода с мягким сбалансированным вкусом.",
accentColor: "#eab308",
},
{
id: "krone-blanche",
name: "Krone Blanche",
category: BEER_CATEGORY,
type: "Белое пшеничное",
volume: "0,45 л",
price: 220,
priceFormatted: "220 ₽",
desc: "Освежающее пшеничное белое пиво с яркими цитрусовыми оттенками цедры апельсина и нотками кориандра.",
accentColor: "#00f0ff",
},
{
id: "erzmann",
name: "Erzmann",
category: BEER_CATEGORY,
type: "Классический лагер",
volume: "0,45 л",
price: 220,
priceFormatted: "220 ₽",
desc: "Европейский светлый лагер с благородным солодовым телом и освежающим сухим послевкусием.",
accentColor: "#38bdf8",
},
{
id: "el-capulco",
name: "El Capulco",
category: BEER_CATEGORY,
type: "Мексиканский лагер",
volume: "0,45 л",
price: 250,
priceFormatted: "250 ₽",
desc: "Лёгкое мексиканское пиво золотистого оттенка с нотками агавы, кукурузных хлопьев и мягкой цитрусовой свежестью.",
accentColor: "#facc15",
},
{
id: "stella",
name: "Stella",
category: BEER_CATEGORY,
type: "Премиум лагер",
volume: "0,44 л",
price: 250,
priceFormatted: "250 ₽",
desc: "Знаменитый бельгийский премиальный лагер Stella Artois с чистой искристостью и благородной горчинкой сортов Saaz.",
accentColor: "#ef4444",
},
{
id: "kozel-light",
name: "Kozel светлый",
category: BEER_CATEGORY,
type: "Светлый лагер",
volume: "0,45 л",
price: 220,
priceFormatted: "220 ₽",
desc: "Лёгкий чешский светлый лагер с тонким ароматом хмеля и золотистой пенной шапкой.",
accentColor: "#f59e0b",
},
{
id: "stary-melnik-dark",
name: "Старый мельник темное",
category: BEER_CATEGORY,
type: "Тёмный эль / лагер",
volume: "1 шт",
price: 200,
priceFormatted: "200 ₽",
desc: "Глубокий рубиново-тёмный цвет, мягкая солодовая сладость с лёгкими хлебно-карамельными тонами.",
accentColor: "#c084fc",
},
{
id: "pablos-lime",
name: "Pablo's с соком лайма",
category: BEER_CATEGORY,
type: "Пивной напиток / лайм",
volume: "1 шт",
price: 200,
priceFormatted: "200 ₽",
desc: "Освежающий яркий пивной напиток с натуральным соком лайма — бодрящий, кисленький и летний.",
accentColor: "#22c55e",
},
{
id: "redds",
name: "Redd's",
category: BEER_CATEGORY,
type: "Фруктовое / яблочное",
volume: "1 шт",
price: 200,
priceFormatted: "200 ₽",
desc: "Лёгкий фильтрованный напиток с искристым кисло-сладким вкусом спелых сочных яблок.",
accentColor: "#f43f5e",
},
{
id: "spaten",
name: "Spatten",
category: BEER_CATEGORY,
type: "Мюнхенский хель",
volume: "0,45 л",
price: 250,
priceFormatted: "250 ₽",
desc: "Классический немецкий Spaten Münchner Hell — эталон баварского пивоварения с мягким сбалансированным вкусом.",
accentColor: "#10b981",
},
{
id: "hoegaarden",
name: "Hoegaarden",
category: BEER_CATEGORY,
type: "Бланш / Пшеничное",
volume: "0,45 л",
price: 220,
priceFormatted: "220 ₽",
desc: "Аутентичный бельгийский нефильтрованный бланш с пикантным акцентом кюрасао и семян кориандра.",
accentColor: "#fbbf24",
},
{
id: "corona-extra",
name: "Corona Extra",
category: BEER_CATEGORY,
type: "Мексиканский лагер",
volume: "1 шт",
price: 250,
priceFormatted: "250 ₽",
desc: "Всемирно известный мексиканский лагер в прозрачной бутылке — пьётся холодным с долькой сочного лайма.",
accentColor: "#38bdf8",
},
];
+681
View File
@@ -0,0 +1,681 @@
export type TobaccoStrength = 1 | 2 | 3;
export const strengthLabels: Record<TobaccoStrength, string> = {
1: "лёгкая",
2: "средняя",
3: "крепкая",
};
/* ------------------------------------------------------------------ */
/* Авторские миксы кальянов */
/* Формат: название · крепость (1–5) · холодок (0–3) · вкусы · цена */
/* ------------------------------------------------------------------ */
/* ------------------------------------------------------------------ */
/* Миксы «НЕОНа» */
/* Страница «Миксы НЕОНа» показывает витрину генераций AI-сомелье */
/* (те же миксы, что собирает вкладка «Автоподбор микса», — см. */
/* mixEngine.generateShowcaseMixes). Фирменные миксы бара хозяин */
/* добавляет в CRM — на сайте это блок «Миксы мастера». */
/* ------------------------------------------------------------------ */
import { CATEGORY_LABELS, FLAVORS } from "./flavors";
import { generateShowcaseMixes, getFlavor } from "../lib/mixEngine";
export type MixStrength = 1 | 2 | 3 | 4 | 5;
export type CoolingLevel = 0 | 1 | 2 | 3;
export type HookahMix = {
id: string;
name: string;
desc: string;
strength: MixStrength;
cooling: CoolingLevel; // 0 = нет холодка, 3 = максимальный
flavorTags: string[]; // напр. "ягоды", "цитрус", "мята"
price: string;
featured?: boolean;
/** состав витринного микса: вкусы движка в порядке «основа → добавка → оттенок» */
items: { flavorId: string }[];
};
export const mixStrengthLabels: Record<MixStrength, string> = {
1: "Лёгкая",
2: "Ниже среднего",
3: "Средняя",
4: "Выше средней",
5: "Крепкая",
};
export const mixCoolingLabels: Record<CoolingLevel, string> = {
0: "Без холодка",
1: "Лёгкая",
2: "Средний",
3: "Сильный",
};
const PRICE_BASE = "1 400 ₽";
const PRICE_STRONG = "1 800 ₽";
/* ------------------------------------------------------------------ */
/* Авторские миксы — показываются в карусели на главной */
/* ------------------------------------------------------------------ */
export type SignatureMix = {
id: string;
name: string;
desc: string;
price: string;
strength: TobaccoStrength;
badge?: { label: string; hot?: boolean };
};
const BASE_PRICE = "1 400 ₽";
export const signatureMixes: SignatureMix[] = [
{
id: "neon-signature",
name: "НЕОН Signature Mix",
desc: "Виноград, мята и тропические ноты. Наш фирменный микс, с которого начинают гости.",
price: BASE_PRICE,
strength: 1,
badge: { label: "Хит", hot: true },
},
{
id: "berry-haze",
name: "Berry Haze",
desc: "Лесные ягоды и сливки. Десертный вкус с густым молочным дымом.",
price: BASE_PRICE,
strength: 1,
badge: { label: "Новинка", hot: true },
},
{
id: "citrus-punch",
name: "Citrus Punch",
desc: "Цитрус, лайм и лёгкое охлаждение. Яркий и освежающий, как неоновая вывеска.",
price: BASE_PRICE,
strength: 2,
},
{
id: "midnight-grape",
name: "Midnight Grape",
desc: "Тёмный виноград с мятой. Глубокий вечерний вкус для долгих разговоров.",
price: BASE_PRICE,
strength: 1,
},
{
id: "cyan-breeze",
name: "Cyan Breeze",
desc: "Арбуз, лёд и мята. Самый холодный микс в нашей карте. Свежесть до утра.",
price: BASE_PRICE,
strength: 1,
},
{
id: "violet-dream",
name: "Violet Dream",
desc: "Дыня, ежевика и лаванда. Мягкий микс с цветочным шлейфом.",
price: BASE_PRICE,
strength: 1,
},
{
id: "dark-mango",
name: "Dark Mango",
desc: "Манго, маракуйя и холодок. Тропические ноты для долгого вечера.",
price: BASE_PRICE,
strength: 2,
},
{
id: "electric-cola",
name: "Electric Cola",
desc: "Кола, вишня и лёд. Знакомый вкус в неоновом исполнении.",
price: BASE_PRICE,
strength: 2,
},
];
/* ------------------------------------------------------------------ */
/* Справочник табаков — страница «Вкусы» */
/* Формат: вкус · крепость · фирма · холодок */
/* ------------------------------------------------------------------ */
export type TobaccoFlavor = {
id: string;
name: string;
brand: string;
strength: TobaccoStrength;
cooling: boolean;
note?: string;
available: boolean;
image?: string;
createdAt?: string; // заполнено для вкусов, добавленных владельцем через CRM
};
export type TobaccoBrandInfo = {
url?: string;
image: string;
accent: string;
};
export const tobaccoBrandInfo: Record<string, TobaccoBrandInfo> = {
Blackburn: { url: "https://burntobacco.com/", image: "./images/hookah-smoke.jpg", accent: "#ff3636" },
Overdose: { url: "https://overdose.pro/", image: "./images/hookah-smoke.jpg", accent: "#ff8a00" },
Banger: { url: "https://www.bangertobacco.com/", image: "./images/interior-bar.jpg", accent: "#d4af37" },
Undercoal: { url: "https://musthave.ru/", image: "./images/hookah-smoke.jpg", accent: "#ff4d8d" },
Darkside: { url: "https://darksidecorp.ru/", image: "https://static.tildacdn.com/tild3036-6566-4231-a239-313362636638/mainFooter.png", accent: "#ef2b2d" },
"Хулиган / WOOD": { url: "https://hlgn.cc/tobacco", image: "https://static.tildacdn.com/tild6662-6138-4437-b334-303162643234/_2____1.png", accent: "#ff453a" },
Hupreme: { url: "https://t.me/s/Hypremetc", image: "./images/interior-sofas.jpg", accent: "#b026ff" },
"JENT Alcohol Line": { url: "https://vk.com/jent.club", image: "https://sun9-6.userapi.com/impg/VSLGmsKem1jEfrzMwQ2zntx8tvmHu-mhR7h8iA/dja__TnVak0.jpg", accent: "#e2b04a" },
DEUS: { url: "https://t.me/deus_tobacco", image: "./images/hookah-smoke.jpg", accent: "#a7a7a7" },
Северный: { url: "https://www.tabak-sever.ru/", image: "./images/interior-sofas.jpg", accent: "#a8d7ff" },
Bliss: { url: "https://taplink.cc/blisstobacco", image: "https://p.taplink.st/a/0/3/b/e/bc523d.png?2", accent: "#78a7d2" },
Muassel: { url: "http://muassel.ru/", image: "https://muassel.ru/images/22_1.jpg", accent: "#d5a760" },
Chabacco: { url: "https://chabacco.ru/", image: "https://static.tildacdn.com/tild3466-3934-4163-b131-653731646231/banner-new-chabacco-.png", accent: "#ffca28" },
"Joy Kiwichanga": { url: "https://alphahookah.ru/mix-joy/", image: "https://alphahookah.ru/upload/iblock/7e9/ah3jnujz5k06qd717ml9wo52t0s3bi3v.png", accent: "#00d68f" },
Хулиган: { url: "https://hlgn.cc/tobacco", image: "https://static.tildacdn.com/tild6662-6138-4437-b334-303162643234/_2____1.png", accent: "#ff453a" },
Сарма: { url: "https://sarmahookah.ru/", image: "https://static.tildacdn.com/tild6465-6337-4363-b365-376134396533/image_7.png", accent: "#e44e2d" },
Добавка: { image: "./images/menu-bg.jpg", accent: "#00f0ff" },
};
const tobacco = (
id: string,
brand: string,
name: string,
note: string | undefined,
strength: TobaccoStrength,
cooling = false,
available = true,
image?: string,
): TobaccoFlavor => ({ id, brand, name, note, strength, cooling, available, image });
export const tobaccoFlavors: TobaccoFlavor[] = [
tobacco("bb-cola", "Blackburn", "Классическая кола", undefined, 3),
tobacco("bb-lulo", "Blackburn", "Lulo", undefined, 3),
tobacco("bb-real-pf", "Blackburn", "Real P.F.", "Маракуйя", 3),
tobacco("bb-white-grape", "Blackburn", "White Grape", "Белый виноград", 3),
tobacco("bb-forest-raspberry", "Blackburn", "Лесная малина", undefined, 3),
tobacco("bb-brownie", "Blackburn", "Брауни", undefined, 3),
tobacco("bb-blackberry-lemonade", "Blackburn", "Blackberry Lemonade", "Ежевичный лимонад", 3),
tobacco("bb-lemon-shock", "Blackburn", "Lemon Shock", "Ультракислый лимон", 3),
tobacco("bb-blueberry", "Blackburn", "Blueberry", "Голубика", 3),
tobacco("bb-apple-shock", "Blackburn", "Apple Shock", "Кислое зелёное яблоко", 3),
tobacco("bb-red-energy", "Blackburn", "Red Energy", "Энергетик", 3),
tobacco("bb-kiwi-stoner", "Blackburn", "Kiwi Stoner", "Смузи из киви", 3),
tobacco("bb-bananini", "Blackburn", "Bananini", "Банан", 3),
tobacco("bb-honey-melon", "Blackburn", "Медовая дыня", undefined, 3),
tobacco("bb-pineapple", "Blackburn", "Pineapple", "Сочный ананас", 3),
tobacco("bb-grape-lollipop", "Blackburn", "Виноградный чупа-чупс", undefined, 3),
tobacco("bb-fir", "Blackburn", "Ёлка", undefined, 3, true),
tobacco("bb-red-orange", "Blackburn", "Красный апельсин", undefined, 3),
tobacco("bb-juicy-mango", "Blackburn", "Сочное манго", undefined, 3),
tobacco("bb-basilic", "Blackburn", "Basilic", "Базилик", 3),
tobacco("bb-berry-sorbet", "Blackburn", "Ягодный сорбет", "С грейпфрутом", 3),
tobacco("bb-ananas-shock", "Blackburn", "Ananas Shock", "Кислый ананас", 3),
tobacco("bb-after-8", "Blackburn", "After 8", "Шоколад-мята", 3, true),
tobacco("bb-overdose", "Blackburn", "Overdose", "Лимон-лайм", 3),
tobacco("bb-pina-colada", "Blackburn", "Pina Colada", undefined, 3),
tobacco("bb-pistachio-ice", "Blackburn", "Pistachio Ice Snow", "Фисташковое мороженое", 3, true),
tobacco("bb-pomelo", "Blackburn", "Pomelo", undefined, 3),
tobacco("bb-pear-lemonade", "Blackburn", "Pear Lemonade", "Грушевый лимонад", 3),
tobacco("od-lost-futura", "Overdose", "Lost Futura", "Мускусная вишня", 3),
tobacco("od-frustyle", "Overdose", "Frustyle", "Кактус-лайм", 3),
tobacco("od-black-banano", "Overdose", "Black Banano", "Амбровый банан", 3),
tobacco("od-gin-cucumber", "Overdose", "Gin Cucumber", "Огуречный джин", 3),
tobacco("banger-black-white", "Banger", "Black and White", "Печенье Oreo", 2),
tobacco("banger-cream-soda", "Banger", "Cream Soda", "Крем-сода", 2),
tobacco("banger-sexy", "Banger", "Sexy", "Грейпфрут, клубника, малина", 2),
tobacco("banger-grapefruit", "Banger", "Grapefruit", "Грейпфрут", 2),
tobacco("banger-green-day", "Banger", "Green Day", "Яблоко, киви, кислинка", 2),
tobacco("banger-cola-bella", "Banger", "Cola Bella", "Ванильная кола", 2),
tobacco("uc-pinkman", "Undercoal", "Pinkman", "Клубника, малина, грейпфрут", 2),
tobacco("uc-coconut-shake", "Undercoal", "Кокосовый шейк", undefined, 2, false, false),
tobacco("uc-caribbean-rum", "Undercoal", "Caribbean Rum", undefined, 2),
tobacco("uc-mango-rose", "Undercoal", "Манго, маракуйя, личи и роза", undefined, 2),
tobacco("uc-tropical-juice", "Undercoal", "Тропический сок", undefined, 2),
tobacco("uc-cactus-kiwi", "Undercoal", "Кактус, киви и абсент", undefined, 2),
tobacco("uc-milky-oolong", "Undercoal", "Чай «Молочный улун»", undefined, 2),
tobacco("uc-cranberry", "Undercoal", "Клюква", undefined, 2),
tobacco("uc-pear-tarragon", "Undercoal", "Груша, лимон и тархун", undefined, 2),
tobacco("uc-cinnamon-roll", "Undercoal", "Cinnamon Roll", undefined, 2),
tobacco("uc-cookie", "Undercoal", "Cookie", "Печенье", 2),
tobacco("ds-alpine-trip", "Darkside", "Алтайский трип", "Хвоя, фейхоа, эвкалипт", 2, true),
tobacco("wood-begemot", "Хулиган / WOOD", "Begemot", "Бергамот-мандарин", 2),
tobacco("wood-boo", "Хулиган / WOOD", "Boo", "Яблоко-гранат", 2),
tobacco("wood-old", "Хулиган / WOOD", "Old", "Лимон с мёдом", 2),
tobacco("wood-berry-ninja", "Хулиган / WOOD", "Берри Ниндзя", "Лесные ягоды", 2),
tobacco("wood-sir-hard", "Хулиган / WOOD", "Sir Hard", "Воздушный рис", 3),
tobacco("hupreme-milk-tea", "Hupreme", "Чай с молоком", undefined, 2),
tobacco("hupreme-gooseberry", "Hupreme", "Крыжовник", undefined, 2),
tobacco("hupreme-guava", "Hupreme", "Гуава", undefined, 2),
tobacco("jent-blue-agave", "JENT Alcohol Line", "Blue Agave", "«Текила Бум»", 2),
tobacco("jent-havana", "JENT Alcohol Line", "Havana 290", "Мохито", 2, true),
tobacco("jent-cuba-libre", "JENT Alcohol Line", "Cuba Libre", undefined, 2),
tobacco("deus-blackberry-wine", "DEUS", "Blackberry Wine", "Ежевичное вино", 2),
tobacco("deus-guinness", "DEUS", "Guinness", "Тёмное пиво", 2),
tobacco("deus-peonies", "DEUS", "Peonies", "Пионы", 2),
tobacco("deus-violet-zephyr", "DEUS", "Violet Zephyr", "Фиалковый зефир", 2),
tobacco("deus-cherry-jelly", "DEUS", "Cherry Jelly", "Вишнёвое желе", 2),
tobacco("deus-pumpkin-pie", "DEUS", "Pumpkin Pie", "Тыквенный пирог с миндалём", 2),
tobacco("deus-blueberry-yogurt", "DEUS", "Blueberry Yogurt", "Черничный йогурт", 2),
tobacco("deus-base", "DEUS", "Base", "Табачный лист", 2),
tobacco("deus-champagne", "DEUS", "Champagne", "Игристое вино", 2),
tobacco("north-flower", "Северный", "Цветочный", undefined, 3),
tobacco("north-feijoa", "Северный", "Финдеперцовый фейхоа", undefined, 3),
tobacco("north-elderberry", "Северный", "Бузина", undefined, 3),
tobacco("north-sorbet", "Северный", "Sorbet", "Фруктовый", 3),
tobacco("bliss-mango-chamomile", "Bliss", "Манго-ромашка", undefined, 1),
tobacco("bliss-peach-yogurt", "Bliss", "Персик-йогурт", undefined, 1),
tobacco("bliss-lime", "Bliss", "Лайм", undefined, 1),
tobacco("bliss-love-shot", "Bliss", "Love Shot", "Маракуйя, арбуз, лимон, холодок", 1, true),
tobacco("bliss-strawberry", "Bliss", "Клубника", undefined, 1),
tobacco("muassel-cinnamon-gum", "Muassel", "Жвачка с корицей", undefined, 3),
tobacco("chabacco-strawberry-milksake", "Chabacco", "Mix", "Клубничный милкшейк", 2),
tobacco("joy-kiwichanga", "Joy Kiwichanga", "Киви, фейхоа", undefined, 2, false, true, "https://alphahookah.ru/upload/iblock/7e9/ah3jnujz5k06qd717ml9wo52t0s3bi3v.png"),
tobacco("hooligan-grapefruit", "Хулиган", "Грейпфрутовый сок", undefined, 2),
tobacco("sarma-drunk-pear", "Сарма", "Дачная груша", undefined, 2),
tobacco("sarma-corn-paprika", "Сарма", "Кукуруза-паприка", undefined, 2),
tobacco("hooligan-flash", "Хулиган", "«Флеш»", "Медовая малина", 2),
tobacco("add-north", "Добавка", "Север", "Бустер", 1, true),
tobacco("add-cooling", "Добавка", "Холодок", undefined, 1, true),
];
export const tobaccoBrands = [...new Set(tobaccoFlavors.map((f) => f.brand))].sort((a, b) =>
a.localeCompare(b, "ru")
);
export const tobaccoCatalogNotice =
"Актуальный ассортимент по вашей карте. Изображение показывает упаковку или визуал бренда; наличие отмечено в каждой карточке.";
/** Витрина: генерации движка по всем профилям/крепостям/холодку. */
/** Табаки, которых нет на сайте (или они помечены недоступными), в витрину
* не берём: каждый микс собран из реального ассортимента «Вкусов». */
const siteUnavailableFlavorIds: string[] = FLAVORS.filter((f) => {
const t = tobaccoFlavors.find((x) => x.id === (f.catalogId ?? f.id));
return !!t && !t.available;
}).map((f) => f.id);
/** Витрина: генерации движка по всем профилям/крепостям/холодку. */
const showcase = generateShowcaseMixes(siteUnavailableFlavorIds);
/** Тег фильтра «Вкус» из категории вкуса состава; холодок-добавка — «лёд». */
const flavorTag = (flavorId: string): string | null => {
const f = getFlavor(flavorId);
if (!f) return null;
return f.category === "cooling" ? "лёд" : CATEGORY_LABELS[f.category];
};
export const hookahMixes: HookahMix[] = showcase.map(({ mix, strength, cooling }, index) => ({
id: `showcase-${index + 1}`,
name: mix.name,
desc: mix.description,
strength,
cooling,
flavorTags: [...new Set(mix.items.map((i) => flavorTag(i.flavorId)).filter((t): t is string => !!t))],
price: strength >= 5 ? PRICE_STRONG : PRICE_BASE,
featured: index < 5,
items: mix.items.map((i) => ({ flavorId: i.flavorId })),
}));
export const mixFlavorTags = [...new Set(hookahMixes.flatMap((m) => m.flavorTags))].sort(
(a, b) => a.localeCompare(b, "ru")
);
export const mixesCatalogNotice =
"Цены указаны за один кальян. Крепкие миксы — 1 800 ₽, остальные — 1 400 ₽.";
/* ------------------------------------------------------------------ */
/* PlayStation 5 */
/* Формат: название · изображение · жанр · макс. игроков */
/* ------------------------------------------------------------------ */
export type Ps5Game = {
id: string;
name: string;
genre: string;
maxPlayers: number;
image: string; // путь к обложке, пустая строка = CSS-плейсхолдер
accent?: string; // цвет для плейсхолдера
};
export const ps5Games: Ps5Game[] = [
{
id: "fifa-25",
name: "FIFA 25",
genre: "Футбольный симулятор",
maxPlayers: 4,
image: "/images/games/fifa25.jfif",
},
{
id: "ufc-5",
name: "UFC 5",
genre: "Файтинг",
maxPlayers: 2,
image: "/images/games/ufc5.jfif",
},
{
id: "mortal-kombat-1",
name: "Mortal Kombat 1",
genre: "Файтинг",
maxPlayers: 2,
image: "/images/games/mk1.jpg",
},
{
id: "move-or-die",
name: "Move or Die",
genre: "Кооперативная аркада",
maxPlayers: 4,
image: "/images/games/mod.jpg",
},
{
id: "overcooked",
name: "Overcooked",
genre: "Кооперативная аркада",
maxPlayers: 4,
image: "/images/games/over.jpg",
},
/* --- сингл-игры --- */
{
id: "god-of-war-ragnarok",
name: "God of War Ragnarök",
genre: "Экшен-приключение",
maxPlayers: 1,
image: "/images/games/gowr.jpg",
},
{
id: "god-of-war",
name: "God of War",
genre: "Экшен-приключение",
maxPlayers: 1,
image: "/images/games/gow.jpg",
},
{
id: "spider-man-remastered",
name: "Marvel's Spider-Man Remastered",
genre: "Экшен-приключение",
maxPlayers: 1,
image: "/images/games/smr.jpg",
},
];
export const gameGenres = [...new Set(ps5Games.map((g) => g.genre))].sort((a, b) =>
a.localeCompare(b, "ru")
);
export const gamesCatalogNotice =
"Количество геймпадов уточняйте при бронировании VIP-зала.";
/* ------------------------------------------------------------------ */
/* Настольные игры */
/* Формат: название · тип · игроки (мин–макс) · время · сложность */
/* ------------------------------------------------------------------ */
export type BoardGameCategory =
| "Карточные"
| "Классика"
| "Компанейские"
| "Стратегия"
| "На логику";
export type BoardGameDifficulty = 1 | 2 | 3; // 1 — правила за минуту, 3 — надо вникать
export type BoardGame = {
id: string;
name: string;
category: BoardGameCategory;
minPlayers: number;
maxPlayers: number;
duration: string; // «20–40 мин»
difficulty: BoardGameDifficulty;
desc: string;
icon: string; // ключ иконки для карточки
accent: string; // цвет плейсхолдера
hit?: boolean;
};
export const boardGameDifficultyLabels: Record<BoardGameDifficulty, string> = {
1: "Простая",
2: "Средняя",
3: "Сложная",
};
export const boardGames: BoardGame[] = [
{
id: "mafia",
name: "Мафия",
category: "Компанейские",
minPlayers: 6,
maxPlayers: 16,
duration: "40–90 мин",
difficulty: 1,
desc: "Город засыпает — просыпается мафия. Психологическая игра на блеф и дедукцию для большой компании.",
icon: "eye",
accent: "#b026ff",
hit: true,
},
{
id: "bunker",
name: "Бункер",
category: "Компанейские",
minPlayers: 4,
maxPlayers: 16,
duration: "40–60 мин",
difficulty: 1,
desc: "Апокалипсис близко, а мест в бункере на всех не хватит. Докажи, что именно ты нужен человечеству.",
icon: "skull",
accent: "#00f0ff",
hit: true,
},
{
id: "cards",
name: "Игральные карты",
category: "Карточные",
minPlayers: 2,
maxPlayers: 8,
duration: "10–60 мин",
difficulty: 1,
desc: "Классическая колода 54 карты: дурак, покер, 21, бридж — играйте во что угодно.",
icon: "spade",
accent: "#ff4d6d",
hit: true,
},
{
id: "chess",
name: "Шахматы",
category: "Классика",
minPlayers: 2,
maxPlayers: 2,
duration: "20–60 мин",
difficulty: 3,
desc: "Королевская игра. Дуэль умов на 64 клетках под неоновым светом.",
icon: "crown",
accent: "#e0e0e0",
},
{
id: "backgammon",
name: "Нарды",
category: "Классика",
minPlayers: 2,
maxPlayers: 2,
duration: "20–40 мин",
difficulty: 2,
desc: "Длинные и короткие нарды. Кости, стратегия и немного удачи — идеально под кальян.",
icon: "dices",
accent: "#f4a261",
hit: true,
},
{
id: "domino",
name: "Домино",
category: "Классика",
minPlayers: 2,
maxPlayers: 4,
duration: "15–30 мин",
difficulty: 1,
desc: "Забей «козла» — простая и азартная игра, в которую можно играть часами.",
icon: "grid",
accent: "#ffd23d",
},
{
id: "checkers",
name: "Шашки",
category: "Классика",
minPlayers: 2,
maxPlayers: 2,
duration: "10–30 мин",
difficulty: 1,
desc: "Русские шашки и поддавки. Быстро, азартно, знакомо с детства.",
icon: "circle",
accent: "#4dff88",
},
{
id: "uno",
name: "UNO",
category: "Карточные",
minPlayers: 2,
maxPlayers: 10,
duration: "15–30 мин",
difficulty: 1,
desc: "Скинь все карты первым. +4, пропуск хода и разворот — главное, не забудь крикнуть «УНО!».",
icon: "hash",
accent: "#ff3636",
hit: true,
},
{
id: "monopoly",
name: "Монополия",
category: "Стратегия",
minPlayers: 2,
maxPlayers: 6,
duration: "60–120 мин",
difficulty: 2,
desc: "Скупай улицы, строй отели и разоряй друзей. Классика, которая ссорит компании уже сто лет.",
icon: "landmark",
accent: "#2ec27e",
},
{
id: "jenga",
name: "Дженга",
category: "Компанейские",
minPlayers: 2,
maxPlayers: 8,
duration: "10–20 мин",
difficulty: 1,
desc: "Вытаскивай брусок и клади наверх. Кто уронит башню — тот и проиграл. Твёрдая рука обязательна.",
icon: "layout",
accent: "#d4af37",
},
{
id: "alias",
name: "Alias",
category: "Компанейские",
minPlayers: 4,
maxPlayers: 12,
duration: "30–60 мин",
difficulty: 1,
desc: "Объясни слово команде, не называя его. Игра на скорость мысли и командную химию.",
icon: "brain",
accent: "#ff8a00",
},
{
id: "imaginarium",
name: "Имаджинариум",
category: "Компанейские",
minPlayers: 4,
maxPlayers: 7,
duration: "30–60 мин",
difficulty: 1,
desc: "Загадай ассоциацию к карточке с сюрреалистичной картинкой. Творческая игра для душевной компании.",
icon: "puzzle",
accent: "#c77dff",
},
{
id: "crocodile",
name: "Крокодил",
category: "Компанейские",
minPlayers: 4,
maxPlayers: 16,
duration: "20–60 мин",
difficulty: 1,
desc: "Покажи слово жестами — без звуков и подсказок. Гарантированно смешно.",
icon: "users",
accent: "#00c2a8",
},
{
id: "poker",
name: "Покерный набор",
category: "Карточные",
minPlayers: 2,
maxPlayers: 9,
duration: "60–180 мин",
difficulty: 2,
desc: "Фишки, колоды и дилерская кнопка. Техасский холдем на серьёзных щах — но только на интерес.",
icon: "club",
accent: "#1fa37a",
},
{
id: "exploding-kittens",
name: "Взрывные котята",
category: "Карточные",
minPlayers: 2,
maxPlayers: 5,
duration: "15 мин",
difficulty: 1,
desc: "Русская рулетка с котиками. Тяни карту и молись, чтобы не попался взрывной котёнок.",
icon: "ghost",
accent: "#ff6b9d",
},
{
id: "catan",
name: "Колонизаторы (Catan)",
category: "Стратегия",
minPlayers: 3,
maxPlayers: 4,
duration: "60–90 мин",
difficulty: 2,
desc: "Строй дороги и поселения, торгуй ресурсами. Одна из лучших стратегий в истории настолок.",
icon: "castle",
accent: "#e9c46a",
},
{
id: "dixit",
name: "Диксит",
category: "Компанейские",
minPlayers: 3,
maxPlayers: 6,
duration: "30 мин",
difficulty: 1,
desc: "Расскажи историю по картинке так, чтобы угадала часть игроков — но не все.",
icon: "heart",
accent: "#f77f00",
},
{
id: "codenames",
name: "Кодовые имена",
category: "На логику",
minPlayers: 4,
maxPlayers: 8,
duration: "15–30 мин",
difficulty: 2,
desc: "Капитаны дают ассоциации одним словом, команда ищет своих агентов. Напряжённо и умно.",
icon: "target",
accent: "#4895ef",
},
];
export const boardGameCategories = [...new Set(boardGames.map((g) => g.category))].sort(
(a, b) => a.localeCompare(b, "ru")
);
export const boardGamesNotice =
"Все игры бесплатны для гостей — просто попросите у бармена. Наличие конкретной игры уточняйте на месте.";
+628
View File
@@ -0,0 +1,628 @@
/* ------------------------------------------------------------------ */
/* База вкусов для rule-based генератора миксов */
/* Владелец сайта добавляет новые вкусы только в этот файл: */
/* 1) дописать объект в массив FLAVORS; */
/* 2) если вводит новую категорию — добавить её в CATEGORY_MATRIX. */
/* Код движка и UI трогать не нужно. */
/* ------------------------------------------------------------------ */
export type FlavorCategory =
| "fruits"
| "berries"
| "citrus"
| "tropical"
| "dessert"
| "drinks"
| "spices"
| "cooling";
export type FlavorStrength = "light" | "medium" | "strong";
export type FlavorRole = "base" | "accent";
export type ProfileId =
| "fresh"
| "dessert"
| "tropical"
| "berry"
| "citrus";
export interface Flavor {
id: string; // slug, латиницей — используется в share-ссылках
catalogId?: string; // id этого вкуса в каталоге tobaccoFlavors (data/catalog.ts), если слаги различаются; по нему работает стоп-лист CRM
name: string; // название для гостя
brand: string; // производитель (для карточки)
category: FlavorCategory;
intensity: 1 | 2 | 3 | 4 | 5; // «громкость» вкуса, 1 — фон, 5 — доминанта
sweetness: number; // 0–100
sourness: number; // 0–100
cooling: number; // 0–100, собственная ментоловость вкуса
roles: FlavorRole[]; // в каких ролях может стоять в чаше
pairs_with: FlavorCategory[]; // предпочтительные категории-партнёры
avoid_with: string[]; // жёсткий запрет: id или категория
strength: FlavorStrength | "any"; // any — добавка, подходит под любую крепость
popularity: number; // 0–1, стартовый вес в случайном выборе
}
/* Категории, с которых микс может начинаться (основа) по профилям */
export const PROFILES: Record<
ProfileId,
{ label: string; baseCategories: FlavorCategory[] }
> = {
fresh: { label: "Свежий", baseCategories: ["citrus", "fruits", "berries"] },
dessert: {
label: "Десертный",
baseCategories: ["dessert", "drinks", "tropical", "berries"],
},
tropical: { label: "Тропический", baseCategories: ["tropical", "fruits"] },
berry: { label: "Ягодный", baseCategories: ["berries"] },
citrus: { label: "Цитрусовый", baseCategories: ["citrus"] },
};
export const CATEGORY_LABELS: Record<FlavorCategory, string> = {
fruits: "Фрукты",
berries: "Ягоды",
citrus: "Цитрус",
tropical: "Тропики",
dessert: "Десерты",
drinks: "Напитки",
spices: "Пряности",
cooling: "Холодок",
};
export const STRENGTH_LABELS: Record<FlavorStrength, string> = {
light: "Лёгкая",
medium: "Средняя",
strong: "Крепкая",
};
/* Матрица совместимости категорий:
1 — отлично дружат;
0 — нейтрально, генератор берёт, но с весом ×0.5;
-1 — конфликт, такая пара запрещена. */
export const CATEGORY_MATRIX: Record<
FlavorCategory,
Partial<Record<FlavorCategory, number>>
> = {
berries: {
berries: 1,
citrus: 1,
fruits: 1,
tropical: 1,
dessert: 1, // ягоды со сливками
drinks: 0,
spices: 0,
cooling: 1,
},
citrus: {
citrus: 1,
fruits: 1,
tropical: 1,
dessert: 0,
drinks: 1, // лимон в колу/лимонад
spices: 1, // лайм с базиликом (мохито)
cooling: 1,
},
fruits: {
fruits: 1,
tropical: 1,
dessert: 1, // яблочный пирог
drinks: 0,
spices: 0,
cooling: 1,
},
tropical: {
tropical: 1,
dessert: 1, // банан со сливками, пина-колада
drinks: 1,
spices: 0,
cooling: 1,
},
dessert: {
dessert: 1,
drinks: 1, // ванильная кола, печенье с латте
spices: 0,
cooling: 1, // шоколад-мята, фисташковый лёд
},
drinks: {
drinks: 1,
spices: -1, // кола с базиликом не работает
cooling: 1,
},
spices: {
spices: 0,
cooling: 1, // мята-базилик
},
cooling: {
cooling: -1, // два холодка в одной чаше — перебор
},
};
/* 20 актуальных вкусов из ассортимента бара */
export const FLAVORS: Flavor[] = [
/* ---------------- Крепкие (Blackburn) ---------------- */
{
id: "white-grape",
catalogId: "bb-white-grape",
name: "White Grape — белый виноград",
brand: "Blackburn",
category: "berries",
intensity: 3,
sweetness: 72,
sourness: 18,
cooling: 0,
roles: ["base"],
pairs_with: ["dessert", "citrus", "cooling"],
avoid_with: [],
strength: "strong",
popularity: 0.55,
},
{
id: "blueberry-bb",
catalogId: "bb-blueberry",
name: "Blueberry — голубика",
brand: "Blackburn",
category: "berries",
intensity: 4,
sweetness: 60,
sourness: 30,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["dessert", "citrus", "cooling"],
avoid_with: [],
strength: "strong",
popularity: 0.7,
},
{
id: "lemon-shock",
catalogId: "bb-lemon-shock",
name: "Lemon Shock — ультракислый лимон",
brand: "Blackburn",
category: "citrus",
intensity: 5,
sweetness: 25,
sourness: 92,
cooling: 0,
roles: ["accent", "base"],
pairs_with: ["berries", "fruits", "tropical", "cooling"],
avoid_with: ["dessert"],
strength: "strong",
popularity: 0.75,
},
{
id: "pineapple-bb",
catalogId: "bb-pineapple",
name: "Pineapple — сочный ананас",
brand: "Blackburn",
category: "tropical",
intensity: 4,
sweetness: 75,
sourness: 35,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["citrus", "dessert", "cooling"],
avoid_with: [],
strength: "strong",
popularity: 0.6,
},
{
id: "mango-bb",
catalogId: "bb-juicy-mango",
name: "Сочное манго",
brand: "Blackburn",
category: "tropical",
intensity: 4,
sweetness: 80,
sourness: 15,
cooling: 0,
roles: ["base"],
pairs_with: ["citrus", "dessert", "berries"],
avoid_with: [],
strength: "strong",
popularity: 0.66,
},
{
id: "bananini",
catalogId: "bb-bananini",
name: "Bananini — банан",
brand: "Blackburn",
category: "tropical",
intensity: 3,
sweetness: 78,
sourness: 5,
cooling: 0,
roles: ["base"],
pairs_with: ["dessert", "berries"],
avoid_with: ["citrus"], // банан с кислым лимоном распадается
strength: "strong",
popularity: 0.42,
},
{
id: "brownie",
catalogId: "bb-brownie",
name: "Брауни",
brand: "Blackburn",
category: "dessert",
intensity: 4,
sweetness: 85,
sourness: 0,
cooling: 0,
roles: ["base"],
pairs_with: ["berries", "drinks", "tropical"],
avoid_with: ["citrus"], // шоколад + агрессивная кислота = конфликт
strength: "strong",
popularity: 0.5,
},
{
id: "pistachio-ice-snow",
catalogId: "bb-pistachio-ice",
name: "Pistachio Ice Snow — фисташковое мороженое",
brand: "Blackburn",
category: "dessert",
intensity: 3,
sweetness: 70,
sourness: 5,
cooling: 35,
roles: ["base", "accent"],
pairs_with: ["drinks", "berries"],
avoid_with: [],
strength: "strong",
popularity: 0.45,
},
{
id: "basilic",
catalogId: "bb-basilic",
name: "Basilic — базилик",
brand: "Blackburn",
category: "spices",
intensity: 3,
sweetness: 10,
sourness: 20,
cooling: 0,
roles: ["accent"],
pairs_with: ["citrus", "cooling", "fruits"],
avoid_with: ["drinks"],
strength: "strong",
popularity: 0.38,
},
{
id: "classic-cola",
catalogId: "bb-cola",
name: "Классическая кола",
brand: "Blackburn",
category: "drinks",
intensity: 4,
sweetness: 65,
sourness: 10,
cooling: 0,
roles: ["base"],
pairs_with: ["dessert", "citrus", "cooling"],
avoid_with: ["spices"],
strength: "strong",
popularity: 0.58,
},
{
id: "honey-melon",
catalogId: "bb-honey-melon",
name: "Медовая дыня",
brand: "Blackburn",
category: "fruits",
intensity: 3,
sweetness: 68,
sourness: 12,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["citrus", "cooling", "tropical"],
avoid_with: [],
strength: "strong",
popularity: 0.44,
},
/* ---------------- Средняя крепость (Undercoal / Banger) ---------------- */
{
id: "pinkman",
catalogId: "uc-pinkman",
name: "Pinkman — клубника, малина, грейпфрут",
brand: "Undercoal",
category: "berries",
intensity: 4,
sweetness: 45,
sourness: 60,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["citrus", "dessert", "cooling"],
avoid_with: [],
strength: "medium",
popularity: 0.72,
},
{
id: "pear-lemon-tarhun",
catalogId: "uc-pear-tarragon",
name: "Груша, лимон и тархун",
brand: "Undercoal",
category: "citrus",
intensity: 3,
sweetness: 40,
sourness: 55,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["fruits", "berries", "cooling"],
avoid_with: [],
strength: "medium",
popularity: 0.5,
},
{
id: "cookie-uc",
catalogId: "uc-cookie",
name: "Cookie — печенье",
brand: "Undercoal",
category: "dessert",
intensity: 3,
sweetness: 80,
sourness: 5,
cooling: 0,
roles: ["base"],
pairs_with: ["drinks", "berries", "tropical"],
avoid_with: [],
strength: "medium",
popularity: 0.52,
},
{
id: "green-day",
catalogId: "banger-green-day",
name: "Green Day — яблоко, киви, кислинка",
brand: "Banger",
category: "fruits",
intensity: 3,
sweetness: 35,
sourness: 55,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["citrus", "cooling", "berries"],
avoid_with: [],
strength: "medium",
popularity: 0.6,
},
/* ---------------- Лёгкая крепость (Bliss) ---------------- */
{
id: "bliss-lime",
name: "Лайм",
brand: "Bliss",
category: "citrus",
intensity: 4,
sweetness: 30,
sourness: 70,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["berries", "fruits", "tropical", "cooling"],
avoid_with: [],
strength: "light",
popularity: 0.57,
},
{
id: "bliss-pomelo",
catalogId: "bb-pomelo",
name: "Помело",
brand: "Bliss",
category: "citrus",
intensity: 3,
sweetness: 35,
sourness: 55,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["tropical", "fruits", "berries"],
avoid_with: [],
strength: "light",
popularity: 0.48,
},
{
id: "bliss-mango-chamomile",
name: "Манго-ромашка",
brand: "Bliss",
category: "tropical",
intensity: 3,
sweetness: 70,
sourness: 20,
cooling: 0,
roles: ["base"],
pairs_with: ["citrus", "berries", "dessert"],
avoid_with: [],
strength: "light",
popularity: 0.55,
},
{
id: "bliss-strawberry",
name: "Клубника",
brand: "Bliss",
category: "berries",
intensity: 3,
sweetness: 62,
sourness: 35,
cooling: 0,
roles: ["base", "accent"],
pairs_with: ["citrus", "dessert", "cooling", "tropical"],
avoid_with: [],
strength: "light",
popularity: 0.63,
},
/* ---------------- Добавка-холодок (под любую крепость) ---------------- */
{
id: "frost",
catalogId: "add-cooling",
name: "Super Frost — холодок",
brand: "Добавка",
category: "cooling",
intensity: 3,
sweetness: 0,
sourness: 0,
cooling: 100,
roles: ["accent"],
pairs_with: ["citrus", "fruits", "berries", "tropical", "drinks", "dessert"],
avoid_with: ["spices"],
strength: "any",
popularity: 0.9, // добавка есть всегда, высока вероятность попадания
},
];
/* ------------------------------------------------------------------ */
/* Кураторские миксы — страховка, если генератор за 50 попыток */
/* не собрал валидный микс (например, узкий профиль + стоп-лист). */
/* ------------------------------------------------------------------ */
export interface CuratedMix {
id: string;
name: string;
profile: ProfileId;
strength: FlavorStrength;
cooling: boolean;
recipe: { flavorId: string; percent: number }[];
}
export const CURATED_MIXES: CuratedMix[] = [
{
id: "cur-cyan-breeze",
name: "Циановый бриз",
profile: "fresh",
strength: "medium",
cooling: true,
recipe: [
{ flavorId: "green-day", percent: 55 },
{ flavorId: "pinkman", percent: 30 },
{ flavorId: "frost", percent: 15 },
],
},
{
id: "cur-frost-melon",
name: "Морозная дыня",
profile: "fresh",
strength: "strong",
cooling: true,
recipe: [
{ flavorId: "honey-melon", percent: 55 },
{ flavorId: "lemon-shock", percent: 30 },
{ flavorId: "frost", percent: 15 },
],
},
{
id: "cur-midnight-grape",
name: "Полночный виноград",
profile: "berry",
strength: "strong",
cooling: false,
recipe: [
{ flavorId: "white-grape", percent: 60 },
{ flavorId: "blueberry-bb", percent: 40 },
],
},
{
id: "cur-velvet-plombir",
name: "Бархатный пломбир",
profile: "dessert",
strength: "strong",
cooling: false,
recipe: [
{ flavorId: "pistachio-ice-snow", percent: 55 },
{ flavorId: "brownie", percent: 30 },
{ flavorId: "classic-cola", percent: 15 },
],
},
{
id: "cur-sunset-lagoon",
name: "Закатная лагуна",
profile: "tropical",
strength: "light",
cooling: true,
recipe: [
{ flavorId: "bliss-mango-chamomile", percent: 60 },
{ flavorId: "bliss-lime", percent: 25 },
{ flavorId: "frost", percent: 15 },
],
},
{
id: "cur-neon-citrus",
name: "Неоновый цитрус",
profile: "citrus",
strength: "light",
cooling: false,
recipe: [
{ flavorId: "bliss-pomelo", percent: 65 },
{ flavorId: "bliss-lime", percent: 35 },
],
},
];
/** Эпитет в трёх родах — согласуется с названием вкуса («Морозная дыня») */
export interface EpithetForms {
m: string;
f: string;
n: string;
}
/* Неоновые эпитеты для генерации названий по профилям */
export const PROFILE_EPITHETS: Record<ProfileId, EpithetForms[]> = {
fresh: [
{ m: "Морозный", f: "Морозная", n: "Морозное" },
{ m: "Ледяной", f: "Ледяная", n: "Ледяное" },
{ m: "Кристальный", f: "Кристальная", n: "Кристальное" },
{ m: "Полярный", f: "Полярная", n: "Полярное" },
],
dessert: [
{ m: "Бархатный", f: "Бархатная", n: "Бархатное" },
{ m: "Ночной", f: "Ночная", n: "Ночное" },
{ m: "Вельветовый", f: "Вельветовая", n: "Вельветовое" },
{ m: "Сливочный", f: "Сливочная", n: "Сливочное" },
],
tropical: [
{ m: "Тропический", f: "Тропическая", n: "Тропическое" },
{ m: "Закатный", f: "Закатная", n: "Закатное" },
{ m: "Солнечный", f: "Солнечная", n: "Солнечное" },
{ m: "Спелый", f: "Спелая", n: "Спелое" },
],
berry: [
{ m: "Неоновый", f: "Неоновая", n: "Неоновое" },
{ m: "Пурпурный", f: "Пурпурная", n: "Пурпурное" },
{ m: "Космический", f: "Космическая", n: "Космическое" },
{ m: "Ягодный", f: "Ягодная", n: "Ягодное" },
],
citrus: [
{ m: "Искрящийся", f: "Искрящаяся", n: "Искрящееся" },
{ m: "Звонкий", f: "Звонкая", n: "Звонкое" },
{ m: "Цитрусовый", f: "Цитрусовая", n: "Цитрусовое" },
{ m: "Бодрящий", f: "Бодрящая", n: "Бодрящее" },
],
};
/* Фирменные «хвосты» для однострочного описания по профилям */
/* Перевод вкуса для гостей: часть из названий миксов пришла на английском,
поэтому даём русское прочтение каждого вкуса. */
export const FLAVOR_TRANSLATIONS: Record<string, string> = {
"white-grape": "Белый виноград",
"blueberry-bb": "Голубика",
"lemon-shock": "Ультракислый лимон",
"pineapple-bb": "Сочный ананас",
"mango-bb": "Сочное манго",
bananini: "Банан",
brownie: "Шоколадный брауни",
"pistachio-ice-snow": "Фисташковое мороженое",
basilic: "Базилик",
"classic-cola": "Классическая кола",
"honey-melon": "Медовая дыня",
pinkman: "Клубника, малина и грейпфрут",
"pear-lemon-tarhun": "Груша, лимон и тархун",
"cookie-uc": "Печенье",
"green-day": "Яблоко, киви и кислинка",
"bliss-lime": "Лайм",
"bliss-pomelo": "Помело",
"bliss-mango-chamomile": "Манго-ромашка",
"bliss-strawberry": "Клубника",
frost: "Холодок (Super Frost)",
};
export const PROFILE_TAILS: Record<ProfileId, string[]> = {
fresh: ["свежесть до утра", "ледяной и чистый финиш", "прохлада с первой затяжки"],
dessert: ["для долгих разговоров", "густое сладкое послевкусие", "мягкий десертный дым"],
tropical: ["как закат у бара", "сочный тропический характер", "волна спелых фруктов"],
berry: ["яркая ягодная волна", "сочная ягодная кислинка", "спелые ягоды в каждом вдохе"],
citrus: ["бодрая цитрусовая искра", "звонкая кислинка на выдохе", "энергия чистого цитруса"],
};
+72
View File
@@ -0,0 +1,72 @@
/**
* Реестр фотографий, которые реально присутствуют в public/menu.
* Ключи — id позиций меню, поэтому фотографию нельзя случайно привязать к соседнему товару.
*
* Для авторского чая используются файлы из того же набора изображений:
* названия фотографий исторически отличаются от названий позиций в каталоге,
* но визуально и по составу соответствуют конкретным позициям.
*/
export const menuPhotos: Record<string, string> = {
// Авторский чай
"blackberry-mint": "./menu/myatnaya-ezhevika.avif",
"raspberry-mint": "./menu/myatnaya-malina.avif",
"seabuckthorn-orange": "./menu/osennyaya-oblepikha.avif",
"seabuckthorn-cinnamon": "./menu/pryanyy-apelsin.avif",
"forest-berries": "./menu/yagodnyy-vzryv.avif",
"mango-seabuckthorn": "./menu/mangovyy-ray.avif",
"raspberry-ginger": "./menu/malinovyy-s-imbirem.avif",
// Пивная карта
bud: "./menu/bud.avif",
"kozel-dark": "./menu/kozel-temnyy.avif",
"stary-melnik-light": "./menu/staryy-melnik-svetloe.avif",
"krone-blanche": "./menu/krone-blanche.avif",
erzmann: "./menu/erzmann.avif",
"el-capulco": "./menu/el-capulco.avif",
stella: "./menu/stella.avif",
"kozel-light": "./menu/kozel-svetlyy.avif",
"stary-melnik-dark": "./menu/staryy-melnik-temnoe.avif",
"pablos-lime": "./menu/pablo-s-s-sokom-layma.avif",
redds: "./menu/redd-s.avif",
spaten: "./menu/spatten.avif",
hoegaarden: "./menu/hoegaarden.avif",
"corona-extra": "./menu/corona-extra.avif",
// Закуски
"onion-rings": "./menu/lukovye-koltsa.avif",
fries: "./menu/kartofel-fri.avif",
"buffalo-wings": "./menu/krylyshki-baffalo.avif",
"cheese-sticks": "./menu/syrnye-palochki.avif",
strips: "./menu/stripsy.avif",
nuggets: "./menu/nagetsy.avif",
// Напитки и десерты
"black-tea": "./menu/chernyy-chay.avif",
"black-tea-thyme": "./menu/chernyy-chay-s-chabretsom.avif",
"milk-oolong": "./menu/molochnyy-ulun.avif",
americano: "./menu/amerikano.avif",
cappuccino: "./menu/kapuchino.avif",
"cheesecake-ny": "./menu/chizkeyk-nyu-york.avif",
"red-velvet": "./menu/tort-krasnyy-barkhat.avif",
medovik: "./menu/tort-medovik.avif",
"cheesecake-strawberry": "./menu/chizkeyk-nyu-york-klubnichnyy.avif",
"cheesecake-raspberry": "./menu/chizkeyk-nyu-york-malina.avif",
// Снеки и сладости
"alpen-gold": "./menu/alpen-gold.avif",
milka: "./menu/milka.avif",
leys: "./menu/chipsy-leys.avif",
korochki: "./menu/3-korochki.avif",
hrustim: "./menu/khrustim-team.avif",
// Лимонады и энергетики
"natakhtari-pear": "./menu/natakhtari-grusha.avif",
"strawberry-kiwi": "./menu/klubnika-kivi.avif",
feijoa: "./menu/feykhoa.avif",
"natakhtari-feijoa": "./menu/natakhtari-feykhoa.avif",
"natakhtari-saperavi": "./menu/natakhtari-saperavi.avif",
"burn-original": "./menu/burn-originalnyy.avif",
"adrenaline-rush": "./menu/adrenaline-rush-absolyutnaya-energiya.avif",
"burn-apple-kiwi": "./menu/burn-yabloko-kivi.avif",
"burn-mango": "./menu/burn-so-vkusom-mango.avif",
};
+94
View File
@@ -0,0 +1,94 @@
export interface TeaItem {
id: string;
name: string;
category: string;
volume: string;
price: number;
priceFormatted: string;
desc: string;
ingredients: string[];
accentColor: string; // Неоновый цвет рамки
}
export const TEA_CATEGORY = "АВТОРСКИЙ ЧАЙ";
export const authorTeas: TeaItem[] = [
{
id: "blackberry-mint",
name: "Ежевика-мята",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Глубокий рубиновый настой спелой ежевики со свежей мятой. Освежающий, с лёгкой природной кислинкой и долгим послевкусием.",
ingredients: ["Спелая ежевика", "Перечная мята", "Чайный сбор", "Тростниковый сахар"],
accentColor: "#a855f7",
},
{
id: "raspberry-mint",
name: "Малина-мята",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Нежный ягодный чай на основе сочной лесной малины и ароматных мятных листьев. Согревающий и насыщенный вкус.",
ingredients: ["Лесная малина", "Свежая мята", "Цветочный чай", "Натуральный сироп"],
accentColor: "#ec4899",
},
{
id: "seabuckthorn-orange",
name: "Облепиха-апельсин",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Золотистый витаминный чай с сочными кружочками апельсина и отборной сибирской облепихой. Яркий цитрусовый заряд.",
ingredients: ["Ягоды облепихи", "Свежий апельсин", "Апельсиновый сок", "Мёд"],
accentColor: "#f59e0b",
},
{
id: "seabuckthorn-cinnamon",
name: "Облепиха-корица",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Пряный согревающий купаж с цельными палочками корицы, кружками апельсина и яркой облепихой. Идеально под вечерний кальян.",
ingredients: ["Облепиха", "Палочки корицы", "Дольки апельсина", "Гвоздика", "Мёд"],
accentColor: "#f97316",
},
{
id: "forest-berries",
name: "Лесные ягоды",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Густой ягодный микс из спелой ежевики и малины. Насыщенный цвет, природная сладость и лёгкая ягодная терпкость.",
ingredients: ["Ежевика", "Малина", "Чёрный байховый чай", "Ягодный концентрат"],
accentColor: "#d946ef",
},
{
id: "mango-seabuckthorn",
name: "Манго-облепиха",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Экзотический микс нежной мякоти манго и сибирской облепихи. Солнечный тропический вкус с бархатистой текстурой.",
ingredients: ["Кусочки спелого манго", "Облепиха", "Тропический чай", "Фруктовый нектар"],
accentColor: "#eab308",
},
{
id: "raspberry-ginger",
name: "Малина-имбирь",
category: TEA_CATEGORY,
volume: "900 мл",
price: 350,
priceFormatted: "350 ₽",
desc: "Пикантное сочетание спелой малины и тонких слайсов свежего имбиря. Бодрит, согревает и оставляет приятную лёгкую остринку.",
ingredients: ["Малина", "Свежий корень имбиря", "Лимонный сок", "Чайный сбор"],
accentColor: "#ef4444",
},
];
+117
View File
@@ -0,0 +1,117 @@
/* Переводы вкусов для каталога табаков (src/data/catalog.ts).
Ключ — id табака из массива tobaccoFlavors.
Показывается на карточке как «Перевод вкуса», чтобы гость сразу понимал,
что кроется за английским названием. */
export const tobaccoTranslations: Record<string, string> = {
/* ---------------- Blackburn ---------------- */
"bb-cola": "Классическая кола",
"bb-lulo": "Луло (колумбийский цитрус)",
"bb-real-pf": "Маракуйя",
"bb-white-grape": "Белый виноград",
"bb-forest-raspberry": "Лесная малина",
"bb-brownie": "Шоколадный брауни",
"bb-blackberry-lemonade": "Ежевичный лимонад",
"bb-lemon-shock": "Ультракислый лимон",
"bb-blueberry": "Голубика",
"bb-apple-shock": "Кислое зелёное яблоко",
"bb-red-energy": "Энергетик",
"bb-kiwi-stoner": "Смузи из киви",
"bb-bananini": "Банан",
"bb-honey-melon": "Медовая дыня",
"bb-pineapple": "Сочный ананас",
"bb-grape-lollipop": "Виноградный чупа-чупс",
"bb-fir": "Ёлка (хвоя)",
"bb-red-orange": "Красный апельсин",
"bb-juicy-mango": "Сочное манго",
"bb-basilic": "Базилик",
"bb-berry-sorbet": "Ягодный сорбет с грейпфрутом",
"bb-ananas-shock": "Кислый ананас",
"bb-after-8": "Шоколад-мята",
"bb-overdose": "Лимон-лайм",
"bb-pina-colada": "Пина-колада",
"bb-pistachio-ice-snow": "Фисташковое мороженое",
"bb-pomelo": "Помело",
"bb-pear-lemonade": "Грушевый лимонад",
/* ---------------- Overdose ---------------- */
"od-lost-futura": "Мускусная вишня",
"od-frustyle": "Кактус-лайм",
"od-black-banano": "Амбровый банан",
"od-gin-cucumber": "Огуречный джин",
/* ---------------- Banger ---------------- */
"banger-black-white": "Печенье «Орео»",
"banger-cream-soda": "Крем-сода",
"banger-sexy": "Грейпфрут, клубника и малина",
"banger-grapefruit": "Грейпфрут",
"banger-green-day": "Яблоко, киви и кислинка",
"banger-cola-bella": "Ванильная кола",
/* ---------------- Undercoal ---------------- */
"uc-pinkman": "Клубника, малина и грейпфрут",
"uc-coconut-shake": "Кокосовый шейк",
"uc-caribbean-rum": "Карибский ром",
"uc-mango-rose": "Манго, маракуйя, личи и роза",
"uc-tropical-juice": "Тропический сок",
"uc-cactus-kiwi": "Кактус, киви и абсент",
"uc-milky-oolong": "Чай «Молочный улун»",
"uc-cranberry": "Клюква",
"uc-pear-tarragon": "Груша, лимон и тархун",
"uc-cinnamon-roll": "Коричная булочка",
"uc-cookie": "Печенье",
/* ---------------- Darkside ---------------- */
"ds-alpine-trip": "Хвоя, фейхоа и эвкалипт",
/* ---------------- Хулиган / WOOD ---------------- */
"wood-begemot": "Бергамот-мандарин",
"wood-boo": "Яблоко-гранат",
"wood-old": "Лимон с мёдом",
"wood-berry-ninja": "Лесные ягоды",
"wood-sir-hard": "Воздушный рис",
/* ---------------- Hupreme ---------------- */
"hupreme-milk-tea": "Чай с молоком",
"hupreme-gooseberry": "Крыжовник",
"hupreme-guava": "Гуава",
/* ---------------- JENT Alcohol Line ---------------- */
"jent-blue-agave": "Текила «Бум»",
"jent-havana": "Мохито",
"jent-cuba-libre": "Куба-Либре",
/* ---------------- DEUS ---------------- */
"deus-blackberry-wine": "Ежевичное вино",
"deus-guinness": "Тёмное пиво",
"deus-peonies": "Пионы",
"deus-violet-zephyr": "Фиалковый зефир",
"deus-cherry-jelly": "Вишнёвое желе",
"deus-pumpkin-pie": "Тыквенный пирог с миндалём",
"deus-blueberry-yogurt": "Черничный йогурт",
"deus-base": "Чистый табачный лист",
"deus-champagne": "Игристое вино (шампанское)",
/* ---------------- Северный ---------------- */
"north-flower": "Цветочный микс",
"north-feijoa": "Фейхоа с перцем",
"north-elderberry": "Бузина",
"north-sorbet": "Фруктовый сорбет",
/* ---------------- Bliss ---------------- */
"bliss-mango-chamomile": "Манго-ромашка",
"bliss-peach-yogurt": "Персик-йогурт",
"bliss-lime": "Лайм",
"bliss-love-shot": "Маракуйя, арбуз, лимон с холодком",
/* ---------------- Остальные ---------------- */
"muassel-cinnamon-gum": "Жвачка с корицей",
"chabacco-strawberry-milksake": "Клубничный милкшейк",
"joy-kiwichanga": "Киви и фейхоа",
"hooligan-grapefruit": "Грейпфрутовый сок",
"sarma-drunk-pear": "Дачная груша",
"sarma-corn-paprika": "Кукуруза с паприкой",
"hooligan-flash": "«Флеш» (медовая малина)",
"add-north": "Бустер «Север» (ароматизатор)",
"add-cooling": "Холодок (ароматизатор)",
};