// ── ACTIVITY CATALOG · a set of activities per each category ──
// Expands the WiseTip activity system so every category in the taxonomy
// (each season, holiday, moment, and accessibility need) carries its own
// curated set. Each item is bilingual and dual-axis tagged:
//   id       — UNIFIED with WS_ACTIVITIES. Where a catalog item is the same
//              activity as one in WS_ACTIVITIES (e.g. "The Stone Journal"),
//              it carries that SAME numeric id — one activity, many category
//              listings, one detail page. New catalog-only activities get
//              their own numeric id (19+), continuing the same id space, so
//              every card in this catalog deep-links to a real activity page.
//   cat      — primary category it lives under (a SEASON_TAG id)
//   seasons  — every season-axis tag it also fits
//   needs    — accessibility / family-reality tags (NEEDS_TAG ids)
// Voice: concrete, screen-free, scene-first. Children never named.

const CATALOG = [
  // ════════ SEASONS ════════
  // ── SPRING ──
  { id:19, cat:"spring", title:{ en:"First Green Hunt", es:"Búsqueda del primer verde" },
    ages:[3,10], duration:30, tier:"free",
    seasons:["spring","earth-day"], needs:["outdoor","sensory-rich","sibling","low-prep"],
    summary:{ en:"Find five things growing that weren't there a month ago. Photograph nothing.", es:"Encontrad cinco cosas que crecen y no estaban hace un mes. No fotografíes nada." } },
  { id:20, cat:"spring", title:{ en:"The Mud Kitchen", es:"La cocina de barro" },
    ages:[3,8], duration:60, tier:"premium",
    seasons:["spring","summer"], needs:["movement","sensory-rich","outdoor","sibling"],
    summary:{ en:"A corner of dirt, water, and old pots. Cook nothing. Serve everything.", es:"Un rincón de tierra, agua y ollas viejas. No cocinéis nada. Servidlo todo." } },
  { id:21, cat:"spring", title:{ en:"Rain on the Window", es:"Lluvia en la ventana" },
    ages:[4,12], duration:25, tier:"premium",
    seasons:["spring","rainy-day"], needs:["calm","fine-motor","sensory-low","solo"],
    summary:{ en:"Watch one whole storm without commentary. Then draw what it sounded like.", es:"Mirad una tormenta entera sin comentarios. Luego dibuja a qué sonaba." } },
  { id:22, cat:"spring", title:{ en:"Seed-Tape Letters", es:"Letras de semillas" },
    ages:[5,12], duration:45, tier:"premium",
    seasons:["spring","earth-day"], needs:["fine-motor","language","outdoor","calm"],
    summary:{ en:"Plant seeds spelling one short word. Wait weeks to read it.", es:"Planta semillas formando una palabra corta. Espera semanas para leerla." } },

  // ── SUMMER ──
  { id:23, cat:"summer", title:{ en:"Shadow at Noon", es:"Sombra al mediodía" },
    ages:[4,12], duration:30, tier:"free",
    seasons:["summer"], needs:["outdoor","movement","sibling","language"],
    summary:{ en:"Trace each other's shadow at noon, then again at six. Talk about the difference.", es:"Calca la sombra del otro al mediodía y otra vez a las seis. Hablad de la diferencia." } },
  { id:24, cat:"summer", title:{ en:"The Slow Swim Day", es:"El día de baño lento" },
    ages:[3,17], duration:120, tier:"premium",
    seasons:["summer"], needs:["outdoor","calm","sensory-rich","sibling"],
    summary:{ en:"One body of water. No agenda. Stay until skin goes pruney.", es:"Una sola masa de agua. Sin plan. Quedaos hasta tener los dedos arrugados." } },
  { id:25, cat:"summer", title:{ en:"Night Sounds Map", es:"Mapa de sonidos nocturnos" },
    ages:[5,14], duration:20, tier:"premium",
    seasons:["summer","full-moon"], needs:["calm","sensory-low","language","anxiety"],
    summary:{ en:"Sit outside after dark. Name every sound until you run out.", es:"Sentaos fuera de noche. Nombrad cada sonido hasta quedaros sin ninguno." } },

  // ── AUTUMN ──
  { id:26, cat:"autumn", title:{ en:"Leaf-Pressing Archive", es:"Archivo de hojas prensadas" },
    ages:[3,12], duration:20, tier:"free",
    seasons:["autumn"], needs:["calm","fine-motor","solo","sensory-low"],
    summary:{ en:"One leaf a day, pressed in a heavy book. A month later, open it.", es:"Una hoja al día, prensada en un libro pesado. Un mes después, ábrelo." } },
  { id:27, cat:"autumn", title:{ en:"The Long Way Home", es:"El camino más largo a casa" },
    ages:[3,10], duration:45, tier:"premium",
    seasons:["autumn","back-to-school"], needs:["movement","outdoor","sibling","adhd"],
    summary:{ en:"Take the longest route back. Kick everything that's kickable. Arrive late on purpose.", es:"Tomad la ruta más larga. Chutad todo lo que se pueda. Llegad tarde a propósito." } },
  { id:28, cat:"autumn", title:{ en:"Soup From the Market", es:"Sopa del mercado" },
    ages:[4,14], duration:60, tier:"premium",
    seasons:["autumn","thanksgiving"], needs:["language","sensory-rich","fine-motor","sibling"],
    summary:{ en:"The child picks one vegetable they've never tried. It goes in the pot regardless.", es:"El niño elige una verdura que nunca ha probado. Va a la olla igualmente." } },

  // ── WINTER ──
  { id:29, cat:"winter", title:{ en:"Paper, Pens, Simple Maths", es:"Papel, lápices, matemáticas simples" },
    ages:[3,12], duration:45, tier:"free",
    seasons:["winter"], needs:["calm","fine-motor","low-prep","solo"],
    summary:{ en:"The founding winter kit: nothing branded, nothing educational. Just paper and time.", es:"El kit del primer invierno: nada de marcas, nada educativo. Solo papel y tiempo." } },
  { id:30, cat:"winter", title:{ en:"The Blanket-Fort Parliament", es:"El parlamento del fuerte de mantas" },
    ages:[4,14], duration:60, tier:"premium",
    seasons:["winter","rainy-day"], needs:["sibling","language","sensory-low","calm"],
    summary:{ en:"Build one fort. Hold one real family decision inside it. Everyone gets a turn.", es:"Construid un fuerte. Tomad dentro una decisión familiar real. Cada uno habla." } },
  { id:31, cat:"winter", title:{ en:"Candle Dinner", es:"Cena a la luz de una vela" },
    ages:[3,17], duration:45, tier:"premium",
    seasons:["winter","christmas"], needs:["calm","sensory-low","language","anxiety"],
    summary:{ en:"One dinner this week by candlelight, phones in a drawer. Notice who talks more.", es:"Una cena esta semana con velas, los móviles en un cajón. Mira quién habla más." } },

  // ════════ HOLIDAYS ════════
  // ── CHRISTMAS ──
  { id:13, cat:"christmas", title:{ en:"The Quiet Advent", es:"El Adviento tranquilo" },
    ages:[3,12], duration:20, tier:"premium",
    seasons:["christmas","winter","first-snow"], needs:["calm","sensory-low","fine-motor","autism","sibling"],
    summary:{ en:"Twenty-four small things, none of them objects. One opened each evening.", es:"Veinticuatro cosas pequeñas, ninguna un objeto. Una cada noche." } },
  { id:32, cat:"christmas", title:{ en:"Wrap With No Tape", es:"Envolver sin cinta" },
    ages:[5,14], duration:30, tier:"premium",
    seasons:["christmas","winter"], needs:["fine-motor","calm","language","solo"],
    summary:{ en:"Cloth, ribbon, folds. Slower gifts that can be unwrapped and reused.", es:"Tela, lazo, pliegues. Regalos más lentos que se abren y se reutilizan." } },
  { id:33, cat:"christmas", title:{ en:"The Long Wait Calendar", es:"El calendario de la espera" },
    ages:[3,10], duration:15, tier:"free",
    seasons:["christmas","winter"], needs:["calm","anxiety","fine-motor","sibling"],
    summary:{ en:"Cross off one day together each night. Anticipation is the gift.", es:"Tachad un día juntos cada noche. La espera es el regalo." } },

  // ── EASTER ──
  { id:14, cat:"easter", title:{ en:"Egg-and-Question Hunt", es:"Búsqueda de huevos con preguntas" },
    ages:[4,12], duration:45, tier:"premium",
    seasons:["easter","spring"], needs:["sibling","fine-motor","language","outdoor"],
    summary:{ en:"Each egg holds a question, not a sweet. The conversation is the prize.", es:"Cada huevo guarda una pregunta, no un dulce. La conversación es el premio." } },
  { id:10, cat:"easter", title:{ en:"Silent Treasure Hunt", es:"Búsqueda silenciosa" },
    ages:[4,12], duration:30, tier:"premium",
    seasons:["easter","birthday"], needs:["calm","sensory-low","deaf","autism","sibling"],
    summary:{ en:"Clues written, not spoken. The quietest hunter usually finds it first.", es:"Pistas escritas, no habladas. Quien menos habla suele encontrarlo antes." } },
  { id:34, cat:"easter", title:{ en:"Grow-Grass Heads", es:"Cabezas de hierba" },
    ages:[3,10], duration:30, tier:"free",
    seasons:["easter","spring"], needs:["fine-motor","sensory-rich","outdoor","calm"],
    summary:{ en:"Seeds in a cup with a drawn-on face. Watch the hair grow all week.", es:"Semillas en un vaso con cara dibujada. Mirad crecer el pelo toda la semana." } },

  // ── HALLOWEEN ──
  { id:15, cat:"halloween", title:{ en:"Lantern Walk · low-fright", es:"Paseo de farolillos · poco susto" },
    ages:[3,10], duration:60, tier:"free",
    seasons:["halloween","autumn"], needs:["outdoor","sibling","sensory-low","autism","calm"],
    summary:{ en:"Hand-made paper lanterns. A loop around the block. No costumes that scare.", es:"Farolillos de papel a mano. Una vuelta a la manzana. Disfraces sin susto." } },
  { id:35, cat:"halloween", title:{ en:"Costume From the House", es:"Disfraz de andar por casa" },
    ages:[4,12], duration:45, tier:"premium",
    seasons:["halloween","autumn"], needs:["fine-motor","sibling","sensory-rich","low-prep"],
    summary:{ en:"No shop. Build a whole costume from what's already in the house.", es:"Sin tienda. Construid un disfraz entero con lo que ya hay en casa." } },
  { id:36, cat:"halloween", title:{ en:"Pumpkin by Feel", es:"Calabaza al tacto" },
    ages:[3,9], duration:40, tier:"premium",
    seasons:["halloween","autumn"], needs:["sensory-rich","fine-motor","visual","sibling"],
    summary:{ en:"Scoop the seeds with eyes closed. Name the textures out loud.", es:"Vaciad las semillas con los ojos cerrados. Nombrad las texturas en voz alta." } },

  // ── THANKSGIVING ──
  { id:18, cat:"thanksgiving", title:{ en:"Three Things on the Table", es:"Tres cosas en la mesa" },
    ages:[3,17], duration:30, tier:"free",
    seasons:["thanksgiving","new-year"], needs:["language","sibling","calm","low-prep"],
    summary:{ en:"Before the meal each person names three things — one heavy, one light, one new.", es:"Antes de comer cada uno nombra tres cosas — una pesada, una ligera, una nueva." } },
  { id:37, cat:"thanksgiving", title:{ en:"The Gratitude Chain", es:"La cadena de gratitud" },
    ages:[3,12], duration:30, tier:"premium",
    seasons:["thanksgiving","autumn"], needs:["fine-motor","language","sibling","calm"],
    summary:{ en:"Paper links, one thanks written on each. Hang it where you eat.", es:"Eslabones de papel, un gracias en cada uno. Colgadla donde coméis." } },
  { id:38, cat:"thanksgiving", title:{ en:"Cook One Thing Each", es:"Cada uno cocina una cosa" },
    ages:[5,17], duration:90, tier:"premium",
    seasons:["thanksgiving"], needs:["sibling","fine-motor","language","sensory-rich"],
    summary:{ en:"Everyone owns one dish, start to finish. Yours included. No rescuing.", es:"Cada uno es dueño de un plato, de principio a fin. El tuyo también. Sin rescates." } },

  // ── FAMILY LOVE (valentines) ──
  { id:39, cat:"valentines", title:{ en:"Affection Without Protocol", es:"Afecto sin protocolo" },
    ages:[4,14], duration:30, tier:"premium",
    seasons:["valentines"], needs:["language","fine-motor","calm","sibling"],
    summary:{ en:"Write or draw something for a family member who isn't a partner.", es:"Escribe o dibuja algo para alguien de la familia que no es pareja." } },
  { id:16, cat:"valentines", title:{ en:"Breakfast in Voice Notes", es:"Desayuno en notas de voz" },
    ages:[5,17], duration:45, tier:"premium",
    seasons:["valentines","mothers-day","fathers-day"], needs:["language","fine-motor","sibling","low-prep"],
    summary:{ en:"Each child records a 30-second note about one shared memory. Played at the table.", es:"Cada niño graba 30 s sobre un recuerdo compartido. Se escucha en la mesa." } },
  { id:40, cat:"valentines", title:{ en:"The Reasons Jar", es:"El bote de razones" },
    ages:[5,17], duration:20, tier:"free",
    seasons:["valentines"], needs:["language","fine-motor","calm","solo"],
    summary:{ en:"Slips of paper, one reason each. Read one a day until they run out.", es:"Papelitos, una razón cada uno. Leed uno al día hasta acabarlos." } },

  // ── MOTHER'S DAY ──
  { id:41, cat:"mothers-day", title:{ en:"The Slow Breakfast", es:"El desayuno lento" },
    ages:[5,17], duration:60, tier:"premium",
    seasons:["mothers-day"], needs:["language","fine-motor","calm","sibling"],
    summary:{ en:"The child runs breakfast start to finish. You sit. You don't help.", es:"El niño lleva el desayuno de principio a fin. Tú te sientas. No ayudas." } },
  { id:42, cat:"mothers-day", title:{ en:"A Day in Her Shoes", es:"Un día en sus zapatos" },
    ages:[6,14], duration:60, tier:"premium",
    seasons:["mothers-day"], needs:["language","gifted","sibling","calm"],
    summary:{ en:"The child plans one real hour of the day — and everyone follows it.", es:"El niño planea una hora real del día — y todos la siguen." } },

  // ── FATHER'S DAY ──
  { id:43, cat:"fathers-day", title:{ en:"Side-by-Side Build", es:"Construir lado a lado" },
    ages:[5,17], duration:90, tier:"premium",
    seasons:["fathers-day"], needs:["fine-motor","movement","calm","language"],
    summary:{ en:"Fix or build one real thing together. Mostly in silence. Mostly fine.", es:"Arreglad o construid algo real juntos. Casi en silencio. Casi perfecto." } },
  { id:44, cat:"fathers-day", title:{ en:"The Father Walk", es:"El paseo del padre" },
    ages:[3,12], duration:60, tier:"free",
    seasons:["fathers-day","spring"], needs:["outdoor","movement","language","calm"],
    summary:{ en:"The child leads and picks every turn. You just keep up.", es:"El niño guía y elige cada giro. Tú solo le sigues el paso." } },

  // ── EARTH DAY ──
  { id:9, cat:"earth-day", title:{ en:"The Garden of One Thing", es:"El huerto de una sola cosa" },
    ages:[5,17], duration:45, tier:"premium",
    seasons:["earth-day","spring"], needs:["outdoor","calm","fine-motor","gifted"],
    summary:{ en:"Plant one thing. Tend it badly, on purpose. Let the child own whether it lives.", es:"Planta una sola cosa. Cuídala mal, a propósito. Que el niño decida si vive." } },
  { id:1, cat:"earth-day", title:{ en:"The Stone Journal", es:"Diario de piedras" },
    ages:[3,17], duration:30, tier:"premium",
    seasons:["earth-day","spring"], needs:["calm","sensory-low","outdoor","low-prep","sibling"],
    summary:{ en:"Find one stone each. Bring it home. Talk about it tomorrow.", es:"Encuentra una piedra cada uno. Tráela a casa. Hablad mañana." } },
  { id:45, cat:"earth-day", title:{ en:"Repair, Don't Replace", es:"Reparar, no reemplazar" },
    ages:[6,17], duration:60, tier:"premium",
    seasons:["earth-day"], needs:["fine-motor","language","gifted","calm"],
    summary:{ en:"Fix one broken thing this week instead of binning it. Even badly.", es:"Arregla una cosa rota esta semana en vez de tirarla. Aunque sea mal." } },

  // ════════ MOMENTS ════════
  // ── NEW YEAR ──
  { id:5, cat:"new-year", title:{ en:"Letter to Your Future Self", es:"Carta a tu yo futuro" },
    ages:[10,17], duration:45, tier:"premium",
    seasons:["new-year","birthday"], needs:["language","calm","anxiety","solo","gifted"],
    summary:{ en:"Write a letter to who you'll be in a year. Seal it. Hide it. Set a reminder.", es:"Escribe una carta a quien serás en un año. Séllala. Escóndela. Pon recordatorio." } },
  { id:46, cat:"new-year", title:{ en:"The One-Word Year", es:"El año de una palabra" },
    ages:[5,17], duration:30, tier:"free",
    seasons:["new-year"], needs:["language","calm","fine-motor","sibling"],
    summary:{ en:"Each person picks one word for the year, writes it big, posts it on the fridge.", es:"Cada uno elige una palabra para el año, la escribe grande, la pega en la nevera." } },

  // ── LUNAR NEW YEAR ──
  { id:47, cat:"lunar-new-year", title:{ en:"Red, Food, Family Stories", es:"Rojo, comida, historias de familia" },
    ages:[3,14], duration:90, tier:"premium",
    seasons:["lunar-new-year","winter"], needs:["language","sibling","sensory-rich","fine-motor"],
    summary:{ en:"Cook one dish while an elder tells one story from before you were born.", es:"Cocinad un plato mientras un mayor cuenta una historia de antes de nacer tú." } },
  { id:48, cat:"lunar-new-year", title:{ en:"The Clean-Sweep Game", es:"El juego de barrer" },
    ages:[3,10], duration:30, tier:"free",
    seasons:["lunar-new-year","new-year"], needs:["movement","sibling","low-prep","adhd"],
    summary:{ en:"Sweep out the old year, room by room. Make a race of the last room.", es:"Barred el año viejo, habitación por habitación. La última, a carreras." } },

  // ── FULL MOON ──
  { id:49, cat:"full-moon", title:{ en:"The Monthly Night Pause", es:"La pausa nocturna mensual" },
    ages:[3,17], duration:30, tier:"free",
    seasons:["full-moon"], needs:["calm","outdoor","anxiety","autism","language"],
    summary:{ en:"Once a month, go outside, no screens, and just look up together.", es:"Una vez al mes, salid fuera, sin pantallas, y mirad arriba juntos." } },
  { id:50, cat:"full-moon", title:{ en:"Moon Journal", es:"Diario de la luna" },
    ages:[5,14], duration:15, tier:"premium",
    seasons:["full-moon"], needs:["fine-motor","calm","solo","gifted"],
    summary:{ en:"Draw the moon's shape each clear night. A month later you have a cycle.", es:"Dibuja la forma de la luna cada noche clara. Un mes después tienes un ciclo." } },

  // ── FIRST SNOW ──
  { id:51, cat:"first-snow", title:{ en:"Drop Everything · Go Outside", es:"Suéltalo todo · sal fuera" },
    ages:[3,14], duration:45, tier:"free",
    seasons:["first-snow","winter"], needs:["movement","outdoor","sensory-rich","sibling","low-prep"],
    summary:{ en:"The moment the first snow falls, abandon the plan. Whatever it was.", es:"En cuanto caiga la primera nieve, abandonad el plan. Fuera el que fuera." } },
  { id:52, cat:"first-snow", title:{ en:"One Snowflake, One Tongue", es:"Un copo, una lengua" },
    ages:[3,8], duration:15, tier:"free",
    seasons:["first-snow","winter"], needs:["calm","sensory-rich","low-prep","outdoor"],
    summary:{ en:"Catch one, let it melt, and say nothing at all for a full minute.", es:"Atrapad uno, dejad que se derrita, y no digáis nada durante un minuto entero." } },

  // ── BIRTHDAY ──
  { id:53, cat:"birthday", title:{ en:"The Birthday Interview", es:"La entrevista de cumpleaños" },
    ages:[3,17], duration:30, tier:"premium",
    seasons:["birthday"], needs:["language","calm","fine-motor","solo"],
    summary:{ en:"Ask the same five questions every birthday. Keep the answers. Watch them change.", es:"Haz las mismas cinco preguntas cada cumpleaños. Guarda las respuestas. Míralas cambiar." } },
  { id:54, cat:"birthday", title:{ en:"Make the Day Feel Real", es:"Que el día se sienta real" },
    ages:[3,14], duration:45, tier:"premium",
    seasons:["birthday"], needs:["language","sibling","calm","low-prep"],
    summary:{ en:"One small ritual, child-chosen, repeated every year. That's the whole thing.", es:"Un pequeño ritual, elegido por el niño, repetido cada año. Eso es todo." } },

  // ── BACK TO SCHOOL ──
  { id:55, cat:"back-to-school", title:{ en:"Two-Week Soft Landing", es:"Aterrizaje suave de dos semanas" },
    ages:[3,14], duration:30, tier:"premium",
    seasons:["back-to-school","autumn"], needs:["calm","anxiety","language","sibling"],
    summary:{ en:"One small calming ritual repeated each evening before the first day.", es:"Un pequeño ritual de calma repetido cada noche antes del primer día." } },
  { id:56, cat:"back-to-school", title:{ en:"The Worry Jar", es:"El bote de las preocupaciones" },
    ages:[5,14], duration:20, tier:"premium",
    seasons:["back-to-school"], needs:["anxiety","language","calm","solo"],
    summary:{ en:"Write the worry, fold it, decide together what's true and what's just loud.", es:"Escribe la preocupación, dóblala, decidid juntos qué es cierto y qué solo ruido." } },

  // ── RAINY DAY ──
  { id:3, cat:"rainy-day", title:{ en:"Kitchen Sounds Symphony", es:"Sinfonía de cocina" },
    ages:[3,9], duration:20, tier:"premium",
    seasons:["rainy-day","winter"], needs:["sensory-rich","fine-motor","adhd","sibling","language"],
    summary:{ en:"Wooden spoon. Three pots. One brave parent. A song with no rules.", es:"Cuchara de madera. Tres ollas. Un padre valiente. Una canción sin reglas." } },
  { id:8, cat:"rainy-day", title:{ en:"Build · Break · Build Again", es:"Construye · Rompe · Construye" },
    ages:[3,9], duration:30, tier:"free",
    seasons:["rainy-day"], needs:["movement","adhd","fine-motor","sibling","sensory-rich"],
    summary:{ en:"Tower of cushions. Knock it down. Rebuild. Repeat until they're done.", es:"Torre de cojines. Tírala. Reconstruye. Repite hasta que se cansen." } },
  { id:57, cat:"rainy-day", title:{ en:"Thirty Indoor Things", es:"Treinta cosas de interior" },
    ages:[3,12], duration:60, tier:"premium",
    seasons:["rainy-day"], needs:["low-prep","sibling","fine-motor","sensory-rich"],
    summary:{ en:"A list on the wall. Pick three. Do them slowly. Cross them off.", es:"Una lista en la pared. Elegid tres. Hacedlas despacio. Tachadlas." } },
];

window.WS_CATALOG = CATALOG;

// Category groupings (reference SEASON_TAGS for label/glyph/hue).
window.WS_CATALOG_GROUPS = [
  { id:"season",  label:{ en:"Seasons",          es:"Estaciones" }, cats:["spring","summer","autumn","winter"] },
  { id:"holiday", label:{ en:"Holidays",         es:"Fiestas" },    cats:["christmas","easter","halloween","thanksgiving","valentines","mothers-day","fathers-day","earth-day"] },
  { id:"moment",  label:{ en:"Moments & markers",es:"Momentos y marcas" }, cats:["new-year","lunar-new-year","full-moon","first-snow","birthday","back-to-school","rainy-day"] },
];
