function jch_cat02([J, C, h]) {
const t = Math.pow(C / (Math.sqrt(J / 100) * Math.pow(1.64 - Math.pow(0.29, CIECAM02_n), 0.73)), 1 / 0.9);
const et = 1 / 4 * (Math.cos(((h * Math.PI) / 180) + 2) + 3.8);
const a = Math.pow(J / 100, 1 / (CIECAM02_c * CIECAM02_z)) * CIECAM02_aw;
const p1 = ((50000 / 13) * CIECAM02_nc * CIECAM02_ncb) * et / t;
const p2 = (a / CIECAM02_nbb) + 0.305;
const p3 = 21 / 20;
let ca, cb;
const hr = (h * Math.PI) / 180;
const sr = Math.sin(hr);
const cr = Math.cos(hr);
if (Math.abs(sr) >= Math.abs(cr)) {
cb = (p2 * (2 + p3) * (460 / 1403)) / (p1 / sr + (2 + p3) * (220 / 1403) * (Math.cos(hr) / Math.sin(hr)) - (27 / 1403) + p3 * (6300 / 1403));
ca = cb * (Math.cos(hr) / Math.sin(hr));
} else {
ca = (p2 * (2 + p3) * (460 / 1403)) / (p1 / cr + (2 + p3) * (220 / 1403) - ((27 / 1403) - p3 * (6300 / 1403)) * (Math.sin(hr) / Math.cos(hr)));
cb = ca * (Math.sin(hr) / Math.cos(hr));
}
const lms_a = aab_lms(a, ca, cb, CIECAM02_nbb);
const lms_p = invert_adapt(lms_a);
const txyz = hpe_xyz(lms_p);
const lms_c = xyz_cat02(txyz);
return invert_transform(lms_c);
}