const CATEGORIES = ["Tudo", "Feira", "Boteco", "Pizza", "Nordestina", "Lanches", "Japonesa", "Doces"];

const RESTAURANTS = [
  /* Marcas do estúdio (portfólio MATRIZ) dentro do Beco — só neste espelho local. */
  { name: "Clandestino", cuisine: "Boteco", menuKey: "clandestino", lat: -23.5500, lon: -46.6400, prepMin: 14, rating: "4,8", eta: "20–30 min", distance: "0,9 km", deliveryFee: "R$ 0,00",
    brand: {"display":"'Anton', Impact, sans-serif","bg":"#050505","surface":"#131313","surfaceDeep":"#0A0A0A","line":"#262626","line2":"#343434","fg":"#FFFFFF","dim":"#A8A8A8","dimmer":"#7A7A7A","faint":"#585858","paper":"#FFFFFF","accent":"#FF5C1C","gold":"#FF8A50","logo":"../../assets/logo_cl.png","mark":"C","kicker":"Clandestino","sub":"Cidade Baixa · 2019"},
    hero: {"claim":["Chopp gelado,","chapa quente,","pouca conversa."],"accent":1,"lede":"General Lima e Silva, 776. A chapa liga às seis da tarde e a porta fecha às duas. Pede aqui, pega no balcão ou recebe em casa.","about":"Bar de esquina que nunca quis ser outra coisa. Chopp puxado na hora, smash na chapa de ferro e o molho da casa que ninguém copiou até hoje."} },
  { name: "Lanche Certo", cuisine: "Lanches", menuKey: "lanche-certo", lat: -23.5470, lon: -46.6450, prepMin: 12, rating: "4,7", eta: "15–25 min", distance: "1,4 km", deliveryFee: "R$ 0,00",
    brand: {"display":"'Anton', Impact, sans-serif","bg":"#1A1A1A","surface":"#262322","surfaceDeep":"#100F0E","line":"#3A3634","line2":"#4A4542","fg":"#F5F0E8","dim":"#B8AE9E","dimmer":"#8A8074","faint":"#66605A","paper":"#F5F0E8","accent":"#F2B705","gold":"#F2B705","logo":"../../assets/logo_lc.png","mark":"LC","kicker":"Lanche","sub":"Certo · desde 2015"},
    hero: {"claim":["O lanche certo","no preço certo.","Desde sempre."],"accent":1,"lede":"Marechal Floriano, 840, no Centro. Xis na chapa, dog completo e torrada quente, do jeito que a casa faz há dez anos.","about":"Agora tu pede direto, sem app de meio: o preço do balcão é o preço da entrega. Xis salada é o mais pedido desde o primeiro dia."} },
  { name: "Beco Bar", lat: -23.5535, lon: -46.6890, prepMin: 15, cuisine: "Boteco", rating: "4,8", eta: "25–35 min", distance: "1,2 km", deliveryFee: "R$ 0,00", badge: "Novo", hero: {"claim":["O boteco","de esquina","que não fecha."],"accent":1,"lede":"Rua Aurora, 91. Chopp gelado e chapa quente desde 1998. Agora você pede direto, sem app de meio.","about":"Abriu como bar de operário na Aurora e virou ponto de quem sai tarde. Chopp puxado na hora, porção na chapa e o molho da casa que ninguém copiou até hoje."} },
  { name: "Dona Ivone", brand: {"display":"'Bitter', Georgia, serif","bg":"#141010","surface":"#241A16","surfaceDeep":"#1C1310","line":"#3C2B24","line2":"#4D3830","fg":"#F6ECDD","dim":"#AE9276","dimmer":"#846A52","faint":"#63503D","paper":"#F6ECDD","accent":"#C25B32","gold":"#E4C067","mark":"DI","kicker":"Dona","sub":"Garanhuns · 1996"}, lat: -23.5680, lon: -46.6320, prepMin: 25, cuisine: "Nordestina", rating: "4,9", eta: "30–40 min", distance: "2,4 km", deliveryFee: "R$ 6,90", hero: {"claim":["Comida","de casa,","do Norte."],"accent":1,"lede":"Rua do Arouche, 220. Panela de barro, tempero de quintal, prato servido cheio.","about":"Dona Ivone cozinha o que aprendeu em Garanhuns: baião cremoso, carne de sol na manteiga de garrafa e macaxeira que desmancha. Tudo feito no dia."} },
  { name: "Pastel do Zé", lat: -23.5480, lon: -46.6420, prepMin: 10, cuisine: "Lanches", rating: "4,6", eta: "15–25 min", distance: "0,8 km", deliveryFee: "R$ 0,00", brand: {"display":"'Alfa Slab One', Georgia, serif","bg":"#16100A","surface":"#221808","surfaceDeep":"#1B1206","line":"#3B2A14","line2":"#4C3719","fg":"#F4E9D4","dim":"#A88F68","dimmer":"#7A6547","faint":"#5C4A31","paper":"#F4E9D4","accent":"#C4372A","gold":"#E7B23A","mark":"ZÉ","kicker":"Pastel do","sub":"feira · 2003"}, hero: {"claim":["O pastel","mais fino","da feira."],"accent":1,"lede":"Praça Benedito Calixto, 12. Massa aberta na hora, óleo limpo, recheio na medida.","about":"Zé abre a massa na frente do cliente há vinte e dois anos. Nada congela: o que sobra da feira volta pra casa e o dia seguinte começa do zero."} },
  { name: "Forno da Vila", brand: {"display":"'Staatliches', Impact, sans-serif","bg":"#12100E","surface":"#201C17","surfaceDeep":"#181410","line":"#342C24","line2":"#463A2E","fg":"#F5EFE2","dim":"#A79579","dimmer":"#7E6E56","faint":"#5E5140","paper":"#F5EFE2","accent":"#D9541F","gold":"#EAD9B0","mark":"FV","kicker":"Forno da","sub":"lenha · 2004"}, lat: -23.5290, lon: -46.6700, prepMin: 22, cuisine: "Pizza", rating: "4,7", eta: "35–45 min", distance: "3,1 km", deliveryFee: "R$ 8,90", hero: {"claim":["Pizza","de forno","a lenha."],"accent":1,"lede":"Rua Fidalga, 480. Massa de fermentação lenta, lenha de eucalipto, borda sem recheio.","about":"Forno construído em 2004 com tijolo refratário e nunca apagado no fim de semana. Massa descansa 48 horas antes de virar pizza."} },
  { name: "Kome", brand: {"display":"'Zen Antique', Georgia, serif","bg":"#0B0D10","surface":"#151A20","surfaceDeep":"#101419","line":"#232B34","line2":"#2F3A46","fg":"#F2F1EC","dim":"#93A0AE","dimmer":"#6C7885","faint":"#4E5865","paper":"#F2F1EC","accent":"#5C82BE","gold":"#D8CFC0","mark":"米","kicker":"Kome","sub":"8 lugares"}, lat: -23.5870, lon: -46.6480, prepMin: 28, cuisine: "Japonesa", rating: "4,8", eta: "40–50 min", distance: "2,9 km", deliveryFee: "R$ 7,90", hero: {"claim":["Sushi","do balcão,","sem pressa."],"accent":1,"lede":"Rua Treze de Maio, 66. Peixe do dia, arroz temperado no hangiri, oito lugares no balcão.","about":"Balcão pequeno de propósito: o que sai é o que o chef consegue fazer olhando pro cliente. Cardápio muda quando o peixe muda."} },
  { name: "Açúcar Bruto", lat: -23.5610, lon: -46.6710, prepMin: 12, cuisine: "Doces", rating: "4,9", eta: "20–30 min", distance: "1,6 km", deliveryFee: "R$ 0,00", hero: {"claim":["Doce","na medida","do dia."],"accent":1,"lede":"Rua Harmonia, 341. Confeitaria pequena, forno ligado desde as cinco da manhã.","about":"Só entra na vitrine o que sai do forno naquela manhã. Açúcar mascavo, manteiga de verdade e nada de cobertura pra disfarçar."} },
  { name: "Tia Nete", lat: -23.5210, lon: -46.6120, prepMin: 24, cuisine: "Nordestina", rating: "4,7", eta: "35–45 min", distance: "3,4 km", deliveryFee: "R$ 5,90", hero: {"claim":["Baião,","carne de sol","e cuscuz."],"accent":1,"lede":"Rua da Consolação, 1502. Comida de matriarca, porção que serve dois sem combinar.","about":"Nete começou vendendo cuscuz na porta de casa em 1996. Hoje são quatro mesas e a mesma panela de ferro do primeiro dia."} },
  { name: "Bar do Meio", lat: -23.5495, lon: -46.6355, prepMin: 14, cuisine: "Boteco", rating: "4,5", eta: "20–30 min", distance: "0,6 km", deliveryFee: "R$ 0,00", hero: {"claim":["O bar","do meio","do beco."],"accent":1,"lede":"Beco do Batman, 8. Duas mesas na calçada, gelo até fechar, música baixa.","about":"Fica na metade do beco e é onde todo mundo se encontra antes de decidir pra onde vai. Cerveja em copo americano e petisco simples."} }
];

/* FEIRA DO BECO — produtores locais. Não são restaurantes: o eixo do tempo é o ciclo
 * de produção (fornada/lote), não o "agora". `producer` carrega a gramática própria:
 * cadence (o carimbo), next (a próxima fornada), fulfil (retirada/entrega) e sub
 * (assinatura recorrente — o que a recorrência da Feira vende). A página do produtor
 * é a BANCA: o mesmo RestaurantView, lido com esses campos. */
const PRODUCERS = [
  /* Horta do Pet — a Banca por assinatura do portfólio MATRIZ (só neste espelho local). */
  { name: "Horta do Pet", cuisine: "Feira", menuKey: "horta-do-pet",
    lat: -23.5420, lon: -46.6520, rating: "5,0", distance: "2,2 km", deliveryFee: "R$ 0,00",
    producer: { kind: "petiscos naturais pra cachorro", cadence: "TERÇA E SEXTA", next: "TER 09/09", nextLabel: "próxima entrega", nextWord: "entrega", fulfil: "entrega na vila",
      sub: { label: "semanal", desc: "a cesta do teu cachorro toda terça, sem pedir" } },
    brand: {"display":"'Fraunces', Georgia, serif","bg":"#F3ECD9","surface":"#FBF7EC","surfaceDeep":"#EEE4CC","line":"#D9CDAE","line2":"#C9BC9A","fg":"#2C3812","dim":"#5E6B3C","dimmer":"#8A8468","faint":"#A8A184","paper":"#2C3812","accent":"#E67E22","gold":"#4A5D23","logo":"../../assets/logo_hp.png","mark":"HP","kicker":"Horta do","sub":"Pet · quintal"},
    hero: {"claim":["A gente cozinha","pro teu cachorro","como pra gente."],"accent":1,"lede":"Legume colhido de manhã, cozido no vapor à tarde, entregue na vila ainda morno. Terça e sexta.","about":"Sem conservante, sem corante, sem nome esquisito no rótulo. Cinco ingredientes no máximo. Quem assina tem a cesta separada antes da panela esfriar — e pausa quando quiser."} },
  { name: "Banca do Limão", cuisine: "Feira", menuKey: "banca-do-limao",
    lat: -23.5450, lon: -46.6580, rating: "5,0", distance: "1,9 km", deliveryFee: "R$ 0,00",
    producer: { kind: "limoncello artesanal", cadence: "LOTE MENSAL", next: "SEX 05/09", fulfil: "retirada ou entrega",
      sub: { label: "mensal", desc: "uma garrafa por lote, toda primeira sexta" } },
    brand: {"display":"'Bitter', Georgia, serif","bg":"#10140A","surface":"#1B2410","surfaceDeep":"#151C0C","line":"#31401C","line2":"#405226","fg":"#F6F3DA","dim":"#B0B383","dimmer":"#84875F","faint":"#636647","paper":"#F8F4D8","accent":"#B7A424","gold":"#7E9C3C","mark":"L","kicker":"Banca do","sub":"limão · lote 9"},
    hero: {"claim":["Limão,","álcool e","paciência."],"accent":1,"lede":"Feito em casa, em lote pequeno e numerado. Sai quando fica pronto — e avisa quem assina primeiro.","about":"Casca de siciliano, infusão de três semanas no escuro e açúcar na medida. Cada lote é numerado à mão. Não tem estoque: tem fornada. Acabou, é esperar a próxima."} },
  { name: "Forno de Casa", cuisine: "Feira", menuKey: "forno-de-casa",
    lat: -23.5560, lon: -46.6510, rating: "4,9", distance: "1,1 km", deliveryFee: "R$ 0,00",
    producer: { kind: "pão de fermentação natural", cadence: "TODA SEXTA", next: "SEX 29/08", fulfil: "retirada ou entrega",
      sub: { label: "semanal", desc: "teu pão separado toda sexta, sem pedir" } },
    hero: {"claim":["Pão de","fermento","de verdade."],"accent":1,"lede":"Fornada toda sexta de manhã. Fermentação de 24 horas, casca grossa, miolo aberto.","about":"Levain alimentado todo dia há quatro anos. A fornada sai cedo e acaba antes do meio-dia — quem assina tem o pão separado antes de o forno abrir."} },
  { name: "Quitutes da Nona", cuisine: "Feira", menuKey: "quitutes-da-nona",
    lat: -23.5390, lon: -46.6470, rating: "4,8", distance: "2,6 km", deliveryFee: "R$ 5,90",
    producer: { kind: "cuca e schmier de colônia", cadence: "TODA QUARTA", next: "QUA 27/08", fulfil: "retirada ou entrega",
      sub: { label: "semanal", desc: "cuca da semana + um vidro por mês" } },
    hero: {"claim":["Cuca,","schmier e","memória."],"accent":1,"lede":"Receita de colônia, tacho de cobre, fruta da estação. Toda quarta tem fornada.","about":"A nona aprendeu com a mãe dela e não mudou nada: massa descansada de véspera, cobertura grossa e schmier apurado no tacho até o ponto certo."} }
];

/* Tudo que aparece no feed: restaurantes + bancas da Feira. */
const PLACES = [...RESTAURANTS, ...PRODUCERS];

const MENUS = {
  "clandestino": {
    "Da chapa": [
      { name: "Smash 180 g", description: "Blend bovino na chapa de ferro, queijo derretido, pão brioche.", price: "R$ 35,00", tag: "Mais pedido",
        options: [{ title: "Ponto", required: true, choices: [{ name: "Ao ponto", delta: 0 }, { name: "Bem passado", delta: 0 }] },
                  { title: "Adicionais", multi: true, choices: [{ name: "Bacon", delta: 6 }, { name: "Ovo", delta: 4 }] }] },
      { name: "Gladiador duplo", description: "Dois smash, cheddar, cebola caramelizada e molho da casa.", price: "R$ 42,00" },
      { name: "Batata da casa", description: "Rústica, alecrim, sal grosso e maionese de alho.", price: "R$ 19,00" }
    ],
    "Chopp e cia": [
      { name: "Chopp 500 ml", description: "Pilsen puxado na hora, colarinho de dois dedos.", price: "R$ 14,00" },
      { name: "Caipirinha de limão", description: "Limão taiti amassado no copo, açúcar na medida.", price: "R$ 22,00" }
    ]
  },
  "lanche-certo": {
    "Xis": [
      { name: "Xis salada", description: "Hambúrguer na chapa, queijo, ovo, presunto, milho, ervilha e a salada toda.", price: "R$ 28,00", tag: "Mais pedido",
        options: [{ title: "Molho", multi: true, choices: [{ name: "Maionese da casa", delta: 0 }, { name: "Barbecue", delta: 0 }] }] },
      { name: "Xis coração", description: "Coração de galinha na chapa, queijo e maionese.", price: "R$ 34,00" },
      { name: "Dog completo", description: "Duas salsichas, purê, milho, ervilha, batata palha.", price: "R$ 18,00" }
    ],
    "Torradas": [
      { name: "Torrada mista", description: "Pão de forma na chapa, queijo e presunto.", price: "R$ 16,00" }
    ]
  },
  "horta-do-pet": {
    "Cesta semanal": [
      { name: "Cesta P — até 10 kg", description: "Sete porções de comida fresca, congeladas em pote de vidro.", price: "R$ 89,00", tag: "Assinatura",
        options: [{ title: "Dia da entrega", required: true, choices: [{ name: "Terça", delta: 0 }, { name: "Sexta", delta: 0 }] }] },
      { name: "Cesta M — 10 a 25 kg", description: "Mesma receita, porção pra cachorro de porte médio.", price: "R$ 129,00" },
      { name: "Cesta G — acima de 25 kg", description: "Porção grande, dois potes por dia.", price: "R$ 169,00" }
    ],
    "Petiscos avulsos": [
      { name: "Bolacha de batata-doce", description: "Assada no forno, sem farinha branca. Pacote com 20.", price: "R$ 22,00" },
      { name: "Cenoura desidratada", description: "Só cenoura. Pra roer devagar.", price: "R$ 18,00" }
    ]
  },
  "banca-do-limao": {
    "Lote de setembro": [
      { name: "Limoncello 500 ml", description: "Garrafa numerada do lote. Servir gelado, do freezer.", price: "R$ 65,00", tag: "Lote 9",
        options: [{ title: "Como receber", required: true, choices: [{ name: "Retirar na banca", delta: 0 }, { name: "Entrega na sexta", delta: 0 }] }] },
      { name: "Limoncello 250 ml", description: "Meia garrafa, mesma infusão.", price: "R$ 38,00" }
    ],
    "Pra dar de presente": [
      { name: "Caixa com 2 × 250 ml", description: "Caixa de papelão carimbada à mão, cartão escrito na hora.", price: "R$ 79,00" }
    ]
  },
  "forno-de-casa": {
    "Fornada de sexta": [
      { name: "Pão de fermentação 800 g", description: "Casca grossa, miolo aberto, 24 h de fermento.", price: "R$ 24,00", tag: "Fornada",
        options: [{ title: "Ponto da casca", required: true, choices: [{ name: "Tostada", delta: 0 }, { name: "Bem tostada", delta: 0 }] }] },
      { name: "Focaccia de alecrim", description: "Azeite por cima, sal grosso, assada na pedra.", price: "R$ 22,00" },
      { name: "Pão de queijo pra assar", description: "Pacote congelado com 20, assa em casa em 25 min.", price: "R$ 28,00" }
    ]
  },
  "quitutes-da-nona": {
    "Da chapa da nona": [
      { name: "Cuca de uva", description: "Farofa doce grossa, uva da serra, forma de meio quilo.", price: "R$ 26,00", tag: "Da semana" },
      { name: "Schmier de figo 300 g", description: "Apurado no tacho, sem conservante. Vidro retornável.", price: "R$ 18,00" },
      { name: "Bolacha de nata", description: "Lata com 24, receita da colônia.", price: "R$ 15,00" }
    ]
  },
  default: {
    "Mais pedidos": [
      { name: "Pastel de queijo", description: "Massa fina aberta na hora, mussarela derretida até escorrer.", price: "R$ 12,00", tag: "Mais pedido",
        options: [
          { title: "Tamanho", required: true, choices: [{ name: "Tradicional", delta: 0 }, { name: "Grande", delta: 4 }] },
          { title: "Adicionais", multi: true, choices: [{ name: "Catupiry", delta: 4 }, { name: "Bacon", delta: 5 }, { name: "Orégano", delta: 0 }] }
        ] },
      { name: "Coxinha de frango", description: "Catupiry no meio, massa de batata, empanada grossa.", price: "R$ 9,50" },
      { name: "Bolinho de bacalhau", description: "Seis unidades, limão siciliano do lado.", price: "R$ 26,00" },
      { name: "Pão com linguiça", description: "Linguiça artesanal na chapa, pão francês, vinagrete.", price: "R$ 18,00" }
    ],
    "Porções": [
      { name: "Calabresa acebolada", description: "300 g de calabresa fatiada, cebola na manteiga, pão na chapa.", price: "R$ 38,00",
        options: [
          { title: "Ponto da cebola", required: true, choices: [{ name: "Na manteiga", delta: 0 }, { name: "Bem tostada", delta: 0 }] },
          { title: "Acompanha", multi: true, choices: [{ name: "Vinagrete", delta: 3 }, { name: "Pão extra", delta: 5 }] }
        ] },
      { name: "Batata rústica", description: "Alecrim, sal grosso e maionese da casa.", price: "R$ 29,00" },
      { name: "Torresmo de rolo", description: "Crocante por fora, macio dentro, melado de cana à parte.", price: "R$ 34,00" },
      { name: "Isca de tilápia", description: "Empanada na farinha de milho, molho tártaro.", price: "R$ 44,00", tag: "Novo" }
    ],
    "Bebidas": [
      { name: "Chopp 500 ml", description: "Pilsen puxado na hora, colarinho de dois dedos.", price: "R$ 14,00",
        options: [{ title: "Temperatura", required: true, choices: [{ name: "Gelado", delta: 0 }, { name: "Muito gelado", delta: 0 }] }] },
      { name: "Caipirinha de limão", description: "Limão taiti amassado no copo, açúcar na medida.", price: "R$ 22,00",
        options: [{ title: "Destilado", required: true, choices: [{ name: "Cachaça", delta: 0 }, { name: "Vodka", delta: 3 }, { name: "Saquê", delta: 3 }] }] },
      { name: "Guaraná lata", description: "350 ml, sempre no fundo do freezer.", price: "R$ 7,00" },
      { name: "Água com gás", description: "500 ml, limão se quiser.", price: "R$ 5,00" }
    ],
    "Doces": [
      { name: "Pudim de leite", description: "Fatia generosa, calda escura, sem furinho.", price: "R$ 14,00" },
      { name: "Petit gateau", description: "Recheio mole, sorvete de creme por cima.", price: "R$ 22,00" }
    ]
  }
};

const ADDRESSES = [
  { label: "Casa", street: "Rua Aurora", number: "148", district: "Santa Ifigênia", comp: "apto 42", line: "Rua Aurora, 148 — apto 42", short: "Aurora, 148", cep: "01209-000", city: "São Paulo, SP", lat: -23.54, lon: -46.64 },
  { label: "Trabalho", street: "Av. Paulista", number: "1000", district: "Bela Vista", comp: "12º", line: "Av. Paulista, 1000 — 12º", short: "Paulista, 1000", cep: "01310-100", city: "São Paulo, SP", lat: -23.56, lon: -46.65 },
  { label: "Praia", street: "Rua das Palmeiras", number: "22", district: "Itaguá", comp: "", line: "Rua das Palmeiras, 22", short: "Palmeiras, 22", cep: "11680-000", city: "Ubatuba, SP", lat: -23.43, lon: -45.07 }
];

const brl = (n) => "R$ " + n.toFixed(2).replace(".", ",");
const parse = (s) => parseFloat(String(s).replace("R$ ", "").replace(",", "."));

/** pt-BR count agreement: plural(1,"item","itens") → "1 item" */
const plural = (n, one, many) => n + " " + (Math.abs(n) === 1 ? one : many);

Object.assign(window, { CATEGORIES, RESTAURANTS, PRODUCERS, PLACES, MENUS, ADDRESSES, brl, parse, plural });
