// icons.jsx — единый набор линейных иконок «Файндли»
// Стиль: 24x24, обводка currentColor, без заливки, скруглённые концы.
// Экспортирует window.Icon — <Icon name="search" className="w-5 h-5" stroke={1.75} />

const ICON_PATHS = {
  // --- интерфейс ---
  search: <><circle cx="11" cy="11" r="7" /><path d="m20 20-3.2-3.2" /></>,
  sliders: <><path d="M4 7h10M18 7h2M4 17h2M10 17h10" /><circle cx="16" cy="7" r="2.2" /><circle cx="8" cy="17" r="2.2" /></>,
  calendar: <><rect x="3.5" y="4.5" width="17" height="16" rx="2.5" /><path d="M3.5 9h17M8 3v3M16 3v3" /></>,
  clock: <><circle cx="12" cy="12" r="8.5" /><path d="M12 7.5V12l3 2" /></>,
  pin: <><path d="M12 21c4-4.5 7-7.7 7-11a7 7 0 1 0-14 0c0 3.3 3 6.5 7 11Z" /><circle cx="12" cy="10" r="2.5" /></>,
  star: <><path d="M12 4.5l2.2 4.6 5 .6-3.7 3.4 1 4.9L12 16.1 7.5 18.5l1-4.9L4.8 9.7l5-.6L12 4.5Z" /></>,
  shield: <><path d="M12 3.5l7 2.5v5c0 4.3-3 7.7-7 9.5-4-1.8-7-5.2-7-9.5v-5l7-2.5Z" /><path d="m9 12 2 2 4-4.2" /></>,
  share: <><circle cx="6.5" cy="12" r="2.5" /><circle cx="17.5" cy="6" r="2.5" /><circle cx="17.5" cy="18" r="2.5" /><path d="m8.7 10.8 6.6-3.6M8.7 13.2l6.6 3.6" /></>,
  siren: <><path d="M5 19v-5a7 7 0 0 1 14 0v5" /><path d="M4 19h16M12 3v2M12 11v3" /></>,
  flag: <><path d="M5 21V4M5 5h11l-2 3 2 3H5" /></>,
  plus: <><path d="M12 5v14M5 12h14" /></>,
  pencil: <><path d="M4 20h4L18.5 9.5a2 2 0 0 0-2.8-2.8L5 17.2 4 20Z" /><path d="M14 8.5l2.5 2.5" /></>,
  user: <><circle cx="12" cy="8" r="3.5" /><path d="M5.5 20a6.5 6.5 0 0 1 13 0" /></>,
  users: <><circle cx="9" cy="8" r="3.2" /><path d="M3.5 20a5.5 5.5 0 0 1 11 0" /><path d="M16 5.2a3.2 3.2 0 0 1 0 6.1M17.5 14.4A5.5 5.5 0 0 1 20.5 19.5" /></>,
  userX: <><circle cx="8" cy="7.5" r="2.6" /><path d="M3 19a5 5 0 0 1 10 0" /><path d="M14.5 8l6.5 6.5M21 8l-6.5 6.5" /></>,
  home: <><path d="M4 11l8-6.5 8 6.5" /><path d="M6 9.8V20h12V9.8" /><path d="M10 20v-5h4v5" /></>,
  bell: <><path d="M6 16V11a6 6 0 0 1 12 0v5l1.5 2.5H4.5L6 16Z" /><path d="M10 20a2 2 0 0 0 4 0" /></>,
  chevronRight: <><path d="m9 5 7 7-7 7" /></>,
  chevronLeft: <><path d="m15 5-7 7 7 7" /></>,
  chevronDown: <><path d="m5 9 7 7 7-7" /></>,
  arrowRight: <><path d="M4 12h15M13 6l6 6-6 6" /></>,
  heart: <><path d="M12 20S4 14.5 4 9.2A4.2 4.2 0 0 1 12 7a4.2 4.2 0 0 1 8 2.2C20 14.5 12 20 12 20Z" /></>,
  message: <><path d="M5 18.5 4 21l3-1.2A8 8 0 1 0 4 13a7.6 7.6 0 0 0 1 4.5Z" /></>,
  mail: <><rect x="3" y="5.5" width="18" height="13" rx="3" /><path d="m4.5 7.5 7.5 5.7 7.5-5.7" /></>,
  sun: <><circle cx="12" cy="12" r="4" /><path d="M12 3v2M12 19v2M3 12h2M19 12h2M5.6 5.6l1.4 1.4M17 17l1.4 1.4M18.4 5.6 17 7M7 17l-1.4 1.4" /></>,
  moon: <><path d="M20 14.5A8 8 0 1 1 9.5 4 6.5 6.5 0 0 0 20 14.5Z" /></>,
  lock: <><rect x="5" y="11" width="14" height="9" rx="2.5" /><path d="M8 11V8a4 4 0 0 1 8 0v3" /></>,
  check: <><path d="m5 12 4.5 4.5L19 7" /></>,
  x: <><path d="M6 6l12 12M18 6 6 18" /></>,
  eye: <><path d="M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12Z" /><circle cx="12" cy="12" r="2.8" /></>,
  sparkle: <><path d="M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8L12 3Z" /></>,
  telegram: <><path d="M21 5 3.5 11.5l5 1.8 1.8 5.2 2.7-3.3" /><path d="m8.5 13.3 9-6.6-6.2 7.3" /></>,
  telegramBrand: <><circle cx="12" cy="12" r="10" fill="currentColor" stroke="none" /><path d="m6.3 11.5 9.7-3.8c.5-.2.9.1.7.8l-1.6 7.4c-.1.5-.5.6-.9.4l-2.4-1.8-1.2 1.1c-.1.1-.2.2-.5.2l.2-2.5 4.6-4.2c.2-.2 0-.3-.3-.1l-5.7 3.6-2.5-.8c-.6-.2-.6-.5-.1-.7Z" fill="white" stroke="none" /></>,
  send: <><path d="M21 4 3 11l6.5 2.5L12 20l3-6 6-10Z" /><path d="m9.5 13.5 5.5-5.5" /></>,
  image: <><rect x="3.5" y="4.5" width="17" height="15" rx="2.5" /><circle cx="9" cy="10" r="1.9" /><path d="M5 18l5-5 4 3.5L17 13l3 3" /></>,
  ticket: <><path d="M4 8.5A2.5 2.5 0 0 1 6.5 6h11A2.5 2.5 0 0 1 20 8.5a2 2 0 0 0 0 7A2.5 2.5 0 0 1 17.5 18h-11A2.5 2.5 0 0 1 4 15.5a2 2 0 0 0 0-7Z" /><path d="M12 7v3M12 14v3" /></>,
  help: <><circle cx="12" cy="12" r="8.5" /><path d="M9.5 9.2a2.6 2.6 0 0 1 5 .9c0 1.7-2.5 2.2-2.5 3.9" /><path d="M12 17h.01" /></>,
  trash: <><path d="M4 7h16M9 7V5a1.5 1.5 0 0 1 1.5-1.5h3A1.5 1.5 0 0 1 15 5v2M6 7l1 12.5a1.5 1.5 0 0 0 1.5 1.4h7a1.5 1.5 0 0 0 1.5-1.4L18 7M10 11v6M14 11v6" /></>,
  archive: <><rect x="3.5" y="4.5" width="17" height="4.5" rx="1.5" /><path d="M5 9v9.5A1.5 1.5 0 0 0 6.5 20h11a1.5 1.5 0 0 0 1.5-1.5V9M9.5 13h5" /></>,
  smile: <><circle cx="12" cy="12" r="8.5" /><path d="M9 14c.8 1 1.8 1.5 3 1.5s2.2-.5 3-1.5" /><path d="M9 9.5h.01M15 9.5h.01" /></>,
  paperclip: <><path d="M20 11.5 12 19.5a4.5 4.5 0 0 1-6.4-6.4l8-8a3 3 0 0 1 4.3 4.3l-7.8 7.8a1.5 1.5 0 0 1-2.2-2.1l7-7" /></>,
  info: <><circle cx="12" cy="12" r="8.5" /><path d="M12 11v5M12 8h.01" /></>,
  minus: <><path d="M5 12h14" /></>,
  dots: <><circle cx="6" cy="12" r="1.4" fill="currentColor" stroke="none" /><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none" /><circle cx="18" cy="12" r="1.4" fill="currentColor" stroke="none" /></>,
  // --- заглавные категории (единый линейный набор, 24×24, без эмодзи) ---
  cat_social:   <><circle cx="9" cy="9" r="3" /><path d="M3.5 19a5.5 5.5 0 0 1 11 0" /><path d="M16 5.6a3 3 0 0 1 0 5.8M17.6 13.4A5.5 5.5 0 0 1 20.5 19" /></>,
  cat_city:     <><path d="M3 21h18" /><path d="M6 21V6l6-3v18" /><path d="M12 21V9l6 3v9" /><path d="M9 8h.01M9 12h.01M9 16h.01" /></>,
  cat_nature:   <><path d="M3 19h18" /><path d="m4.5 19 5.5-9 3.5 5 1.5-2.5 4.5 6.5" /><circle cx="17" cy="6" r="2" /></>,
  cat_sport:    <><path d="M3 9v6M6 7v10M18 7v10M21 9v6" /><path d="M6 12h12" /></>,
  cat_games:    <><rect x="4" y="4" width="16" height="16" rx="4" /><circle cx="9" cy="9" r="1.1" fill="currentColor" stroke="none" /><circle cx="15" cy="9" r="1.1" fill="currentColor" stroke="none" /><circle cx="9" cy="15" r="1.1" fill="currentColor" stroke="none" /><circle cx="15" cy="15" r="1.1" fill="currentColor" stroke="none" /></>,
  cat_culture:  <><path d="M12 3.5a8.5 8.5 0 1 0 0 17c1.4 0 1.9-1 1.9-1.9s-.9-1.4-.9-2.4 1-1.5 2-1.5h1a2.8 2.8 0 0 0 2.8-2.8c0-3.8-3-6.4-6.8-6.4Z" /><circle cx="8.5" cy="10" r="1" fill="currentColor" stroke="none" /><circle cx="12" cy="8" r="1" fill="currentColor" stroke="none" /><circle cx="15.5" cy="10.5" r="1" fill="currentColor" stroke="none" /></>,
  cat_study:    <><path d="M12 6v14" /><path d="M12 6C9.8 4.5 6.5 4.5 4 5v13c2.5-.5 5.8-.5 8 1 2.2-1.5 5.5-1.5 8-1V5c-2.5-.5-5.8-.5-8 1Z" /></>,
  cat_business: <><rect x="3" y="7" width="18" height="13" rx="2.5" /><path d="M8 7V5.5A1.5 1.5 0 0 1 9.5 4h5A1.5 1.5 0 0 1 16 5.5V7" /><path d="M3 12.5h18" /></>,
  cat_trips:    <><path d="M4 16v-3l2-5h12l2 5v3" /><path d="M3 16h18v2.5h-2.5V16M5.5 18.5H3V16" /><circle cx="7.5" cy="16" r="1.6" /><circle cx="16.5" cy="16" r="1.6" /></>,
  cat_hobby:    <><path d="M12 20v-7" /><path d="M12 13C12 9.3 9.2 7 5 7c0 3.7 2.8 6 7 6Z" /><path d="M12 11.5c0-3 2.3-5 6-5 0 3.3-2.5 5.3-6 5Z" /></>,
  cat_misc:     <><circle cx="12" cy="12" r="8.5" /><path d="m15.5 8.5-2 5-5 2 2-5 5-2Z" /></>,
  cat_travel:   <><circle cx="12" cy="12" r="8.5" /><path d="M3.5 12h17" /><path d="M12 3.5c2.5 2.6 3.8 5.5 3.8 8.5S14.5 17.9 12 20.5C9.5 17.9 8.2 15 8.2 12S9.5 6.1 12 3.5Z" /></>,
  cat_sea:      <><path d="M3 16c1.6 0 1.6 1.4 3.2 1.4S7.8 16 9.5 16s1.6 1.4 3.2 1.4S14.3 16 16 16s1.6 1.4 3.2 1.4S20.4 16 21 16" /><path d="M3 20c1.6 0 1.6 1.4 3.2 1.4S7.8 20 9.5 20s1.6 1.4 3.2 1.4S14.3 20 16 20s1.6 1.4 3.2 1.4" /><path d="M12 13V5l5 2.5-5 2" /></>,
  cat_content:  <><rect x="3" y="6.5" width="13" height="11" rx="2.5" /><path d="m16 10 5-2.5v9L16 14" /><circle cx="8.5" cy="12" r="2.2" /></>,
  cat_winter:   <><path d="M12 3v18M4.2 7.5l15.6 9M19.8 7.5l-15.6 9" /><path d="m9.5 4.5 2.5 2 2.5-2M9.5 19.5l2.5-2 2.5 2" /></>,
  cat_teamsport:<><circle cx="12" cy="12" r="8.5" /><path d="M12 8.2l3.4 2.5-1.3 4h-4.2l-1.3-4L12 8.2Z" /><path d="M12 8.2V3.6M15.4 10.7l3.9-1.3M8.6 10.7 4.7 9.4M13.9 14.7l2.5 3.4M10.1 14.7l-2.5 3.4" /></>,
  cat_wheels:   <><circle cx="6.5" cy="15.5" r="3.5" /><circle cx="17.5" cy="15.5" r="3.5" /><path d="M6.5 15.5 10 9h4.5l3 6.5M9 9h6.5M8.5 6.5h2L12 9" /></>,
  cat_auto:     <><path d="M3.5 15.5 5 10.8A2 2 0 0 1 6.9 9.5h10.2a2 2 0 0 1 1.9 1.3l1.5 4.7" /><path d="M3.5 15.5h17V18h-2.2v-1.2H5.7V18H3.5v-2.5Z" /><circle cx="7.6" cy="15.6" r="1.3" /><circle cx="16.4" cy="15.6" r="1.3" /><path d="M6.8 12.2h10.4" /></>,
  cat_extreme:  <><path d="M13.5 2.5 5.5 13H10l-1.2 8.5L19 10.5h-5l1.5-8Z" /></>,
  cat_martial:  <><path d="M8 7.5a3.5 3.5 0 0 1 3.5-3.5H13a5 5 0 0 1 5 5v2.5a3 3 0 0 1-3 3H9.5" /><path d="M8 7.5H6.5A2.5 2.5 0 0 0 4 10v.5A2.5 2.5 0 0 0 6.5 13H8" /><path d="M9.5 14v4A1.8 1.8 0 0 0 11.3 20h4A1.8 1.8 0 0 0 17 18.2V14" /></>,
  cat_tactical: <><circle cx="12" cy="12" r="8" /><circle cx="12" cy="12" r="3.8" /><path d="M12 1.8v3.2M12 19v3.2M1.8 12H5M19 12h3.2" /><circle cx="12" cy="12" r="0.8" fill="currentColor" stroke="none" /></>,
  cat_dance:    <><circle cx="13.5" cy="4.8" r="2" /><path d="M13.5 6.8 11 12l3.2 1.8L13 20" /><path d="M11 12 6.5 10.5M14.2 13.8 18 16M6.5 10.5 4.5 14.5" /></>,
  cat_music:    <><path d="M9 17V6l10-2v11" /><circle cx="6.5" cy="17.5" r="2.5" /><circle cx="16.5" cy="15.5" r="2.5" /><path d="M9 8.5l10-2" /></>,
  cat_craft:    <><circle cx="7" cy="7" r="2.5" /><circle cx="7" cy="17" r="2.5" /><path d="M9 8.5 20 17M9 15.5 20 7M9.2 8.3l5.5 4.2" /></>,
  cat_food:     <><path d="M8 3v6.5a2 2 0 0 0 2 2M8 3v5M10.2 3v5M10 11.5V21" /><path d="M16.5 3c-1.4 0-2.3 2-2.3 4.6 0 2.2.9 3.4 2.3 3.6V21" /></>,
  cat_geek:     <><path d="M12 4C8.3 4 6 6.6 6 10.2c0 3.6 2.6 6.2 3.9 7.9.8 1.1 1.2 1.5 2.1 1.5s1.3-.4 2.1-1.5C16.4 16.4 18 13.8 18 10.2 18 6.6 15.7 4 12 4Z" /><path d="M9 10.3c.7.8 1.5 1.1 1.5 1.1M15 10.3c-.7.8-1.5 1.1-1.5 1.1" /></>,
  cat_science:  <><circle cx="12" cy="12" r="2" /><ellipse cx="12" cy="12" rx="9" ry="3.6" /><ellipse cx="12" cy="12" rx="9" ry="3.6" transform="rotate(60 12 12)" /><ellipse cx="12" cy="12" rx="9" ry="3.6" transform="rotate(120 12 12)" /></>,
  cat_wellness: <><path d="M12 20c0-4.5 2-7.5 2-7.5s2 3 2 5.5" /><path d="M12 20c0-4.5-2-7.5-2-7.5s-2 3-2 5.5" /><path d="M12 20c3.5 0 6.5-1.8 6.5-4.5 0 0-2.8-.4-4.5 1.2" /><path d="M12 20c-3.5 0-6.5-1.8-6.5-4.5 0 0 2.8-.4 4.5 1.2" /><path d="M12 20V10.5s-1.5 1.5-2 3.5M12 10.5s1.5 1.5 2 3.5" /></>,
  cat_family:   <><circle cx="8" cy="6.5" r="2.5" /><path d="M4 19v-2.5a4 4 0 0 1 8 0V19" /><circle cx="16.8" cy="9.5" r="1.9" /><path d="M13.8 19v-2a3 3 0 0 1 6 0v2" /></>,
  cat_animals:  <><circle cx="7" cy="10.5" r="1.7" /><circle cx="11" cy="8" r="1.7" /><circle cx="15" cy="8" r="1.7" /><circle cx="17.5" cy="11.5" r="1.5" /><path d="M9 15.5c1.1-1.9 2.3-2.9 3.5-2.9s2.4 1 3.5 2.9c1 1.7.2 3.4-1.6 3.4-1 0-1.4-.4-1.9-.4s-.9.4-1.9.4c-1.8 0-2.6-1.7-1.6-3.4Z" /></>,
  cat_garden:   <><path d="M12 12.5V8.5" /><path d="M12 8.5C12 6 10.2 4.5 7.5 4.5c0 2.5 1.8 4 4.5 4Z" /><path d="M12 9.5c0-2 1.6-3.5 3.8-3.5 0 2-1.6 3.5-3.8 3.5Z" /><path d="M6.5 12.5h11l-1 6.5a1.5 1.5 0 0 1-1.5 1.3H9a1.5 1.5 0 0 1-1.5-1.3l-1-6.5Z" /></>,
};

function Icon({ name, className = "w-5 h-5", stroke = 1.75, style }) {
  const path = ICON_PATHS[name];
  if (!path) return null;
  return (
    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={stroke}
      strokeLinecap="round" strokeLinejoin="round" className={className} style={style} aria-hidden="true">
      {path}
    </svg>
  );
}

// двухуровневые категории — базовый источник правды (можно переопределить в кабинете разработчика)
const BASE_CATEGORIES = [
  { id:"social",   label:"Тусовки и общение",      icon:"cat_social",    hue:18,
    subs:["Вечеринка","Клуб","Квартирник","Кофе","Поболтать","Бар","Посидеть","Завтрак вместе","Обед вместе","Ужин вместе","День рождения","Праздник","Пиво","Бирпонг","Опен-Эйр","Девичник","Мальчишник","Новоселье","Тематическая вечеринка","Пижамная вечеринка","Встреча выпускников","Кальянная","Спонтанная встреча «прямо сейчас»"] },
  { id:"city",     label:"Город и прогулки",       icon:"cat_city",      hue:210,
    subs:["Прогулка по городу","Фотопрогулка","Новые места","Мини-экскурсия","Парк","Сквер","Городской праздник","Мероприятие","Встречаем закат","Встречаем рассвет","Видовая площадка","Стрит-арт тур","Архитектурная прогулка","Ярмарка","Фестиваль","Ночная прогулка"] },
  { id:"nature",   label:"Природа",                icon:"cat_nature",    hue:150,
    subs:["Поход","Хайкинг","Встречаем рассвет","Прогулка на природе","Пикник","База отдыха","Шашлыки","Барбекю","Водопады","Море","Пляж","Купание","Кемпинг с палатками","Охота","Острова","Поездка за город","Сплав по реке","Восхождение","Ночёвка под звёздами","Встречаем закат","Костёр и гитара","Ботанический сад","Скалы и бухты","Многодневный трек","Геокэшинг","Ориентирование","Грибы","Дикоросы: папоротник и черемша","За ягодами"] },
  { id:"sea",      label:"Море и вода",            icon:"cat_sea",       hue:200,
    subs:["Снорклинг","Фридайвинг","Серфинг","Яхтинг","Катер","Гидроцикл","Sup-прогулка","Рыбалка","Дайвинг","Каякинг","Вейксёрфинг","Виндсёрфинг","Кайтсёрфинг","Парусный спорт","Морская прогулка","Морская рыбалка","Подводная охота","Заплывы в открытой воде","Аквапарк"] },
  { id:"winter",   label:"Зима",                   icon:"cat_winter",    hue:225,
    subs:["Каток и коньки","Горные лыжи","Сноуборд","Беговые лыжи","Тюбинг и ватрушки","Снегоступы","Зимний поход","Зимняя рыбалка","Хоккей во дворе","Снежки и снеговики","Моржевание и прорубь"] },
  { id:"sport",    label:"Фитнес и бег",           icon:"cat_sport",     hue:45,
    subs:["Тренировка","Пробежка","Зарядка","Активные игры на воздухе","Паркран","Подготовка к марафону","Трейлраннинг","Скандинавская ходьба","Плавание в бассейне","ОФП","Тренажёрный зал","Кроссфит","Воркаут на турниках"] },
  { id:"teamsport",label:"Спортивные игры",        icon:"cat_teamsport", hue:350,
    subs:["Футбол","Мини-футбол","Волейбол","Пляжный волейбол","Баскетбол и стритбол","Хоккей","Регби","Американский футбол","Бейсбол","Гандбол","Фрисби","Ультимейт фрисби","Лапта","Флорбол","Водное поло","Большой теннис","Настольный теннис","Бадминтон","Сквош","Падел","Пиклбол","Собираем команду","Ищем соперников"] },
  { id:"wheels",   label:"Вело и ролики",          icon:"cat_wheels",    hue:95,
    subs:["Ролики","Велопрогулка","Шоссейный велосипед","МТБ и грунты","Велопоход","Ночной велозаезд","Скейтборд","Лонгборд","Самокаты и электросамокаты","BMX","Моноколесо","Скейт-парк","Учим новичков"] },
  { id:"auto",     label:"Авто и мото",            icon:"cat_auto",      hue:265,
    subs:["Катаемся на авто","Картинг","Квадроциклы","Мотопрогулка","Джип-тур и офроуд","Эндуро","Багги","Автопутешествие","Встреча автолюбителей","Авто-клуб","Ретро-авто","Автозвук"] },
  { id:"extreme",  label:"Экстрим и адреналин",    icon:"cat_extreme",   hue:5,
    subs:["Скалодром","Скалы на природе","Альпинизм","Парапланеризм","Прыжки с парашютом","Роупджампинг","Зиплайн","Аэротруба","Пещеры","Слэклайн","Паркур"] },
  { id:"martial",  label:"Единоборства",           icon:"cat_martial",   hue:30,
    subs:["Бокс","Кикбоксинг","ММА-тренировки","Борьба","Дзюдо и самбо","BJJ","Карате и тхэквондо","Айкидо","Фехтование","Армрестлинг","Ищу спарринг-партнёра"] },
  { id:"tactical", label:"Тактические игры и стрельба", icon:"cat_tactical", hue:75,
    subs:["Пейнтбол","Лазертаг","Страйкбол","Тир","Стрельба из лука","Арбалет","Метание ножей и топоров"] },
  { id:"dance",    label:"Танцы",                  icon:"cat_dance",     hue:320,
    subs:["Сальса","Бачата","Кизомба","Танго","Хастл","Свинг и линди-хоп","Хип-хоп","Брейкинг","Контемпорари","K-pop танцы","Бальные","Народные","Зумба","Социальная вечеринка","Открытый урок для новичков"] },
  { id:"music",    label:"Музыка",                 icon:"cat_music",     hue:250,
    subs:["Джем-сейшн","Ищу музыкантов в группу","Репетиция","Гитара у костра","Караоке","Вокал","Диджеинг","Виниловый вечер","Барабанный круг","Хор","Пишем трек вместе"] },
  { id:"culture",  label:"Культура и искусство",   icon:"cat_culture",   hue:335,
    subs:["Концерт","Живая музыка","Кино","Киновечер","Выставка","Музей","Театр","Опера","Балет","Филармония","Джазовый вечер","Поэтические чтения","Лекторий","Иммерсивный театр","Кинофестиваль","Галереи"] },
  { id:"craft",    label:"Творчество руками",      icon:"cat_craft",     hue:160,
    subs:["Творческая мастерская","Мастер-класс","Рисование и скетчинг","Пленэр","Акварель","Гончарная мастерская","Лепка","Вязание","Шитьё","Вышивка","Макраме","Каллиграфия и леттеринг","Флористика","Свечи и мыловарение","Столярка","Моделизм","Lego-вечер","Оригами","Косплей-крафт","Скрапбукинг","Арт-вечеринка «рисуем и общаемся»"] },
  { id:"food",     label:"Еда и кулинария",        icon:"cat_food",      hue:40,
    subs:["Готовим вместе","Дегустация вина","Кулинарный мастер-класс","Лепим пельмени","Выпечка","Пицца-вечер","Суши-вечер","Веган-ужин","Гастротур по заведениям","Дегустация кофе","Чайная церемония","Дегустация сыра и шоколада","Кондитерка","Фудкорт-тур","Кулинарный поединок"] },
  { id:"games",    label:"Игры и развлечения",     icon:"cat_games",     hue:285,
    subs:["Настолки","Мафия","DnD","Видеоигры","Киберспорт","Квиз","Квест-рум","Стендап","Шахматы","Го","Нарды","Покер","ККИ (MTG и другие)","Пазлы","«Что? Где? Когда?»","VR-клуб","Ретро-гейминг","Консольный вечер","LAN-пати","Симрейсинг","Импровизация","Боулинг","Бильярд","Дартс","Мини-гольф","Гольф","Керлинг","Петанк","Городки"] },
  { id:"geek",     label:"Гик-культура",           icon:"cat_geek",      hue:100,
    subs:["Аниме-вечер","Косплей-сходка","K-pop встречи","Манга и комиксы","Фандомные встречи","Ролевые игры живого действия","Варгеймы и Warhammer","Киномарафон по вселенным","Гик-квиз"] },
  { id:"content",  label:"Создаём контент",        icon:"cat_content",   hue:310,
    subs:["Фотосессия","Видеосъёмка","Съёмка тренда","Поиск моделей","Рилс","ТикТок","Шортс","Подкаст","Стрим","Съёмка с дрона","Плёночная фотография","Астрофото","Таймлапс","Монтаж-вечер","Коллаборация"] },
  { id:"study",    label:"Учёба и развитие",       icon:"cat_study",     hue:175,
    subs:["Языковой разговорный клуб","Книжный клуб","Коворкинг","Учимся вместе","Английский клуб","Китайский клуб","Корейский клуб","Японский клуб","Клуб публичных выступлений","Дебаты","Менторство","Готовимся к экзаменам"] },
  { id:"science",  label:"Наука и технологии",     icon:"cat_science",   hue:205,
    subs:["Наблюдение за звёздами","Научные лекции","Кодинг-митап","Хакатон","Робототехника","3D-печать","Электроника и ардуино","Радиолюбители","Научпоп-квиз","Нейросети"] },
  { id:"business", label:"Бизнес и нетворкинг",    icon:"cat_business",  hue:255,
    subs:["Нетворкинг-встреча","Мастермайнд","Брейншторм","Бизнес-завтрак","Митап","Доклады","Питч","Разбор проектов","Инвестклуб","Фриланс-встречи","Карьерные консультации","Стартап-выходные"] },
  { id:"wellness", label:"Здоровье и практики",    icon:"cat_wellness",  hue:155,
    subs:["Йога","Бани","Сауны","Йога на рассвете","Пилатес","Стретчинг","Медитация","Дыхательные практики","Цигун и тайцзи","Закаливание и ледяные ванны","Женский круг","Мужской клуб","Ретрит выходного дня"] },
  { id:"family",   label:"Семья и дети",           icon:"cat_family",    hue:20,
    subs:["Прогулка с колясками","Вместе на детскую площадку","Семейный пикник","Мастер-классы для детей","Семейный поход","Клуб мам","Клуб пап","Детский праздник","Настолки всей семьёй","Обмен детскими вещами"] },
  { id:"animals",  label:"Животные",               icon:"cat_animals",   hue:90,
    subs:["Выгул собак","Питомцы","Дог-встречи по породам","Дрессировка","Конные прогулки","Котокафе","Помощь приютам","Наблюдение за птицами","Аквариумистика","Выставки животных","Догтрекинг"] },
  { id:"trips",    label:"Поездки и попутки",      icon:"cat_trips",     hue:230,
    subs:["Совместная поездка","Попутчики на трассу","Трансфер в аэропорт","Едем на фестиваль"] },
  { id:"travel",   label:"Путешествия",            icon:"cat_travel",    hue:195,
    subs:["По России","По Приморью","За границу","Выходные в другом городе","Ищу попутчиков в путешествие"] },
  { id:"garden",   label:"Сад и урожай",           icon:"cat_garden",    hue:165,
    subs:["Дача вместе","Комнатные растения","Своп растений","Сбор урожая"] },
  { id:"hobby",    label:"Добрые дела и обмен",    icon:"cat_hobby",     hue:130,
    subs:["Волонтёрство","Эко-субботник","Донорство","Плоггинг — бег и сбор мусора","Помощь пожилым","Благотворительная ярмарка","Своп одежды","Гаражная распродажа","Буккроссинг","Блошиный рынок вместе","Фримаркет","Обмен навыками","Коллекционеры: монеты, марки, винил"] },
  { id:"misc",     label:"Разное",                 icon:"cat_misc",      hue:60,
    subs:["Ищу компанию","Ищу друзей","Другое"] },
];

// Версия набора категорий. Повышай при изменении BASE_CATEGORIES —
// это заставляет игнорировать устаревший сохранённый список (fl-categories),
// иначе старые правки из кабинета разработчика спрятали бы новый список.
const CATEGORIES_VERSION = 2;

// Переопределение из кабинета разработчика (localStorage). Сохраняем порядок,
// названия и подкатегории, но icon берём из базовой категории (иконки фиксированы в коде).
const ICON_FALLBACK = ["cat_social","cat_city","cat_nature","cat_sea","cat_winter","cat_sport","cat_teamsport","cat_wheels","cat_auto","cat_extreme","cat_martial","cat_tactical","cat_dance","cat_music","cat_culture","cat_craft","cat_food","cat_games","cat_geek","cat_content","cat_study","cat_science","cat_business","cat_wellness","cat_family","cat_animals","cat_trips","cat_travel","cat_garden","cat_hobby","cat_misc"];
function loadCategories() {
  try {
    // если сохранённый список от старой версии — используем новый код-список
    const ver = parseInt(localStorage.getItem("fl-categories-version") || "1", 10);
    if (ver !== CATEGORIES_VERSION) return BASE_CATEGORIES;
    const raw = localStorage.getItem("fl-categories");
    if (!raw) return BASE_CATEGORIES;
    const saved = JSON.parse(raw);
    if (!Array.isArray(saved) || !saved.length) return BASE_CATEGORIES;
    const baseById = Object.fromEntries(BASE_CATEGORIES.map(c => [c.id, c]));
    return saved.map((c, i) => ({
      id: c.id,
      label: c.label,
      hue: c.hue != null ? c.hue : (baseById[c.id] ? baseById[c.id].hue : 18),
      icon: (baseById[c.id] && baseById[c.id].icon) || c.icon || ICON_FALLBACK[i % ICON_FALLBACK.length],
      subs: Array.isArray(c.subs) ? c.subs : [],
    }));
  } catch (e) { return BASE_CATEGORIES; }
}
const CATEGORIES = loadCategories();

window.Icon = Icon;
window.BASE_CATEGORIES = BASE_CATEGORIES;
window.CATEGORIES = CATEGORIES;
window.FL_CATEGORIES_VERSION = CATEGORIES_VERSION;
window.FL_ICON_CHOICES = ["cat_social","cat_city","cat_nature","cat_sea","cat_winter","cat_sport","cat_teamsport","cat_wheels","cat_auto","cat_extreme","cat_martial","cat_tactical","cat_dance","cat_music","cat_culture","cat_craft","cat_food","cat_games","cat_geek","cat_content","cat_study","cat_science","cat_business","cat_wellness","cat_family","cat_animals","cat_trips","cat_travel","cat_garden","cat_hobby","cat_misc"];
