> ## Documentation Index
> Fetch the complete documentation index at: https://docs.symmetry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Docs: payroll tax, withholding forms, I-9 verification & wage APIs

> Developer documentation and API references for Symmetry's payroll tax engine, payroll forms, I-9 verification, payroll point, minimum wage finder, and paycheck calculators.

export const ReleaseNotesIndex = ({defaultYear = 2026, embedded = false}) => {
  const ICON_BASE = "https://assets.symmetry.com/icons";
  const PRODUCTS = [{
    key: "ste",
    name: "Symmetry Tax Engine",
    short: "Tax Engine",
    href: "/ste/changelog",
    icon: `${ICON_BASE}/symmetry-tax-engine/v1/icon.png`
  }, {
    key: "spf",
    name: "Symmetry Payroll Forms",
    short: "Payroll Forms",
    href: "/spf/changelog",
    icon: `${ICON_BASE}/symmetry-payroll-forms/v1/icon.png`
  }, {
    key: "i9",
    name: "Symmetry I-9",
    short: "I-9",
    href: "/i9/changelog",
    icon: `${ICON_BASE}/symmetry-i9/v1/icon.png`
  }, {
    key: "prp",
    name: "Payroll Point",
    short: "Payroll Point",
    href: "/prp/changelog",
    icon: `${ICON_BASE}/payroll-point/v1/icon.png`
  }, {
    key: "mwf",
    name: "Minimum Wage Finder",
    short: "Min. Wage Finder",
    href: "/mwf/changelog",
    icon: `${ICON_BASE}/minimum-wage-finder/v1/icon.png`,
    defaultOff: true
  }, {
    key: "cbs",
    name: "Calculators by Symmetry",
    short: "Calculators",
    href: "/cbs/changelog",
    icon: `${ICON_BASE}/calculators-by-symmetry/v1/icon.png`
  }];
  const ROWS = [[2026, "2026-08-10", 0, 0, 0, 0, 0, ["2026-08-10", "/mwf/changelog#2026-08-10"]], [2026, "2026-08-05", ["2026.8.1", "/ste/changelog#ste-2026-8-1"], 0, 0, 0, 0, ["2026-08-05", "/mwf/changelog#2026-08-05"]], [2026, "2026-08-04", 0, 0, 0, 0, 0, ["2026-08-04", "/mwf/changelog#2026-08-04"]], [2026, "2026-07-31", ["2026.7.2", "/ste/changelog#ste-2026-7-2"], ["2026.7.2", "/prp/changelog#prp-2026-7-2"], ["2026.7.1", "/spf/changelog#spf-2026-7-1"], 0, ["2026.7.1", "/cbs/changelog#cbs-2026-7-1"], ["2026-07-31", "/mwf/changelog#2026-07-31"]], [2026, "2026-07-24", 0, 0, 0, ["2026.7.1", "/i9/changelog#i-9-2026-7-1"], 0], [2026, "2026-07-10", ["2026.7.1", "/ste/changelog#ste-2026-7-1"], 0, 0, 0, 0], [2026, "2026-07-01", 0, ["2026.7.1", "/prp/changelog#prp-2026-7-1"], 0, 0, 0, ["2026-07-01", "/mwf/changelog#2026-07-01"]], [2026, "2026-06-26", ["2026.6.2", "/ste/changelog#ste-2026-6-2"], ["2026.6.3", "/prp/changelog#prp-2026-6-3"], ["2026-R7", "/spf/changelog#spf-2026-r7"], ["2026.6.1", "/i9/changelog#i-9-2026-6-1"], ["2026.6.1", "/cbs/changelog#cbs-2026-6-1"], ["2026-06-26", "/mwf/changelog#2026-06-26"]], [2026, "2026-06-17", 0, ["2026.6.2", "/prp/changelog#prp-2026-6-2"], 0, 0, 0], [2026, "2026-06-12", ["2026.6.1", "/ste/changelog#ste-2026-6-1"], ["2026.6.1", "/prp/changelog#prp-2026-6-1"], 0, 0, 0, ["2026-06-12", "/mwf/changelog#2026-06-12"]], [2026, "2026-05-29", 0, ["2026-R6", "/prp/changelog#prp-2026-r6"], ["2026-R6", "/spf/changelog#spf-2026-r6"], 0, ["2026-R6", "/cbs/changelog#cbs-2026-r6"], ["2026-05-29", "/mwf/changelog#2026-05-29"]], [2026, "2026-05-21", 0, 0, 0, ["2026.5.3", "/i9/changelog#i-9-2026-5-3"], 0], [2026, "2026-05-20", 0, 0, 0, ["2026.5.2", "/i9/changelog#i-9-2026-5-2"], 0], [2026, "2026-05-15", ["2026.5.2", "/ste/changelog#ste-2026-5-2"], ["2026-R5b", "/prp/changelog#prp-2026-r5b"], 0, 0, 0], [2026, "2026-05-08", ["2026.5.1", "/ste/changelog#ste-2026-5-1"], ["2026-R5a", "/prp/changelog#prp-2026-r5a"], 0, 0, 0, ["2026-05-08", "/mwf/changelog#2026-05-08"]], [2026, "2026-05-07", 0, 0, 0, ["2026.5.1", "/i9/changelog#i-9-2026-5-1"], 0], [2026, "2026-04-24", 0, ["2026-R5", "/prp/changelog#prp-2026-r5"], ["2026-R5", "/spf/changelog#spf-2026-r5"], 0, ["2026-R5", "/cbs/changelog#cbs-2026-r5"], ["2026-04-24", "/mwf/changelog#2026-04-24"]], [2026, "2026-04-15", ["2026.4.2", "/ste/changelog#ste-2026-4-2"], 0, ["2026-R4b", "/spf/changelog#spf-2026-r4b"], 0, 0], [2026, "2026-04-10", ["2026.4.1", "/ste/changelog#ste-2026-4-1"], ["2026-R4a", "/prp/changelog#prp-2026-r4a"], 0, 0, 0, ["2026-04-10", "/mwf/changelog#2026-04-10"]], [2026, "2026-04-03", 0, 0, ["2026-R4a", "/spf/changelog#spf-2026-r4a"], 0, 0], [2026, "2026-03-27", 0, ["2026-R4", "/prp/changelog#prp-2026-r4"], ["2026-R4", "/spf/changelog#spf-2026-r4"], ["2026.3.1", "/i9/changelog#i-9-2026-3-1"], ["2026-R4", "/cbs/changelog#cbs-2026-r4"]], [2026, "2026-03-25", ["2026.3.2", "/ste/changelog#ste-2026-3-2"], ["2026-R3b", "/prp/changelog#prp-2026-r3b"], 0, 0, 0], [2026, "2026-03-13", ["2026.3.1", "/ste/changelog#ste-2026-3-1"], ["2026-R3a", "/prp/changelog#prp-2026-r3a"], 0, 0, 0, ["2026-03-13", "/mwf/changelog#2026-03-13"]], [2026, "2026-02-27", ["2026.2.3", "/ste/changelog#ste-2026-2-3"], ["2026-R3", "/prp/changelog#prp-2026-r3"], ["2026-R3", "/spf/changelog#spf-2026-r3"], ["2026.2.2", "/i9/changelog#i-9-2026-2-2"], ["2026-R3", "/cbs/changelog#cbs-2026-r3"], ["2026-02-27", "/mwf/changelog#2026-02-27"]], [2026, "2026-02-13", ["2026.2.2", "/ste/changelog#ste-2026-2-2"], ["2026-R2b", "/prp/changelog#prp-2026-r2b"], 0, 0, 0, ["2026-02-13", "/mwf/changelog#2026-02-13"]], [2026, "2026-02-04", 0, 0, 0, ["2026.2.1", "/i9/changelog#i-9-2026-2-1"], 0], [2026, "2026-02-02", ["2026.2.1", "/ste/changelog#ste-2026-2-1"], ["2026-R2a", "/prp/changelog#prp-2026-r2a"], 0, 0, 0], [2026, "2026-01-30", 0, ["2026-R2", "/prp/changelog#prp-2026-r2"], ["2026-R2", "/spf/changelog#spf-2026-r2"], 0, ["2026-R2", "/cbs/changelog#cbs-2026-r2"]], [2026, "2026-01-23", ["2026.1.3", "/ste/changelog#ste-2026-1-3"], ["2026-R1d", "/prp/changelog#prp-2026-r1d"], ["2026-R1c", "/spf/changelog#spf-2026-r1c"], 0, ["2026-R1b", "/cbs/changelog#cbs-2026-r1b"], ["2026-01-23", "/mwf/changelog#2026-01-23"]], [2026, "2026-01-16", ["2026.1.2", "/ste/changelog#ste-2026-1-2"], ["2026-R1c", "/prp/changelog#prp-2026-r1c"], ["2026-R1b", "/spf/changelog#spf-2026-r1b"], 0, 0, ["2026-01-16", "/mwf/changelog#2026-01-16"]], [2026, "2026-01-09", ["2026.1.1", "/ste/changelog#ste-2026-1-1"], ["2026-R1b", "/prp/changelog#prp-2026-r1b"], ["2026-R1a", "/spf/changelog#spf-2026-r1a"], 0, ["2026-R1a", "/cbs/changelog#cbs-2026-r1a"], ["2026-01-09", "/mwf/changelog#2026-01-09"]], [2025, "2025-12-30", ["2025.12.3", "/ste/changelog/2025#ste-2025-12-3"], ["2026-R1a", "/prp/changelog#prp-2026-r1a"], 0, 0, 0, ["2025-12-30", "/mwf/changelog#2025-12-30"]], [2025, "2025-12-23", 0, ["2026-R1", "/prp/changelog#prp-2026-r1"], ["2026-R1", "/spf/changelog#spf-2026-r1"], ["2025.12.2", "/i9/changelog/2025#i-9-2025-12-2"], ["2026-R1", "/cbs/changelog#cbs-2026-r1"], ["2025-12-23", "/mwf/changelog#2025-12-23"]], [2025, "2025-12-19", ["2025.12.2", "/ste/changelog/2025#ste-2025-12-2"], ["2025-R12d", "/prp/changelog/2025#prp-2025-r12d"], 0, 0, 0, ["2025-12-19", "/mwf/changelog/2025#2025-12-19"]], [2025, "2025-12-12", ["2025.12.1", "/ste/changelog/2025#ste-2025-12-1"], ["2025-R12c", "/prp/changelog/2025#prp-2025-r12c"], ["2025-R12a", "/spf/changelog/2025#spf-2025-r12a"], ["2025.12.1", "/i9/changelog/2025#i-9-2025-12-1"], ["2025-R12a", "/cbs/changelog/2025#cbs-2025-r12a"], ["2025-12-12", "/mwf/changelog/2025#2025-12-12"]], [2025, "2025-11-26", ["2025.11.3", "/ste/changelog/2025#ste-2025-11-3"], ["2025-R12b", "/prp/changelog/2025#prp-2025-r12b"], ["2025-R12", "/spf/changelog/2025#spf-2025-r12"], ["2025.11.1", "/i9/changelog/2025#i-9-2025-11-1"], ["2025-R12", "/cbs/changelog/2025#cbs-2025-r12"], ["2025-11-26", "/mwf/changelog/2025#2025-11-26"]], [2025, "2025-11-25", 0, ["2025-R12a", "/prp/changelog/2025#prp-2025-r12a"], 0, 0, 0], [2025, "2025-11-21", 0, ["2025-R12", "/prp/changelog/2025#prp-2025-r12"], 0, 0, 0, ["2025-11-21", "/mwf/changelog/2025#2025-11-21"]], [2025, "2025-11-19", ["2025.11.2", "/ste/changelog/2025#ste-2025-11-2"], ["2025-R11b", "/prp/changelog/2025#prp-2025-r11b"], 0, 0, 0, ["2025-11-19", "/mwf/changelog/2025#2025-11-19"]], [2025, "2025-11-14", ["2025.11.1", "/ste/changelog/2025#ste-2025-11-1"], ["2025-R11a", "/prp/changelog/2025#prp-2025-r11a"], 0, 0, 0, ["2025-11-14", "/mwf/changelog/2025#2025-11-14"]], [2025, "2025-10-30", 0, ["2025-R11", "/prp/changelog/2025#prp-2025-r11"], ["2025-R11", "/spf/changelog/2025#spf-2025-r11"], ["2025.10.1", "/i9/changelog/2025#i-9-2025-10-1"], ["2025-R11", "/cbs/changelog/2025#cbs-2025-r11"], ["2025-10-30", "/mwf/changelog/2025#2025-10-30"]], [2025, "2025-10-24", ["2025.10.2", "/ste/changelog/2025#ste-2025-10-2"], ["2025-R10b", "/prp/changelog/2025#prp-2025-r10b"], 0, 0, 0, ["2025-10-24", "/mwf/changelog/2025#2025-10-24"]], [2025, "2025-10-10", ["2025.10.1", "/ste/changelog/2025#ste-2025-10-1-2025-r11"], ["2025-R10a", "/prp/changelog/2025#prp-2025-r10a"], 0, 0, 0, ["2025-10-10", "/mwf/changelog/2025#2025-10-10"]], [2025, "2025-09-26", 0, ["2025-R10", "/prp/changelog/2025#prp-2025-r10"], ["2025-R10", "/spf/changelog/2025#spf-2025-r10"], ["2025.9.1", "/i9/changelog/2025#i-9-2025-9-1"], ["2025-R10", "/cbs/changelog/2025#cbs-2025-r10"], ["2025-09-26", "/mwf/changelog/2025#2025-09-26"]], [2025, "2025-09-22", ["2025.9.2 (2025-R10a)", "/ste/changelog/2025#ste-2025-9-2-2025-r10a"], ["2025-R9b", "/prp/changelog/2025#prp-2025-r9b"], 0, 0, 0, ["2025-09-22", "/mwf/changelog/2025#2025-09-22"]], [2025, "2025-09-12", ["2025.9.1 (2025-R10)", "/ste/changelog/2025#ste-2025-9-1-2025-r10"], ["2025-R9a", "/prp/changelog/2025#prp-2025-r9a"], 0, 0, 0, ["2025-09-12", "/mwf/changelog/2025#2025-09-12"]], [2025, "2025-08-29", 0, ["2025-R9", "/prp/changelog/2025#prp-2025-r9"], ["2025-R9", "/spf/changelog/2025#spf-2025-r9"], ["2025.8.1", "/i9/changelog/2025#i-9-2025-8-1"], ["2025-R9", "/cbs/changelog/2025#cbs-2025-r9"]], [2025, "2025-08-22", ["2025.8.2 (2025-R9a)", "/ste/changelog/2025#ste-2025-8-2-2025-r9a"], ["2025-R8b", "/prp/changelog/2025#prp-2025-r8b"], 0, 0, 0, ["2025-08-22", "/mwf/changelog/2025#2025-08-22"]], [2025, "2025-08-08", ["2025.8.1 (2025-R9)", "/ste/changelog/2025#ste-2025-8-1-2025-r9"], ["2025-R8a", "/prp/changelog/2025#prp-2025-r8a"], 0, 0, 0, ["2025-08-08", "/mwf/changelog/2025#2025-08-08"]], [2025, "2025-07-25", ["2025-R8b", "/ste/changelog/2025#ste-2025-r8b"], ["2025-R8", "/prp/changelog/2025#prp-2025-r8"], ["2025-R8", "/spf/changelog/2025#spf-2025-r8"], 0, ["2025-R8", "/cbs/changelog/2025#cbs-2025-r8"]], [2025, "2025-07-18", ["2025-R8a", "/ste/changelog/2025#ste-2025-r8a"], ["2025-R7b", "/prp/changelog/2025#prp-2025-r7b"], 0, 0, 0], [2025, "2025-07-11", ["2025-R8", "/ste/changelog/2025#ste-2025-r8"], ["2025-R7a", "https://support.symmetry.com/hc/en-us/articles/38927075160468"], 0, 0, 0], [2025, "2025-06-27", ["2025-R7b", "/ste/changelog/2025#ste-2025-r7b"], ["2025-R7", "/prp/changelog/2025#prp-2025-r7"], ["2025-R7", "/spf/changelog/2025#spf-2025-r7"], 0, ["2025-R7", "/cbs/changelog/2025#cbs-2025-r7"], ["2025-06-27", "/mwf/changelog/2025#2025-06-27"]], [2025, "2025-06-18", ["2025-R7a", "/ste/changelog/2025#ste-2025-r7a"], ["2025-R6b", "/prp/changelog/2025#prp-2025-r6b"], 0, 0, 0, ["2025-06-18", "/mwf/changelog/2025#2025-06-18"]], [2025, "2025-06-13", ["2025-R7", "/ste/changelog/2025#ste-2025-r7"], ["2025-R6a", "/prp/changelog/2025#prp-2025-r6a"], 0, 0, 0, ["2025-06-13", "/mwf/changelog/2025#2025-06-13"]], [2025, "2025-06-02", ["2025-R6b", "/ste/changelog/2025#ste-2025-r6b"], 0, 0, 0, 0], [2025, "2025-05-30", 0, ["2025-R6", "/prp/changelog/2025#prp-2025-r6"], ["2025-R6", "/spf/changelog/2025#spf-2025-r6"], 0, 0, ["2025-05-30", "/mwf/changelog/2025#2025-05-30"]], [2025, "2025-05-19", ["2025-R6a", "/ste/changelog/2025#ste-2025-r6a"], 0, 0, 0, 0], [2025, "2025-05-09", ["2025-R6", "/ste/changelog/2025#ste-2025-r6"], ["2025-R5a", "/prp/changelog/2025#prp-2025-r5a"], ["2025-R5a", "/spf/changelog/2025#spf-2025-r5a"], 0, ["2025-R5a", "/cbs/changelog/2025#cbs-2025-r5a"], ["2025-05-09", "/mwf/changelog/2025#2025-05-09"]], [2025, "2025-04-25", 0, ["2025-R5", "/prp/changelog/2025#prp-2025-r5"], ["2025-R5", "/spf/changelog/2025#spf-2025-r5"], 0, ["2025-R5", "/cbs/changelog/2025#cbs-2025-r5"], ["2025-04-25", "/mwf/changelog/2025#2025-04-25"]], [2025, "2025-04-11", ["2025-R5", "/ste/changelog/2025#ste-2025-r5"], ["2025-R4a", "/prp/changelog/2025#prp-2025-r4a"], 0, 0, 0, ["2025-04-11", "/mwf/changelog/2025#2025-04-11"]], [2025, "2025-04-07", 0, 0, ["2025-R4a", "/spf/changelog/2025#spf-2025-r4a"], 0, 0], [2025, "2025-03-28", 0, ["2025-R4", "/prp/changelog/2025#prp-2025-r4"], 0, 0, ["2025-R4", "/cbs/changelog/2025#cbs-2025-r4"], ["2025-03-28", "/mwf/changelog/2025#2025-03-28"]], [2025, "2025-03-14", ["2025-R4", "/ste/changelog/2025#ste-2025-r4"], ["2025-R3a", "/prp/changelog/2025#prp-2025-r3a"], 0, 0, 0, ["2025-03-14", "/mwf/changelog/2025#2025-03-14"]], [2025, "2025-02-28", 0, ["2025-R3", "/prp/changelog/2025#prp-2025-r3"], ["2025-R3", "/spf/changelog/2025#spf-2025-r3"], 0, ["2025-R3", "/cbs/changelog/2025#cbs-2025-r3"], ["2025-02-28", "/mwf/changelog/2025#2025-02-28"]], [2025, "2025-02-21", ["2025-R3a", "/ste/changelog/2025#ste-2025-r3a"], ["2025-R2b", "/prp/changelog/2025#prp-2025-r2b"], 0, 0, 0, ["2025-02-21", "/mwf/changelog/2025#2025-02-21"]], [2025, "2025-02-14", ["2025-R3", "/ste/changelog/2025#ste-2025-r3"], ["2025-R2a", "/prp/changelog/2025#prp-2025-r2a"], 0, 0, 0, ["2025-02-14", "/mwf/changelog/2025#2025-02-14"]], [2025, "2025-01-31", 0, ["2025-R2", "/prp/changelog/2025#prp-2025-r2"], ["2025-R2", "/spf/changelog/2025#spf-2025-r2"], 0, ["2025-R2", "/cbs/changelog/2025#cbs-2025-r2"]], [2025, "2025-01-24", ["2025-R2a", "/ste/changelog/2025#ste-2025-r2a"], ["2025-R1c", "/prp/changelog/2025#prp-2025-r1c"], 0, 0, 0], [2025, "2025-01-17", 0, 0, ["2025-R1b", "/spf/changelog/2025#spf-2025-r1b"], 0, 0], [2025, "2025-01-13", 0, 0, 0, 0, ["2025-R1a", "/cbs/changelog/2025#cbs-2025-r1a"]], [2025, "2025-01-10", ["2025-R2", "/ste/changelog/2025#ste-2025-r2"], ["2025-R1b", "/prp/changelog/2025#prp-2025-r1b"], ["2025-R1a", "/spf/changelog/2025#spf-2025-r1a"], 0, 0, ["2025-01-10", "/mwf/changelog/2025#2025-01-10"]], [2025, "2025-01-03", ["2025-R1c", "/ste/changelog/2025#ste-2025-r1c"], ["2025-R1a", "/prp/changelog/2025#prp-2025-r1a"], 0, 0, 0, ["2025-01-03", "/mwf/changelog/2025#2025-01-03"]], [2025, "2024-12-27", ["2025-R1b", "/ste/changelog/2025#ste-2025-r1b"], ["2025-R1", "/prp/changelog/2025#prp-2025-r1"], ["2025-R1", "/spf/changelog/2025#spf-2025-r1"], 0, ["2025-R1", "/cbs/changelog/2025#cbs-2025-r1"], ["2024-12-27", "/mwf/changelog/2025#2024-12-27"]], [2025, "2024-12-20", ["2025-R1a", "/ste/changelog/2025#ste-2025-r1a"], ["2024-R12b", "/prp/changelog/2024#prp-2024-r12b"], 0, 0, 0, ["2024-12-20", "/mwf/changelog/2024#2024-12-20"]], [2025, "2024-12-13", ["2025-R1", "/ste/changelog/2025#ste-2025-r1"], ["2024-R12a", "/prp/changelog/2024#prp-2024-r12a"], ["2024-R12a", "/spf/changelog/2024#spf-2024-r12a"], 0, 0, ["2024-12-13", "/mwf/changelog/2024#2024-12-13"]], [2024, "2024-12-06", ["2024-R12c", "/ste/changelog/2024#ste-2024-r12c"], 0, 0, 0, 0], [2024, "2024-11-27", ["2024-R12b", "/ste/changelog/2024#ste-2024-r12b"], ["2024-R12", "/prp/changelog/2024#prp-2024-r12"], ["2024-R12", "/spf/changelog/2024#spf-2024-r12"], 0, ["2024-R12", "/cbs/changelog/2024#cbs-2024-r12"], ["2024-11-27", "/mwf/changelog/2024#2024-11-27"]], [2024, "2024-11-15", ["2024-R12a", "/ste/changelog/2024#ste-2024-r12a"], ["2024-R11b", "/prp/changelog/2024#prp-2024-r11b"], 0, 0, 0, ["2024-11-15", "/mwf/changelog/2024#2024-11-15"]], [2024, "2024-11-08", ["2024-R12", "/ste/changelog/2024#ste-2024-r12"], ["2024-R11a", "/prp/changelog/2024#prp-2024-r11a"], 0, 0, 0, ["2024-11-08", "/mwf/changelog/2024#2024-11-08"]], [2024, "2024-10-25", 0, ["2024-R11", "/prp/changelog/2024#prp-2024-r11"], ["2024-R11", "/spf/changelog/2024#spf-2024-r11"], 0, ["2024-R11", "/cbs/changelog/2024#cbs-2024-r11"], ["2024-10-25", "/mwf/changelog/2024#2024-10-25"]], [2024, "2024-10-23", ["2024-R11a", "/ste/changelog/2024#ste-2024-r11a"], 0, 0, 0, 0], [2024, "2024-10-11", ["2024-R11", "/ste/changelog/2024#ste-2024-r11"], ["2024-R10a", "/prp/changelog/2024#prp-2024-r10a"], 0, 0, 0, ["2024-10-11", "/mwf/changelog/2024#2024-10-11"]], [2024, "2024-10-01", 0, 0, ["2024-R10a", "/spf/changelog/2024#spf-2024-r10a"], 0, 0], [2024, "2024-09-27", 0, ["2024-R10", "/prp/changelog/2024#prp-2024-r10"], ["2024-R10", "/spf/changelog/2024#spf-2024-r10"], 0, ["2024-R10", "/cbs/changelog/2024#cbs-2024-r10"], ["2024-09-27", "/mwf/changelog/2024#2024-09-27"]], [2024, "2024-09-13", ["2024-R10", "/ste/changelog/2024#ste-2024-r10"], ["2024-R9a", "/prp/changelog/2024#prp-2024-r9a"], 0, 0, 0, ["2024-09-13", "/mwf/changelog/2024#2024-09-13"]], [2024, "2024-08-30", 0, ["2024-R9", "/prp/changelog/2024#prp-2024-r9"], ["2024-R9", "/spf/changelog/2024#spf-2024-r9"], 0, ["2024-R9", "/cbs/changelog/2024#cbs-2024-r9"]], [2024, "2024-08-16", 0, ["2024-R8b", "/prp/changelog/2024#prp-2024-r8b"], 0, 0, 0, ["2024-08-16", "/mwf/changelog/2024#2024-08-16"]], [2024, "2024-08-09", ["2024-R9", "/ste/changelog/2024#ste-2024-r9"], ["2024-R8a", "/prp/changelog/2024#prp-2024-r8a"], 0, 0, 0, ["2024-08-09", "/mwf/changelog/2024#2024-08-09"]], [2024, "2024-07-29", 0, 0, ["2024-R8a", "/spf/changelog/2024#spf-2024-r8a"], 0, 0], [2024, "2024-07-26", 0, ["2024-R8", "/prp/changelog/2024#prp-2024-r8"], ["2024-R8", "/spf/changelog/2024#spf-2024-r8"], 0, ["2024-R8", "/cbs/changelog/2024#cbs-2024-r8"]], [2024, "2024-07-24", ["2024-R8a", "/ste/changelog/2024#ste-2024-r8a"], 0, 0, 0, 0], [2024, "2024-07-12", ["2024-R8", "/ste/changelog/2024#ste-2024-r8"], ["2024-R7b", "/prp/changelog/2024#prp-2024-r7b"], 0, 0, 0], [2024, "2024-07-05", 0, 0, 0, 0, ["2024-R7a", "/cbs/changelog/2024#cbs-2024-r7a"]], [2024, "2024-07-03", ["2024-R7b", "/ste/changelog/2024#ste-2024-r7b"], 0, 0, 0, 0], [2024, "2024-07-02", 0, ["2024-R7a", "/prp/changelog/2024#prp-2024-r7a"], 0, 0, 0], [2024, "2024-06-28", 0, ["2024-R7", "/prp/changelog/2024#prp-2024-r7"], ["2024-R7", "/spf/changelog/2024#spf-2024-r7"], 0, ["2024-R7", "/cbs/changelog/2024#cbs-2024-r7"], ["2024-06-28", "/mwf/changelog/2024#2024-06-28"]], [2024, "2024-06-26", ["2024-R7a", "/ste/changelog/2024#ste-2024-r7a"], 0, 0, 0, 0], [2024, "2024-06-14", ["2024-R7", "/ste/changelog/2024#ste-2024-r7"], ["2024-R6b", "/prp/changelog/2024#prp-2024-r6b"], 0, 0, 0, ["2024-06-14", "/mwf/changelog/2024#2024-06-14"]], [2024, "2024-06-05", 0, ["2024-R6a", "/prp/changelog/2024#prp-2024-r6a"], ["2024-R6a", "/spf/changelog/2024#spf-2024-r6a"], 0, 0, ["2024-06-05", "/mwf/changelog/2024#2024-06-05"]], [2024, "2024-05-31", 0, ["2024-R6", "/prp/changelog/2024#prp-2024-r6"], ["2024-R6", "/spf/changelog/2024#spf-2024-r6"], 0, ["2024-R6", "/cbs/changelog/2024#cbs-2024-r6"], ["2024-05-31", "/mwf/changelog/2024#2024-05-31"]], [2024, "2024-05-24", ["2024-R6b", "/ste/changelog/2024#ste-2024-r6b"], 0, 0, 0, 0], [2024, "2024-05-14", ["2024-R6a", "/ste/changelog/2024#ste-2024-r6a"], ["2024-R5b", "/prp/changelog/2024#prp-2024-r5b"], ["2024-R5b", "/spf/changelog/2024#spf-2024-r5b"], 0, 0], [2024, "2024-05-10", ["2024-R6", "/ste/changelog/2024#ste-2024-r6"], ["2024-R5a", "/prp/changelog/2024#prp-2024-r5a"], 0, 0, 0, ["2024-05-10", "/mwf/changelog/2024#2024-05-10"]], [2024, "2024-05-07", 0, 0, ["2024-R5a", "/spf/changelog/2024#spf-2024-r5a"], 0, 0], [2024, "2024-04-26", 0, ["2024-R5", "/prp/changelog/2024#prp-2024-r5"], ["2024-R5", "/spf/changelog/2024#spf-2024-r5"], 0, 0, ["2024-04-26", "/mwf/changelog/2024#2024-04-26"]], [2024, "2024-04-19", 0, 0, 0, 0, ["2024-R4a", "/cbs/changelog/2024#cbs-2024-r4a"]], [2024, "2024-04-12", ["2024-R5", "/ste/changelog/2024#ste-2024-r5"], ["2024-R4a", "/prp/changelog/2024#prp-2024-r4a"], 0, 0, 0, ["2024-04-12", "/mwf/changelog/2024#2024-04-12"]], [2024, "2024-03-29", 0, ["2024-R4", "/prp/changelog/2024#prp-2024-r4"], ["2024-R4", "/spf/changelog/2024#spf-2024-r4"], 0, ["2024-R4", "/cbs/changelog/2024#cbs-2024-r4"], ["2024-03-29", "/mwf/changelog/2024#2024-03-29"]], [2024, "2024-03-27", ["2024-R4b", "/ste/changelog/2024#ste-2024-r4b"], 0, 0, 0, 0], [2024, "2024-03-19", ["2024-R4a", "/ste/changelog/2024#ste-2024-r4a"], ["2024-R3b", "/prp/changelog/2024#prp-2024-r3b"], 0, 0, 0], [2024, "2024-03-08", ["2024-R4", "/ste/changelog/2024#ste-2024-r4"], ["2024-R3a", "/prp/changelog/2024#prp-2024-r3a"], 0, 0, 0, ["2024-03-08", "/mwf/changelog/2024#2024-03-08"]], [2024, "2024-02-23", ["2024-R3b", "/ste/changelog/2024#ste-2024-r3b"], ["2024-R3", "/prp/changelog/2024#prp-2024-r3"], ["2024-R3", "/spf/changelog/2024#spf-2024-r3"], 0, ["2024-R3", "/cbs/changelog/2024#cbs-2024-r3"], ["2024-02-23", "/mwf/changelog/2024#2024-02-23"]], [2024, "2024-02-16", ["2024-R3a", "/ste/changelog/2024#ste-2024-r3a"], ["2024-R2c", "/prp/changelog/2024#prp-2024-r2c"], 0, 0, 0, ["2024-02-16", "/mwf/changelog/2024#2024-02-16"]], [2024, "2024-02-13", 0, ["2024-R2b", "/prp/changelog/2024#prp-2024-r2b"], 0, 0, 0], [2024, "2024-02-09", ["2024-R3", "/ste/changelog/2024#ste-2024-r3"], ["2024-R2a", "/prp/changelog/2024#prp-2024-r2a"], 0, 0, 0, ["2024-02-09", "/mwf/changelog/2024#2024-02-09"]], [2024, "2024-01-31", 0, ["2024-R2", "/prp/changelog/2024#prp-2024-r2"], 0, 0, 0], [2024, "2024-01-26", ["2024-R2a", "/ste/changelog/2024#ste-2024-r2a"], ["2024-R1c", "/prp/changelog/2024#prp-2024-r1c"], ["2024-R2", "/spf/changelog/2024#spf-2024-r2"], 0, ["2024-R2", "/cbs/changelog/2024#cbs-2024-r2"]], [2024, "2024-01-17", ["2024-R2", "/ste/changelog/2024#ste-2024-r2"], ["2024-R1b", "/prp/changelog/2024#prp-2024-r1b"], 0, 0, ["2024-R1a", "/cbs/changelog/2024#cbs-2024-r1a"]], [2024, "2024-01-12", 0, 0, ["2024-R1a", "/spf/changelog/2024#spf-2024-r1a"], 0, 0], [2024, "2024-01-05", ["2024-R1e", "/ste/changelog/2024#ste-2024-r1e"], ["2024-R1a", "/prp/changelog/2024#prp-2024-r1a"], 0, 0, 0, ["2024-01-05", "/mwf/changelog/2024#2024-01-05"]], [2024, "2023-12-29", ["2024-R1d", "/ste/changelog/2024#ste-2024-r1d"], ["2024-R1", "/prp/changelog/2024#prp-2024-r1"], ["2024-R1", "/spf/changelog/2024#spf-2024-r1"], 0, ["2024-R1", "/cbs/changelog/2024#cbs-2024-r1"], ["2023-12-29", "/mwf/changelog/2024#2023-12-29"]], [2024, "2023-12-21", ["2024-R1b", "/ste/changelog/2024#ste-2024-r1b"], ["2023-R12c", "/prp/changelog/2023#prp-2023-r12c"], 0, 0, 0], [2024, "2023-12-15", ["2024-R1a", "/ste/changelog/2024#ste-2024-r1a"], ["2023-R12b", "/prp/changelog/2023#prp-2023-r12b"], 0, 0, 0, ["2023-12-15", "/mwf/changelog/2023#2023-12-15"]], [2024, "2023-12-08", ["2024-R1", "/ste/changelog/2024#ste-2024-r1"], ["2023-R12a", "/prp/changelog/2023#prp-2023-r12a"], ["2023-R12a", "/spf/changelog/2023#spf-2023-r12a"], 0, 0, ["2023-12-08", "/mwf/changelog/2023#2023-12-08"]], [2023, "2023-12-01", ["2023-R12a", "/ste/changelog/2023#ste-2023-r12a"], 0, 0, 0, 0], [2023, "2023-11-22", 0, ["2023-R12", "/prp/changelog/2023#prp-2023-r12"], ["2023-R12", "/spf/changelog/2023#spf-2023-r12"], 0, ["2023-R12", "/cbs/changelog/2023#cbs-2023-r12"], ["2023-11-22", "/mwf/changelog/2023#2023-11-22"]], [2023, "2023-11-10", ["2023-R12", "/ste/changelog/2023#ste-2023-r12"], ["2023-R11a", "/prp/changelog/2023#prp-2023-r11a"], 0, 0, 0, ["2023-11-10", "/mwf/changelog/2023#2023-11-10"]], [2023, "2023-11-01", 0, 0, 0, 0, ["2023-R11a", "/cbs/changelog/2023#cbs-2023-r11a"]], [2023, "2023-10-27", 0, ["2023-R11", "/prp/changelog/2023#prp-2023-r11"], ["2023-R11", "/spf/changelog/2023#spf-2023-r11"], 0, ["2023-R11", "/cbs/changelog/2023#cbs-2023-r11"], ["2023-10-27", "/mwf/changelog/2023#2023-10-27"]], [2023, "2023-10-13", ["2023-R11", "/ste/changelog/2023#ste-2023-r11"], ["2023-R10b", "/prp/changelog/2023#prp-2023-r10b"], 0, 0, 0, ["2023-10-13", "/mwf/changelog/2023#2023-10-13"]], [2023, "2023-10-04", 0, 0, 0, 0, ["2023-R10a", "/cbs/changelog/2023#cbs-2023-r10a"]], [2023, "2023-10-02", ["2023-R10c", "/ste/changelog/2023#ste-2023-r10c"], ["2023-R10a", "/prp/changelog/2023#prp-2023-r10a"], 0, 0, 0, ["2023-10-02", "/mwf/changelog/2023#2023-10-02"]], [2023, "2023-09-29", 0, ["2023-R10", "/prp/changelog/2023#prp-2023-r10"], ["2023-R10", "/spf/changelog/2023#spf-2023-r10"], 0, ["2023-R10", "/cbs/changelog/2023#cbs-2023-r10"], ["2023-09-29", "/mwf/changelog/2023#2023-09-29"]], [2023, "2023-09-20", ["2023-R10b", "/ste/changelog/2023#ste-2023-r10b"], 0, 0, 0, 0], [2023, "2023-09-14", ["2023-R10a", "/ste/changelog/2023#ste-2023-r10a"], ["2023-R9b", "/prp/changelog/2023#prp-2023-r9b"], 0, 0, 0, ["2023-09-14", "/mwf/changelog/2023#2023-09-14"]], [2023, "2023-09-08", ["2023-R10", "/ste/changelog/2023#ste-2023-r10"], ["2023-R9a", "/prp/changelog/2023#prp-2023-r9a"], 0, 0, 0, ["2023-09-08", "/mwf/changelog/2023#2023-09-08"]], [2023, "2023-09-01", 0, 0, ["2023-R9a", "/spf/changelog/2023#spf-2023-r9a"], 0, 0], [2023, "2023-08-25", 0, ["2023-R9", "/prp/changelog/2023#prp-2023-r9"], ["2023-R9", "/spf/changelog/2023#spf-2023-r9"], 0, ["2023-R9", "/cbs/changelog/2023#cbs-2023-r9"], ["2023-08-25", "/mwf/changelog/2023#2023-08-25"]], [2023, "2023-08-11", ["2023-R9", "/ste/changelog/2023#ste-2023-r9"], ["2023-R8a", "/prp/changelog/2023#prp-2023-r8a"], 0, 0, 0, ["2023-08-11", "/mwf/changelog/2023#2023-08-11"]], [2023, "2023-07-31", 0, ["2023-R8", "/prp/changelog/2023#prp-2023-r8"], 0, 0, 0], [2023, "2023-07-28", 0, 0, ["2023-R8", "/spf/changelog/2023#spf-2023-r8"], 0, ["2023-R8", "/cbs/changelog/2023#cbs-2023-r8"]], [2023, "2023-07-25", ["2023-R8b", "/ste/changelog/2023#ste-2023-r8b"], 0, 0, 0, 0], [2023, "2023-07-24", ["2023-R8a", "/ste/changelog/2023#ste-2023-r8a"], ["2023-R7a", "/prp/changelog/2023#prp-2023-r7a"], 0, 0, 0, ["2023-07-24", "/mwf/changelog/2023#2023-07-24"]], [2023, "2023-07-19", ["2023-R8", "/ste/changelog/2023#ste-2023-r8"], 0, 0, 0, 0], [2023, "2023-06-30", 0, ["2023-R7", "/prp/changelog/2023#prp-2023-r7"], ["2023-R7", "/spf/changelog/2023#spf-2023-r7"], 0, ["2023-R7", "/cbs/changelog/2023#cbs-2023-r7"], ["2023-06-30", "/mwf/changelog/2023#2023-06-30"]], [2023, "2023-06-28", ["2023-R7c", "/ste/changelog/2023#ste-2023-r7c"], ["2023-R6d", "/prp/changelog/2023#prp-2023-r6d"], 0, 0, 0], [2023, "2023-06-23", ["2023-R7b", "/ste/changelog/2023#ste-2023-r7b"], ["2023-R6c", "/prp/changelog/2023#prp-2023-r6c"], 0, 0, 0, ["2023-06-23", "/mwf/changelog/2023#2023-06-23"]], [2023, "2023-06-16", ["2023-R7a", "/ste/changelog/2023#ste-2023-r7a"], 0, 0, 0, 0], [2023, "2023-06-14", 0, ["2023-R6b", "/prp/changelog/2023#prp-2023-r6b"], 0, 0, 0], [2023, "2023-06-09", ["2023-R7", "/ste/changelog/2023#ste-2023-r7"], ["2023-R6a", "/prp/changelog/2023#prp-2023-r6a"], 0, 0, 0], [2023, "2023-06-01", 0, ["2023-R6", "/prp/changelog/2023#prp-2023-r6"], 0, 0, 0, ["2023-06-01", "/mwf/changelog/2023#2023-06-01"]], [2023, "2023-05-26", 0, 0, ["2023-R6", "/spf/changelog/2023#spf-2023-r6"], 0, ["2023-R6", "/cbs/changelog/2023#cbs-2023-r6"]], [2023, "2023-05-19", ["2023-R6a", "/ste/changelog/2023#ste-2023-r6a"], 0, 0, 0, 0], [2023, "2023-05-16", 0, ["2023-R5 Hotfix", "/prp/changelog/2023#prp-2023-r5-hotfix"], 0, 0, 0], [2023, "2023-05-12", ["2023-R6", "/ste/changelog/2023#ste-2023-r6"], ["2023-R5a", "/prp/changelog/2023#prp-2023-r5a"], 0, 0, 0], [2023, "2023-05-02", 0, 0, ["2023-R5b", "/spf/changelog/2023#spf-2023-r5b"], 0, 0], [2023, "2023-05-01", 0, 0, ["2023-R5a", "/spf/changelog/2023#spf-2023-r5a"], 0, 0], [2023, "2023-04-28", 0, ["2023-R5", "/prp/changelog/2023#prp-2023-r5"], ["2023-R5", "/spf/changelog/2023#spf-2023-r5"], 0, ["2023-R5", "/cbs/changelog/2023#cbs-2023-r5"], ["2023-04-28", "/mwf/changelog/2023#2023-04-28"]], [2023, "2023-04-14", ["2023-R5", "/ste/changelog/2023#ste-2023-r5"], 0, 0, 0, 0], [2023, "2023-03-31", 0, ["2023-R4", "/prp/changelog/2023#prp-2023-r4"], ["2023-R4", "/spf/changelog/2023#spf-2023-r4"], 0, ["2023-R4", "/cbs/changelog/2023#cbs-2023-r4"], ["2023-03-31", "/mwf/changelog/2023#2023-03-31"]], [2023, "2023-03-15", 0, 0, ["2023-R3a", "/spf/changelog/2023#spf-2023-r3a"], 0, 0], [2023, "2023-03-10", ["2023-R4", "/ste/changelog/2023#ste-2023-r4"], ["2023-R3b", "/prp/changelog/2023#prp-2023-r3b"], 0, 0, 0], [2023, "2023-03-02", 0, ["2023-R3a", "/prp/changelog/2023#prp-2023-r3a"], 0, 0, 0], [2023, "2023-02-24", 0, ["2023-R3", "/prp/changelog/2023#prp-2023-r3"], ["2023-R3", "/spf/changelog/2023#spf-2023-r3"], 0, ["2023-R3", "/cbs/changelog/2023#cbs-2023-r3"], ["2023-02-24", "/mwf/changelog/2023#2023-02-24"]], [2023, "2023-02-10", ["2023-R3", "/ste/changelog/2023#ste-2023-r3"], 0, 0, 0, 0], [2023, "2023-02-03", 0, 0, ["2023-R2a", "/spf/changelog/2023#spf-2023-r2a"], 0, 0], [2023, "2023-01-27", ["2023-R2a", "/ste/changelog/2023#ste-2023-r2a"], ["2023-R2", "/prp/changelog/2023#prp-2023-r2"], ["2023-R2", "/spf/changelog/2023#spf-2023-r2"], 0, ["2023-R2", "/cbs/changelog/2023#cbs-2023-r2"], ["2023-01-27", "/mwf/changelog/2023#2023-01-27"]], [2023, "2023-01-13", ["2023-R2", "/ste/changelog/2023#ste-2023-r2#h_01GE34P41D9CWGAFFYGVBWJ57S"], ["2023-R1b", "/prp/changelog/2023#prp-2023-r1b"], 0, 0, ["2023-R1a", "/cbs/changelog/2023#cbs-2023-r1a"]], [2023, "2023-01-12", 0, 0, ["2023-R1b", "/spf/changelog/2023#spf-2023-r1b"], 0, 0], [2023, "2023-01-06", ["2023-R1d", "/ste/changelog/2023#ste-2023-r1d"], 0, 0, 0, 0], [2023, "2023-01-05", 0, 0, ["2023-R1a", "/spf/changelog/2023#spf-2023-r1a"], 0, 0], [2023, "2022-12-30", 0, ["2023-R1", "/prp/changelog/2023#prp-2023-r1"], ["2023-R1", "/spf/changelog/2023#spf-2023-r1"], 0, ["2023-R1", "/cbs/changelog/2023#cbs-2023-r1"], ["2022-12-30", "/mwf/changelog/2023#2022-12-30"]], [2023, "2022-12-29", ["2023-R1c", "/ste/changelog/2023#ste-2023-r1c"], 0, 0, 0, 0], [2023, "2022-12-22", ["2023-R1b", "/ste/changelog/2023#ste-2023-r1b"], 0, 0, 0, 0], [2023, "2022-12-16", ["2023-R1a", "/ste/changelog/2023#ste-2023-r1a"], 0, 0, 0, 0], [2023, "2022-12-09", ["2023-R1", "/ste/changelog/2023#ste-2023-r1"], 0, ["2022-R12a", "/spf/changelog/2022#spf-2022-r12a"], 0, ["2022-R12a", "/cbs/changelog/2022#cbs-2022-r12a"]], [2022, "2022-11-30", ["2022-R12a", "/ste/changelog/2022#ste-2022-r12a"], ["2022-R12", "/prp/changelog/2022#prp-2022-r12"], ["2022-R12", "/spf/changelog/2022#spf-2022-r12"], 0, ["2022-R12", "/cbs/changelog/2022#cbs-2022-r12"]], [2022, "2022-11-10", ["2022-R12", "/ste/changelog/2022#ste-2022-r12"], 0, 0, 0, 0], [2022, "2022-10-28", ["2022-R11a", "/ste/changelog/2022#ste-2022-r11a"], ["2022-R11", "/prp/changelog/2022#prp-2022-r11"], ["2022-R11", "/spf/changelog/2022#spf-2022-r11"], 0, ["2022-R11", "/cbs/changelog/2022#cbs-2022-r11"]], [2022, "2022-10-14", ["2022-R11", "/ste/changelog/2022#ste-2022-r11"], 0, ["2022-R10a", "/spf/changelog/2022#spf-2022-r10a"], 0, 0], [2022, "2022-09-30", ["2022-R10b", "/ste/changelog/2022#ste-2022-r10b"], ["2022-R10", "/prp/changelog/2022#prp-2022-r10"], ["2022-R10", "/spf/changelog/2022#spf-2022-r10"], 0, ["2022-R10", "/cbs/changelog/2022#cbs-2022-r10"]], [2022, "2022-09-23", ["2022-R10a", "/ste/changelog/2022#ste-2022-r10a"], 0, 0, 0, 0], [2022, "2022-09-09", ["2022-R10", "/ste/changelog/2022#ste-2022-r10"], 0, 0, 0, 0], [2022, "2022-09-01", 0, 0, 0, 0, ["2022-R9", "/cbs/changelog/2022#cbs-2022-r9"]], [2022, "2022-08-31", ["2022-R9a", "/ste/changelog/2022#ste-2022-r9a"], ["2022-R9 Tax Updates", "/prp/changelog/2022#prp-2022-r9"], 0, 0, 0], [2022, "2022-08-26", 0, ["2022-R9", "/prp/changelog/2022#prp-2022-r9"], ["2022-R9", "/spf/changelog/2022#spf-2022-r9"], 0, 0], [2022, "2022-08-12", ["2022-R9", "/ste/changelog/2022#ste-2022-r9"], ["2022-R8a", "/prp/changelog/2022#prp-2022-r8a"], 0, 0, 0], [2022, "2022-08-10", 0, 0, ["2022-R8b", "/spf/changelog/2022#spf-2022-r8b"], 0, 0], [2022, "2022-07-31", 0, 0, ["2022-R8a", "/spf/changelog/2022#spf-2022-r8a"], 0, 0], [2022, "2022-07-29", ["2022-R8b", "/ste/changelog/2022#ste-2022-r8b"], ["2022-R8", "/prp/changelog/2022#prp-2022-r8"], ["2022-R8", "/spf/changelog/2022#spf-2022-r8"], 0, ["2022-R8", "/cbs/changelog/2022#cbs-2022-r8"]], [2022, "2022-07-22", ["2022-R8a", "/ste/changelog/2022#ste-2022-r8a"], 0, 0, 0, 0], [2022, "2022-07-08", ["2022-R8", "/ste/changelog/2022#ste-2022-r8"], 0, 0, 0, 0], [2022, "2022-06-29", ["2022-R7b", "/ste/changelog/2022#ste-2022-r7b"], ["2022-R7b", "/prp/changelog/2022#prp-2022-r7b"], 0, 0, ["2022-R7a", "/cbs/changelog/2022#cbs-2022-r7a"]], [2022, "2022-06-24", ["2022-R7a", "/ste/changelog/2022#ste-2022-r7a"], ["2022-R7", "/prp/changelog/2022#prp-2022-r7"], ["2022-R7", "/spf/changelog/2022#spf-2022-r7"], 0, ["2022-R7", "/cbs/changelog/2022#cbs-2022-r7"]], [2022, "2022-06-10", ["2022-R7", "/ste/changelog/2022#ste-2022-r7"], 0, 0, 0, 0], [2022, "2022-05-27", 0, ["2022-R6", "/prp/changelog/2022#prp-2022-r6"], ["2022-R6", "/spf/changelog/2022#spf-2022-r6"], 0, ["2022-R6", "/cbs/changelog/2022#cbs-2022-r6"]], [2022, "2022-05-20", ["2022-R6a", "/ste/changelog/2022#ste-2022-r6a"], 0, 0, 0, 0], [2022, "2022-05-17", 0, 0, ["2022-R5a", "/spf/changelog/2022#spf-2022-r5a"], 0, 0], [2022, "2022-05-15", ["2022-R6", "/ste/changelog/2022#ste-2022-r6"], ["2022-R5 (API, Portal)", "/prp/changelog/2022#prp-2022-r5"], 0, 0, 0], [2022, "2022-04-29", 0, ["2022-R5", "/prp/changelog/2022#prp-2022-r5"], ["2022-R5", "/spf/changelog/2022#spf-2022-r5"], 0, ["2022-R5", "/cbs/changelog/2022#cbs-2022-r5"]], [2022, "2022-04-15", 0, 0, ["2022-R4b", "/spf/changelog/2022#spf-2022-r4b"], 0, 0], [2022, "2022-04-13", ["2022-R5a", "/ste/changelog/2022#ste-2022-r5a"], 0, ["2022-R4a", "/spf/changelog/2022#spf-2022-r4a"], 0, 0], [2022, "2022-04-08", ["2022-R5", "/ste/changelog/2022#ste-2022-r5"], 0, 0, 0, 0], [2022, "2022-03-25", 0, ["2022-R4", "/prp/changelog/2022#prp-2022-r4"], ["2022-R4", "/spf/changelog/2022#spf-2022-r4"], 0, ["2022-R4", "/cbs/changelog/2022#cbs-2022-r4"]], [2022, "2022-03-11", ["2022-R4", "/ste/changelog/2022#ste-2022-r4"], 0, 0, 0, 0], [2022, "2022-02-25", 0, ["2022-R2a addendum", "/prp/changelog/2022#prp-2022-r2a"], ["2022-R3", "/spf/changelog/2022#spf-2022-r3"], 0, ["2022-R3", "/cbs/changelog/2022#cbs-2022-r3"]], [2022, "2022-02-15", ["2022-R3", "/ste/changelog/2022#ste-2022-r3"], ["2022-R2a", "/prp/changelog/2022#prp-2022-r2a"], 0, 0, 0], [2022, "2022-02-11", 0, 0, ["2022-R2a", "/spf/changelog/2022#spf-2022-r2a"], 0, 0], [2022, "2022-02-07", ["2022-R2b", "/ste/changelog/2022#ste-2022-r2b"], 0, 0, 0, 0], [2022, "2022-01-28", 0, ["2022-R2", "/prp/changelog/2022#prp-2022-r2"], ["2022-R2", "/spf/changelog/2022#spf-2022-r2"], 0, ["2022-R2", "/cbs/changelog/2022#cbs-2022-r2"]], [2022, "2022-01-21", ["2022-R2a", "/ste/changelog/2022#ste-2022-r2a"], 0, 0, 0, 0], [2022, "2022-01-14", ["2022-R2", "/ste/changelog/2022#ste-2022-r2"], ["2022-R1b", "/prp/changelog/2022#prp-2022-r1b"], ["2022-R1c", "/spf/changelog/2022#spf-2022-r1c"], 0, ["2022-R1b", "/cbs/changelog/2022#cbs-2022-r1b"]], [2022, "2022-01-07", ["2022-R1c", "/ste/changelog/2022#ste-2022-r1c"], 0, ["2022-R1b", "/spf/changelog/2022#spf-2022-r1b"], 0, 0], [2022, "2021-12-30", ["2022-R1b", "/ste/changelog/2022#ste-2022-r1b"], ["2022-R1a", "/prp/changelog/2022#prp-2022-r1a"], ["2022-R1a", "/spf/changelog/2022#spf-2022-r1a"], 0, ["2022-R1a", "/cbs/changelog/2022#cbs-2022-r1a"]], [2022, "2021-12-23", 0, 0, 0, 0, ["2022-R1", "/cbs/changelog/2022#cbs-2022-r1"]], [2022, "2021-12-22", ["2022-R1a", "/ste/changelog/2022#ste-2022-r1a"], ["2022-R1", "/prp/changelog/2022#prp-2022-r1"], ["2022-R1", "/spf/changelog/2022#spf-2022-r1"], 0, 0], [2022, "2021-12-10", ["2022-R1", "/ste/changelog/2022#ste-2022-r1"], 0, 0, 0, 0]];
  const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
  const parseDate = iso => {
    const [y, m, d] = iso.split("-").map(n => parseInt(n, 10));
    return new Date(y, m - 1, d);
  };
  const formatShort = iso => {
    const dt = parseDate(iso);
    return `${dt.getDate()} ${MONTHS[dt.getMonth()]}`;
  };
  const formatLong = iso => {
    const dt = parseDate(iso);
    return `${dt.getDate()} ${MONTHS[dt.getMonth()]} ${dt.getFullYear()}`;
  };
  const rows = ROWS.map(([y, d, ste, prp, spf, i9, cbs, mwf], i) => ({
    key: `rn-${y}-${d}-${i}`,
    y,
    d,
    ts: parseDate(d).getTime(),
    ste,
    prp,
    spf,
    i9,
    cbs,
    mwf: mwf || 0
  }));
  const years = [...new Set(rows.map(r => r.y))].sort((a, b) => b - a);
  const initialYear = years.includes(defaultYear) ? defaultYear : years[0];
  const todayTs = (() => {
    const now = new Date();
    return new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
  })();
  const HIDDEN_STORAGE_KEY = "rn-hidden-products";
  const defaultHidden = () => {
    const h = {};
    PRODUCTS.forEach(p => {
      if (p.defaultOff) h[p.key] = true;
    });
    return h;
  };
  const loadHidden = () => {
    if (typeof window === "undefined") return defaultHidden();
    try {
      const raw = window.localStorage.getItem(HIDDEN_STORAGE_KEY);
      if (!raw) return defaultHidden();
      const parsed = JSON.parse(raw);
      return parsed && typeof parsed === "object" ? parsed : defaultHidden();
    } catch (e) {
      return defaultHidden();
    }
  };
  const [year, setYear] = useState(initialYear);
  const [hidden, setHidden] = useState(loadHidden);
  useEffect(() => {
    if (typeof window === "undefined") return;
    try {
      window.localStorage.setItem(HIDDEN_STORAGE_KEY, JSON.stringify(hidden));
    } catch (e) {}
  }, [hidden]);
  const [menuOpen, setMenuOpen] = useState(false);
  const [yearOpen, setYearOpen] = useState(false);
  const FILTER_MENU_ID = "rn-product-filter-menu";
  const YEAR_MENU_ID = "rn-year-menu";
  useEffect(() => {
    if (!menuOpen && !yearOpen) return undefined;
    const onDown = e => {
      if (!e.target.closest) return;
      if (menuOpen && !e.target.closest(".rn-product-filter")) setMenuOpen(false);
      if (yearOpen && !e.target.closest(".rn-year-wrap")) setYearOpen(false);
    };
    const onKey = e => {
      if (e.key === "Escape") {
        setMenuOpen(false);
        setYearOpen(false);
      }
    };
    document.addEventListener("mousedown", onDown);
    document.addEventListener("keydown", onKey);
    return () => {
      document.removeEventListener("mousedown", onDown);
      document.removeEventListener("keydown", onKey);
    };
  }, [menuOpen, yearOpen]);
  const rowHasProduct = (r, key) => Array.isArray(r[key]);
  const yearRows = rows.filter(r => r.y === year).sort((a, b) => b.ts - a.ts);
  const availableProducts = PRODUCTS.filter(p => yearRows.some(r => rowHasProduct(r, p.key)));
  const activeProducts = availableProducts.filter(p => !hidden[p.key]);
  const visibleRows = yearRows.filter(r => activeProducts.some(p => rowHasProduct(r, p.key)));
  const upcomingItems = [];
  rows.filter(r => r.ts > todayTs).sort((a, b) => a.ts - b.ts).forEach(r => {
    PRODUCTS.forEach(p => {
      if (hidden[p.key] || !rowHasProduct(r, p.key)) return;
      const [label, href] = r[p.key];
      upcomingItems.push({
        key: `${r.key}-${p.key}`,
        d: r.d,
        product: p,
        label,
        href
      });
    });
  });
  const toggleProduct = key => {
    setHidden(prev => ({
      ...prev,
      [key]: !prev[key]
    }));
  };
  const allSelected = availableProducts.every(p => !hidden[p.key]);
  const toggleAllProducts = () => {
    if (allSelected) {
      const next = {};
      availableProducts.forEach(p => {
        next[p.key] = true;
      });
      setHidden(next);
    } else {
      setHidden({});
    }
  };
  const filterLabel = activeProducts.length === availableProducts.length ? "All products" : activeProducts.length === 1 ? activeProducts[0].name : `${activeProducts.length} of ${availableProducts.length} products`;
  const Cell = ({value, future}) => {
    if (!Array.isArray(value)) return <span className="rn-empty">—</span>;
    const [label, href, badge] = value;
    const external = href.startsWith("http");
    const badgeText = badge || (future ? "Preview" : null);
    return <span className="rn-cell">
        <a href={href} {...external ? {
      target: "_blank",
      rel: "noreferrer"
    } : {}} className="rn-version-link">
          {label}
        </a>
        {badgeText && <span className="rn-chip">{badgeText}</span>}
      </span>;
  };
  const chevron = <svg className="rn-chevron" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
      <path fillRule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.17l3.71-3.94a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clipRule="evenodd" />
    </svg>;
  return <div className={embedded ? "not-prose rn-index rn-index--embedded" : "not-prose rn-index"}>
      <div className="rn-toolbar">
        <div className="rn-year-wrap">
          <button type="button" id="rn-year-button" aria-label="Release year" aria-haspopup="listbox" aria-expanded={yearOpen} aria-controls={YEAR_MENU_ID} onClick={() => {
    setYearOpen(o => !o);
    setMenuOpen(false);
  }} className="rn-control rn-year-button">
            {year}
            {chevron}
          </button>
          {yearOpen && <div id={YEAR_MENU_ID} role="listbox" aria-labelledby="rn-year-button" className="rn-year-menu">
              <ul className="rn-year-menu-list">
                {years.map(y => <li key={y} role="none">
                    <button type="button" role="option" aria-selected={y === year} className={y === year ? "rn-year-option rn-year-option--active" : "rn-year-option"} onClick={() => {
    setYear(y);
    setYearOpen(false);
  }}>
                      {y}
                    </button>
                  </li>)}
              </ul>
            </div>}
        </div>

        <div className="rn-product-filter">
          <button type="button" id="rn-product-filter-button" aria-haspopup="true" aria-expanded={menuOpen} aria-controls={FILTER_MENU_ID} onClick={() => {
    setMenuOpen(o => !o);
    setYearOpen(false);
  }} className="rn-control rn-filter-button">
            {filterLabel}
            {chevron}
          </button>
          {menuOpen && <div id={FILTER_MENU_ID} role="menu" aria-labelledby="rn-product-filter-button" className="rn-filter-menu">
              <button type="button" role="menuitem" onClick={toggleAllProducts} className="rn-filter-select-all">
                {allSelected ? "Unselect all" : "Select all"}
              </button>
              <ul className="rn-filter-menu-list">
                {availableProducts.map(p => {
    const on = !hidden[p.key];
    return <li key={p.key} role="none">
                      <label className="rn-filter-option">
                        <input type="checkbox" checked={on} onChange={() => toggleProduct(p.key)} className="rn-filter-checkbox" />
                        <img src={p.icon} alt="" className="rn-product-icon" />
                        <span>{p.name}</span>
                      </label>
                    </li>;
  })}
              </ul>
            </div>}
        </div>
      </div>

      {upcomingItems.length > 0 && <section className="rn-upcoming" aria-labelledby="rn-upcoming-heading">
          <h2 id="rn-upcoming-heading" className="rn-upcoming-heading">
            Upcoming releases
          </h2>
          <ul className="rn-upcoming-list">
            {upcomingItems.map(item => {
    const external = item.href.startsWith("http");
    return <li key={item.key}>
                  <a href={item.href} {...external ? {
      target: "_blank",
      rel: "noreferrer"
    } : {}} className="rn-upcoming-row">
                    <img src={item.product.icon} alt="" className="rn-product-icon" />
                    <span className="rn-upcoming-product">{item.product.short}</span>
                    <span className="rn-upcoming-version">{item.label}</span>
                    <span className="rn-chip">Preview</span>
                    <span className="rn-upcoming-date">{formatLong(item.d)}</span>
                  </a>
                </li>;
  })}
          </ul>
        </section>}

      <div className="rn-table-shell">
        {visibleRows.length === 0 || activeProducts.length === 0 ? <p className="rn-empty-state">No releases match the current filters.</p> : <table className="rn-grid">
            <colgroup>
              <col className="rn-col-date" />
              {activeProducts.map(p => <col key={p.key} className="rn-col-product" />)}
            </colgroup>
            <thead>
              <tr>
                <th className="rn-grid-head rn-grid-th rn-grid-th--date" scope="col">
                  Date
                </th>
                {activeProducts.map(p => <th key={p.key} className="rn-grid-head rn-grid-th" scope="col">
                    <a href={p.href} className="rn-product-heading" title={p.name}>
                      <img src={p.icon} alt="" className="rn-product-icon rn-product-icon--header" />
                      <span>{p.name}</span>
                    </a>
                  </th>)}
              </tr>
            </thead>
            <tbody>
              {visibleRows.map(r => {
    const future = r.ts > todayTs;
    return <tr className="rn-grid-row" key={r.key}>
                    <td className="rn-grid-td rn-date">{formatShort(r.d)}</td>
                    {activeProducts.map(p => <td className="rn-grid-td" key={p.key}>
                        <Cell value={r[p.key]} future={future} />
                      </td>)}
                  </tr>;
  })}
            </tbody>
          </table>}
      </div>
    </div>;
};

export const IcoPath = ({name}) => {
  if (name === "search") return <g><circle cx="11" cy="11" r="8" /><path d="m21 21-4.3-4.3" /></g>;
  if (name === "rocket") return <g><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z" /><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z" /><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0" /><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" /></g>;
  if (name === "book") return <path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" />;
  if (name === "code") return <g><path d="m16 18 6-6-6-6" /><path d="m8 6-6 6 6 6" /></g>;
  if (name === "history") return <g><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" /><path d="M3 3v5h5" /><path d="M12 7v5l4 2" /></g>;
  if (name === "chevron") return <path d="m9 18 6-6-6-6" />;
  if (name === "arrow-right") return <g><path d="M5 12h14" /><path d="m12 5 7 7-7 7" /></g>;
  if (name === "external-link") return <g><path d="M15 3h6v6" /><path d="M10 14 21 3" /><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" /></g>;
  if (name === "plus") return <g><path d="M5 12h14" /><path d="M12 5v14" /></g>;
  if (name === "sparkles") return <g><path d="M9.6 5.4L7.5 0.5L5.4 5.4L0.5 7.5L5.4 9.6L7.5 14.5L9.6 9.6L14.5 7.5L9.6 5.4Z" stroke="#fff" strokeLinecap="round" strokeLinejoin="round" /><path d="M21.8001 16.4016L19.1001 10.1016L16.4001 16.4016L10.1001 19.1016L16.4001 21.8016L19.1001 28.1016L21.8001 21.8016L28.1001 19.1016L21.8001 16.4016Z" stroke="#fff" strokeLinecap="round" strokeLinejoin="round" /></g>;
  return null;
};

export const Ico = ({name, size = 16, cls}) => {
  const viewBox = name === "sparkles" ? "0 0 29 29" : "0 0 24 24";
  return <svg className={cls} width={size} height={size} viewBox={viewBox} fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><IcoPath name={name} /></svg>;
};

export const initials = u => {
  const f = (u?.firstName || "").trim();
  const l = (u?.lastName || "").trim();
  let s = (f[0] || "") + (l[0] || "");
  if (!s && u?.name) s = u.name.trim().split(/\s+/).map(w => w[0]).slice(0, 2).join("");
  return s.toUpperCase();
};

export const DocCard = ({logo, name, desc, prefix, guideHref, api, changelog, gettingStartedHref}) => {
  const root = "/" + prefix;
  const links = [{
    label: "Getting started",
    icon: "rocket",
    href: gettingStartedHref
  }, {
    label: "Product guide",
    icon: "book",
    href: guideHref
  }];
  if (api !== false) {
    links.push({
      label: "API reference",
      icon: "code",
      href: root + "/api-reference/overview"
    });
  }
  if (changelog !== false) {
    links.push({
      label: "Release notes",
      icon: "history",
      href: root + "/changelog"
    });
  }
  return <div className="product-card">
      <a className="product-card__logo-link" href={guideHref} aria-label={name}>
        <img className="product-card__logo" src={logo} alt="" />
      </a>
      <p className="product-card__desc">{desc}</p>
      <div className="product-card__links">
        {links.map(l => <a className="product-card__link" href={l.href} key={l.label} aria-label={l.label + ", " + name}>
            <Ico name={l.icon} cls="product-card__link-icon" />
            <span>{l.label}</span>
            <Ico name="chevron" size={16} cls="product-card__chevron" />
          </a>)}
      </div>
      <a className="product-card__cta" href={guideHref} aria-label={"Browse all " + name + " topics"}>
        Browse all topics
      </a>
    </div>;
};

export const ArticleListCard = ({title, count, articles}) => <div className="article-list-card">
    <div className="article-list-card__header">
      <h3 className="article-list-card__title">{title}</h3>
      {count && <span className="article-list-card__count">{count}</span>}
    </div>
    <div className="article-list-card__list">
      {articles.map(a => a.href ? <a className="article-list-card__link" href={a.href} key={a.title}>
            <span>{a.title}</span>
            <Ico name="chevron" size={16} cls="article-list-card__chevron" />
          </a> : <div className="article-list-card__link article-list-card__link--static" key={a.title}>
            <span>{a.title}</span>
          </div>)}
    </div>
  </div>;

export const AiCard = ({icon, name, badge, desc, launchHref, docsHref}) => <div className="ai-card">
    <img className="ai-card__icon" src={icon} alt="" />
    <div className="ai-card__body">
      <h4 className="ai-card__name">
        {name}
        {badge && <span className="badge-new">{badge}</span>}
      </h4>
      <p className="ai-card__desc">{desc}</p>
      <div className="ai-card__actions">
        {launchHref && <a className="ai-card__launch" href={launchHref} target="_blank" rel="noreferrer" aria-label={"Launch " + name}>
            <Ico name="external-link" size={12} cls="ai-card__launch-icon" />
            Launch
          </a>}
        {docsHref && <a className="ai-card__docs" href={docsHref} aria-label={"View docs for " + name}>
            View docs
            <Ico name="arrow-right" size={16} cls="ai-card__arrow" />
          </a>}
      </div>
    </div>
  </div>;

export const FlagArt = ({code}) => {
  if (code === "us") return <g>
      <rect width="24" height="16" fill="#fff" />
      <path fill="#B22234" d="M0 0h24v1.23H0zM0 2.46h24v1.23H0zM0 4.92h24v1.23H0zM0 7.39h24v1.23H0zM0 9.85h24v1.23H0zM0 12.31h24v1.23H0zM0 14.77h24v1.23H0z" />
      <rect width="9.6" height="8.62" fill="#3C3B6E" />
      <g fill="#fff">
        <circle cx="1.4" cy="1.7" r="0.42" /><circle cx="3.2" cy="1.7" r="0.42" /><circle cx="5" cy="1.7" r="0.42" /><circle cx="6.8" cy="1.7" r="0.42" /><circle cx="8.6" cy="1.7" r="0.42" />
        <circle cx="2.3" cy="4.3" r="0.42" /><circle cx="4.1" cy="4.3" r="0.42" /><circle cx="5.9" cy="4.3" r="0.42" /><circle cx="7.7" cy="4.3" r="0.42" />
        <circle cx="1.4" cy="6.9" r="0.42" /><circle cx="3.2" cy="6.9" r="0.42" /><circle cx="5" cy="6.9" r="0.42" /><circle cx="6.8" cy="6.9" r="0.42" /><circle cx="8.6" cy="6.9" r="0.42" />
      </g>
    </g>;
  if (code === "ca") return <g>
      <rect width="24" height="16" fill="#fff" />
      <path fill="#D52B1E" d="M0 0h6v16H0zM18 0h6v16h-6z" />
      <g transform="translate(6.6 2.6) scale(0.0211)">
        <path fill="#D52B1E" d="M256 32l-40 74c-4 8-12 7-20 3l-29-15 22 116c5 21-10 21-17 12l-51-57-8 29c-1 4-6 8-13 7l-64-14 17 61c4 14 7 20-4 23l-23 11 111 90c10 8 15 11 11 24l-10 32 105-13c8 0 16-2 16 6l-5 106h32l-5-106c0-8 8-6 16-6l105 13-10-32c-4-13 1-16 11-24l111-90-23-11c-11-3-8-9-4-23l17-61-64 14c-7 1-12-3-13-7l-8-29-51 57c-7 9-22 9-17-12l22-116-29 15c-8 4-16 5-20-3z" />
      </g>
    </g>;
  return null;
};

export const Flag = ({code, label}) => <svg className="radar-card__flag" viewBox="0 0 24 16" role="img" aria-label={label}><FlagArt code={code} /></svg>;

export const RadarCard = ({code, flagLabel, title, desc, tags, href}) => <a className="radar-card" href={href}>
    <div className="radar-card__head">
      <Flag code={code} label={flagLabel} />
      <h3 className="radar-card__title">{title}</h3>
    </div>
    <p className="radar-card__desc">{desc}</p>
    <div className="radar-card__tags">
      {tags.map(t => <span className="radar-card__tag" key={t}>{t}</span>)}
    </div>
    <span className="radar-card__cta">
      View radar
      <Ico name="arrow-right" size={16} />
    </span>
  </a>;

export const HelpCtaCard = ({image, imgVariant, title, desc, actions}) => <div className="help-cta-card">
    <div className={"cta-img cta-img-" + imgVariant}>
      <img src={image} alt="" />
    </div>
    <div className="cta-body">
      <h3 className="cta-title">{title}</h3>
      <p className="cta-desc">{desc}</p>
      <div className="cta-actions">
        {actions.map(a => <a className="cta-btn" href={a.href} key={a.label} target={a.external ? "_blank" : undefined} rel={a.external ? "noreferrer" : undefined} aria-label={a.label === "Launch" || a.label === "View docs" ? a.label + " " + title : undefined}>
            {a.icon && <Ico name={a.icon} size={12} />}
            {a.label}
          </a>)}
      </div>
    </div>
  </div>;

<div className="sym-landing">
  <section className="sym-hero">
    <div className="sym-hero__inner">
      <div className="sym-hero__grid">
        <div className="sym-hero__content">
          <h1 className="sym-hero__title">
            {user?.firstName
                                    ? (new Date().getHours() < 12 ? "Good morning" : new Date().getHours() < 18 ? "Good afternoon" : "Good evening") + ", " + user.firstName
                                    : "Welcome to Symmetry Docs"}
          </h1>

          <p className="sym-hero__caption">Get answers quickly</p>

          <div className="sym-hero__search-row" role="search">
            <button type="button" className="sym-searchbox" aria-haspopup="dialog" onClick={() => document.dispatchEvent(new KeyboardEvent("keydown", { key: "k", metaKey: true, ctrlKey: true, bubbles: true }))}>
              <Ico name="search" size={18} />

              <span>Search Symmetry products, guides & API…</span>
              <span className="sym-searchbox__kbd" aria-hidden="true">⌘K</span>
            </button>

            <span className="sym-hero__or">or</span>

            <button type="button" className="sym-btn-ai" aria-haspopup="dialog" onClick={() => document.dispatchEvent(new KeyboardEvent("keydown", { key: "i", metaKey: true, ctrlKey: true, bubbles: true }))}>
              <Ico name="sparkles" size={18} />

              <span>Ask AI</span>
            </button>
          </div>
        </div>

        <div className="sym-hero__art-wrap">
          <img className="sym-hero__art" src="https://assets.symmetry.com/illustrations/graphics/browser/v1/illustration.png" alt="Symmetry developer documentation shown in a browser window" />
        </div>
      </div>
    </div>
  </section>

  <div className="sym-section">
    <h2 className="sym-section__title">Find what you need…</h2>

    <Tabs>
      <Tab title="Product docs" icon="book-open">
        <div className="product-grid">
          <DocCard logo="https://assets.symmetry.com/logos/symmetry-tax-engine/color/v1/logo.png" name="Symmetry Tax Engine" desc="Calculate U.S. and Canadian taxes with both the hosted API and the on-premise SDK." prefix="ste" guideHref="/ste/overview/what-is-the-ste" gettingStartedHref="/ste/quickstarts/hosted-api-quickstart" />

          <DocCard logo="https://assets.symmetry.com/logos/symmetry-guides/color/v1/logo.png" name="Symmetry Guides" desc="Verified tax rates paired with step-by-step filing protocols and AI search." prefix="guides" guideHref="/guides/overview/introduction" gettingStartedHref="/guides/getting-started/quickstart" api={false} changelog={false} />

          <DocCard logo="https://assets.symmetry.com/logos/symmetry-payroll-forms/color/v1/logo.png" name="Symmetry Payroll Forms" desc="Set up withholding forms with both the API and the Web Application." prefix="spf" guideHref="/spf/overview/what-is-spf" gettingStartedHref="/spf/getting-started/api-quickstart" />

          <DocCard logo="https://assets.symmetry.com/logos/symmetry-payroll-point/color/v1/logo.png" name="Symmetry Payroll Point" desc="Use Maps, Batch, and the API to return precise taxes for employees." prefix="prp" guideHref="/prp/overview/introduction" gettingStartedHref="/prp/getting-started/prerequisites" />

          <DocCard logo="https://assets.symmetry.com/logos/minimum-wage-finder/color/v1/logo.png" name="Minimum Wage Finder" desc="Use Maps, Batch, and the API to return precise minimum wage rates for employees." prefix="mwf" guideHref="/mwf/overview/introduction" gettingStartedHref="/mwf/getting-started/api-quickstart" />

          <DocCard logo="https://assets.symmetry.com/logos/symmetry-i9/color/v1/logo.png" name="Symmetry I-9" desc="Automate Form I-9 compliance for seamless remote and in-person onboarding." prefix="i9" guideHref="/i9/overview/introduction" gettingStartedHref="/i9/getting-started/integration-workflow" />

          <DocCard logo="https://assets.symmetry.com/logos/calculators-by-symmetry/color/v1/logo.png" name="Calculators by Symmetry" desc="Configure the widget and API within your application." prefix="cbs" guideHref="/cbs/overview/what-is-cbs" gettingStartedHref="/cbs/getting-started/prerequisites" />
        </div>
      </Tab>

      {(user?.firstName || user?.lastName || user?.name || user?.email || user?.company || user?.tags?.length) && (
                  <Tab title="Release notes" icon="clock-rotate-left">
                      <ReleaseNotesIndex defaultYear={2026} embedded />
                  </Tab>
                )}

      {(user?.firstName || user?.lastName || user?.name || user?.email || user?.company || user?.tags?.length) && (
                  <Tab title="Compliance" icon="shield">
                      <div className="compliance-stack">
                        <div className="radar-grid">
                          <RadarCard
                            code="us"
                            flagLabel="United States"
                            title="U.S. Tax Radar"
                            desc="Federal, state, and local tax changes we're tracking, plus onboarding forms and in-flight legislation."
                            tags={["Federal & state taxes", "Local taxes", "Onboarding forms", "Bills & legislation"]}
                            href="/symmetry/compliance/us-radar"
                          />
                          <RadarCard
                            code="ca"
                            flagLabel="Canada"
                            title="Canadian Tax Radar"
                            desc="Federal and provincial source deduction changes we're tracking, plus anticipated TD1 form updates."
                            tags={["Federal & provincial taxes", "TD1 forms"]}
                            href="/symmetry/compliance/canadian-radar"
                          />
                        </div>

                        <ArticleListCard
                          title="Quick links"
                          count="4 articles"
                          articles={[
                            { title: "The Symmetry Tax Journey", href: "/symmetry/compliance/tax-journey" },
                            { title: "Scope of Support", href: "/symmetry/support/scope-of-support" },
                            { title: "Tax catalog", href: "/ste/taxes/tax-catalog" },
                            { title: "Multi-State SIT Withholding", href: "/ste/taxes/state/multi-state-sit-withholding" },
                          ]}
                        />
                      </div>
                  </Tab>
                )}

      <Tab title="AI tools" icon="sparkles">
        <div className="ai-grid">
          <AiCard icon="https://images.prismic.io/symmetry/gHwYplDx59Nin6Nz_symmetry-mcp.png?auto=format,compress" name="Symmetry Tax Engine MCP" badge="New" desc="Connect Claude, Cursor, or ChatGPT to the Symmetry Tax Engine for deterministic tax answers in natural language." docsHref="/ste/ai-interfaces/overview" />

          <AiCard icon="https://assets.symmetry.com/icons/symmetry-tax-logic/v1/icon.png" name="Symmetry Tax Logic Chat" desc="Ask questions about payroll tax logic in plain English and get answers backed by Symmetry's tax research." docsHref="/ste/ai-interfaces/tax-logic-chat" launchHref={user?.tags?.includes('ste_ai') ? "https://taxlogic.symmetry.com/chat" : undefined} />

          <AiCard icon="https://assets.symmetry.com/icons/symmetry-guides/v1/icon.png" name="Symmetry Guides" desc="Look up payroll tax rates, rules, and filing requirements across 7,000+ jurisdictions." docsHref="/guides/overview/introduction" launchHref={user?.tags?.includes('stf_access') ? "http://guides.symmetry.com/" : undefined} />

          <AiCard icon="https://images.prismic.io/symmetry/7X90wVRnqgNbeEJR_symmetry-copilot.png?auto=format,compress" name="Developer AI CoPilots" desc="Download an agent configuration that makes the AI assistant in your IDE an implementation specialist for one product — planning, code, and guidance while you build." docsHref="/symmetry/ai/developer-ai-copilots" />
        </div>
      </Tab>

      {(user?.firstName || user?.lastName || user?.name || user?.email || user?.company || user?.tags?.length) && (
                  <Tab title="Account" icon="user">
                                    <>
                                      <div className="article-grid">
                                        <ArticleListCard
                                          title="Getting around"
                                          count="1 article"
                                          articles={[
                                            { title: "Things have moved: a new home for every product", href: "/symmetry/docs-portal/changes" },
                                          ]}
                                        />
                                        <ArticleListCard
                                          title="User management"
                                          count="2 articles"
                                          articles={[
                                            { title: "Adding and removing users", href: "/symmetry/account/add-a-user" },
                                            { title: "User frequently asked questions and troubleshooting", href: "/symmetry/account/faq" },
                                          ]}
                                        />
                                      </div>
                                      <div className="help-cta-row">
                                        <HelpCtaCard
                                          image="https://assets.symmetry.com/illustrations/graphics/symmetry-tax-logic/v1/illustration.png"
                                          imgVariant="stl"
                                          title="Symmetry Tax Logic Chat"
                                          desc="Instant AI answers, powered by the Symmetry Tax Engine."
                                          actions={user?.tags?.includes('ste_ai')
                                            ? [{ label: "Launch", icon: "external-link", href: "https://taxlogic.symmetry.com/chat", external: true }]
                                            : []}
                                        />
                                        <HelpCtaCard
                                          image="https://assets.symmetry.com/illustrations/graphics/support/v1/illustration.png"
                                          imgVariant="support"
                                          title="Contact support"
                                          desc="Get help from our payroll tax experts."
                                          actions={[
                                            { label: "New ticket", icon: "plus", href: "https://support.symmetry.com/hc/en-us/requests/new" },
                                            { label: "Manage my tickets", href: "https://support.symmetry.com/hc/en-us/" },
                                          ]}
                                        />
                                      </div>
                                    </>
                  </Tab>
                )}
    </Tabs>
  </div>

  {(user?.firstName || user?.lastName || user?.name || user?.email || user?.company || user?.tags?.length) && (
      <div className="footer-callout" id="footer-callout">
        <div className="footer-callout__pill">
          <svg className="footer-callout__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
            <path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z" /><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" /><path d="M12 17h.01" />
          </svg>
          <p className="footer-callout__text">
            Can't find what you need? Try the <span className="footer-callout__menu">More</span> menu in the header, or{" "}
            <a className="footer-callout__link" href="https://support.symmetry.com/hc/en-us/requests/new">create a ticket</a>.
          </p>
        </div>
      </div>
    )}
</div>
