// bkg-drawers-data.jsx — RU/EN data for Booking Analytics drill-down drawers

window.BKG_DRAWERS = {
  ru: {
    /* ============== Drawer 1 — Cabin ============== */
    cabin: {
      header: '#4 Latvia · Standard 2-местный',
      path: ['Booking', 'Cabins', '#4 Latvia'],
      period: 'Последние 30 дней · vs предыдущий · По дате заезда',
      stats: [
        { lbl: 'Occupancy', val: '70%', delta: '−4 п.п.', sign: 'neg', sub: 'vs prev' },
        { lbl: 'ADR', val: '€220', delta: '→', sign: 'flat', sub: '' },
        { lbl: 'Revenue', val: '€9 240', delta: '−€280', sign: 'neg', sub: 'vs prev' },
      ],
      peers: {
        title: 'Vs другие домики типа Standard',
        cols: ['Cabin', 'Occ', 'ADR', 'RevPAR', 'Cancel %'],
        rows: [
          { name: '#3 Portofino', occ: '73%', adr: '€220', revpar: '€161', cancel: '14%', self: false },
          { name: '#4 Latvia',    occ: '70%', adr: '€220', revpar: '€154', cancel: '12%', self: true  },
          { name: 'Avg Standard', occ: '72%', adr: '€220', revpar: '€158', cancel: '13%', self: false, avg: true },
        ],
      },
      trend: {
        title: 'Тренд продаж · 12 месяцев',
        insight: 'Разрыв с avg Standard стабильный за 6 месяцев. Возможные причины: расположение, описание, отзывы.',
        // 12 months × 2 lines normalized 0..100
        labels: ['М','И','И','А','С','О','Н','Д','Я','Ф','М','А'],
        self:   [62, 71, 80, 78, 66, 58, 54, 50, 46, 52, 64, 70],
        avg:    [66, 74, 84, 82, 70, 62, 58, 54, 50, 56, 68, 72],
      },
      recent: {
        title: 'Последние брони',
        rows: [
          { dt: '5 мая',  guest: 'Иванова О.', src: 'direct',  nights: 2, rev: '€440', status: 'future' },
          { dt: '3 мая',  guest: 'Smith J.',   src: 'booking', nights: 3, rev: '€660', status: 'future' },
          { dt: '1 мая',  guest: 'Петров С.',  src: 'direct',  nights: 2, rev: '€440', status: 'stayed' },
          { dt: '28 апр', guest: 'Орлова К.',  src: 'airbnb',  nights: 4, rev: '€880', status: 'stayed' },
          { dt: '24 апр', guest: 'Lee M.',      src: 'booking', nights: 2, rev: '€440', status: 'cancelled' },
          { dt: '22 апр', guest: 'Соколов А.', src: 'whatsapp',nights: 3, rev: '€660', status: 'stayed' },
          { dt: '18 апр', guest: 'Кузнецова Е.',src: 'direct',  nights: 2, rev: '€440', status: 'stayed' },
        ],
      },
      reviews: {
        title: 'Отзывы на этот домик',
        items: [
          { rate: 4.6, text: 'Тихо, уютно, всё работает. В ванной не хватало полок.', src: 'Booking', date: '4 мая' },
          { rate: 5.0, text: 'Идеально для пары. Вернёмся осенью.',                   src: 'Direct',  date: '28 апр' },
          { rate: 4.2, text: 'Хорошо, но wi-fi слабый ближе к озеру.',                src: 'Google',  date: '21 апр' },
        ],
      },
      reco: '#4 показывает occupancy 70% при ADR €220 — близко к среднему по категории. Если хочется выровнять с #3 (73%) — попробовать дисконт −5% на будние. Альтернативно — обновить фотографии и описание.',
      actions: {
        primary: 'Открыть #4 в Cloudbeds',
        secondary: 'Все брони этого домика →',
        export: 'Экспорт по домику (CSV)',
      },
    },

    /* ============== Drawer 2 — Stay pattern ============== */
    pattern: {
      header: 'Friday + 2 nights',
      path: ['Booking', 'Patterns', 'Fri + 2N'],
      period: '34 броней · 24% от всех',
      stats: [
        { lbl: 'Bookings', val: '34', delta: '24% от всех', sign: 'flat', sub: '' },
        { lbl: 'Revenue', val: '€14 280', delta: '32% от всей выручки', sign: 'pos', sub: 'выше доли броней', accent: true },
        { lbl: 'Avg per booking', val: '€420', delta: '+€40', sign: 'pos', sub: 'vs avg всех' },
      ],
      trend: {
        title: 'Тренд паттерна · 12 месяцев',
        insight: 'Доля Fri+2N выросла с 19% до 24% за год — паттерн усиливается.',
        labels: ['М','И','И','А','С','О','Н','Д','Я','Ф','М','А'],
        // % of bookings matching this pattern, week-binned to month
        values: [19, 20, 22, 23, 22, 21, 20, 19, 21, 22, 23, 24],
      },
      guests: {
        title: 'Кто эти гости',
        types: [
          { lbl: 'Couples', pct: 64 },
          { lbl: 'Friends', pct: 18 },
          { lbl: 'Families', pct: 12 },
          { lbl: 'Solo',   pct: 6  },
        ],
        repeat: { newPct: 58, repeatPct: 42 },
      },
      finance: {
        title: 'Финансовый профиль · per booking',
        rows: [
          { lbl: 'Accommodation', val: '€340' },
          { lbl: 'SPA',           val: '€48' },
          { lbl: 'F&B',           val: '€26' },
          { lbl: 'Other',         val: '€6' },
          { lbl: 'Total',         val: '€420', strong: true },
        ],
        compare: 'Fri+2N €420 · Sat+2N €395 · 1-night midweek €240 · все брони €380',
        compareNote: 'Этот паттерн на €40 выше среднего — самый ценный.',
      },
      sources: {
        title: 'Источники броней',
        rows: [
          { ch: 'direct',   name: 'Сайт',         count: 14, pct: 41 },
          { ch: 'booking',  name: 'Booking.com', count: 9,  pct: 26 },
          { ch: 'airbnb',   name: 'Airbnb',      count: 6,  pct: 18 },
          { ch: 'instagram',name: 'Instagram',   count: 3,  pct: 9  },
          { ch: 'whatsapp', name: 'WhatsApp',    count: 2,  pct: 6  },
        ],
      },
      reco: 'Fri+2N — ваш самый ценный паттерн (€420 vs €380 avg). Рекомендации: (1) Создать упакованный пакет «Friday Wellness Escape». (2) Отдельный лендинг с Meta Ads на couples 28—45. (3) Защитить пятницу от агрессивного дисконтирования.',
      actions: {
        primary: 'Все брони с этим паттерном →',
        secondary: 'Создать промо-пакет',
        export: 'Экспорт паттерна (CSV)',
      },
    },

    /* ============== Drawer 3 — Cancellation by channel ============== */
    cancel: {
      header: 'Booking.com cancellations',
      path: ['Booking', 'Cancellations', 'Booking.com'],
      period: 'Последние 30 дней · 5 из 36 броней',
      ch: 'booking',
      stats: [
        { lbl: 'Cancel rate', val: '14%', delta: '+5 п.п.', sign: 'neg', sub: 'vs prev' },
        { lbl: 'Cancelled', val: '5', delta: '', sign: 'flat', sub: 'броней' },
        { lbl: 'Lost revenue', val: '€2 200', delta: '', sign: 'neg', sub: 'не реализовано' },
      ],
      timing: {
        title: 'Когда отменяют',
        bins: [
          { lbl: '30+ дней',  pct: 8 },
          { lbl: '15—30',     pct: 22 },
          { lbl: '8—14',      pct: 44 },
          { lbl: '0—7',       pct: 26 },
        ],
        bench: 'По другим OTA средняя точка отмены — 14 дней до. По Booking.com: 12 дней — близко к норме.',
      },
      cancelled: {
        title: 'Кто отменил',
        cols: ['Booked', 'Cancelled', 'Lead', 'Stay', 'Cabin', 'Lost'],
        rows: [
          { booked: '14 апр', cancelled: '2 мая',  lead: '18д', stay: '5—7 мая', cabin: '#5 Maldives', lost: '€720' },
          { booked: '12 апр', cancelled: '28 апр', lead: '16д', stay: '4—6 мая', cabin: '#3 Portofino',lost: '€440' },
          { booked: '5 апр',  cancelled: '22 апр', lead: '17д', stay: '11—12 мая',cabin: '#4 Latvia',  lost: '€220' },
          { booked: '28 мар', cancelled: '20 апр', lead: '23д', stay: '8—10 мая', cabin: '#2 Bali',    lost: '€520' },
          { booked: '25 мар', cancelled: '14 апр', lead: '20д', stay: '15—16 мая',cabin: '#1 Cyprus',  lost: '€300' },
        ],
      },
      otaCompare: {
        title: 'Сравнение с другими OTA',
        cols: ['OTA', 'Bookings', 'Cancel %', 'Avg time to cancel'],
        rows: [
          { name: 'Airbnb',      count: 33, rate: '18%', avgTime: '11д', tone: 'warn' },
          { name: 'Booking.com', count: 36, rate: '14%', avgTime: '12д', tone: 'self' },
          { name: 'Expedia',     count: 8,  rate: '12%', avgTime: '14д', tone: 'flat' },
          { name: 'Direct',      count: 42, rate: '7%',  avgTime: '16д', tone: 'good' },
        ],
      },
      economics: {
        title: 'Эффективная экономика канала',
        rows: [
          { lbl: 'Gross bookings',         val: '36' },
          { lbl: 'Cancelled',              val: '5 (14%)', neg: true },
          { lbl: 'Net stayed',             val: '31',      strong: true },
          { lbl: 'Gross revenue',          val: '€15 840' },
          { lbl: 'Cancellation losses',    val: '−€2 200', neg: true },
          { lbl: 'Net revenue',            val: '€13 640', strong: true },
          { lbl: 'Commission paid (15%)',  val: '−€2 046', neg: true },
          { lbl: 'Net contribution',       val: '€11 594', strong: true, accent: true },
          { lbl: 'Effective net per booking', val: '€322', accent: true },
        ],
        compare: 'Direct net per booking: €395. Этот канал на 18% менее эффективен после отмен и комиссии.',
      },
      reco: 'Возможные шаги: (1) Переключить часть листинга Booking.com на non-refundable rate с −10%. (2) Перераспределить часть бюджета в Direct маркетинг. (3) Проверить позиционирование — возможно, цена слишком «дешёвая» относительно других OTA.',
      actions: {
        primary: 'Booking.com Partner Hub',
        secondary: 'Все отмены этого канала →',
        export: 'Экспорт отмен (CSV)',
      },
    },

    /* ============== Drawer 4 — Pickup interval (future month) ============== */
    pickup: {
      header: 'Июнь 2026 · pickup',
      path: ['Booking', 'Pickup', 'Июнь 2026'],
      period: 'Анализ по дате заезда · 30 дней',
      stats: [
        { lbl: 'OTB', val: '184 / 300', delta: '61%', sign: 'flat', sub: 'ночей забронировано' },
        { lbl: 'vs LY same time', val: '−12%', delta: 'отстаёт', sign: 'neg', sub: '' },
        { lbl: 'Forecast closure', val: '88%', delta: '+3 п.п.', sign: 'pos', sub: 'к концу месяца' },
      ],
      paceCurve: {
        title: 'Pace curve · Июнь',
        insight: 'Текущая аккумуляция следует за LY с отставанием 4—5 дней. Большинство pickup ожидается в последние 21 день.',
        // 60 days-to-arrival → nights booked
        days: 60,
      },
      heatmap: {
        title: 'Heatmap · Июнь',
        cabins: ['#1 Cyprus', '#2 Bali', '#3 Portofino', '#4 Latvia', '#5 Maldives'],
        // 30 days × 5 cabins
      },
      weakest: {
        title: 'Слабые дни',
        cols: ['Дата', 'День', 'OTB', 'Hist avg', 'Gap'],
        rows: [
          { dt: '3 июня',  dow: 'Ср', otb: '0/5', avg: '3.2', gap: '−3.2' },
          { dt: '10 июня', dow: 'Ср', otb: '1/5', avg: '3.4', gap: '−2.4' },
          { dt: '17 июня', dow: 'Ср', otb: '0/5', avg: '3.1', gap: '−3.1' },
          { dt: '4 июня',  dow: 'Чт', otb: '1/5', avg: '3.0', gap: '−2.0' },
          { dt: '24 июня', dow: 'Ср', otb: '1/5', avg: '3.2', gap: '−2.2' },
        ],
        pattern: 'Концентрация — среды и четверги. 4 из 5 слабых дней — будние середины недели.',
      },
      leadStats: {
        title: 'Lead time analysis',
        rows: [
          { lbl: 'Median lead — текущие брони',           val: '24 дня' },
          { lbl: 'Median lead — same time LY',             val: '21 день' },
          { lbl: '% объёма ожидается в последние 30 дней', val: '76%', accent: true },
        ],
        note: 'Pace отстаёт, но 76% объёма ещё впереди — паника не оправдана.',
      },
      reco: 'Июнь отстаёт по pace, но 76% объёма ещё ожидаемо. Концентрация отставания — будние, особенно среды (3 ночи с нулевой загрузкой). Рекомендации: (1) Промо «Wellness Wednesday» — спец-цена на среды + СПА-пакет. (2) Meta Ads-буст с фокусом на 3, 10, 17, 24 июня. (3) Пересмотреть pricing на эти даты.',
      actions: {
        primary: 'Открыть Booking Pace на главной →',
        secondary: 'Создать промо-кампанию',
        export: 'Экспорт по июню (CSV)',
      },
    },
  },

  en: {
    cabin: {
      header: '#4 Latvia · Standard 2-pax',
      path: ['Booking', 'Cabins', '#4 Latvia'],
      period: 'Last 30 days · vs previous · By stay date',
      stats: [
        { lbl: 'Occupancy', val: '70%', delta: '−4 pp', sign: 'neg', sub: 'vs prev' },
        { lbl: 'ADR', val: '€220', delta: '→', sign: 'flat', sub: '' },
        { lbl: 'Revenue', val: '€9,240', delta: '−€280', sign: 'neg', sub: 'vs prev' },
      ],
      peers: {
        title: 'Vs other Standard cabins',
        cols: ['Cabin', 'Occ', 'ADR', 'RevPAR', 'Cancel %'],
        rows: [
          { name: '#3 Portofino', occ: '73%', adr: '€220', revpar: '€161', cancel: '14%', self: false },
          { name: '#4 Latvia',    occ: '70%', adr: '€220', revpar: '€154', cancel: '12%', self: true  },
          { name: 'Standard avg', occ: '72%', adr: '€220', revpar: '€158', cancel: '13%', self: false, avg: true },
        ],
      },
      trend: {
        title: 'Sales trend · 12 months',
        insight: 'Gap with avg Standard has been stable for 6 months. Possible causes: location, description, reviews.',
        labels: ['M','J','J','A','S','O','N','D','J','F','M','A'],
        self: [62, 71, 80, 78, 66, 58, 54, 50, 46, 52, 64, 70],
        avg:  [66, 74, 84, 82, 70, 62, 58, 54, 50, 56, 68, 72],
      },
      recent: {
        title: 'Recent bookings',
        rows: [
          { dt: 'May 5',  guest: 'O. Ivanova',   src: 'direct',  nights: 2, rev: '€440', status: 'future' },
          { dt: 'May 3',  guest: 'J. Smith',     src: 'booking', nights: 3, rev: '€660', status: 'future' },
          { dt: 'May 1',  guest: 'S. Petrov',    src: 'direct',  nights: 2, rev: '€440', status: 'stayed' },
          { dt: 'Apr 28', guest: 'K. Orlova',    src: 'airbnb',  nights: 4, rev: '€880', status: 'stayed' },
          { dt: 'Apr 24', guest: 'M. Lee',       src: 'booking', nights: 2, rev: '€440', status: 'cancelled' },
          { dt: 'Apr 22', guest: 'A. Sokolov',   src: 'whatsapp',nights: 3, rev: '€660', status: 'stayed' },
          { dt: 'Apr 18', guest: 'E. Kuznetsova',src: 'direct',  nights: 2, rev: '€440', status: 'stayed' },
        ],
      },
      reviews: {
        title: 'Reviews for this cabin',
        items: [
          { rate: 4.6, text: 'Quiet, cozy, everything works. Bathroom needed more shelves.', src: 'Booking', date: 'May 4' },
          { rate: 5.0, text: 'Perfect for a couple. We will be back in autumn.',              src: 'Direct',  date: 'Apr 28' },
          { rate: 4.2, text: 'Good, but wifi was weak closer to the lake.',                   src: 'Google',  date: 'Apr 21' },
        ],
      },
      reco: '#4 shows 70% occupancy at €220 ADR — near category average. To close the gap with #3 (73%), try a −5% midweek discount. Alternatively — refresh photos and listing copy.',
      actions: {
        primary: 'Open #4 in Cloudbeds',
        secondary: 'All bookings of this cabin →',
        export: 'Export cabin (CSV)',
      },
    },

    pattern: {
      header: 'Friday + 2 nights',
      path: ['Booking', 'Patterns', 'Fri + 2N'],
      period: '34 bookings · 24% of all',
      stats: [
        { lbl: 'Bookings', val: '34', delta: '24% of all', sign: 'flat', sub: '' },
        { lbl: 'Revenue', val: '€14,280', delta: '32% of revenue', sign: 'pos', sub: 'higher than booking share', accent: true },
        { lbl: 'Avg per booking', val: '€420', delta: '+€40', sign: 'pos', sub: 'vs all-bookings avg' },
      ],
      trend: {
        title: 'Pattern trend · 12 months',
        insight: 'Fri+2N share grew from 19% to 24% over the year — pattern is strengthening.',
        labels: ['M','J','J','A','S','O','N','D','J','F','M','A'],
        values: [19, 20, 22, 23, 22, 21, 20, 19, 21, 22, 23, 24],
      },
      guests: {
        title: 'Who are these guests',
        types: [
          { lbl: 'Couples', pct: 64 },
          { lbl: 'Friends', pct: 18 },
          { lbl: 'Families', pct: 12 },
          { lbl: 'Solo',   pct: 6  },
        ],
        repeat: { newPct: 58, repeatPct: 42 },
      },
      finance: {
        title: 'Financial profile · per booking',
        rows: [
          { lbl: 'Accommodation', val: '€340' },
          { lbl: 'SPA',           val: '€48' },
          { lbl: 'F&B',           val: '€26' },
          { lbl: 'Other',         val: '€6' },
          { lbl: 'Total',         val: '€420', strong: true },
        ],
        compare: 'Fri+2N €420 · Sat+2N €395 · 1-night midweek €240 · all bookings €380',
        compareNote: 'This pattern is €40 above average — the most valuable.',
      },
      sources: {
        title: 'Booking sources',
        rows: [
          { ch: 'direct',   name: 'Direct',      count: 14, pct: 41 },
          { ch: 'booking',  name: 'Booking.com', count: 9,  pct: 26 },
          { ch: 'airbnb',   name: 'Airbnb',      count: 6,  pct: 18 },
          { ch: 'instagram',name: 'Instagram',   count: 3,  pct: 9  },
          { ch: 'whatsapp', name: 'WhatsApp',    count: 2,  pct: 6  },
        ],
      },
      reco: 'Fri+2N is your most valuable pattern (€420 vs €380 avg). Recommendations: (1) Build a packaged "Friday Wellness Escape". (2) Dedicated Meta Ads landing for couples 28—45. (3) Protect Friday from aggressive discounting.',
      actions: {
        primary: 'All bookings with this pattern →',
        secondary: 'Build promo package',
        export: 'Export pattern (CSV)',
      },
    },

    cancel: {
      header: 'Booking.com cancellations',
      path: ['Booking', 'Cancellations', 'Booking.com'],
      period: 'Last 30 days · 5 of 36 bookings',
      ch: 'booking',
      stats: [
        { lbl: 'Cancel rate', val: '14%', delta: '+5 pp', sign: 'neg', sub: 'vs prev' },
        { lbl: 'Cancelled', val: '5', delta: '', sign: 'flat', sub: 'bookings' },
        { lbl: 'Lost revenue', val: '€2,200', delta: '', sign: 'neg', sub: 'not realized' },
      ],
      timing: {
        title: 'When cancellations happen',
        bins: [
          { lbl: '30+ days',  pct: 8 },
          { lbl: '15—30',     pct: 22 },
          { lbl: '8—14',      pct: 44 },
          { lbl: '0—7',       pct: 26 },
        ],
        bench: 'Other OTA average cancellation point: 14 days out. Booking.com: 12 days — close to norm.',
      },
      cancelled: {
        title: 'Who cancelled',
        cols: ['Booked', 'Cancelled', 'Lead', 'Stay', 'Cabin', 'Lost'],
        rows: [
          { booked: 'Apr 14', cancelled: 'May 2',  lead: '18d', stay: 'May 5—7', cabin: '#5 Maldives', lost: '€720' },
          { booked: 'Apr 12', cancelled: 'Apr 28', lead: '16d', stay: 'May 4—6', cabin: '#3 Portofino',lost: '€440' },
          { booked: 'Apr 5',  cancelled: 'Apr 22', lead: '17d', stay: 'May 11—12',cabin: '#4 Latvia',  lost: '€220' },
          { booked: 'Mar 28', cancelled: 'Apr 20', lead: '23d', stay: 'May 8—10', cabin: '#2 Bali',    lost: '€520' },
          { booked: 'Mar 25', cancelled: 'Apr 14', lead: '20d', stay: 'May 15—16',cabin: '#1 Cyprus',  lost: '€300' },
        ],
      },
      otaCompare: {
        title: 'Comparison with other OTAs',
        cols: ['OTA', 'Bookings', 'Cancel %', 'Avg time to cancel'],
        rows: [
          { name: 'Airbnb',      count: 33, rate: '18%', avgTime: '11d', tone: 'warn' },
          { name: 'Booking.com', count: 36, rate: '14%', avgTime: '12d', tone: 'self' },
          { name: 'Expedia',     count: 8,  rate: '12%', avgTime: '14d', tone: 'flat' },
          { name: 'Direct',      count: 42, rate: '7%',  avgTime: '16d', tone: 'good' },
        ],
      },
      economics: {
        title: 'Effective channel economics',
        rows: [
          { lbl: 'Gross bookings',         val: '36' },
          { lbl: 'Cancelled',              val: '5 (14%)', neg: true },
          { lbl: 'Net stayed',             val: '31',      strong: true },
          { lbl: 'Gross revenue',          val: '€15,840' },
          { lbl: 'Cancellation losses',    val: '−€2,200', neg: true },
          { lbl: 'Net revenue',            val: '€13,640', strong: true },
          { lbl: 'Commission paid (15%)',  val: '−€2,046', neg: true },
          { lbl: 'Net contribution',       val: '€11,594', strong: true, accent: true },
          { lbl: 'Effective net per booking', val: '€322', accent: true },
        ],
        compare: 'Direct net per booking: €395. This channel is 18% less efficient after losses and commission.',
      },
      reco: 'Possible steps: (1) Switch part of Booking.com listing to non-refundable rate at −10%. (2) Reallocate some budget to Direct marketing. (3) Review positioning — price may be too "cheap" relative to other OTAs.',
      actions: {
        primary: 'Booking.com Partner Hub',
        secondary: 'All cancellations of this channel →',
        export: 'Export cancellations (CSV)',
      },
    },

    pickup: {
      header: 'June 2026 · pickup',
      path: ['Booking', 'Pickup', 'June 2026'],
      period: 'Stay-date analysis · 30 days',
      stats: [
        { lbl: 'OTB', val: '184 / 300', delta: '61%', sign: 'flat', sub: 'nights booked' },
        { lbl: 'vs LY same time', val: '−12%', delta: 'behind', sign: 'neg', sub: '' },
        { lbl: 'Forecast closure', val: '88%', delta: '+3 pp', sign: 'pos', sub: 'by month end' },
      ],
      paceCurve: {
        title: 'Pace curve · June',
        insight: 'Current accumulation tracks LY with a 4—5 day lag. Most pickup expected in the final 21 days.',
        days: 60,
      },
      heatmap: {
        title: 'Heatmap · June',
        cabins: ['#1 Cyprus', '#2 Bali', '#3 Portofino', '#4 Latvia', '#5 Maldives'],
      },
      weakest: {
        title: 'Weakest days',
        cols: ['Date', 'DoW', 'OTB', 'Hist avg', 'Gap'],
        rows: [
          { dt: 'Jun 3',  dow: 'Wed', otb: '0/5', avg: '3.2', gap: '−3.2' },
          { dt: 'Jun 10', dow: 'Wed', otb: '1/5', avg: '3.4', gap: '−2.4' },
          { dt: 'Jun 17', dow: 'Wed', otb: '0/5', avg: '3.1', gap: '−3.1' },
          { dt: 'Jun 4',  dow: 'Thu', otb: '1/5', avg: '3.0', gap: '−2.0' },
          { dt: 'Jun 24', dow: 'Wed', otb: '1/5', avg: '3.2', gap: '−2.2' },
        ],
        pattern: 'Concentration — Wednesdays and Thursdays. 4 of 5 weak days are mid-week.',
      },
      leadStats: {
        title: 'Lead time analysis',
        rows: [
          { lbl: 'Median lead — current bookings',          val: '24 days' },
          { lbl: 'Median lead — same time LY',               val: '21 days' },
          { lbl: '% volume expected in last 30 days',        val: '76%', accent: true },
        ],
        note: 'Pace is behind, but 76% of volume is still ahead — panic not warranted.',
      },
      reco: 'June is behind on pace, but 76% of volume is still expected. Concentration of the gap — weekdays, especially Wednesdays (3 nights with zero occupancy). Recommendations: (1) "Wellness Wednesday" promo — special rate + SPA package. (2) Meta Ads boost focused on June 3, 10, 17, 24. (3) Review pricing for these dates.',
      actions: {
        primary: 'Open Booking Pace on main →',
        secondary: 'Build promo campaign',
        export: 'Export June (CSV)',
      },
    },
  },
};
