/* globals React, ReactDOM, Recharts */
const { useState, useMemo } = React;
const {
  BarChart, Bar, AreaChart, Area, PieChart, Pie, Cell,
  XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer
} = Recharts;

// ============================================================
// EMBEDDED DATA
// ============================================================
const RAW = {"fields":["date","reported","regressed","resolved","reopened","observation","highest","normal","website_reported","website_regressed","cb_reported","cb_regressed","pb_reported","pb_regressed"],"rows":[["2023-03-21",20,0,0,0,0,16,4,20,0,0,0,0,0],["2023-03-22",20,0,0,0,0,15,5,20,0,0,0,0,0],["2023-03-23",23,0,0,0,0,19,4,10,0,0,0,13,0],["2023-03-24",20,0,0,0,0,14,6,11,0,0,0,9,0],["2023-03-27",19,0,0,0,0,17,2,5,0,0,0,14,0],["2023-03-28",10,0,0,0,0,8,2,3,0,0,0,7,0],["2023-03-29",15,0,0,0,0,2,13,8,0,0,0,7,0],["2023-03-30",4,0,0,0,0,3,1,4,0,0,0,0,0],["2023-03-31",26,0,0,0,0,26,0,0,0,26,0,0,0],["2023-04-03",12,0,0,0,0,6,6,0,0,12,0,0,0],["2023-04-04",21,0,0,0,0,18,3,12,0,0,0,9,0],["2023-04-05",8,0,0,0,0,8,0,1,0,1,0,6,0],["2023-04-06",13,0,0,0,0,5,8,5,0,1,0,7,0],["2023-04-07",13,0,0,0,0,3,10,9,0,1,0,3,0],["2023-04-10",8,0,0,0,0,3,5,4,0,0,0,4,0],["2023-04-11",20,0,0,0,0,18,2,16,0,3,0,1,0],["2023-04-12",21,0,0,0,0,19,2,4,0,11,0,6,0],["2023-04-13",3,0,0,0,0,2,1,3,0,0,0,0,0],["2023-04-14",3,12,6,0,6,0,3,2,6,1,0,0,6],["2023-04-17",4,0,0,0,0,2,2,2,0,0,0,2,0],["2023-04-18",6,0,0,0,0,4,2,1,0,0,0,5,0],["2023-04-19",27,0,0,0,0,24,3,2,0,25,0,0,0],["2023-04-20",8,0,0,0,0,7,1,0,0,8,0,0,0],["2023-04-21",29,0,0,0,0,7,22,0,0,0,0,29,0],["2023-04-24",28,0,0,0,0,5,23,0,0,0,0,28,0],["2023-04-25",30,0,0,0,0,22,8,30,0,0,0,0,0],["2023-04-26",34,0,0,0,0,28,6,33,0,0,0,1,0],["2023-04-27",25,0,0,0,0,19,6,25,0,0,0,0,0],["2023-04-28",28,0,0,0,0,18,10,27,0,0,0,1,0],["2023-05-01",0,20,2,0,18,0,0,0,8,0,0,0,12],["2023-05-02",26,0,0,0,0,6,20,1,0,0,0,25,0],["2023-05-03",26,0,0,0,0,0,26,0,0,0,0,26,0],["2023-05-04",28,0,0,0,0,1,27,0,0,0,0,28,0],["2023-05-05",27,0,0,0,0,5,22,0,0,0,0,27,0],["2023-05-08",9,0,0,0,0,4,5,0,0,0,0,9,0],["2023-05-09",25,0,0,0,0,10,15,10,0,0,0,15,0],["2023-05-10",12,0,0,0,0,8,4,7,0,0,0,5,0],["2023-05-11",28,0,0,0,0,5,23,0,0,28,0,0,0],["2023-05-12",18,0,0,0,0,4,14,1,0,15,0,2,0],["2023-05-15",2,20,7,2,11,2,0,0,9,2,1,0,10],["2023-05-16",20,0,0,0,0,18,2,1,0,1,0,18,0],["2023-05-17",18,0,0,0,0,16,2,8,0,10,0,0,0],["2023-05-18",12,0,0,0,0,9,3,3,0,0,0,9,0],["2023-05-19",12,0,0,0,0,9,3,9,0,0,0,3,0],["2023-05-22",30,0,0,0,0,13,17,0,0,0,0,30,0],["2023-05-23",22,0,0,0,0,11,11,10,0,0,0,12,0],["2023-05-24",19,0,0,0,0,15,4,5,0,14,0,0,0],["2023-05-25",14,0,0,0,0,9,5,8,0,4,0,2,0],["2023-05-26",16,0,0,0,0,12,4,12,0,1,0,3,0],["2023-05-29",26,0,0,0,0,17,9,0,0,9,0,17,0],["2023-05-30",18,0,0,0,0,14,4,2,0,6,0,10,0],["2023-05-31",6,2,0,0,2,2,4,5,2,1,0,0,0],["2023-06-01",11,0,0,0,0,9,2,0,0,11,0,0,0],["2023-06-02",4,0,0,0,0,3,1,0,0,0,0,4,0],["2023-06-05",28,0,0,0,0,24,4,28,0,0,0,0,0],["2023-06-06",26,0,0,0,0,17,9,25,0,1,0,0,0],["2023-06-07",33,0,0,0,0,28,5,33,0,0,0,0,0],["2023-06-08",23,0,0,0,0,19,4,23,0,0,0,0,0],["2023-06-09",21,0,0,0,0,17,4,15,0,0,0,6,0],["2023-06-12",16,0,0,0,0,12,4,8,0,0,0,8,0],["2023-06-13",31,0,0,0,0,15,16,8,0,23,0,0,0],["2023-06-14",28,0,0,0,0,19,9,20,0,8,0,0,0],["2023-06-15",26,0,0,0,0,10,16,3,0,23,0,0,0],["2023-06-22",28,0,0,0,0,25,3,5,0,23,0,0,0],["2023-06-23",11,0,0,0,0,9,2,2,0,8,0,1,0],["2023-06-26",9,0,0,0,0,7,2,8,0,1,0,0,0],["2023-06-27",15,0,0,0,0,15,0,3,0,12,0,0,0],["2023-06-28",3,0,0,0,0,1,2,1,0,2,0,0,0],["2023-07-18",24,0,0,0,0,20,4,0,0,1,0,23,0],["2023-07-19",10,0,0,0,0,5,5,4,0,0,0,6,0],["2023-07-28",30,1,0,1,0,26,4,30,0,0,1,0,0],["2023-07-31",29,0,0,0,0,22,7,29,0,0,0,0,0],["2023-08-01",30,0,0,0,0,25,5,30,0,0,0,0,0],["2023-08-02",1,22,4,4,14,1,0,1,22,0,0,0,0],["2023-08-03",1,31,10,11,10,0,1,1,31,0,0,0,0],["2023-08-04",3,24,11,6,7,1,2,3,24,0,0,0,0],["2023-08-07",3,18,6,4,8,2,1,3,18,0,0,0,0],["2023-08-08",6,5,4,1,0,1,5,6,5,0,0,0,0],["2023-08-09",7,19,12,3,4,4,3,0,3,0,0,7,16],["2023-08-10",3,22,7,4,11,1,2,2,22,0,0,1,0],["2023-08-14",5,2,1,0,1,5,0,0,2,5,0,0,0],["2023-08-16",2,21,8,6,7,2,0,2,21,0,0,0,0],["2023-08-17",1,13,10,3,0,1,0,0,3,1,10,0,0],["2023-08-18",7,3,2,0,1,6,1,0,2,7,1,0,0],["2023-08-21",3,20,16,1,3,2,1,0,0,0,0,3,20],["2023-08-22",6,4,2,0,2,1,5,0,0,3,2,3,2],["2023-08-23",1,23,4,0,19,1,0,0,1,0,1,1,21],["2023-08-24",7,15,5,1,9,5,2,0,1,0,0,7,14],["2023-08-25",9,4,2,0,2,6,3,0,1,0,0,9,3],["2023-08-28",2,15,3,6,6,2,0,0,2,2,13,0,0],["2023-08-29",4,25,9,6,10,3,1,4,25,0,0,0,0],["2023-08-30",4,27,3,2,22,3,1,4,27,0,0,0,0],["2023-08-31",2,12,7,1,4,2,0,0,0,2,12,0,0],["2023-09-01",5,6,4,0,2,2,3,0,0,0,3,5,3],["2023-09-04",1,26,4,11,11,0,1,1,26,0,0,0,0],["2023-09-05",5,15,1,2,12,3,2,5,15,0,0,0,0],["2023-09-06",3,24,6,4,14,1,2,0,0,3,24,0,0],["2023-09-07",8,19,4,5,10,2,6,0,0,8,19,0,0],["2023-09-08",5,6,1,0,5,2,3,1,3,0,0,4,3],["2023-09-11",4,30,14,5,11,1,3,0,3,0,0,4,27],["2023-09-12",1,30,15,5,10,1,0,1,30,0,0,0,0],["2023-09-13",3,29,12,9,8,1,2,2,15,0,0,1,14],["2023-09-14",5,20,8,4,8,3,2,0,8,0,11,5,1],["2023-09-18",2,2,0,0,2,2,0,2,2,0,0,0,0],["2023-09-20",4,25,14,3,8,2,2,0,0,0,0,4,25],["2023-09-21",6,17,4,4,9,4,2,0,0,0,0,6,17],["2023-09-22",13,8,2,2,4,4,9,0,0,0,0,13,8],["2023-09-25",2,28,10,7,11,1,1,2,19,0,0,0,9],["2023-09-26",1,28,18,3,7,1,0,1,7,0,0,0,21],["2023-09-28",8,19,1,2,16,4,4,7,7,0,0,1,12],["2023-09-29",9,25,15,1,9,0,9,9,5,0,0,0,20],["2023-10-03",7,18,12,3,3,7,0,4,0,0,4,3,14],["2023-10-04",6,24,6,8,10,3,3,1,0,5,24,0,0],["2023-10-05",3,27,13,2,12,3,0,0,0,2,12,1,15],["2023-10-06",3,24,16,2,6,2,1,0,0,2,1,1,23],["2023-10-09",2,25,14,5,6,1,1,0,0,0,0,2,25],["2023-10-10",2,23,11,4,8,1,1,0,0,0,0,2,23],["2023-10-11",0,29,20,2,7,0,0,0,0,0,0,0,29],["2023-10-12",3,27,10,5,12,2,1,0,0,0,0,3,27],["2023-10-13",5,25,13,3,9,5,0,2,1,3,24,0,0],["2023-10-16",4,27,13,3,11,0,4,1,17,3,9,0,1],["2023-10-17",4,26,8,4,13,2,2,3,22,1,1,0,3],["2023-10-18",3,28,9,1,18,2,1,3,28,0,0,0,0],["2023-10-20",4,24,5,5,14,1,3,4,24,0,0,0,0],["2023-10-23",2,22,5,4,13,1,1,2,21,0,0,0,1],["2023-10-24",9,15,5,2,8,4,5,9,15,0,0,0,0],["2023-10-25",1,15,5,1,9,1,0,1,15,0,0,0,0],["2023-10-26",3,14,6,0,8,2,1,3,14,0,0,0,0],["2023-10-27",4,28,14,4,10,1,3,1,10,3,18,0,0],["2023-10-30",0,28,16,2,10,0,0,0,4,0,24,0,0],["2023-10-31",5,23,14,2,7,0,5,0,2,1,1,4,20],["2023-11-01",3,2,1,1,0,0,3,0,0,3,1,0,1],["2023-11-02",3,4,1,0,3,2,1,0,1,0,0,3,3],["2023-11-03",12,4,3,0,1,4,8,9,3,3,0,0,1],["2023-11-06",3,23,5,5,13,3,0,0,3,3,20,0,0],["2023-11-07",1,30,15,3,12,0,1,0,1,1,7,0,22],["2023-11-08",10,8,7,1,0,2,8,0,0,0,0,10,8],["2023-11-09",13,2,0,0,2,6,7,0,0,3,2,10,0],["2023-11-10",15,0,0,0,0,10,5,12,0,1,0,2,0],["2023-11-14",8,22,15,2,5,6,2,0,0,4,16,4,6],["2023-11-15",1,26,18,0,8,0,1,0,0,0,2,1,24],["2023-11-16",8,16,9,1,6,5,3,0,0,0,0,8,16],["2023-11-17",3,7,0,3,4,2,1,0,0,2,6,1,1],["2023-11-20",1,18,11,1,6,1,0,0,0,0,0,1,18],["2023-11-21",5,3,2,0,1,0,5,0,0,0,0,5,3],["2023-11-22",5,16,12,1,3,3,2,0,0,0,0,5,16],["2023-11-23",3,4,1,0,3,0,3,0,0,0,0,3,4],["2023-11-24",10,0,0,0,0,2,8,3,0,0,0,7,0],["2023-11-28",10,0,0,0,0,7,3,4,0,1,0,5,0],["2023-11-29",10,3,0,1,2,0,10,0,0,10,3,0,0],["2023-11-30",4,26,10,4,12,4,0,0,25,4,1,0,0],["2023-12-01",2,26,12,3,11,2,0,2,26,0,0,0,0],["2023-12-04",7,22,6,5,11,3,4,7,22,0,0,0,0],["2023-12-05",3,25,11,0,14,2,1,3,25,0,0,0,0],["2023-12-06",1,29,7,6,16,1,0,1,29,0,0,0,0],["2023-12-07",12,8,3,0,5,1,11,12,8,0,0,0,0],["2023-12-08",6,7,5,0,2,0,6,6,7,0,0,0,0],["2023-12-11",12,1,0,0,1,11,1,1,1,11,0,0,0],["2023-12-12",6,9,6,0,3,3,3,0,2,4,5,2,2],["2023-12-13",0,21,9,2,10,0,0,0,3,0,18,0,0],["2023-12-14",0,27,14,7,6,0,0,0,2,0,25,0,0],["2023-12-15",4,0,0,0,0,1,3,0,0,4,0,0,0],["2023-12-18",2,5,4,0,1,1,1,0,0,0,5,2,0],["2023-12-19",9,10,3,0,7,1,8,7,9,0,0,2,1],["2023-12-20",4,3,1,1,1,3,1,4,3,0,0,0,0],["2023-12-21",1,25,15,1,9,0,1,0,3,0,0,1,22],["2023-12-22",6,19,10,1,8,1,5,2,2,0,0,4,17],["2023-12-26",2,1,0,0,1,2,0,0,1,2,0,0,0],["2023-12-27",0,27,11,2,14,0,0,0,27,0,0,0,0],["2023-12-28",10,13,3,2,8,2,8,10,13,0,0,0,0],["2023-12-29",1,3,1,0,2,0,1,0,3,0,0,1,0],["2024-01-02",4,1,0,0,1,2,2,0,1,4,0,0,0],["2024-01-03",2,1,1,0,0,0,2,2,1,0,0,0,0],["2024-01-04",13,8,2,0,6,2,11,7,4,4,0,2,4],["2024-01-05",11,9,2,1,6,1,10,2,3,1,0,8,6],["2024-01-08",6,26,1,2,23,3,3,6,26,0,0,0,0],["2024-01-09",12,1,0,0,1,0,12,8,1,2,0,2,0],["2024-01-10",10,11,0,0,11,2,8,10,10,0,0,0,1],["2024-01-11",10,0,0,0,0,1,9,7,0,1,0,2,0],["2024-01-12",6,17,5,1,11,3,3,6,17,0,0,0,0],["2024-01-15",8,11,2,1,8,2,6,3,11,4,0,1,0],["2024-01-16",4,21,13,1,7,1,3,0,0,2,7,2,14],["2024-01-17",13,5,3,0,2,5,8,9,2,2,0,2,3],["2024-01-18",12,6,2,0,4,1,11,12,3,0,3,0,0],["2024-01-19",1,0,0,0,0,1,0,0,0,0,0,1,0],["2024-01-22",3,0,0,0,0,2,1,0,0,3,0,0,0],["2024-01-23",14,0,0,0,0,3,11,8,0,0,0,6,0],["2024-01-24",11,2,0,0,2,1,10,4,2,3,0,4,0],["2024-01-25",14,2,1,0,1,0,14,8,0,0,2,6,0],["2024-01-29",11,2,0,0,2,0,11,6,2,2,0,3,0],["2024-01-30",11,1,1,0,0,1,10,7,1,0,0,4,0],["2024-01-31",13,0,0,0,0,2,11,6,0,2,0,5,0],["2024-02-01",4,20,9,6,5,2,2,0,0,4,20,0,0],["2024-02-02",6,14,0,5,9,2,4,0,0,6,14,0,0],["2024-02-05",2,9,8,1,0,2,0,0,0,2,9,0,0],["2024-02-06",2,27,20,3,4,0,2,0,0,0,0,2,27],["2024-02-07",2,26,20,2,4,0,2,0,0,0,0,2,26],["2024-02-08",9,20,15,0,5,7,2,0,0,0,0,9,20],["2024-02-09",2,0,0,0,0,1,1,0,0,0,0,2,0],["2024-02-12",9,8,2,1,5,2,7,1,6,2,0,6,2],["2024-02-13",0,28,8,3,17,0,0,0,28,0,0,0,0],["2024-02-14",0,30,19,1,10,0,0,0,30,0,0,0,0],["2024-02-15",3,28,15,2,11,0,3,3,28,0,0,0,0],["2024-02-16",3,28,14,3,11,1,2,3,28,0,0,0,0],["2024-02-19",0,27,10,4,13,0,0,0,25,0,0,0,2],["2024-02-20",5,17,5,3,9,1,4,4,17,0,0,1,0],["2024-02-21",5,12,1,1,10,2,3,3,4,2,8,0,0],["2024-02-22",11,7,2,1,4,10,1,4,2,5,5,2,0],["2024-02-23",1,0,0,0,0,1,0,1,0,0,0,0,0],["2024-02-26",2,28,10,3,15,1,1,2,23,0,5,0,0],["2024-02-27",2,28,15,3,10,1,1,0,6,0,4,2,18],["2024-02-28",4,1,1,0,0,4,0,0,0,0,1,4,0],["2024-02-29",3,0,0,0,0,1,2,0,0,3,0,0,0],["2024-03-01",11,1,1,0,0,1,10,10,1,1,0,0,0],["2024-03-04",3,27,14,1,12,2,1,0,2,0,0,3,25],["2024-03-05",2,24,19,1,4,1,1,0,0,0,0,2,24],["2024-03-06",1,27,11,3,13,1,0,0,4,1,12,0,11],["2024-03-07",4,22,1,3,18,3,1,0,1,4,20,0,1],["2024-03-08",1,4,0,0,4,1,0,0,0,1,4,0,0],["2024-03-11",11,1,0,1,0,4,7,0,0,6,1,5,0],["2024-03-12",5,22,0,4,18,3,2,0,0,5,8,0,14],["2024-03-13",3,21,14,1,6,1,2,0,4,3,0,0,17],["2024-03-14",11,2,1,0,1,2,9,2,1,3,0,6,1],["2024-03-15",3,25,5,4,16,2,1,0,2,3,23,0,0],["2024-03-18",4,2,0,2,0,2,2,0,2,4,0,0,0],["2024-03-19",12,2,0,0,2,5,7,3,0,8,2,1,0],["2024-03-20",9,1,0,0,1,8,1,2,0,3,1,4,0],["2024-03-21",0,28,17,3,8,0,0,0,3,0,25,0,0],["2024-03-22",4,26,19,4,3,4,0,0,1,4,25,0,0],["2024-03-26",5,22,11,4,7,5,0,0,6,4,14,1,2],["2024-03-27",0,2,0,0,2,0,0,0,2,0,0,0,0],["2024-03-28",8,3,1,0,2,3,5,5,3,3,0,0,0],["2024-03-29",11,2,0,0,2,1,10,8,2,2,0,1,0],["2024-04-01",8,2,0,0,2,0,8,5,2,0,0,3,0],["2024-04-02",3,25,2,4,19,2,1,3,25,0,0,0,0],["2024-04-03",7,24,6,3,15,4,3,7,24,0,0,0,0],["2024-04-04",10,20,5,7,8,5,5,10,20,0,0,0,0],["2024-04-05",10,7,1,1,5,9,1,10,7,0,0,0,0],["2024-04-08",6,17,4,1,12,3,3,6,17,0,0,0,0],["2024-04-09",14,9,4,1,4,6,8,14,9,0,0,0,0],["2024-04-10",7,22,8,0,14,5,2,6,15,1,7,0,0],["2024-04-11",7,21,5,5,11,6,1,5,9,2,8,0,4],["2024-04-12",1,28,3,2,23,1,0,1,8,0,20,0,0],["2024-04-15",1,28,8,1,19,1,0,1,2,0,17,0,9],["2024-04-16",10,21,13,2,6,7,3,8,18,0,1,2,2],["2024-04-17",0,9,1,4,4,0,0,0,9,0,0,0,0],["2024-04-18",3,19,8,2,9,1,2,3,19,0,0,0,0],["2024-04-19",10,19,12,1,6,5,5,10,8,0,11,0,0],["2024-04-22",7,24,14,2,8,2,5,6,14,1,10,0,0],["2024-04-23",7,20,12,0,8,3,4,5,12,2,8,0,0],["2024-04-24",3,25,14,1,10,1,2,2,4,0,0,1,21],["2024-04-25",4,25,14,2,9,0,4,1,4,0,0,3,21],["2024-04-26",2,26,8,1,17,1,1,1,8,0,0,1,18],["2024-04-29",3,30,16,4,10,1,2,0,0,3,30,0,0],["2024-04-30",2,11,4,0,7,0,2,0,10,2,1,0,0],["2024-05-01",3,14,8,3,3,1,2,0,0,2,0,1,14],["2024-05-02",13,2,1,1,0,4,9,1,0,3,0,9,2],["2024-05-03",13,2,2,0,0,3,10,5,0,1,0,7,2],["2024-05-06",12,0,0,0,0,3,9,10,0,0,0,2,0],["2024-05-07",4,14,6,0,8,3,1,3,7,0,2,1,5],["2024-05-08",1,27,15,1,11,0,1,0,27,1,0,0,0],["2024-05-09",2,26,12,2,12,2,0,2,9,0,2,0,15],["2024-05-10",14,5,4,0,1,2,12,10,1,0,0,4,4],["2024-05-13",3,26,16,3,7,1,2,3,26,0,0,0,0],["2024-05-14",4,24,10,5,9,3,1,3,13,0,4,1,7],["2024-05-15",4,16,9,1,6,3,1,4,16,0,0,0,0],["2024-05-16",5,7,1,0,6,4,1,5,7,0,0,0,0],["2024-05-17",11,9,5,3,1,10,1,7,0,1,0,3,9],["2024-05-20",1,29,11,1,17,1,0,1,17,0,12,0,0],["2024-05-21",5,23,6,5,12,3,2,5,3,0,9,0,11],["2024-05-22",5,19,9,0,10,3,2,2,6,0,0,3,13],["2024-05-23",14,1,0,0,1,4,10,12,1,0,0,2,0],["2024-05-24",4,9,5,2,2,2,2,0,0,4,9,0,0],["2024-05-27",1,15,7,0,8,1,0,0,2,0,2,1,11],["2024-05-28",14,0,0,0,0,2,12,12,0,2,0,0,0],["2024-05-29",11,0,0,0,0,9,2,10,0,1,0,0,0],["2024-05-30",4,29,17,1,11,2,2,4,29,0,0,0,0],["2024-05-31",1,31,11,1,19,1,0,1,31,0,0,0,0],["2024-06-03",6,20,9,2,9,1,5,6,20,0,0,0,0],["2024-06-04",5,21,3,0,18,5,0,5,21,0,0,0,0],["2024-06-05",7,26,11,1,14,7,0,5,24,1,0,1,2],["2024-06-06",1,29,14,1,14,1,0,1,28,0,1,0,0],["2024-06-07",9,16,5,0,11,4,5,9,16,0,0,0,0],["2024-06-10",6,20,11,1,8,5,1,4,20,0,0,2,0],["2024-06-11",5,10,5,1,4,4,1,0,0,5,10,0,0],["2024-06-12",5,26,9,0,17,3,2,5,24,0,2,0,0],["2024-06-13",2,31,13,3,15,2,0,2,30,0,1,0,0],["2024-06-14",5,23,13,0,10,5,0,4,12,0,0,1,11],["2024-06-17",1,4,1,0,3,1,0,1,3,0,0,0,1],["2024-06-18",3,8,3,1,4,3,0,2,6,0,0,1,2],["2024-06-19",11,14,5,1,8,9,2,11,14,0,0,0,0],["2024-06-20",11,10,1,1,8,4,7,11,10,0,0,0,0],["2024-06-21",11,2,0,0,2,8,3,7,2,2,0,2,0],["2024-06-24",11,4,2,0,2,10,1,6,3,1,1,4,0],["2024-06-25",5,8,6,0,2,5,0,1,1,4,7,0,0],["2024-06-26",13,6,0,2,4,11,2,8,0,5,6,0,0],["2024-06-27",9,26,1,5,20,6,3,0,0,9,26,0,0],["2024-06-28",5,28,21,2,5,1,4,0,0,0,2,5,26],["2024-07-01",3,31,15,5,11,2,1,2,29,0,0,1,2],["2024-07-02",2,31,15,3,13,1,1,2,31,0,0,0,0],["2024-07-03",1,31,20,0,11,1,0,1,31,0,0,0,0],["2024-07-04",5,25,7,3,15,0,5,5,25,0,0,0,0],["2024-07-05",16,2,1,0,1,9,7,16,2,0,0,0,0],["2024-07-08",10,21,7,3,11,6,4,10,21,0,0,0,0],["2024-07-09",3,30,5,4,21,2,1,1,11,2,19,0,0],["2024-07-10",4,3,1,0,2,1,3,0,3,0,0,4,0],["2024-07-11",5,16,9,0,7,4,1,5,15,0,0,0,1],["2024-07-12",11,7,3,1,3,8,3,11,7,0,0,0,0],["2024-07-15",3,12,4,1,7,1,2,2,8,1,1,0,3],["2024-07-16",4,26,6,5,15,4,0,1,7,3,19,0,0],["2024-07-17",12,16,1,3,12,7,5,3,0,8,15,1,1],["2024-07-18",4,28,14,2,12,4,0,1,6,2,1,1,21],["2024-07-19",9,27,15,3,9,3,6,0,2,0,0,9,25],["2024-07-22",5,31,19,4,8,2,3,0,1,0,0,5,30],["2024-07-23",6,31,21,1,9,2,4,0,0,2,1,4,30],["2024-07-24",3,32,17,6,9,2,1,0,0,0,0,3,32],["2024-07-25",4,31,22,4,5,2,2,4,31,0,0,0,0],["2024-07-26",4,30,14,5,11,1,3,3,30,0,0,1,0],["2024-07-29",5,31,21,1,9,1,4,0,7,0,0,5,24],["2024-07-30",6,27,6,7,14,4,2,2,19,0,0,4,8],["2024-07-31",14,22,13,1,8,10,4,14,22,0,0,0,0],["2024-08-01",14,7,1,0,6,9,5,14,6,0,0,0,1],["2024-08-02",6,31,9,11,11,4,2,3,5,0,0,3,26],["2024-08-05",5,31,5,9,17,1,4,0,2,1,16,4,13],["2024-08-06",4,32,2,10,20,4,0,0,0,4,29,0,3],["2024-08-07",9,25,1,6,18,4,5,3,0,6,25,0,0],["2024-08-08",6,30,15,2,13,3,3,0,2,2,4,4,24],["2024-08-09",13,20,11,1,8,6,7,9,12,0,0,4,8],["2024-08-12",5,4,1,0,3,5,0,5,4,0,0,0,0],["2024-08-13",0,27,11,1,15,0,0,0,2,0,0,0,25],["2024-08-16",7,26,6,1,19,2,5,3,23,0,0,4,3],["2024-08-19",20,0,0,0,0,6,14,20,0,0,0,0,0],["2024-08-20",15,6,4,0,2,14,1,10,1,5,0,0,5],["2024-08-21",16,0,0,0,0,14,2,10,0,5,0,1,0],["2024-08-22",16,0,0,0,0,5,11,13,0,1,0,2,0],["2024-08-23",4,8,3,2,3,3,1,0,0,4,8,0,0],["2024-08-26",16,0,0,0,0,11,5,12,0,3,0,1,0],["2024-08-27",15,0,0,0,0,11,4,15,0,0,0,0,0],["2024-08-28",13,2,1,0,1,3,10,10,2,3,0,0,0],["2024-08-29",15,0,0,0,0,2,13,15,0,0,0,0,0],["2024-08-30",3,14,6,3,5,3,0,0,0,0,0,3,14],["2024-09-02",4,31,14,5,12,1,3,0,0,0,0,4,31],["2024-09-03",9,4,1,0,3,5,4,9,4,0,0,0,0],["2024-09-04",0,11,3,2,6,0,0,0,11,0,0,0,0],["2024-09-05",2,8,4,0,4,2,0,0,0,2,8,0,0],["2024-09-06",2,17,7,0,10,0,2,2,11,0,0,0,6],["2024-09-09",1,9,6,0,3,0,1,0,5,0,0,1,4],["2024-09-10",3,8,4,2,2,1,2,0,0,2,6,1,2],["2024-09-11",4,36,6,5,25,3,1,0,0,3,36,1,0],["2024-09-12",3,26,0,5,21,3,0,1,0,2,26,0,0],["2024-09-13",4,5,0,1,4,3,1,4,0,0,5,0,0],["2024-09-16",0,35,11,2,22,0,0,0,0,0,35,0,0],["2024-09-17",1,35,22,4,9,0,1,1,35,0,0,0,0],["2024-09-18",4,33,21,2,10,1,3,1,33,0,0,3,0],["2024-09-19",3,32,17,2,13,0,3,3,32,0,0,0,0],["2024-09-20",7,26,9,3,14,7,0,7,26,0,0,0,0],["2024-09-23",3,17,10,2,5,0,3,0,0,0,0,3,17],["2024-09-24",10,14,8,2,4,7,3,10,14,0,0,0,0],["2024-09-25",3,16,7,4,5,3,0,3,16,0,0,0,0],["2024-09-26",2,33,8,14,11,0,2,2,6,0,27,0,0],["2024-09-27",2,35,13,8,14,0,2,1,3,1,32,0,0],["2024-09-30",0,31,13,5,13,0,0,0,29,0,2,0,0],["2024-10-01",2,30,20,1,9,1,1,0,3,2,27,0,0],["2024-10-03",5,20,10,6,4,4,1,0,0,0,0,5,20],["2024-10-04",1,27,22,1,4,1,0,0,0,1,16,0,11],["2024-10-07",2,33,20,7,6,2,0,0,0,2,33,0,0],["2024-10-08",1,32,24,4,4,1,0,0,0,1,24,0,8],["2024-10-09",0,38,18,18,2,0,0,0,0,0,0,0,38],["2024-10-10",2,35,18,12,5,2,0,0,0,2,21,0,14],["2024-10-11",2,34,25,8,1,1,1,0,0,2,1,0,33],["2024-10-14",5,34,18,2,14,3,2,0,0,5,7,0,27],["2024-10-15",3,33,20,2,11,2,1,3,32,0,0,0,1],["2024-10-16",7,31,19,2,10,4,3,3,13,0,0,4,18],["2024-10-17",4,33,21,1,11,3,1,2,10,0,0,2,23],["2024-10-18",1,37,19,4,14,0,1,0,10,0,0,1,27],["2024-10-19",4,32,13,8,11,1,3,0,0,0,0,4,32],["2024-10-21",1,16,2,4,10,0,1,1,16,0,0,0,0],["2024-10-22",11,25,14,3,8,10,1,10,15,1,10,0,0],["2024-10-23",3,32,15,10,7,3,0,2,1,1,25,0,6],["2024-10-24",10,13,9,0,4,8,2,3,0,5,8,2,5],["2024-10-25",17,3,1,1,1,5,12,7,0,5,2,5,1],["2024-10-28",3,38,19,10,9,3,0,0,14,2,14,1,10],["2024-10-29",11,30,17,1,12,5,6,3,3,0,9,8,18],["2024-10-30",20,9,4,0,5,6,14,0,2,2,5,18,2],["2024-11-04",16,7,2,1,4,8,8,1,0,3,5,12,2],["2024-11-05",17,3,1,0,2,9,8,6,1,3,2,8,0],["2024-11-06",3,34,29,0,5,3,0,0,0,0,0,3,34],["2024-11-07",2,33,21,2,10,1,1,0,0,1,19,1,14],["2024-11-08",6,16,7,4,5,2,4,0,0,5,14,1,2],["2024-11-11",7,6,2,2,2,3,4,0,0,1,0,6,6],["2024-11-12",11,8,4,1,3,10,1,0,0,4,7,7,1],["2024-11-13",4,8,3,1,4,2,2,0,0,0,0,4,8],["2024-11-14",9,19,9,7,3,8,1,3,0,5,19,1,0],["2024-11-18",6,6,2,4,0,5,1,0,0,6,6,0,0],["2024-11-19",13,1,0,0,1,8,5,0,0,13,1,0,0],["2024-11-20",3,33,7,6,20,2,1,0,0,3,33,0,0],["2024-11-21",9,18,8,3,7,3,6,0,0,9,18,0,0],["2024-11-22",9,22,13,3,6,3,6,0,0,9,22,0,0],["2024-11-25",3,33,19,2,12,2,1,0,0,1,20,2,13],["2024-11-26",8,27,15,2,10,4,4,4,14,0,0,4,13],["2024-11-27",4,32,16,6,10,1,3,0,0,1,23,3,9],["2024-11-28",6,25,10,1,14,1,5,0,0,4,17,2,8],["2024-11-29",15,1,0,0,1,5,10,0,0,12,1,3,0],["2024-12-02",17,0,0,0,0,1,16,11,0,0,0,6,0],["2024-12-03",0,4,0,0,4,0,0,0,4,0,0,0,0],["2024-12-04",5,8,3,0,5,3,2,3,8,0,0,2,0],["2024-12-05",15,1,1,0,0,5,10,0,0,13,0,2,1],["2024-12-06",15,8,5,0,3,4,11,0,0,11,0,4,8],["2024-12-09",5,5,0,0,5,4,1,0,0,1,4,4,1],["2024-12-10",6,37,22,3,12,4,2,2,10,1,8,3,19],["2024-12-11",16,8,5,0,3,7,9,4,3,2,0,10,5],["2024-12-12",7,32,6,12,14,7,0,6,28,0,0,1,4],["2024-12-13",13,22,16,0,6,5,8,8,11,2,9,3,2],["2024-12-16",17,2,2,0,0,6,11,5,2,9,0,3,0],["2024-12-17",5,35,20,1,14,5,0,5,25,0,0,0,10],["2024-12-19",16,5,2,0,3,4,12,12,2,2,0,2,3],["2024-12-20",15,13,3,0,10,6,9,14,13,0,0,1,0],["2024-12-23",13,5,2,0,3,6,7,7,5,1,0,5,0],["2024-12-24",16,3,2,0,1,5,11,12,3,2,0,2,0],["2024-12-26",16,0,0,0,0,8,8,11,0,3,0,2,0],["2024-12-27",17,2,1,0,1,5,12,10,2,6,0,1,0],["2024-12-30",17,1,1,0,0,5,12,12,1,3,0,2,0],["2024-12-31",17,1,1,0,0,4,13,9,1,4,0,4,0],["2025-01-02",15,0,0,0,0,5,10,7,0,3,0,5,0],["2025-01-03",5,41,27,2,12,3,2,0,7,0,0,5,34],["2025-01-06",6,33,12,8,13,2,4,3,18,0,8,3,7],["2025-01-07",14,12,3,2,7,4,10,0,8,9,3,5,1],["2025-01-08",4,19,10,2,7,3,1,0,9,0,4,4,6],["2025-01-09",9,26,10,1,15,6,3,6,12,1,8,2,6],["2025-01-10",16,8,2,2,4,3,13,8,3,1,5,7,0],["2025-01-13",3,34,13,4,17,3,0,2,22,1,2,0,10],["2025-01-14",16,12,4,1,7,2,14,11,10,2,1,3,1],["2025-01-15",16,9,3,0,6,4,12,8,4,2,5,6,0],["2025-01-16",4,40,8,31,1,2,2,0,0,4,40,0,0],["2025-01-17",1,24,8,8,8,1,0,1,9,0,7,0,8],["2025-01-20",11,15,2,6,7,1,10,8,14,0,0,3,1],["2025-01-21",17,2,1,0,1,5,12,10,1,2,0,5,1],["2025-01-22",14,5,0,0,5,3,11,9,5,3,0,2,0],["2025-01-23",2,41,25,5,11,2,0,0,26,1,6,1,9],["2025-01-24",4,42,33,6,3,1,3,2,11,2,17,0,14],["2025-01-27",15,9,4,0,1,15,0,12,7,1,0,2,2],["2025-01-28",5,22,8,4,10,4,1,5,12,0,4,0,6],["2025-01-29",12,7,4,0,3,2,10,12,3,0,3,0,1],["2025-01-30",6,36,29,2,5,3,3,6,22,0,14,0,0],["2025-01-31",7,29,15,6,8,2,5,4,11,3,7,0,11],["2025-02-03",3,11,6,2,3,2,1,0,4,2,6,1,1],["2025-02-04",15,5,3,0,2,12,3,8,2,1,3,6,0],["2025-02-05",9,19,13,0,6,8,1,2,0,5,9,2,10],["2025-02-06",15,6,4,0,2,5,10,8,0,4,2,3,4],["2025-02-07",18,3,1,0,2,4,14,17,2,1,1,0,0],["2025-02-10",7,4,1,1,2,2,5,0,3,7,1,0,0],["2025-02-11",14,13,7,0,6,11,3,3,1,11,7,0,5],["2025-02-12",3,32,14,8,10,1,2,2,26,0,1,1,5],["2025-02-13",7,40,21,6,13,5,2,1,25,2,5,4,10],["2025-02-14",14,20,10,0,10,8,6,6,17,0,1,8,2],["2025-02-17",8,31,15,3,13,6,2,5,14,2,9,1,8],["2025-02-18",15,15,8,1,6,10,5,7,9,2,6,6,0],["2025-02-19",16,7,2,0,5,5,11,10,4,4,2,2,1],["2025-02-20",16,4,3,0,1,8,8,15,1,1,1,0,2],["2025-02-21",15,2,0,0,2,2,13,13,2,2,0,0,0],["2025-02-24",6,26,16,3,7,3,3,1,0,2,10,3,16],["2025-02-25",16,2,2,0,0,10,6,0,0,11,1,5,1],["2025-02-26",7,30,16,5,9,5,2,3,30,4,0,0,0],["2025-02-27",15,8,3,0,5,4,11,5,6,0,0,10,2],["2025-02-28",14,7,3,0,4,8,6,7,6,1,1,6,0],["2025-03-03",4,36,17,3,16,2,2,2,31,2,5,0,0],["2025-03-04",14,15,9,0,6,3,11,6,9,6,5,2,1],["2025-03-05",7,29,15,2,12,1,6,2,3,0,8,5,18],["2025-03-06",15,18,6,5,7,3,12,6,10,0,1,9,7],["2025-03-07",9,15,10,1,4,5,4,2,7,6,8,1,0],["2025-03-11",3,14,7,3,4,0,3,1,12,0,0,2,2],["2025-03-12",16,16,7,1,8,9,7,11,15,1,0,4,1],["2025-03-13",20,4,2,1,1,19,1,11,1,0,0,9,3],["2025-03-17",0,41,23,7,11,0,0,0,26,0,11,0,4],["2025-03-18",17,3,1,0,2,14,3,9,3,3,0,5,0],["2025-03-19",6,1,0,0,1,5,1,6,1,0,0,0,0],["2025-03-20",10,9,6,1,2,1,9,3,2,3,7,4,0],["2025-03-21",15,1,0,0,1,6,9,9,1,2,0,4,0],["2025-03-24",12,10,6,0,4,11,1,4,10,1,0,7,0],["2025-03-25",14,6,3,0,3,4,10,12,6,0,0,2,0],["2025-03-26",11,12,5,4,3,9,2,8,11,1,1,2,0],["2025-03-27",14,7,3,3,1,3,11,4,1,7,6,3,0],["2025-03-28",13,4,4,0,0,2,11,9,4,4,0,0,0],["2025-03-31",12,4,0,0,4,0,12,6,3,0,1,6,0],["2025-04-01",1,20,12,2,6,0,1,0,0,1,7,0,13],["2025-04-02",1,14,5,1,8,0,1,0,1,0,0,1,13],["2025-04-03",1,38,9,2,27,0,1,1,5,0,10,0,23],["2025-04-04",4,26,16,0,10,3,1,2,1,2,8,0,17],["2025-04-07",12,9,4,0,5,3,9,5,2,2,1,5,6],["2025-04-08",13,8,4,1,3,11,2,6,7,2,0,5,1],["2025-04-09",13,1,1,0,0,4,9,4,1,3,0,6,0],["2025-04-11",7,28,20,2,6,3,4,0,0,7,28,0,0],["2025-04-14",4,6,2,1,3,4,0,0,0,4,1,0,5],["2025-04-15",13,5,1,1,3,8,5,5,0,0,0,8,5],["2025-04-16",3,39,19,6,14,2,1,3,39,0,0,0,0],["2025-04-17",2,42,21,1,20,1,1,1,33,0,7,1,2],["2025-04-18",4,38,16,3,19,2,2,1,21,3,8,0,9],["2025-04-21",6,12,6,2,4,2,4,0,5,6,0,0,7],["2025-04-22",4,34,15,5,14,0,4,4,20,0,0,0,14],["2025-04-23",6,26,7,0,19,2,4,4,19,0,0,2,7],["2025-04-24",5,23,8,3,12,1,4,4,23,0,0,1,0],["2025-04-25",2,35,19,1,15,0,2,1,10,1,12,0,13],["2025-04-28",9,15,3,2,10,0,9,6,8,2,1,1,6],["2025-04-29",5,0,0,0,0,0,5,1,0,3,0,1,0],["2025-04-30",1,0,0,0,0,0,1,1,0,0,0,0,0],["2025-05-01",2,0,0,0,0,1,1,0,0,1,0,1,0],["2025-05-02",17,0,0,0,0,4,13,11,0,1,0,5,0],["2025-05-05",12,0,0,0,0,2,10,10,0,0,0,2,0],["2025-05-06",11,8,2,1,5,11,0,7,7,1,1,3,0],["2025-05-07",3,5,3,0,2,3,0,1,3,0,0,2,2],["2025-05-08",7,15,4,2,9,3,4,3,15,0,0,4,0],["2025-05-09",12,8,6,0,2,1,11,9,5,2,0,1,3],["2025-05-12",12,8,6,0,2,1,11,11,6,0,0,1,2],["2025-05-13",12,7,4,0,3,0,12,12,5,0,0,0,2],["2025-05-14",3,38,14,2,22,2,1,1,4,2,32,0,2],["2025-05-15",8,31,13,6,12,8,0,0,0,8,18,0,13],["2025-05-16",12,13,7,3,3,4,8,0,2,10,3,2,8],["2025-05-19",17,6,3,1,2,5,12,8,2,6,2,3,2],["2025-05-20",16,5,1,0,4,2,14,7,4,6,1,3,0],["2025-05-21",14,3,0,1,2,3,11,4,2,10,1,0,0],["2025-05-22",14,4,2,0,2,1,13,4,2,9,1,1,1],["2025-05-23",10,8,5,0,3,0,10,4,1,3,0,3,7],["2025-05-26",11,7,7,0,0,3,8,5,5,4,2,2,0],["2025-05-27",14,0,0,0,0,1,13,11,0,3,0,0,0],["2025-05-28",2,10,9,0,1,1,1,0,0,2,8,0,2],["2025-05-29",4,24,11,4,9,0,4,0,0,2,21,2,3],["2025-05-30",14,2,1,0,1,1,13,3,0,9,2,2,0],["2025-06-02",2,37,15,7,15,1,1,2,21,0,0,0,16],["2025-06-03",7,31,15,3,13,2,5,2,7,0,0,5,24],["2025-06-04",7,8,4,0,4,5,2,0,2,0,0,7,6],["2025-06-05",14,6,3,1,2,5,9,0,3,0,0,14,3],["2025-06-06",15,4,1,1,2,4,11,0,3,0,0,15,1],["2025-06-09",7,10,8,1,1,1,6,2,0,0,0,5,10],["2025-06-10",3,5,4,1,0,0,3,0,0,0,0,3,5],["2025-06-11",12,5,3,0,2,1,11,9,0,0,0,3,5],["2025-06-12",9,24,6,11,7,2,7,8,24,0,0,1,0],["2025-06-13",13,14,10,0,4,3,10,9,14,2,0,2,0],["2025-06-16",0,12,8,1,3,0,0,0,0,0,12,0,0],["2025-06-17",0,40,30,2,8,0,0,0,0,0,15,0,25],["2025-06-18",6,28,15,2,11,1,5,4,23,0,1,2,4],["2025-06-19",10,14,9,1,4,3,7,0,0,8,12,2,2],["2025-06-20",7,30,15,1,14,2,5,0,0,1,1,6,29],["2025-06-23",13,17,5,2,10,8,5,0,0,9,9,4,8],["2025-06-24",14,7,2,1,4,4,10,0,0,13,3,1,4],["2025-06-25",7,26,7,4,15,1,6,0,0,4,25,3,1],["2025-06-26",11,14,5,1,8,2,9,0,0,5,14,6,0],["2025-06-27",5,13,4,2,7,2,3,0,0,4,13,1,0],["2025-06-30",10,18,7,1,10,6,4,0,0,8,18,2,0],["2025-07-01",6,23,16,2,5,0,6,0,0,5,8,1,15],["2025-07-02",15,14,8,2,4,7,8,0,0,5,4,10,10],["2025-07-03",15,12,8,1,3,3,12,0,0,0,0,15,12],["2025-07-04",11,22,14,0,8,2,9,5,10,0,0,6,12],["2025-07-07",13,3,1,0,2,5,8,5,3,0,0,8,0],["2025-07-08",14,3,1,0,2,5,9,4,1,0,0,10,2],["2025-07-09",17,3,2,0,1,4,13,9,3,0,0,8,0],["2025-07-10",3,29,22,4,3,1,2,0,1,3,28,0,0],["2025-07-11",7,1,0,1,0,3,4,0,0,7,1,0,0],["2025-07-14",14,1,0,0,1,1,13,5,0,6,1,3,0],["2025-07-15",14,4,2,0,2,6,8,5,1,6,3,3,0],["2025-07-16",5,29,20,0,9,1,4,5,28,0,1,0,0],["2025-07-17",12,3,2,0,1,0,12,9,3,2,0,1,0],["2025-07-18",3,29,15,4,10,1,2,0,12,3,17,0,0],["2025-07-21",2,9,5,3,1,1,1,0,0,2,2,0,7],["2025-07-22",3,40,23,7,10,0,3,0,8,1,7,2,25],["2025-07-23",2,39,22,4,13,0,2,1,26,1,3,0,10],["2025-07-24",11,13,5,0,8,1,10,8,8,0,0,3,5],["2025-07-25",18,4,2,0,2,3,15,17,3,0,0,1,1],["2025-07-28",6,19,13,0,6,0,6,2,0,0,1,4,18],["2025-07-29",3,9,2,1,6,2,1,1,3,2,6,0,0],["2025-07-30",4,39,23,1,15,3,1,0,0,3,13,1,26],["2025-07-31",14,11,9,0,2,3,11,3,1,7,0,4,10],["2025-08-01",2,21,11,6,4,2,0,0,0,2,21,0,0],["2025-08-04",3,37,23,2,12,3,0,0,0,3,37,0,0],["2025-08-05",4,34,15,5,14,2,2,0,0,4,34,0,0],["2025-08-06",0,20,12,0,8,0,0,0,0,0,0,0,20],["2025-08-07",8,29,16,2,11,3,5,1,17,7,12,0,0],["2025-08-08",3,19,10,3,6,3,0,0,0,3,19,0,0],["2025-08-11",4,25,10,2,13,0,4,0,11,1,14,3,0],["2025-08-12",10,9,3,0,6,8,2,3,7,6,2,1,0],["2025-08-13",13,5,2,0,3,3,10,2,3,5,2,6,0],["2025-08-14",13,6,2,1,3,4,9,4,1,7,5,2,0],["2025-08-18",0,4,1,0,3,0,0,0,4,0,0,0,0],["2025-08-19",9,4,1,0,3,3,6,7,0,2,1,0,3],["2025-08-20",14,3,0,0,3,3,11,10,2,2,1,2,0],["2025-08-21",5,29,1,2,26,0,5,1,0,4,29,0,0],["2025-08-22",5,39,25,4,10,3,2,1,9,4,30,0,0],["2025-08-25",1,22,8,2,12,0,1,0,11,1,11,0,0],["2025-08-26",0,31,12,3,16,0,0,0,14,0,0,0,17],["2025-08-27",11,14,6,2,6,2,9,5,11,3,2,3,1],["2025-08-28",12,4,1,0,3,3,9,10,4,0,0,2,0],["2025-08-29",3,34,15,6,13,0,3,1,13,2,21,0,0],["2025-09-01",9,22,10,3,9,1,8,6,13,0,3,3,6],["2025-09-02",13,3,2,1,0,1,12,9,3,2,0,2,0],["2025-09-03",12,10,6,0,4,0,12,8,8,1,0,3,2],["2025-09-04",12,9,2,0,7,0,12,9,5,1,1,2,3],["2025-09-05",13,4,3,0,1,2,11,8,0,3,2,2,2],["2025-09-08",1,41,25,1,15,0,1,0,13,1,22,0,6],["2025-09-09",7,4,2,0,2,2,5,0,2,1,0,6,2],["2025-09-10",2,0,0,0,0,1,1,2,0,0,0,0,0],["2025-09-11",3,14,9,2,3,0,3,0,0,3,14,0,0],["2025-09-12",2,40,16,2,22,1,1,0,1,0,2,2,37],["2025-09-15",5,29,20,1,8,1,4,2,2,0,0,3,27],["2025-09-16",11,17,11,0,6,3,8,0,0,3,16,8,1],["2025-09-17",11,15,10,1,4,1,10,0,0,2,14,9,1],["2025-09-18",2,33,14,1,18,1,1,0,30,2,3,0,0],["2025-09-19",2,29,7,1,21,1,1,0,20,2,9,0,0],["2025-09-22",7,22,14,0,8,0,7,0,6,7,16,0,0],["2025-09-23",12,7,3,0,4,1,11,1,6,6,1,5,0],["2025-09-24",10,16,13,0,3,3,7,0,2,1,0,9,14],["2025-09-25",5,21,5,0,16,0,5,3,21,0,0,2,0],["2025-09-26",13,4,2,0,2,5,8,1,4,0,0,12,0],["2025-09-29",9,6,1,0,5,1,8,4,6,2,0,3,0],["2025-09-30",9,3,0,0,3,1,8,1,3,2,0,6,0],["2025-10-01",12,3,0,0,3,0,12,3,3,1,0,8,0],["2025-10-03",10,15,11,0,4,0,10,3,2,0,0,7,13],["2025-10-06",1,33,27,2,4,0,1,0,7,0,0,1,26],["2025-10-07",0,34,12,3,19,0,0,0,26,0,8,0,0],["2025-10-08",3,14,6,0,8,0,3,1,10,0,0,2,4],["2025-10-09",9,28,10,0,18,2,7,0,14,1,11,8,3],["2025-10-10",17,3,2,0,1,1,16,1,3,2,0,14,0],["2025-10-13",12,5,5,0,0,4,8,0,1,2,3,10,1],["2025-10-14",10,11,3,5,3,1,9,1,1,0,10,9,0],["2025-10-15",5,3,1,0,2,3,2,5,3,0,0,0,0],["2025-10-16",10,24,7,1,16,0,10,10,19,0,3,0,2],["2025-10-17",6,26,13,2,11,1,5,4,3,0,0,2,23],["2025-10-22",0,32,10,4,18,0,0,0,27,0,0,0,5],["2025-10-23",6,33,17,0,16,0,6,5,11,1,21,0,1],["2025-10-24",6,11,3,1,7,1,5,0,9,6,0,0,2],["2025-10-27",13,22,1,0,21,0,13,13,22,0,0,0,0],["2025-10-28",1,38,8,0,30,0,1,1,31,0,1,0,6],["2025-10-29",4,22,2,2,18,2,2,4,20,0,0,0,2],["2025-10-30",15,13,5,1,7,5,10,15,13,0,0,0,0],["2025-10-31",2,39,15,4,20,0,2,2,39,0,0,0,0],["2025-11-03",3,40,19,3,18,0,3,2,24,0,0,1,16],["2025-11-04",5,39,20,0,19,3,2,4,21,0,0,1,18],["2025-11-06",3,39,15,2,22,1,2,2,20,0,0,1,19],["2025-11-07",7,23,8,1,14,3,4,6,18,0,0,1,5],["2025-11-10",1,24,6,0,18,1,0,1,24,0,0,0,0],["2025-11-11",7,11,6,1,4,5,2,7,6,0,0,0,5],["2025-11-12",1,37,19,2,16,0,1,1,22,0,0,0,15],["2025-11-13",5,39,11,1,27,1,4,1,10,0,13,4,16],["2025-11-14",1,42,17,0,25,0,1,0,25,0,10,1,7],["2025-11-17",1,21,9,1,11,1,0,1,21,0,0,0,0],["2025-11-18",2,9,1,1,7,0,2,2,5,0,0,0,4],["2025-11-19",2,43,17,1,25,0,2,0,8,0,18,2,17],["2025-11-20",6,37,5,4,28,2,4,5,33,1,3,0,1],["2025-11-21",16,12,4,3,5,5,11,16,11,0,0,0,1],["2025-11-24",8,39,27,2,10,4,4,0,5,4,18,4,16],["2025-11-25",2,10,9,0,1,1,1,0,0,0,2,2,8],["2025-11-26",4,34,14,6,14,2,2,0,25,0,3,4,6],["2025-11-27",12,14,9,2,3,2,10,2,4,1,0,9,10],["2025-11-28",12,1,1,0,0,3,9,3,0,0,0,9,1],["2025-12-01",13,1,0,0,1,1,12,12,1,0,0,1,0],["2025-12-02",1,39,5,14,20,1,0,1,39,0,0,0,0],["2025-12-03",17,0,0,0,0,2,15,17,0,0,0,0,0],["2025-12-04",5,28,11,5,12,2,3,0,0,3,8,2,20],["2025-12-05",5,22,12,2,8,2,3,0,10,5,10,0,2],["2025-12-08",6,37,25,1,11,5,1,0,25,6,12,0,0],["2025-12-09",3,10,5,0,5,1,2,0,4,1,4,2,2],["2025-12-10",3,25,12,1,12,2,1,2,23,0,0,1,2],["2025-12-11",2,17,8,1,8,2,0,0,7,2,10,0,0],["2025-12-12",14,3,2,0,1,1,13,7,1,6,2,1,0],["2025-12-15",3,43,25,2,16,1,2,3,42,0,1,0,0],["2025-12-16",4,11,5,0,6,0,4,1,11,3,0,0,0],["2025-12-17",15,4,3,0,1,1,14,7,2,8,2,0,0],["2025-12-18",13,3,0,0,3,1,12,11,3,2,0,0,0],["2025-12-19",13,2,0,0,2,1,12,11,2,2,0,0,0],["2025-12-22",13,1,0,0,1,0,13,12,1,1,0,0,0],["2025-12-23",13,0,0,0,0,1,12,6,0,1,0,6,0],["2025-12-24",12,0,0,0,0,0,12,7,0,0,0,5,0],["2025-12-26",13,0,0,0,0,0,13,8,0,0,0,5,0],["2025-12-29",12,0,0,0,0,0,12,9,0,0,0,3,0],["2025-12-30",14,0,0,0,0,0,14,12,0,1,0,1,0],["2025-12-31",14,0,0,0,0,2,12,9,0,0,0,5,0],["2026-01-02",13,0,0,0,0,0,13,9,0,1,0,3,0],["2026-01-05",2,43,23,0,20,1,1,1,30,1,5,0,8],["2026-01-06",8,21,8,0,13,0,8,3,17,4,1,1,3],["2026-01-07",0,47,31,0,16,0,0,0,45,0,2,0,0],["2026-01-08",0,9,5,1,3,0,0,0,8,0,1,0,0],["2026-01-09",3,23,8,1,14,0,3,3,21,0,0,0,2],["2026-01-12",10,15,7,0,8,0,10,1,8,1,0,8,7],["2026-01-13",10,9,8,0,1,0,10,2,2,0,0,8,7],["2026-01-14",6,29,17,2,10,0,6,0,5,5,17,1,7],["2026-01-15",11,6,2,0,4,0,11,2,5,9,1,0,0],["2026-01-16",3,13,7,0,6,0,3,3,7,0,0,0,6],["2026-01-19",3,21,16,0,5,1,2,1,0,0,0,2,21],["2026-01-20",12,0,0,0,0,1,11,3,0,2,0,7,0],["2026-01-21",12,3,2,0,1,1,11,2,0,3,2,7,1],["2026-01-22",2,8,8,0,0,0,2,0,0,1,0,1,8],["2026-01-23",9,0,0,0,0,2,7,0,0,0,0,9,0],["2026-01-27",9,9,4,0,5,1,8,0,0,0,0,9,9],["2026-01-28",4,23,10,7,6,0,4,1,0,1,9,2,14],["2026-01-29",7,10,6,2,2,1,6,1,0,3,6,3,4],["2026-01-30",2,43,35,0,8,0,2,2,43,0,0,0,0],["2026-02-02",1,39,22,0,17,0,1,0,34,0,0,1,5],["2026-02-03",6,16,11,0,5,0,6,2,14,0,0,4,2],["2026-02-04",2,2,2,0,0,0,2,0,1,2,1,0,0],["2026-02-05",6,11,3,2,6,0,6,2,4,0,0,4,7],["2026-02-06",9,3,3,0,0,0,9,7,3,0,0,2,0],["2026-02-09",14,3,1,0,2,2,12,6,3,0,0,8,0],["2026-02-10",8,3,1,0,2,8,0,3,3,1,0,4,0],["2026-02-11",1,44,14,5,25,0,1,0,4,1,24,0,16],["2026-02-12",2,29,16,2,11,2,0,0,22,0,1,2,6],["2026-02-13",0,25,13,0,12,0,0,0,21,0,0,0,4],["2026-02-16",4,35,15,5,15,0,4,2,35,1,0,1,0],["2026-02-17",2,4,1,1,2,0,2,2,4,0,0,0,0],["2026-02-18",3,45,22,3,20,0,3,3,43,0,0,0,2],["2026-02-19",4,27,19,0,8,2,2,1,12,0,0,3,15],["2026-02-20",2,20,14,0,6,1,1,0,1,0,0,2,19],["2026-02-23",5,33,19,5,9,1,4,0,7,5,26,0,0],["2026-02-24",6,17,2,0,15,1,5,0,0,6,17,0,0],["2026-02-25",7,18,11,0,7,0,7,2,10,4,4,1,4],["2026-02-26",1,22,1,2,19,0,1,0,2,1,20,0,0],["2026-02-27",3,32,26,0,6,0,3,0,21,3,11,0,0],["2026-03-02",10,20,13,3,4,1,9,2,11,8,9,0,0],["2026-03-03",12,8,2,1,5,0,12,7,7,5,1,0,0],["2026-03-05",4,21,6,6,9,1,3,1,1,2,20,1,0],["2026-03-06",8,0,0,0,0,1,7,0,0,5,0,3,0],["2026-03-09",1,45,27,6,12,0,1,0,8,1,28,0,9],["2026-03-10",5,42,27,0,15,1,4,4,26,0,7,1,9],["2026-03-11",5,43,20,4,19,3,2,2,28,0,3,3,12],["2026-03-12",2,29,14,2,13,2,0,2,24,0,5,0,0],["2026-03-13",1,35,6,1,28,0,1,1,31,0,3,0,1],["2026-03-16",2,39,20,7,12,1,1,0,16,2,13,0,10],["2026-03-17",12,13,6,2,5,1,11,7,5,5,7,0,1],["2026-03-18",13,13,6,0,7,1,12,8,11,4,1,1,1],["2026-03-19",9,23,13,5,5,0,9,7,9,2,14,0,0],["2026-03-20",12,7,6,0,1,2,10,11,2,0,5,1,0],["2026-03-23",4,4,4,0,0,1,3,0,4,4,0,0,0],["2026-03-24",11,10,3,0,7,0,11,7,10,1,0,3,0],["2026-03-25",15,3,3,0,0,0,15,12,0,0,0,3,3],["2026-03-26",14,0,0,0,0,0,14,14,0,0,0,0,0],["2026-03-27",14,3,1,0,2,0,14,8,2,0,0,6,1],["2026-03-30",13,0,0,0,0,0,13,0,0,5,0,8,0],["2026-03-31",4,42,27,7,8,4,0,4,15,0,0,0,27],["2026-04-01",2,38,22,0,16,0,2,0,36,0,0,2,2],["2026-04-02",5,27,19,1,7,0,5,2,6,3,21,0,0],["2026-04-03",15,3,2,0,1,1,14,2,1,11,2,2,0],["2026-04-06",0,16,12,0,4,0,0,0,16,0,0,0,0],["2026-04-07",13,5,3,0,2,2,11,10,5,2,0,1,0],["2026-04-08",14,3,1,0,2,0,14,10,3,4,0,0,0],["2026-04-09",14,0,0,0,0,2,12,9,0,5,0,0,0],["2026-04-10",13,0,0,0,0,1,12,9,0,3,0,1,0],["2026-04-13",12,0,0,0,0,2,10,10,0,1,0,1,0],["2026-04-14",12,0,0,0,0,1,11,12,0,0,0,0,0],["2026-04-15",14,2,0,0,2,0,14,13,2,1,0,0,0],["2026-04-16",2,40,28,0,12,1,1,2,40,0,0,0,0],["2026-04-17",4,13,10,0,3,0,4,4,13,0,0,0,0],["2026-04-20",2,9,4,0,5,1,1,2,9,0,0,0,0],["2026-04-21",7,4,3,0,1,0,7,4,4,0,0,3,0],["2026-04-22",9,5,1,0,2,0,9,5,3,2,2,2,0],["2026-04-23",12,2,1,0,0,0,12,6,1,2,0,4,1],["2026-04-24",1,50,17,0,24,1,0,0,30,0,10,1,10]],"totals":{"reported":6141,"regressed":11570,"resolved":5362,"reopened":1252,"observation":4939,"highest":2579,"normal":3562,"website_reported":2919,"website_regressed":5370,"cb_reported":1438,"cb_regressed":2956,"pb_reported":1784,"pb_regressed":3244},"teams":["Website","ChartBuilder","Playback"]};

const VERSIONS = [{"team":"ChartBuilder","version":"2.3.7","total":89,"reported":89,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-03-31","last":"2023-04-20"},{"team":"ChartBuilder","version":"2.3.9","total":47,"reported":47,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-05-24","last":"2023-06-06"},{"team":"ChartBuilder","version":"2.4.0","total":158,"reported":157,"regressed":1,"resolved":0,"reopened":0,"observation":1,"first":"2023-05-11","last":"2023-07-18"},{"team":"ChartBuilder","version":"2.4.2","total":1,"reported":0,"regressed":1,"resolved":0,"reopened":1,"observation":0,"first":"2023-07-28","last":"2023-07-28"},{"team":"ChartBuilder","version":"2.4.3","total":5,"reported":5,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-08-14","last":"2023-08-14"},{"team":"ChartBuilder","version":"2.4.4","total":111,"reported":26,"regressed":85,"resolved":31,"reopened":17,"observation":37,"first":"2023-08-17","last":"2023-09-07"},{"team":"ChartBuilder","version":"2.4.5","total":11,"reported":0,"regressed":11,"resolved":6,"reopened":1,"observation":4,"first":"2023-09-14","last":"2023-09-14"},{"team":"ChartBuilder","version":"2.5.0","total":226,"reported":51,"regressed":175,"resolved":77,"reopened":24,"observation":73,"first":"2023-10-03","last":"2023-11-29"},{"team":"ChartBuilder","version":"2.5.1","total":77,"reported":23,"regressed":54,"resolved":30,"reopened":9,"observation":15,"first":"2023-11-30","last":"2023-12-18"},{"team":"ChartBuilder","version":"2.5.2","total":14,"reported":14,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-12-26","last":"2024-01-11"},{"team":"ChartBuilder","version":"2.5.3","total":30,"reported":18,"regressed":12,"resolved":7,"reopened":0,"observation":5,"first":"2024-01-15","last":"2024-01-31"},{"team":"ChartBuilder","version":"2.5.4","total":35,"reported":6,"regressed":29,"resolved":17,"reopened":7,"observation":5,"first":"2024-02-01","last":"2024-02-05"},{"team":"ChartBuilder","version":"2.5.5","total":24,"reported":6,"regressed":18,"resolved":8,"reopened":1,"observation":9,"first":"2024-02-21","last":"2024-03-01"},{"team":"ChartBuilder","version":"2.5.6","total":13,"reported":4,"regressed":9,"resolved":5,"reopened":2,"observation":2,"first":"2024-03-15","last":"2024-03-18"},{"team":"ChartBuilder","version":"3.0.0","total":389,"reported":90,"regressed":299,"resolved":103,"reopened":45,"observation":151,"first":"2024-02-02","last":"2024-06-06"},{"team":"ChartBuilder","version":"3.0.1","total":22,"reported":8,"regressed":14,"resolved":7,"reopened":1,"observation":6,"first":"2024-06-11","last":"2024-06-24"},{"team":"ChartBuilder","version":"3.0.2","total":16,"reported":7,"regressed":9,"resolved":8,"reopened":0,"observation":1,"first":"2024-06-25","last":"2024-06-28"},{"team":"ChartBuilder","version":"3.0.3","total":10,"reported":8,"regressed":2,"resolved":1,"reopened":0,"observation":1,"first":"2024-07-15","last":"2024-07-23"},{"team":"ChartBuilder","version":"3.0.4","total":25,"reported":9,"regressed":16,"resolved":7,"reopened":2,"observation":7,"first":"2024-08-23","last":"2024-09-05"},{"team":"ChartBuilder","version":"3.0.5","total":47,"reported":3,"regressed":44,"resolved":14,"reopened":6,"observation":24,"first":"2024-09-10","last":"2024-09-16"},{"team":"ChartBuilder","version":"4.0.0","total":1278,"reported":336,"regressed":942,"resolved":351,"reopened":208,"observation":383,"first":"2024-06-26","last":"2025-03-12"},{"team":"ChartBuilder","version":"4.0.1","total":29,"reported":10,"regressed":19,"resolved":11,"reopened":6,"observation":2,"first":"2025-03-17","last":"2025-03-26"},{"team":"ChartBuilder","version":"4.0.2","total":54,"reported":21,"regressed":33,"resolved":13,"reopened":6,"observation":14,"first":"2025-03-27","last":"2025-04-09"},{"team":"ChartBuilder","version":"4.0.3","total":89,"reported":31,"regressed":58,"resolved":42,"reopened":2,"observation":14,"first":"2025-04-11","last":"2025-05-09"},{"team":"ChartBuilder","version":"4.0.4","total":8,"reported":0,"regressed":8,"resolved":7,"reopened":0,"observation":1,"first":"2025-05-28","last":"2025-05-28"},{"team":"ChartBuilder","version":"4.0.5","total":272,"reported":85,"regressed":187,"resolved":88,"reopened":24,"observation":75,"first":"2025-06-16","last":"2025-07-28"},{"team":"ChartBuilder","version":"4.0.6","total":185,"reported":42,"regressed":143,"resolved":64,"reopened":22,"observation":57,"first":"2025-08-01","last":"2025-08-27"},{"team":"ChartBuilder","version":"4.1.0","total":465,"reported":150,"regressed":315,"resolved":161,"reopened":27,"observation":127,"first":"2025-05-14","last":"2025-10-01"},{"team":"ChartBuilder","version":"4.1.1","total":69,"reported":12,"regressed":57,"resolved":25,"reopened":5,"observation":27,"first":"2025-10-07","last":"2025-10-28"},{"team":"ChartBuilder","version":"4.1.2","total":164,"reported":48,"regressed":116,"resolved":48,"reopened":12,"observation":56,"first":"2025-11-13","last":"2026-01-02"},{"team":"ChartBuilder","version":"4.1.3","total":15,"reported":6,"regressed":9,"resolved":3,"reopened":0,"observation":6,"first":"2026-01-05","last":"2026-01-12"},{"team":"ChartBuilder","version":"4.1.4","total":63,"reported":27,"regressed":36,"resolved":19,"reopened":7,"observation":10,"first":"2026-01-14","last":"2026-02-10"},{"team":"ChartBuilder","version":"4.1.5","total":268,"reported":65,"regressed":203,"resolved":93,"reopened":33,"observation":77,"first":"2026-02-11","last":"2026-03-30"},{"team":"ChartBuilder","version":"4.1.6","total":85,"reported":34,"regressed":51,"resolved":21,"reopened":1,"observation":28,"first":"2026-02-24","last":"2026-04-24"},{"team":"Playback","version":"Unknown","total":9,"reported":9,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-05-18","last":"2023-05-18"},{"team":"Playback","version":"7.7.2","total":70,"reported":64,"regressed":6,"resolved":2,"reopened":0,"observation":4,"first":"2023-03-23","last":"2023-04-18"},{"team":"Playback","version":"7.7.3","total":57,"reported":47,"regressed":10,"resolved":5,"reopened":0,"observation":5,"first":"2023-04-04","last":"2023-05-16"},{"team":"Playback","version":"8.0.0","total":304,"reported":292,"regressed":12,"resolved":2,"reopened":0,"observation":10,"first":"2023-04-21","last":"2023-06-23"},{"team":"Playback","version":"8.0.2","total":29,"reported":29,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-07-18","last":"2023-07-19"},{"team":"Playback","version":"8.0.3","total":24,"reported":8,"regressed":16,"resolved":12,"reopened":1,"observation":3,"first":"2023-08-09","last":"2023-08-10"},{"team":"Playback","version":"8.0.4","total":38,"reported":11,"regressed":27,"resolved":21,"reopened":1,"observation":5,"first":"2023-08-21","last":"2023-09-01"},{"team":"Playback","version":"8.0.5","total":7,"reported":4,"regressed":3,"resolved":0,"reopened":0,"observation":3,"first":"2023-09-08","last":"2023-09-08"},{"team":"Playback","version":"8.0.6","total":8,"reported":5,"regressed":3,"resolved":0,"reopened":1,"observation":2,"first":"2023-09-14","last":"2023-09-20"},{"team":"Playback","version":"8.1.0","total":618,"reported":127,"regressed":491,"resolved":264,"reopened":54,"observation":173,"first":"2023-08-23","last":"2023-11-28"},{"team":"Playback","version":"8.1.1","total":9,"reported":6,"regressed":3,"resolved":3,"reopened":0,"observation":0,"first":"2023-12-12","last":"2023-12-19"},{"team":"Playback","version":"8.1.2","total":121,"reported":54,"regressed":67,"resolved":40,"reopened":4,"observation":23,"first":"2023-12-21","last":"2024-01-31"},{"team":"Playback","version":"8.1.3","total":101,"reported":24,"regressed":77,"resolved":58,"reopened":5,"observation":14,"first":"2024-02-06","last":"2024-02-22"},{"team":"Playback","version":"8.1.4","total":29,"reported":11,"regressed":18,"resolved":10,"reopened":3,"observation":5,"first":"2024-02-27","last":"2024-03-11"},{"team":"Playback","version":"8.1.5","total":116,"reported":21,"regressed":95,"resolved":55,"reopened":4,"observation":36,"first":"2024-03-04","last":"2024-04-01"},{"team":"Playback","version":"8.1.6","total":214,"reported":44,"regressed":170,"resolved":94,"reopened":16,"observation":60,"first":"2024-04-11","last":"2024-06-10"},{"team":"Playback","version":"8.1.7","total":22,"reported":8,"regressed":14,"resolved":11,"reopened":0,"observation":3,"first":"2024-06-14","last":"2024-06-24"},{"team":"Playback","version":"8.1.8","total":45,"reported":11,"regressed":34,"resolved":24,"reopened":2,"observation":8,"first":"2024-06-28","last":"2024-07-23"},{"team":"Playback","version":"8.1.9","total":142,"reported":16,"regressed":126,"resolved":61,"reopened":17,"observation":48,"first":"2024-07-18","last":"2024-08-26"},{"team":"Playback","version":"8.2.0","total":242,"reported":46,"regressed":196,"resolved":116,"reopened":23,"observation":57,"first":"2024-07-19","last":"2024-09-02"},{"team":"Playback","version":"8.2.1","total":18,"reported":6,"regressed":12,"resolved":5,"reopened":0,"observation":7,"first":"2024-09-06","last":"2024-09-18"},{"team":"Playback","version":"8.2.2","total":20,"reported":3,"regressed":17,"resolved":10,"reopened":2,"observation":5,"first":"2024-09-23","last":"2024-09-23"},{"team":"Playback","version":"8.2.3","total":82,"reported":5,"regressed":77,"resolved":43,"reopened":25,"observation":9,"first":"2024-10-03","last":"2024-10-09"},{"team":"Playback","version":"8.3.0","total":372,"reported":88,"regressed":284,"resolved":192,"reopened":29,"observation":63,"first":"2024-10-10","last":"2024-11-14"},{"team":"Playback","version":"8.3.2","total":85,"reported":32,"regressed":53,"resolved":40,"reopened":1,"observation":12,"first":"2024-11-25","last":"2024-12-09"},{"team":"Playback","version":"8.3.3","total":207,"reported":89,"regressed":118,"resolved":79,"reopened":7,"observation":32,"first":"2024-12-10","last":"2025-01-22"},{"team":"Playback","version":"8.3.4","total":78,"reported":15,"regressed":63,"resolved":39,"reopened":9,"observation":15,"first":"2025-01-23","last":"2025-02-11"},{"team":"Playback","version":"8.3.5","total":194,"reported":111,"regressed":83,"resolved":55,"reopened":4,"observation":24,"first":"2025-02-12","last":"2025-03-31"},{"team":"Playback","version":"8.3.6","total":23,"reported":9,"regressed":14,"resolved":6,"reopened":2,"observation":6,"first":"2025-04-01","last":"2025-04-15"},{"team":"Playback","version":"8.3.7","total":4,"reported":2,"regressed":2,"resolved":1,"reopened":0,"observation":1,"first":"2025-05-07","last":"2025-05-07"},{"team":"Playback","version":"8.4.0","total":570,"reported":204,"regressed":366,"resolved":206,"reopened":28,"observation":132,"first":"2025-04-01","last":"2025-07-17"},{"team":"Playback","version":"8.4.1","total":108,"reported":22,"regressed":86,"resolved":60,"reopened":8,"observation":18,"first":"2025-07-21","last":"2025-08-14"},{"team":"Playback","version":"8.4.2","total":59,"reported":7,"regressed":52,"resolved":42,"reopened":1,"observation":9,"first":"2025-07-30","last":"2025-10-03"},{"team":"Playback","version":"8.4.3","total":101,"reported":25,"regressed":76,"resolved":39,"reopened":4,"observation":33,"first":"2025-08-26","last":"2025-09-12"},{"team":"Playback","version":"8.4.4","total":67,"reported":43,"regressed":24,"resolved":21,"reopened":1,"observation":2,"first":"2025-10-06","last":"2025-10-17"},{"team":"Playback","version":"8.4.5","total":42,"reported":3,"regressed":39,"resolved":24,"reopened":0,"observation":15,"first":"2025-11-03","last":"2025-11-07"},{"team":"Playback","version":"8.5.0","total":332,"reported":112,"regressed":220,"resolved":142,"reopened":10,"observation":68,"first":"2025-09-15","last":"2025-12-01"},{"team":"Playback","version":"8.5.1","total":32,"reported":6,"regressed":26,"resolved":13,"reopened":1,"observation":12,"first":"2025-12-04","last":"2025-12-12"},{"team":"Playback","version":"8.5.2","total":195,"reported":91,"regressed":104,"resolved":73,"reopened":4,"observation":27,"first":"2025-12-23","last":"2026-02-03"},{"team":"Playback","version":"8.5.3","total":100,"reported":27,"regressed":73,"resolved":44,"reopened":4,"observation":25,"first":"2026-02-05","last":"2026-02-25"},{"team":"Playback","version":"8.5.4","total":81,"reported":34,"regressed":47,"resolved":32,"reopened":1,"observation":14,"first":"2026-03-05","last":"2026-04-13"},{"team":"Playback","version":"8.5.5","total":53,"reported":13,"regressed":40,"resolved":26,"reopened":0,"observation":14,"first":"2026-03-31","last":"2026-04-24"},{"team":"Website","version":"6.4.1","total":148,"reported":142,"regressed":6,"resolved":4,"reopened":0,"observation":2,"first":"2023-03-21","last":"2023-04-19"},{"team":"Website","version":"6.4.2","total":398,"reported":379,"regressed":19,"resolved":2,"reopened":2,"observation":15,"first":"2023-04-25","last":"2023-06-28"},{"team":"Website","version":"6.4.4","total":4,"reported":4,"regressed":0,"resolved":0,"reopened":0,"observation":0,"first":"2023-07-19","last":"2023-07-19"},{"team":"Website","version":"6.4.5","total":325,"reported":115,"regressed":210,"resolved":68,"reopened":48,"observation":94,"first":"2023-07-28","last":"2023-08-30"},{"team":"Website","version":"6.4.6","total":176,"reported":36,"regressed":140,"resolved":35,"reopened":36,"observation":69,"first":"2023-09-04","last":"2023-10-04"},{"team":"Website","version":"6.4.7","total":238,"reported":57,"regressed":181,"resolved":60,"reopened":24,"observation":97,"first":"2023-10-13","last":"2023-11-28"},{"team":"Website","version":"6.4.8","total":212,"reported":45,"regressed":167,"resolved":58,"reopened":19,"observation":90,"first":"2023-11-30","last":"2023-12-22"},{"team":"Website","version":"6.4.9","total":249,"reported":121,"regressed":128,"resolved":26,"reopened":8,"observation":94,"first":"2023-12-26","last":"2024-01-31"},{"team":"Website","version":"6.5.0","total":290,"reported":56,"regressed":234,"resolved":87,"reopened":25,"observation":122,"first":"2024-02-12","last":"2024-04-02"},{"team":"Website","version":"7.0.0","total":570,"reported":194,"regressed":376,"resolved":142,"reopened":36,"observation":198,"first":"2024-04-02","last":"2024-05-29"},{"team":"Website","version":"7.0.1","total":387,"reported":93,"regressed":294,"resolved":113,"reopened":13,"observation":168,"first":"2024-05-30","last":"2024-06-26"},{"team":"Website","version":"7.0.2","total":259,"reported":60,"regressed":199,"resolved":89,"reopened":17,"observation":93,"first":"2024-07-01","last":"2024-07-22"},{"team":"Website","version":"7.0.3","total":333,"reported":165,"regressed":168,"resolved":68,"reopened":20,"observation":80,"first":"2024-07-25","last":"2024-08-29"},{"team":"Website","version":"7.0.4","total":43,"reported":12,"regressed":31,"resolved":13,"reopened":2,"observation":16,"first":"2024-09-03","last":"2024-09-12"},{"team":"Website","version":"7.0.5","total":229,"reported":32,"regressed":197,"resolved":99,"reopened":24,"observation":74,"first":"2024-09-13","last":"2024-10-01"},{"team":"Website","version":"7.0.6","total":158,"reported":41,"regressed":117,"resolved":42,"reopened":13,"observation":62,"first":"2024-10-15","last":"2024-11-05"},{"team":"Website","version":"7.0.7","total":126,"reported":46,"regressed":80,"resolved":30,"reopened":12,"observation":38,"first":"2024-11-14","last":"2024-12-16"},{"team":"Website","version":"7.0.9","total":522,"reported":244,"regressed":278,"resolved":114,"reopened":31,"observation":129,"first":"2024-12-17","last":"2025-02-11"},{"team":"Website","version":"7.1.0","total":517,"reported":204,"regressed":313,"resolved":138,"reopened":39,"observation":136,"first":"2025-02-12","last":"2025-04-09"},{"team":"Website","version":"7.1.1","total":406,"reported":144,"regressed":262,"resolved":101,"reopened":26,"observation":135,"first":"2025-04-15","last":"2025-06-02"},{"team":"Website","version":"7.1.2","total":207,"reported":81,"regressed":126,"resolved":61,"reopened":14,"observation":51,"first":"2025-06-03","last":"2025-07-17"},{"team":"Website","version":"7.1.3","total":93,"reported":32,"regressed":61,"resolved":24,"reopened":5,"observation":32,"first":"2025-07-18","last":"2025-07-31"},{"team":"Website","version":"7.1.4","total":94,"reported":29,"regressed":65,"resolved":23,"reopened":0,"observation":42,"first":"2025-08-07","last":"2025-08-25"},{"team":"Website","version":"7.1.5","total":187,"reported":65,"regressed":122,"resolved":38,"reopened":9,"observation":75,"first":"2025-08-26","last":"2025-09-26"},{"team":"Website","version":"7.1.6","total":88,"reported":11,"regressed":77,"resolved":28,"reopened":2,"observation":47,"first":"2025-09-18","last":"2025-10-06"},{"team":"Website","version":"7.1.7","total":102,"reported":22,"regressed":80,"resolved":25,"reopened":5,"observation":50,"first":"2025-10-07","last":"2025-10-17"},{"team":"Website","version":"7.1.8","total":504,"reported":80,"regressed":424,"resolved":127,"reopened":33,"observation":264,"first":"2025-10-22","last":"2025-12-02"},{"team":"Website","version":"7.1.9","total":300,"reported":110,"regressed":190,"resolved":78,"reopened":12,"observation":100,"first":"2025-11-11","last":"2025-12-30"},{"team":"Website","version":"7.2.0","total":229,"reported":70,"regressed":159,"resolved":77,"reopened":5,"observation":77,"first":"2025-11-26","last":"2026-01-29"},{"team":"Website","version":"7.2.1","total":341,"reported":42,"regressed":299,"resolved":182,"reopened":10,"observation":107,"first":"2026-01-30","last":"2026-03-05"},{"team":"Website","version":"7.2.2","total":7,"reported":0,"regressed":7,"resolved":3,"reopened":1,"observation":3,"first":"2026-02-23","last":"2026-02-23"},{"team":"Website","version":"7.3.0","total":547,"reported":187,"regressed":360,"resolved":170,"reopened":20,"observation":159,"first":"2026-03-09","last":"2026-04-24"}];

// ============================================================
// CONSTANTS
// ============================================================
const COLORS = {
  reported:    "#e85d4a",
  regressed:   "#4a90d9",
  resolved:    "#3ab577",
  reopened:    "#e8a34a",
  observation: "#8b7ec8",
  website:     "#4a90d9",
  chartbuilder:"#e8a34a",
  playback:    "#3ab577",
};

const TEAM_COLORS = {
  Website:      COLORS.website,
  ChartBuilder: COLORS.chartbuilder,
  Playback:     COLORS.playback,
};

// ============================================================
// HELPERS
// ============================================================
function getFields() { return RAW.fields; }
function getIdx(field) { return RAW.fields.indexOf(field); }

function filterRows(period, team) {
  let rows = RAW.rows;

  // Period filter
  if (period !== "all") {
    const now = new Date(rows[rows.length - 1][0]);
    const days = period === "6mo" ? 180 : period === "90d" ? 90 : 30;
    const cutoff = new Date(now);
    cutoff.setDate(cutoff.getDate() - days);
    const cutoffStr = cutoff.toISOString().slice(0, 10);
    rows = rows.filter(r => r[0] >= cutoffStr);
  }

  // Team filter — select the right columns
  if (team !== "all") {
    const prefix = team === "Website" ? "website" : team === "ChartBuilder" ? "cb" : "pb";
    const repIdx = getIdx(`${prefix}_reported`);
    const regIdx = getIdx(`${prefix}_regressed`);
    const dateIdx = 0;
    // For team filter we need reported/regressed/resolved/reopened/observation
    // We approximate resolved/reopened/observation by proportion
    rows = rows.map(r => {
      const totalRep = r[getIdx("reported")] || 0;
      const totalReg = r[getIdx("regressed")] || 0;
      const teamRep = r[repIdx] || 0;
      const teamReg = r[regIdx] || 0;
      const regRatio = totalReg > 0 ? teamReg / totalReg : 0;
      const newRow = [...r];
      newRow[getIdx("reported")] = teamRep;
      newRow[getIdx("regressed")] = teamReg;
      newRow[getIdx("resolved")]    = Math.round((r[getIdx("resolved")]    || 0) * regRatio);
      newRow[getIdx("reopened")]    = Math.round((r[getIdx("reopened")]    || 0) * regRatio);
      newRow[getIdx("observation")] = Math.round((r[getIdx("observation")] || 0) * regRatio);
      return newRow;
    }).filter(r => r[getIdx("reported")] > 0 || r[getIdx("regressed")] > 0);
  }

  return rows;
}

function sumRows(rows) {
  const s = { reported: 0, regressed: 0, resolved: 0, reopened: 0, observation: 0 };
  const ri = getIdx("reported"), rgi = getIdx("regressed");
  const rsi = getIdx("resolved"), roi = getIdx("reopened"), oi = getIdx("observation");
  for (const r of rows) {
    s.reported    += r[ri]  || 0;
    s.regressed   += r[rgi] || 0;
    s.resolved    += r[rsi] || 0;
    s.reopened    += r[roi] || 0;
    s.observation += r[oi]  || 0;
  }
  return s;
}

function toMonthly(rows) {
  const monthly = {};
  const ri = getIdx("reported"), rgi = getIdx("regressed");
  for (const r of rows) {
    const month = r[0].slice(0, 7);
    if (!monthly[month]) monthly[month] = { month, reported: 0, regressed: 0 };
    monthly[month].reported  += r[ri]  || 0;
    monthly[month].regressed += r[rgi] || 0;
  }
  return Object.values(monthly).sort((a, b) => a.month.localeCompare(b.month));
}

function fmtMonth(m) {
  const [y, mo] = m.split("-");
  const months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return `${months[parseInt(mo) - 1]} '${y.slice(2)}`;
}

function pct(n, d) { return d > 0 ? ((n / d) * 100).toFixed(1) + "%" : "0%"; }
function fmt(n) { return (n || 0).toLocaleString(); }

const cmpVer = (a, b) => {
  const pa = a.split(".").map(Number), pb = b.split(".").map(Number);
  for (let i = 0; i < 3; i++) { const d = (pb[i]||0) - (pa[i]||0); if (d !== 0) return d; }
  return 0;
};

// ============================================================
// SUBCOMPONENTS
// ============================================================

function KpiCard({ label, value, sub, color }) {
  return (
    <div style={{
      background: "#1a1d27", border: "1px solid #2a2d3a", borderRadius: 10,
      padding: "16px 20px", minWidth: 140, flex: 1,
    }}>
      <div style={{ color: "#8b8fa8", fontSize: 11, textTransform: "uppercase", letterSpacing: 1, marginBottom: 6 }}>{label}</div>
      <div style={{ color: color || "#e2e4ef", fontSize: 26, fontWeight: 700, lineHeight: 1.1 }}>{value}</div>
      {sub && <div style={{ color: "#6b6f82", fontSize: 12, marginTop: 4 }}>{sub}</div>}
    </div>
  );
}

function SectionCard({ title, children }) {
  return (
    <div style={{
      background: "#1a1d27", border: "1px solid #2a2d3a", borderRadius: 10,
      padding: "20px 24px", marginBottom: 20,
    }}>
      {title && <div style={{ color: "#e2e4ef", fontSize: 14, fontWeight: 600, marginBottom: 16 }}>{title}</div>}
      {children}
    </div>
  );
}

function FilterBar({ options, value, onChange, label }) {
  return (
    <div style={{ display: "flex", alignItems: "center", gap: 6, flexWrap: "wrap" }}>
      {label && <span style={{ color: "#8b8fa8", fontSize: 12, marginRight: 4 }}>{label}:</span>}
      {options.map(opt => (
        <button key={opt.value}
          onClick={() => onChange(opt.value)}
          style={{
            background: value === opt.value ? "#4a90d9" : "#252836",
            color: value === opt.value ? "#fff" : "#8b8fa8",
            border: `1px solid ${value === opt.value ? "#4a90d9" : "#2a2d3a"}`,
            borderRadius: 6, padding: "5px 12px", cursor: "pointer",
            fontSize: 12, fontFamily: "DM Sans, sans-serif", fontWeight: 500,
            transition: "all 0.15s",
          }}
        >{opt.label}</button>
      ))}
    </div>
  );
}

const CustomTooltip = ({ active, payload, label }) => {
  if (!active || !payload?.length) return null;
  return (
    <div style={{
      background: "#252836", border: "1px solid #2a2d3a", borderRadius: 8,
      padding: "10px 14px", fontSize: 12,
    }}>
      <div style={{ color: "#e2e4ef", marginBottom: 6, fontWeight: 600 }}>{label}</div>
      {payload.map((p, i) => (
        <div key={i} style={{ color: p.color, marginBottom: 2 }}>
          {p.name}: <strong>{fmt(p.value)}</strong>
        </div>
      ))}
    </div>
  );
};

// ============================================================
// TABS
// ============================================================

function OverviewTab({ rows }) {
  const totals = sumRows(rows);
  const days = rows.length || 1;
  const monthly = toMonthly(rows);

  // Team breakdown
  const teamData = ["Website", "ChartBuilder", "Playback"].map(t => {
    const prefix = t === "Website" ? "website" : t === "ChartBuilder" ? "cb" : "pb";
    const rep = rows.reduce((s, r) => s + (r[getIdx(`${prefix}_reported`)] || 0), 0);
    const reg = rows.reduce((s, r) => s + (r[getIdx(`${prefix}_regressed`)] || 0), 0);
    return { team: t, reported: rep, regressed: reg };
  });

  const pieData = [
    { name: "Resolved",    value: totals.resolved,    color: COLORS.resolved },
    { name: "Reopened",    value: totals.reopened,    color: COLORS.reopened },
    { name: "Observation", value: totals.observation, color: COLORS.observation },
  ].filter(d => d.value > 0);

  return (
    <div>
      <div style={{ display: "flex", gap: 12, marginBottom: 20, flexWrap: "wrap" }}>
        <KpiCard label="Total Issues" value={fmt(totals.reported + totals.regressed)} />
        <KpiCard label="Issues Reported" value={fmt(totals.reported)} color={COLORS.reported}
          sub={`${(totals.reported / days).toFixed(1)} / day`} />
        <KpiCard label="Issues Regressed" value={fmt(totals.regressed)} color={COLORS.regressed}
          sub={`${(totals.regressed / days).toFixed(1)} / day`} />
        <KpiCard label="Resolved" value={fmt(totals.resolved)} color={COLORS.resolved}
          sub={pct(totals.resolved, totals.regressed) + " of regressed"} />
        <KpiCard label="Reopened" value={fmt(totals.reopened)} color={COLORS.reopened}
          sub={pct(totals.reopened, totals.regressed) + " of regressed"} />
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 16, marginBottom: 16 }}>
        <SectionCard title="Monthly Activity">
          <ResponsiveContainer width="100%" height={240}>
            <BarChart data={monthly} margin={{ top: 4, right: 8, bottom: 4, left: 0 }}>
              <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" />
              <XAxis dataKey="month" tickFormatter={fmtMonth} tick={{ fill: "#6b6f82", fontSize: 10 }} />
              <YAxis tick={{ fill: "#6b6f82", fontSize: 10 }} />
              <Tooltip content={<CustomTooltip />} />
              <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
              <Bar dataKey="reported" name="Reported" fill={COLORS.reported} radius={[2,2,0,0]} />
              <Bar dataKey="regressed" name="Regressed" fill={COLORS.regressed} radius={[2,2,0,0]} />
            </BarChart>
          </ResponsiveContainer>
        </SectionCard>

        <SectionCard title="Team Breakdown">
          <ResponsiveContainer width="100%" height={240}>
            <BarChart layout="vertical" data={teamData} margin={{ top: 4, right: 20, bottom: 4, left: 80 }}>
              <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" horizontal={false} />
              <XAxis type="number" tick={{ fill: "#6b6f82", fontSize: 10 }} />
              <YAxis type="category" dataKey="team" tick={{ fill: "#8b8fa8", fontSize: 12 }} width={80} />
              <Tooltip content={<CustomTooltip />} />
              <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
              <Bar dataKey="reported" name="Reported" fill={COLORS.reported} radius={[0,2,2,0]} />
              <Bar dataKey="regressed" name="Regressed" fill={COLORS.regressed} radius={[0,2,2,0]} />
            </BarChart>
          </ResponsiveContainer>
        </SectionCard>
      </div>

      <SectionCard title="Regression Outcomes">
        <div style={{ display: "flex", alignItems: "center", gap: 40 }}>
          <ResponsiveContainer width={220} height={220}>
            <PieChart>
              <Pie data={pieData} dataKey="value" cx="50%" cy="50%" innerRadius={60} outerRadius={90} paddingAngle={3}>
                {pieData.map((d, i) => <Cell key={i} fill={d.color} />)}
              </Pie>
              <Tooltip formatter={(v) => fmt(v)} contentStyle={{ background: "#252836", border: "1px solid #2a2d3a", borderRadius: 8 }} />
            </PieChart>
          </ResponsiveContainer>
          <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
            {pieData.map((d, i) => (
              <div key={i} style={{ display: "flex", alignItems: "center", gap: 10 }}>
                <div style={{ width: 12, height: 12, borderRadius: 3, background: d.color }} />
                <div>
                  <div style={{ color: "#e2e4ef", fontSize: 13, fontWeight: 600 }}>{d.name}</div>
                  <div style={{ color: "#6b6f82", fontSize: 12 }}>{fmt(d.value)} ({pct(d.value, totals.regressed)})</div>
                </div>
              </div>
            ))}
          </div>
        </div>
      </SectionCard>
    </div>
  );
}

function DailyTrendsTab({ rows }) {
  const chartData = rows.map(r => ({
    date: r[0].slice(5),
    reported:  r[getIdx("reported")]  || 0,
    regressed: r[getIdx("regressed")] || 0,
    highest:   r[getIdx("highest")]   || 0,
    normal:    r[getIdx("normal")]    || 0,
  }));

  return (
    <div>
      <SectionCard title="Daily Reported vs Regressed">
        <ResponsiveContainer width="100%" height={280}>
          <AreaChart data={chartData} margin={{ top: 4, right: 8, bottom: 4, left: 0 }}>
            <defs>
              <linearGradient id="gRep" x1="0" y1="0" x2="0" y2="1">
                <stop offset="5%" stopColor={COLORS.reported} stopOpacity={0.4} />
                <stop offset="95%" stopColor={COLORS.reported} stopOpacity={0.05} />
              </linearGradient>
              <linearGradient id="gReg" x1="0" y1="0" x2="0" y2="1">
                <stop offset="5%" stopColor={COLORS.regressed} stopOpacity={0.4} />
                <stop offset="95%" stopColor={COLORS.regressed} stopOpacity={0.05} />
              </linearGradient>
            </defs>
            <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" />
            <XAxis dataKey="date" tick={{ fill: "#6b6f82", fontSize: 9 }} interval={Math.floor(chartData.length / 12)} />
            <YAxis tick={{ fill: "#6b6f82", fontSize: 10 }} />
            <Tooltip content={<CustomTooltip />} />
            <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
            <Area dataKey="reported" name="Reported" stroke={COLORS.reported} fill="url(#gRep)" strokeWidth={1.5} dot={false} />
            <Area dataKey="regressed" name="Regressed" stroke={COLORS.regressed} fill="url(#gReg)" strokeWidth={1.5} dot={false} />
          </AreaChart>
        </ResponsiveContainer>
      </SectionCard>

      <SectionCard title="Priority Distribution (Reported Issues)">
        <ResponsiveContainer width="100%" height={240}>
          <AreaChart data={chartData} margin={{ top: 4, right: 8, bottom: 4, left: 0 }}>
            <defs>
              <linearGradient id="gHigh" x1="0" y1="0" x2="0" y2="1">
                <stop offset="5%" stopColor="#e85d4a" stopOpacity={0.4} />
                <stop offset="95%" stopColor="#e85d4a" stopOpacity={0.05} />
              </linearGradient>
              <linearGradient id="gNorm" x1="0" y1="0" x2="0" y2="1">
                <stop offset="5%" stopColor="#8b7ec8" stopOpacity={0.4} />
                <stop offset="95%" stopColor="#8b7ec8" stopOpacity={0.05} />
              </linearGradient>
            </defs>
            <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" />
            <XAxis dataKey="date" tick={{ fill: "#6b6f82", fontSize: 9 }} interval={Math.floor(chartData.length / 12)} />
            <YAxis tick={{ fill: "#6b6f82", fontSize: 10 }} />
            <Tooltip content={<CustomTooltip />} />
            <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
            <Area dataKey="highest" name="Highest" stroke="#e85d4a" fill="url(#gHigh)" strokeWidth={1.5} dot={false} />
            <Area dataKey="normal" name="Normal/Other" stroke="#8b7ec8" fill="url(#gNorm)" strokeWidth={1.5} dot={false} />
          </AreaChart>
        </ResponsiveContainer>
      </SectionCard>
    </div>
  );
}

function ByTeamTab({ rows }) {
  const teams = [
    { name: "Website",      prefix: "website",  color: COLORS.website },
    { name: "ChartBuilder", prefix: "cb",        color: COLORS.chartbuilder },
    { name: "Playback",     prefix: "pb",        color: COLORS.playback },
  ];

  return (
    <div>
      {teams.map(({ name, prefix, color }) => {
        const data = rows
          .map(r => ({
            date:      r[0].slice(5),
            reported:  r[getIdx(`${prefix}_reported`)]  || 0,
            regressed: r[getIdx(`${prefix}_regressed`)] || 0,
          }))
          .filter(d => d.reported > 0 || d.regressed > 0);

        const totRep = data.reduce((s, d) => s + d.reported, 0);
        const totReg = data.reduce((s, d) => s + d.regressed, 0);

        return (
          <SectionCard key={name} title={`${name} — Reported: ${fmt(totRep)}  |  Regressed: ${fmt(totReg)}`}>
            <ResponsiveContainer width="100%" height={200}>
              <BarChart data={data} margin={{ top: 4, right: 8, bottom: 4, left: 0 }}>
                <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" />
                <XAxis dataKey="date" tick={{ fill: "#6b6f82", fontSize: 9 }} interval={Math.floor(data.length / 10)} />
                <YAxis tick={{ fill: "#6b6f82", fontSize: 10 }} />
                <Tooltip content={<CustomTooltip />} />
                <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
                <Bar dataKey="reported" name="Reported" fill={COLORS.reported} radius={[2,2,0,0]} />
                <Bar dataKey="regressed" name="Regressed" fill={color} radius={[2,2,0,0]} />
              </BarChart>
            </ResponsiveContainer>
          </SectionCard>
        );
      })}
    </div>
  );
}

function RegressionTab({ rows }) {
  const totals = sumRows(rows);
  const reg = totals.regressed || 1;

  const monthly = {};
  const ri = getIdx("resolved"), roi = getIdx("reopened"), oi = getIdx("observation");
  for (const r of rows) {
    const month = r[0].slice(0, 7);
    if (!monthly[month]) monthly[month] = { month, resolved: 0, reopened: 0, observation: 0 };
    monthly[month].resolved    += r[ri]  || 0;
    monthly[month].reopened    += r[roi] || 0;
    monthly[month].observation += r[oi]  || 0;
  }
  const monthlyData = Object.values(monthly).sort((a, b) => a.month.localeCompare(b.month));

  const dailyData = rows.map(r => ({
    date:        r[0].slice(5),
    resolved:    r[ri]  || 0,
    reopened:    r[roi] || 0,
    observation: r[oi]  || 0,
  }));

  return (
    <div>
      <div style={{ display: "flex", gap: 12, marginBottom: 20, flexWrap: "wrap" }}>
        <KpiCard label="Resolved" value={fmt(totals.resolved)} color={COLORS.resolved}
          sub={`Resolution rate: ${pct(totals.resolved, reg)}`} />
        <KpiCard label="Reopened" value={fmt(totals.reopened)} color={COLORS.reopened}
          sub={`Reopen rate: ${pct(totals.reopened, reg)}`} />
        <KpiCard label="Observation" value={fmt(totals.observation)} color={COLORS.observation}
          sub={`Observation rate: ${pct(totals.observation, reg)}`} />
      </div>

      <SectionCard title="Regression Outcomes Over Time">
        <ResponsiveContainer width="100%" height={260}>
          <AreaChart data={dailyData} margin={{ top: 4, right: 8, bottom: 4, left: 0 }}>
            <defs>
              {[["res", COLORS.resolved], ["rop", COLORS.reopened], ["obs", COLORS.observation]].map(([k, c]) => (
                <linearGradient key={k} id={`g${k}`} x1="0" y1="0" x2="0" y2="1">
                  <stop offset="5%" stopColor={c} stopOpacity={0.5} />
                  <stop offset="95%" stopColor={c} stopOpacity={0.05} />
                </linearGradient>
              ))}
            </defs>
            <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" />
            <XAxis dataKey="date" tick={{ fill: "#6b6f82", fontSize: 9 }} interval={Math.floor(dailyData.length / 12)} />
            <YAxis tick={{ fill: "#6b6f82", fontSize: 10 }} />
            <Tooltip content={<CustomTooltip />} />
            <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
            <Area dataKey="resolved" name="Resolved" stroke={COLORS.resolved} fill="url(#gres)" strokeWidth={1.5} dot={false} />
            <Area dataKey="reopened" name="Reopened" stroke={COLORS.reopened} fill="url(#grop)" strokeWidth={1.5} dot={false} />
            <Area dataKey="observation" name="Observation" stroke={COLORS.observation} fill="url(#gobs)" strokeWidth={1.5} dot={false} />
          </AreaChart>
        </ResponsiveContainer>
      </SectionCard>

      <SectionCard title="Monthly Regression Outcomes">
        <ResponsiveContainer width="100%" height={260}>
          <BarChart data={monthlyData} margin={{ top: 4, right: 8, bottom: 4, left: 0 }}>
            <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" />
            <XAxis dataKey="month" tickFormatter={fmtMonth} tick={{ fill: "#6b6f82", fontSize: 10 }} />
            <YAxis tick={{ fill: "#6b6f82", fontSize: 10 }} />
            <Tooltip content={<CustomTooltip />} />
            <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
            <Bar dataKey="resolved" name="Resolved" stackId="a" fill={COLORS.resolved} />
            <Bar dataKey="reopened" name="Reopened" stackId="a" fill={COLORS.reopened} />
            <Bar dataKey="observation" name="Observation" stackId="a" fill={COLORS.observation} radius={[2,2,0,0]} />
          </BarChart>
        </ResponsiveContainer>
      </SectionCard>
    </div>
  );
}

function FixVersionsTab() {
  const [teamFilter, setTeamFilter] = useState("all");
  const [sortBy, setSortBy] = useState("total");
  const [expanded, setExpanded] = useState(null);

  const filtered = useMemo(() => {
    let vs = [...VERSIONS];
    if (teamFilter !== "all") {
      vs = vs.filter(v => {
        if (teamFilter === "Website") return v.team === "Website";
        if (teamFilter === "CB") return v.team === "ChartBuilder";
        if (teamFilter === "PB") return v.team === "Playback";
        return true;
      });
    }

    vs.sort((a, b) => {
      if (sortBy === "total")    return b.total - a.total;
      if (sortBy === "reported") return b.reported - a.reported;
      if (sortBy === "reopen")   return (b.reopened / (b.regressed || 1)) - (a.reopened / (a.regressed || 1));
      if (sortBy === "version")  return cmpVer(a.version, b.version);
      if (sortBy === "oldest")   return a.first.localeCompare(b.first);
      return 0;
    });
    return vs;
  }, [teamFilter, sortBy]);

  const maxTotal = Math.max(...filtered.map(v => v.total), 1);
  const avgIssues = filtered.length ? (filtered.reduce((s, v) => s + v.total, 0) / filtered.length).toFixed(1) : "0";
  const avgReopen = filtered.length
    ? (filtered.reduce((s, v) => s + (v.reopened / (v.regressed || 1)), 0) / filtered.length * 100).toFixed(1) + "%"
    : "0%";

  // Top 10 chart data — uses the same sort order as the version cards
  const top10 = filtered.slice(0, 10).map(v => ({
    label: `${v.team.slice(0, 2)} ${v.version}`,
    reported: v.reported,
    regressed: v.regressed,
    total: v.total,
  }));

  const sortLabels = {
    total:    "Total Issues",
    reported: "Most Reported",
    reopen:   "Reopen Rate",
    version:  "Version (Newest)",
    oldest:   "Date (Oldest)",
  };
  const chartTitle = `Top 10 Versions — sorted by ${sortLabels[sortBy] || sortBy}`;

  return (
    <div>
      <div style={{ display: "flex", gap: 16, marginBottom: 16, flexWrap: "wrap" }}>
        <FilterBar
          label="Team"
          options={[
            { value: "all", label: "All" },
            { value: "Website", label: "Website" },
            { value: "CB", label: "CB" },
            { value: "PB", label: "PB" },
          ]}
          value={teamFilter}
          onChange={setTeamFilter}
        />
        <FilterBar
          label="Sort"
          options={[
            { value: "total",    label: "Total Issues" },
            { value: "reported", label: "Most Reported" },
            { value: "reopen",   label: "Reopen Rate" },
            { value: "version",  label: "Version (Newest)" },
            { value: "oldest",   label: "Date (Oldest)" },
          ]}
          value={sortBy}
          onChange={setSortBy}
        />
      </div>

      <div style={{ display: "flex", gap: 12, marginBottom: 20, flexWrap: "wrap" }}>
        <KpiCard label="Fix Versions" value={filtered.length} />
        <KpiCard label="Avg Issues / Version" value={avgIssues} />
        <KpiCard label="Avg Reopen Rate" value={avgReopen} color={COLORS.reopened} />
      </div>

      {top10.length > 0 && (
        <SectionCard title={chartTitle}>
          <ResponsiveContainer width="100%" height={260}>
            <BarChart layout="vertical" data={top10} margin={{ top: 4, right: 20, bottom: 4, left: 70 }}>
              <CartesianGrid strokeDasharray="3 3" stroke="#2a2d3a" horizontal={false} />
              <XAxis type="number" tick={{ fill: "#6b6f82", fontSize: 10 }} />
              <YAxis type="category" dataKey="label" tick={{ fill: "#8b8fa8", fontSize: 11 }} width={70} />
              <Tooltip content={<CustomTooltip />} />
              <Legend wrapperStyle={{ fontSize: 12, color: "#8b8fa8" }} />
              <Bar dataKey="reported" name="Reported" fill={COLORS.reported} radius={[0,2,2,0]} />
              <Bar dataKey="regressed" name="Regressed" fill={COLORS.regressed} radius={[0,2,2,0]} />
            </BarChart>
          </ResponsiveContainer>
        </SectionCard>
      )}

      <div style={{ display: "flex", flexDirection: "column", gap: 8 }}>
        {filtered.map((v, idx) => {
          const key = `${v.team}__${v.version}`;
          const isOpen = expanded === key;
          const reopen = v.regressed > 0 ? (v.reopened / v.regressed * 100).toFixed(1) : "0.0";
          const total = v.total || 1;
          const barPct = (v.total / maxTotal * 100).toFixed(1);
          const teamColor = TEAM_COLORS[v.team] || "#4a90d9";

          return (
            <div key={key}
              style={{
                background: "#1a1d27", border: `1px solid ${isOpen ? "#4a90d9" : "#2a2d3a"}`,
                borderRadius: 10, overflow: "hidden", transition: "border-color 0.15s",
              }}
            >
              <div
                onClick={() => setExpanded(isOpen ? null : key)}
                style={{
                  display: "flex", alignItems: "center", padding: "14px 18px",
                  cursor: "pointer", gap: 16,
                }}
              >
                <div style={{
                  background: teamColor + "22", color: teamColor,
                  borderRadius: 6, padding: "3px 10px", fontSize: 11, fontWeight: 600,
                  minWidth: 90, textAlign: "center",
                }}>{v.team}</div>

                <div style={{ flex: 1 }}>
                  <div style={{ display: "flex", alignItems: "baseline", gap: 10, marginBottom: 6 }}>
                    <span style={{ color: "#e2e4ef", fontWeight: 700, fontSize: 15 }}>{v.version}</span>
                    <span style={{ color: "#6b6f82", fontSize: 12 }}>{v.first} → {v.last}</span>
                    <span style={{ color: "#e2e4ef", fontSize: 13, marginLeft: "auto", fontWeight: 600 }}>
                      {fmt(v.total)} issues
                    </span>
                  </div>
                  <div style={{ height: 5, background: "#252836", borderRadius: 3, overflow: "hidden" }}>
                    <div style={{ width: `${barPct}%`, height: "100%", background: teamColor, borderRadius: 3 }} />
                  </div>
                </div>

                <div style={{ color: isOpen ? "#4a90d9" : "#6b6f82", fontSize: 18, width: 20, textAlign: "center" }}>
                  {isOpen ? "▲" : "▼"}
                </div>
              </div>

              {isOpen && (
                <div style={{ borderTop: "1px solid #2a2d3a", padding: "16px 18px", background: "#16192280" }}>
                  <div style={{ display: "flex", gap: 10, marginBottom: 14, flexWrap: "wrap" }}>
                    {[
                      { label: "Reported",    value: v.reported,    color: COLORS.reported },
                      { label: "Regressed",   value: v.regressed,   color: COLORS.regressed },
                      { label: "Resolved",    value: v.resolved,    color: COLORS.resolved },
                      { label: "Reopened",    value: v.reopened,    color: COLORS.reopened },
                      { label: "Observation", value: v.observation, color: COLORS.observation },
                    ].map(m => (
                      <div key={m.label} style={{
                        background: "#252836", border: "1px solid #2a2d3a", borderRadius: 8,
                        padding: "10px 16px", flex: 1, minWidth: 90,
                      }}>
                        <div style={{ color: m.color, fontSize: 20, fontWeight: 700 }}>{fmt(m.value)}</div>
                        <div style={{ color: "#6b6f82", fontSize: 11, marginTop: 3 }}>{m.label}</div>
                      </div>
                    ))}
                  </div>
                  <div style={{ display: "flex", gap: 8, flexWrap: "wrap" }}>
                    {[
                      { label: "Resolution Rate", value: pct(v.resolved, v.regressed) },
                      { label: "Reopen Rate", value: pct(v.reopened, v.regressed) },
                      { label: "% Reported", value: pct(v.reported, total) },
                      { label: "% Regressed", value: pct(v.regressed, total) },
                      { label: "% Resolved", value: pct(v.resolved, total) },
                      { label: "% Reopened", value: pct(v.reopened, total) },
                      { label: "% Observation", value: pct(v.observation, total) },
                    ].map(m => (
                      <div key={m.label} style={{
                        background: "#1a1d27", border: "1px solid #2a2d3a", borderRadius: 6,
                        padding: "6px 12px", fontSize: 12,
                      }}>
                        <span style={{ color: "#6b6f82" }}>{m.label}: </span>
                        <span style={{ color: "#e2e4ef", fontWeight: 600 }}>{m.value}</span>
                      </div>
                    ))}
                  </div>
                </div>
              )}
            </div>
          );
        })}
      </div>
    </div>
  );
}

// ============================================================
// MAIN COMPONENT
// ============================================================
function QADashboard() {
  const [tab, setTab]       = useState("overview");
  const [period, setPeriod] = useState("all");
  const [team, setTeam]     = useState("all");

  const filteredRows = useMemo(() => filterRows(period, team), [period, team]);

  const TABS = [
    { id: "overview",    label: "Overview" },
    { id: "daily",       label: "Daily Trends" },
    { id: "by-team",     label: "By Team" },
    { id: "regression",  label: "Regression Analysis" },
    { id: "versions",    label: "Fix Versions" },
  ];

  return (
    <div style={{
      background: "#0f1117", minHeight: "100vh", color: "#e2e4ef",
      fontFamily: "'DM Sans', sans-serif", padding: "0 0 60px 0",
    }}>
      {/* Header */}
      <div style={{
        background: "#1a1d27", borderBottom: "1px solid #2a2d3a",
        padding: "16px 32px", display: "flex", alignItems: "center",
        justifyContent: "space-between", flexWrap: "wrap", gap: 12,
      }}>
        <div>
          <div style={{ fontSize: 20, fontWeight: 700, color: "#e2e4ef" }}>
            QA Stokes Team — Issue Tracker
          </div>
          <div style={{ fontSize: 12, color: "#6b6f82", marginTop: 2 }}>
            {RAW.rows.length} reporting days &bull; {(RAW.totals.reported + RAW.totals.regressed).toLocaleString()} total issues
          </div>
        </div>
        <div style={{ display: "flex", gap: 16, flexWrap: "wrap" }}>
          <FilterBar
            label="Period"
            options={[
              { value: "all",  label: "All Time" },
              { value: "6mo",  label: "6 mo" },
              { value: "90d",  label: "90 days" },
              { value: "30d",  label: "30 days" },
            ]}
            value={period}
            onChange={setPeriod}
          />
          <FilterBar
            label="Team"
            options={[
              { value: "all",          label: "All" },
              { value: "Website",      label: "Website" },
              { value: "ChartBuilder", label: "ChartBuilder" },
              { value: "Playback",     label: "Playback" },
            ]}
            value={team}
            onChange={setTeam}
          />
        </div>
      </div>

      {/* Tab Bar */}
      <div style={{
        background: "#1a1d27", borderBottom: "1px solid #2a2d3a",
        padding: "0 32px", display: "flex", gap: 0,
      }}>
        {TABS.map(t => (
          <button key={t.id}
            onClick={() => setTab(t.id)}
            style={{
              background: "none",
              color: tab === t.id ? "#4a90d9" : "#6b6f82",
              border: "none",
              borderBottom: `2px solid ${tab === t.id ? "#4a90d9" : "transparent"}`,
              padding: "14px 20px",
              cursor: "pointer",
              fontSize: 13,
              fontFamily: "'DM Sans', sans-serif",
              fontWeight: tab === t.id ? 600 : 400,
              transition: "all 0.15s",
            }}
          >{t.label}</button>
        ))}
      </div>

      {/* Content */}
      <div style={{ padding: "24px 32px", maxWidth: 1400, margin: "0 auto" }}>
        {tab === "overview"   && <OverviewTab   rows={filteredRows} />}
        {tab === "daily"      && <DailyTrendsTab rows={filteredRows} />}
        {tab === "by-team"    && <ByTeamTab      rows={filteredRows} />}
        {tab === "regression" && <RegressionTab  rows={filteredRows} />}
        {tab === "versions"   && <FixVersionsTab />}
      </div>
    </div>
  );
}

// Mount
const __root = ReactDOM.createRoot(document.getElementById("root"));
__root.render(<QADashboard />);
