{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/angle-facts-lab.js?d=20770"],
  "sourcesContent": ["/* Angle Facts Lab engine. Built by angle-facts-tool/build.py: do not edit, edit design/Main.dc.html or src/. */\n(function () {\n\"use strict\";\n\nclass DCLogic {\n  constructor(props) { this.props = props || {}; this.state = {}; }\n  setState(o) { Object.assign(this.state, typeof o === 'function' ? o(this.state) : o); if (this._render) this._render(); }\n  forceUpdate() { if (this._render) this._render(); }\n}\n\nconst R = 140, SC = 5 / 140, INK = '#12243A', MUTED = '#8A97AB';\nconst C1 = { s: '#2E7FA8', f: 'rgba(46,127,168,0.16)', t: '#1F5F80' };\nconst C2 = { s: '#E9683A', f: 'rgba(233,104,58,0.2)', t: '#B4471C' };\nconst C3 = { s: '#6B4FA0', f: 'rgba(107,79,160,0.15)', t: '#553C85' };\nconst C4 = { s: '#5C6B80', f: 'rgba(92,107,128,0.14)', t: '#3E4A5C' };\nconst O = { x: 0, y: 0 };\nconst rad = d => d * Math.PI / 180, dg = r => r * 180 / Math.PI;\nconst n360 = a => ((a % 360) + 360) % 360;\nconst n180 = a => { a = n360(a); return a > 180 ? a - 360 : a; };\nconst on = t => ({ x: R * Math.cos(rad(t)), y: R * Math.sin(rad(t)) });\nconst sub = (a, b) => ({ x: a.x - b.x, y: a.y - b.y });\nconst add = (a, b) => ({ x: a.x + b.x, y: a.y + b.y });\nconst mul = (a, k) => ({ x: a.x * k, y: a.y * k });\nconst len = a => Math.hypot(a.x, a.y);\nconst unit = a => { const l = len(a) || 1; return { x: a.x / l, y: a.y / l }; };\nconst mid = (a, b) => ({ x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 });\nconst dir = (V, P) => dg(Math.atan2(P.y - V.y, P.x - V.x));\nconst ang = (V, P, Q) => { const s = dir(V, P), w = n180(dir(V, Q) - s); return { start: s, sweep: w, deg: Math.abs(w) }; };\nconst cross = (A, B, P) => (B.x - A.x) * (P.y - A.y) - (B.y - A.y) * (P.x - A.x);\nconst r1 = v => Math.round(v * 10) / 10;\nconst fx = v => r1(v).toFixed(1);\nconst nice = v => String(+(+v).toFixed(2));\nconst clamp = (v, a, b) => Math.max(a, Math.min(b, v));\nconst N = v => v.toFixed(1);\nfunction arcD(V, start, sweep, r) {\n  const a1 = rad(start), a2 = rad(start + sweep);\n  const x1 = V.x + r * Math.cos(a1), y1 = V.y + r * Math.sin(a1);\n  const x2 = V.x + r * Math.cos(a2), y2 = V.y + r * Math.sin(a2);\n  return 'M' + N(V.x) + ' ' + N(V.y) + ' L' + N(x1) + ' ' + N(y1) + ' A' + r + ' ' + r + ' 0 ' + (Math.abs(sweep) > 180 ? 1 : 0) + ' ' + (sweep > 0 ? 1 : 0) + ' ' + N(x2) + ' ' + N(y2) + ' Z';\n}\nfunction segX(A, B, C, D) {\n  const r = sub(B, A), s = sub(D, C), den = r.x * s.y - r.y * s.x;\n  if (Math.abs(den) < 1e-9) return null;\n  const q = sub(C, A), t = (q.x * s.y - q.y * s.x) / den, u = (q.x * r.y - q.y * r.x) / den;\n  if (t <= 0.03 || t >= 0.97 || u <= 0.03 || u >= 0.97) return null;\n  return add(A, mul(r, t));\n}\nconst POLY = ['', '', '', 'triangle', 'quadrilateral', 'pentagon', 'hexagon', 'heptagon', 'octagon', 'nonagon', 'decagon', 'hendecagon', 'dodecagon'];\nconst GROUPS = [{ key: 'circles', label: 'Circle theorems' }, { key: 'lines', label: 'Lines and triangles' }, { key: 'poly', label: 'Polygons' }];\nconst MODES = [\n  { key: 'alt', label: 'Alternate', pair: [[1, 2], [2, 0]], eq: true, rule: 'Alternate angles sit between the parallel lines on opposite sides of the crossing line. Look for a Z shape.', reason: 'Alternate angles are equal.' },\n  { key: 'corr', label: 'Corresponding', pair: [[1, 0], [2, 0]], eq: true, rule: 'Corresponding angles are in the same position at each crossing. Look for an F shape.', reason: 'Corresponding angles are equal.' },\n  { key: 'co', label: 'Co-interior', pair: [[1, 3], [2, 0]], eq: false, rule: 'Co-interior angles sit between the parallel lines on the same side. Look for a C shape.', reason: 'Co-interior angles add up to 180\u00B0.' },\n  { key: 'vert', label: 'Vertically opposite', pair: [[1, 0], [1, 2]], eq: true, rule: 'Where two straight lines cross, the angles facing each other are equal.', reason: 'Vertically opposite angles are equal.' },\n  { key: 'line', label: 'On a line', pair: [[1, 0], [1, 1]], eq: false, rule: 'Angles sitting side by side on a straight line make a half turn.', reason: 'Angles on a straight line add up to 180\u00B0.' }\n];\nconst TH = [\n  { id: 'c1', g: 'circles', name: 'Angle at the centre', rule: 'The angle at the centre is twice the angle at the edge, when both come from the same two points A and B.', reason: 'The angle at the centre is twice the angle at the circumference.', trap: 'Drag P onto the short arc between A and B. The centre angle you need becomes the reflex one, on the outside.' },\n  { id: 'c2', g: 'circles', name: 'Angles in the same segment', rule: 'Angles made at the edge from the same chord, on the same side of it, are equal.', reason: 'Angles in the same segment are equal.', trap: 'Both angles must sit on the same side of chord AB. Drag Q across the chord to see what changes.' },\n  { id: 'c3', g: 'circles', name: 'Angle in a semicircle', rule: 'If AB is a diameter, the angle at any point P on the edge is 90\u00B0.', reason: 'The angle in a semicircle is 90\u00B0.', trap: 'Only works when the chord passes through the centre O. Find the diameter first.' },\n  { id: 'c4', g: 'circles', name: 'Cyclic quadrilateral', rule: 'When all four corners touch the circle, opposite angles add up to 180\u00B0.', reason: 'Opposite angles in a cyclic quadrilateral add up to 180\u00B0.', trap: 'Opposite means across the shape, not next door. All four corners must be on the circle.' },\n  { id: 'c5', g: 'circles', name: 'Tangent and radius', rule: 'A tangent touches the circle at one point. The radius to that point meets it at 90\u00B0.', reason: 'A tangent meets a radius at 90\u00B0.', trap: 'Exam diagrams often leave out the radius OT. Draw it in yourself.' },\n  { id: 'c6', g: 'circles', name: 'Two tangents from a point', rule: 'Two tangents drawn from the same outside point are the same length.', reason: 'Tangents from an external point are equal in length.', trap: 'OTES is a kite with two right angles, so the angles at E and O add up to 180\u00B0.' },\n  { id: 'c7', g: 'circles', name: 'Alternate segment', rule: 'The angle between a tangent and a chord equals the angle on the far side of that chord.', reason: 'The angle between a tangent and a chord is equal to the angle in the alternate segment.', trap: 'Match the tangent angle with the angle across the chord, not the one beside the tangent.' },\n  { id: 'c8', g: 'circles', name: 'Chord bisector', rule: 'A line from the centre at 90\u00B0 to a chord cuts it exactly in half.', reason: 'The perpendicular from the centre to a chord bisects the chord.', trap: 'This makes a right-angled triangle OMA. Pythagoras usually comes next.' },\n  { id: 'c9', g: 'circles', igcse: true, name: 'Intersecting chords: inside', rule: 'When two chords cross inside a circle, the two parts of one chord multiply to the same answer as the two parts of the other.', reason: 'AX \u00D7 XB = CX \u00D7 XD (intersecting chords).', trap: 'Multiply the two parts of the same chord. Never use the whole chord here.' },\n  { id: 'c10', g: 'circles', igcse: true, name: 'Intersecting chords: outside', rule: 'When two lines from P cut the circle, near length times far length is the same for both lines.', reason: 'PA \u00D7 PB = PC \u00D7 PD (intersecting chords).', trap: 'PB is the whole length from P, so PB = PA + AB. If one line is a tangent PT, use PT\u00B2 = PA \u00D7 PB.' },\n  { id: 'l1', g: 'lines', name: 'Parallel lines', trap: 'Write the angle name, not \"Z angles\". Examiners want alternate, corresponding or co-interior.' },\n  { id: 'l4', g: 'lines', name: 'Angles at a point', rule: 'Angles all the way round a point make a full turn.', reason: 'Angles around a point add up to 360\u00B0.', trap: 'Count every angle at the point, including the biggest one.' },\n  { id: 'l3', g: 'lines', name: 'Triangles', rule: 'The three angles inside a triangle add up to 180\u00B0. The outside angle equals the two inside angles opposite it.', reason: 'Angles in a triangle add up to 180\u00B0. The exterior angle equals the sum of the two opposite interior angles.', trap: 'The exterior angle uses the two angles that are not next to it.' },\n  { id: 'l5', g: 'lines', name: 'Isosceles triangle', rule: 'Two equal sides means the two angles at the base are equal.', reason: 'Base angles in an isosceles triangle are equal.', trap: 'The equal angles sit at the ends of the odd side, opposite the equal sides.' },\n  { id: 'p0', g: 'poly', name: 'Angles in a quadrilateral', rule: 'A diagonal splits a quadrilateral into two triangles, so its angles add up to 360\u00B0.', reason: 'Angles in a quadrilateral add up to 360\u00B0.', trap: 'Keep the corners in order round the shape. A shape that crosses itself is not a quadrilateral.' },\n  { id: 'p1', g: 'poly', name: 'Interior angles', rule: 'Split the polygon into triangles from one corner. There are always 2 fewer triangles than sides.', reason: 'Sum of interior angles = (n \u2212 2) \u00D7 180\u00B0.', trap: 'n is the number of sides. A hexagon has 6 sides but makes 4 triangles.' },\n  { id: 'p2', g: 'poly', name: 'Exterior angles', rule: 'Walk round the shape and you turn all the way round once, so the exterior angles add up to 360\u00B0.', reason: 'Exterior angles of a polygon add up to 360\u00B0.', trap: 'Interior and exterior angles at a corner add up to 180\u00B0. Often the fastest way to the interior angle.' }\n];\nconst PAIRS = {\n  alt: [[[1, 2], [2, 0]], [[1, 3], [2, 1]]],\n  corr: [[[1, 0], [2, 0]], [[1, 1], [2, 1]], [[1, 2], [2, 2]], [[1, 3], [2, 3]]],\n  co: [[[1, 3], [2, 0]], [[1, 2], [2, 1]]],\n  vert: [[[1, 0], [1, 2]], [[1, 1], [1, 3]], [[2, 0], [2, 2]], [[2, 1], [2, 3]]],\n  line: [[[1, 0], [1, 1]], [[1, 1], [1, 2]], [[1, 2], [1, 3]], [[1, 3], [1, 0]], [[2, 0], [2, 1]], [[2, 1], [2, 2]], [[2, 2], [2, 3]], [[2, 3], [2, 0]]]\n};\nconst easeIO = k => k < 0.5 ? 2 * k * k : 1 - Math.pow(-2 * k + 2, 2) / 2;\nconst easeBack = k => { const c = 1.70158; return 1 + (c + 1) * Math.pow(k - 1, 3) + c * Math.pow(k - 1, 2); };\nconst KIND = { c5: { E: 'tan' }, c6: { E: 'free' }, c10: { P: 'free' }, l1: { H: 'trans', R: 'rot' }, l3: { A: 'xy', B: 'xy', C: 'xy' }, l5: { A: 'apex', C: 'base' }, p0: { A: 'xy', B: 'xy', C: 'xy', D: 'xy' } };\nconst ri = (a, b) => a + Math.floor(Math.random() * (b - a + 1));\n\nclass Component extends DCLogic {\n  constructor(props) {\n    super(props);\n    this.state = {\n      id: 'c1', mode: 'alt', n: 6, test: false, showReason: false, showTip: false, dragged: false, pairIdx: 0, seeAll: false, ap: 1, guess: '', result: null, reveal: false, score: 0, tries: 0,\n      pos: {\n        c1: { A: 160, B: 20, P: 270 }, c2: { A: 160, B: 20, P: 236, Q: 300 }, c3: { A: 180, P: 244 },\n        c4: { A: 200, B: 280, C: 350, D: 110 }, c5: { T: 240, th: 40 }, c6: { E: { x: 150, y: -170 } },\n        c7: { T: 90, A: 210, B: 330 }, c8: { A: 200, B: 320 }, c9: { A: 196, B: 30, C: 276, D: 124 },\n        c10: { P: { x: -210, y: -90 }, B: 50, D: 350 }, l1: { t: 62, r: 0 }, l4: { A: 20, B: 110, C: 196, D: 290 }, l5: { A: { x: 0, y: -150 }, C: { x: 130, y: 120 } },\n        p0: { A: { x: -150, y: -110 }, B: { x: 140, y: -140 }, C: { x: 170, y: 130 }, D: { x: -120, y: 150 } },\n        l3: { A: { x: -40, y: -150 }, B: { x: -170, y: 110 }, C: { x: 120, y: 110 } }\n      }\n    };\n    this.dragKey = null;\n  }\n\n  rand(id) {\n    const ev = () => ri(0, 179) * 2;\n    const pick = (k, gap) => {\n      for (let i = 0; i < 400; i++) {\n        const a = Array.from({ length: k }, ev).sort((x, y) => x - y);\n        let ok = true;\n        for (let j = 0; j < k; j++) { const g = j === k - 1 ? a[0] + 360 - a[j] : a[j + 1] - a[j]; if (g < gap) ok = false; }\n        if (ok) return a;\n      }\n      return [0, 90, 180, 270].slice(0, k);\n    };\n    const polar = (lo, hi) => { const t = rad(ri(0, 359)), r = ri(lo, hi); return { x: r * Math.cos(t), y: r * Math.sin(t) }; };\n    const e2 = v => n360(Math.round(v / 2) * 2);\n    switch (id) {\n      case 'c1': { const a = pick(3, 40); return { A: a[0], B: a[1], P: a[2] }; }\n      case 'c2': { const a = pick(4, 35); return { A: a[0], B: a[1], P: a[2], Q: a[3] }; }\n      case 'c3': { const A = ev(); return { A, P: n360(A + ri(15, 75) * 2) }; }\n      case 'c4': { const a = pick(4, 50); return { A: a[0], B: a[1], C: a[2], D: a[3] }; }\n      case 'c5': return { T: ev(), th: (Math.random() < 0.5 ? -1 : 1) * ri(18, 55) };\n      case 'c6': return { E: polar(185, 240) };\n      case 'c7': { const a = pick(3, 50); return { T: a[0], A: a[1], B: a[2] }; }\n      case 'c8': { const a = pick(2, 50); if (Math.abs(a[1] - a[0] - 180) < 12) a[1] = n360(a[1] + 30); return { A: a[0], B: a[1] }; }\n      case 'c9': { const a = pick(4, 40); return { A: a[0], C: a[1], B: a[2], D: a[3] }; }\n      case 'c10': { const P = polar(200, 240), base = dir(O, P) + 180; return { P, B: e2(base + ri(12, 50)), D: e2(base - ri(12, 50)) }; }\n      case 'l1': return { t: ri(30, 150), r: (this.state.pos.l1 && this.state.pos.l1.r) || 0 };\n      case 'l4': { const a = pick(4, 40); return { A: a[0], B: a[1], C: a[2], D: a[3] }; }\n      case 'l5': return { A: { x: 0, y: ri(-110, -10) * 2 }, C: { x: ri(30, 100) * 2, y: 120 } };\n      case 'p0': { const a = pick(4, 55); const pt = a.map(t => ({ x: Math.round((150 + ri(0, 30)) * Math.cos(rad(t)) / 2) * 2, y: Math.round((150 + ri(0, 30)) * Math.sin(rad(t)) / 2) * 2 })); return { A: pt[0], B: pt[1], C: pt[2], D: pt[3] }; }\n      case 'l3': { const a = pick(3, 70); const pt = a.map(t => ({ x: Math.round(165 * Math.cos(rad(t)) / 2) * 2, y: Math.round(165 * Math.sin(rad(t)) / 2) * 2 })); return { A: pt[0], B: pt[1], C: pt[2] }; }\n    }\n    return {};\n  }\n\n  tween(name, ms, fn, done) {\n    this._raf = this._raf || {};\n    if (this._raf[name]) cancelAnimationFrame(this._raf[name]);\n    const t0 = performance.now();\n    const step = now => {\n      const k = Math.min(1, Math.max(0, (now - t0) / ms));\n      fn(k);\n      if (k < 1) this._raf[name] = requestAnimationFrame(step);\n      else { this._raf[name] = null; if (done) done(); }\n    };\n    this._raf[name] = requestAnimationFrame(step);\n  }\n\n  grow() { this.tween('grow', 420, k => this.setState({ ap: k })); }\n\n  glide(id, to) {\n    const from = this.state.pos[id];\n    const mix = e => {\n      const o = {};\n      Object.keys(to).forEach(key => {\n        const f = from[key], t = to[key];\n        if (typeof t === 'number') o[key] = (id === 'l1' || key === 'th') ? f + (t - f) * e : n360(f + n180(t - f) * e);\n        else o[key] = { x: f.x + (t.x - f.x) * e, y: f.y + (t.y - f.y) * e };\n      });\n      return o;\n    };\n    this.tween('glide', 480, k => this.setState({ pos: Object.assign({}, this.state.pos, { [id]: mix(easeIO(k)) }) }),\n      () => this.setState({ pos: Object.assign({}, this.state.pos, { [id]: to }) }));\n  }\n\n  fresh(id, extra) {\n    const s = this.state, ns = Object.assign({ id, guess: '', result: null, reveal: false }, extra || {});\n    const isN = id === 'p1' || id === 'p2';\n    if (isN) ns.n = ri(3, 12);\n    if (id === 'l1') { ns.seeAll = false; ns.pairIdx = ri(0, PAIRS[s.mode].length - 1); }\n    const changed = id !== s.id || ns.test;\n    this.setState(ns);\n    if (!isN) this.glide(id, this.rand(id));\n    if (changed || isN || id === 'l1') this.grow();\n  }\n\n  turnLines() {\n    const p = this.state.pos.l1, base = this._turnTo != null ? this._turnTo : (p.r || 0), to = Object.assign({}, p, { r: base + 45 });\n    this._turnTo = to.r;\n    this.glide('l1', to);\n    clearTimeout(this._turnT); this._turnT = setTimeout(() => { this._turnTo = null; }, 520);\n  }\n\n  pick(id) {\n    if (this.state.test) this.fresh(id);\n    else this.setState({ id, guess: '', result: null, reveal: false, seeAll: false, pairIdx: 0 });\n    this.grow();\n  }\n\n  startDrag(key) {\n    return e => {\n      e.preventDefault();\n      this.dragKey = key;\n      if (!this.state.dragged) this.setState({ dragged: true });\n      const svg = e.currentTarget.ownerSVGElement;\n      try { svg && svg.setPointerCapture(e.pointerId); } catch (_) {}\n    };\n  }\n\n  move(e) {\n    if (!this.dragKey) return;\n    const r = e.currentTarget.getBoundingClientRect();\n    const vb = e.currentTarget.viewBox && e.currentTarget.viewBox.baseVal, bx = vb && vb.width ? vb.x : -260, by = vb && vb.width ? vb.y : -260, bw = vb && vb.width ? vb.width : 520, bh = vb && vb.height ? vb.height : 520;\n    const pt = { x: bx + (e.clientX - r.left) / r.width * bw, y: by + (e.clientY - r.top) / r.height * bh };\n    this.applyDrag(this.dragKey, pt);\n  }\n\n  applyDrag(key, pt) {\n    const s = this.state, id = s.id, p = Object.assign({}, s.pos[id]);\n    const kind = (KIND[id] || {})[key] || 'circ';\n    if (kind === 'circ') {\n      const t = n360(Math.round(dir(O, pt) / 2) * 2);\n      let others = Object.keys(p).filter(q => q !== key && q !== 'th' && typeof p[q] === 'number').map(q => p[q]);\n      if (id === 'c3') others = key === 'P' ? [p.A, n360(p.A + 180)] : [p.P, n360(p.P + 180)];\n      if (others.some(o => Math.abs(n180(o - t)) < 8)) return;\n      p[key] = t;\n    } else if (kind === 'free') {\n      const d = clamp(len(pt), 1.3 * R, 245), u = unit(pt);\n      p[key] = { x: u.x * d, y: u.y * d };\n    } else if (kind === 'tan') {\n      const T = on(p.T), u = { x: -Math.sin(rad(p.T)), y: Math.cos(rad(p.T)) };\n      const sp = (pt.x - T.x) * u.x + (pt.y - T.y) * u.y;\n      p.th = (sp < 0 ? -1 : 1) * clamp(Math.round(dg(Math.atan(Math.abs(sp) / R))), 15, 55);\n    } else if (kind === 'trans') {\n      const r = p.r || 0, cr = Math.cos(rad(r)), sr = Math.sin(rad(r));\n      const lx = pt.x * cr - pt.y * sr, ly = pt.x * sr + pt.y * cr;\n      let t = Math.round(dg(Math.atan2(-ly, lx)));\n      if (t < 0) t += 180;\n      p.t = clamp(t, 25, 155);\n    } else if (kind === 'rot') {\n      const a = dg(Math.atan2(-pt.y, pt.x)) - dg(Math.atan2(60, 200));\n      const cur = p.r || 0;\n      p.r = cur + n180(Math.round(a / 5) * 5 - cur);\n    } else if (kind === 'apex') {\n      p.A = { x: 0, y: clamp(Math.round(pt.y / 2) * 2, -230, p.C.y - 40) };\n    } else if (kind === 'base') {\n      p.C = { x: clamp(Math.round(Math.abs(pt.x) / 2) * 2, 40, 230), y: p.C.y };\n    } else {\n      p[key] = { x: clamp(Math.round(pt.x / 2) * 2, -235, 235), y: clamp(Math.round(pt.y / 2) * 2, -235, 235) };\n    }\n    this.setState({ pos: Object.assign({}, s.pos, { [id]: p }), result: null, reveal: false });\n  }\n\n  build() {\n    const s = this.state, id = s.id, p = s.pos[id] || {};\n    const H = s.test && !s.reveal && s.result !== 'right';\n    const paths = [], texts = [], drags = [], dots = [];\n    const out = { paths, texts, drags, dots, eq: [], note: '', answer: null, tol: 0.5, unit: '\u00B0', ask: '' };\n    const L = (P, Q, o) => { o = o || {}; paths.push({ d: 'M' + N(P.x) + ' ' + N(P.y) + ' L' + N(Q.x) + ' ' + N(Q.y), fill: 'none', stroke: o.c || INK, w: o.w || 2.5, dash: o.dash || 'none', op: 1 }); };\n    const circ = () => paths.push({ d: 'M' + -R + ' 0 A' + R + ' ' + R + ' 0 1 0 ' + R + ' 0 A' + R + ' ' + R + ' 0 1 0 ' + -R + ' 0', fill: '#FBFDFF', stroke: INK, w: 2.5, dash: 'none' });\n    const tx = (x, y, t, o) => { o = o || {}; if (t !== '') texts.push({ x: N(x), y: N(y), t, fill: o.c || INK, size: o.size || 15, weight: o.wt || 600 }); };\n    const lab = (P, name, from) => { const u = unit(sub(P, from || O)); tx(P.x + u.x * 21, P.y + u.y * 21, name, { size: 16, wt: 700 }); };\n    const mark = (V, start, sweep, col, text, hide, r) => {\n      r = (r || 28) * easeBack(s.ap);\n      if (s.ap < 0.5) text = '';\n      paths.push({ d: arcD(V, start, sweep, r), fill: col.f, stroke: col.s, w: 2, dash: hide ? '5 4' : 'none' });\n      const m = rad(start + sweep / 2);\n      tx(V.x + (r + 17) * Math.cos(m), V.y + (r + 17) * Math.sin(m), hide ? '?' : text, { c: col.t, size: 15, wt: 700 });\n    };\n    const markA = (V, P, Q, col, text, hide, r) => { const a = ang(V, P, Q); mark(V, a.start, a.sweep, col, text, hide, r); };\n    const sq = (V, P, Q, k) => { k = k || 13; const u = unit(sub(P, V)), v = unit(sub(Q, V)); paths.push({ d: 'M' + N(V.x + u.x * k) + ' ' + N(V.y + u.y * k) + ' L' + N(V.x + (u.x + v.x) * k) + ' ' + N(V.y + (u.y + v.y) * k) + ' L' + N(V.x + v.x * k) + ' ' + N(V.y + v.y * k), fill: 'none', stroke: INK, w: 2, dash: 'none' }); };\n    const tick = (P, Q, k) => { const M = mid(P, Q), u = unit(sub(Q, P)), n = { x: -u.y, y: u.x }; for (let i = 0; i < (k || 1); i++) { const o = (i - ((k || 1) - 1) / 2) * 6, c = add(M, mul(u, o)); L(add(c, mul(n, 7)), sub(c, mul(n, 7)), { w: 2 }); } };\n    const lenLab = (P, Q, text, col) => { const M = mid(P, Q), u = unit(sub(Q, P)); let n = { x: -u.y, y: u.x }; if (n.x * M.x + n.y * M.y < 0) n = mul(n, -1); tx(M.x + n.x * 17, M.y + n.y * 17, text, { c: (col || C4).t, size: 14, wt: 700 }); };\n    const dr = (P, key) => drags.push({ x: N(P.x), y: N(P.y), key, down: this.startDrag(key) });\n    const dot = P => dots.push({ x: N(P.x), y: N(P.y) });\n\n    if (id === 'c1') {\n      const A = on(p.A), B = on(p.B), P = on(p.P);\n      circ(); L(O, A); L(O, B); L(P, A); L(P, B);\n      const ins = ang(P, A, B), i = Math.round(ins.deg);\n      const d = n360(p.B - p.A), inArc = n360(p.P - p.A) < d, sw = inArc ? -(360 - d) : d, c = Math.round(Math.abs(sw));\n      mark(P, ins.start, ins.sweep, C1, i + '\u00B0', false, 32);\n      mark(O, p.A, sw, C2, c + '\u00B0', H, 24);\n      dot(O); tx(c > 180 ? 0 : -16, c > 180 ? 0 : 0, '', {}); lab(A, 'A'); lab(B, 'B'); lab(P, 'P');\n      tx(on(n360(p.A + sw / 2) + 180).x * 0.14, on(n360(p.A + sw / 2) + 180).y * 0.14, 'O', { wt: 700, size: 16 });\n      out.eq = H ? ['\u2220AOB = 2 \u00D7 \u2220APB', '\u2220APB = ' + i + '\u00B0'] : [(c > 180 ? 'Reflex ' : '') + '\u2220AOB = ' + c + '\u00B0', '= 2 \u00D7 ' + i + '\u00B0 = 2 \u00D7 \u2220APB'];\n      if (c > 180) out.note = 'P is on the short arc, so the angle at the centre is the reflex one.';\n      out.answer = c; out.ask = 'Find ' + (c > 180 ? 'reflex ' : '') + 'angle AOB.';\n      dr(A, 'A'); dr(B, 'B'); dr(P, 'P');\n    }\n    else if (id === 'c2') {\n      const A = on(p.A), B = on(p.B), P = on(p.P), Q = on(p.Q);\n      circ(); L(A, B, { c: MUTED, dash: '6 5' }); L(P, A); L(P, B); L(Q, A); L(Q, B);\n      const x = Math.round(ang(P, A, B).deg), y = Math.round(ang(Q, A, B).deg);\n      const same = Math.sign(cross(A, B, P)) === Math.sign(cross(A, B, Q));\n      markA(P, A, B, C1, x + '\u00B0', false, 30); markA(Q, A, B, C2, y + '\u00B0', H, 30);\n      lab(A, 'A'); lab(B, 'B'); lab(P, 'P'); lab(Q, 'Q');\n      if (same) out.eq = H ? ['\u2220AQB = \u2220APB', '\u2220APB = ' + x + '\u00B0'] : ['\u2220APB = \u2220AQB = ' + x + '\u00B0'];\n      else { out.eq = H ? ['\u2220APB + \u2220AQB = 180\u00B0', '\u2220APB = ' + x + '\u00B0'] : ['\u2220APB + \u2220AQB', '= ' + x + '\u00B0 + ' + y + '\u00B0 = 180\u00B0']; out.note = 'P and Q are now on opposite sides of AB. APBQ is a cyclic quadrilateral, so the angles add up to 180\u00B0.'; }\n      out.answer = y; out.ask = 'Find angle AQB.';\n      dr(A, 'A'); dr(B, 'B'); dr(P, 'P'); dr(Q, 'Q');\n    }\n    else if (id === 'c3') {\n      const A = on(p.A), B = on(p.A + 180), P = on(p.P);\n      circ(); L(A, B); L(P, A); L(P, B); dot(O); sq(P, A, B);\n      const a = Math.round(ang(A, P, B).deg), b = 90 - a;\n      markA(A, P, B, C1, a + '\u00B0', false, 30); markA(B, P, A, C2, b + '\u00B0', H, 30);\n      lab(A, 'A'); lab(B, 'B'); lab(P, 'P'); const u = unit({ x: -(P.x), y: -(P.y) }); tx(u.x * 18, u.y * 18, 'O', { wt: 700, size: 16 });\n      out.eq = H ? ['\u2220APB = 90\u00B0', '\u2220PBA = 90\u00B0 \u2212 \u2220PAB'] : ['\u2220APB = 90\u00B0', '\u2220PAB + \u2220PBA = ' + a + '\u00B0 + ' + b + '\u00B0 = 90\u00B0'];\n      out.answer = b; out.ask = 'Find angle PBA.';\n      dr(A, 'A'); dr(P, 'P');\n    }\n    else if (id === 'c4') {\n      const A = on(p.A), B = on(p.B), C = on(p.C), D = on(p.D);\n      circ(); L(A, B); L(B, C); L(C, D); L(D, A);\n      const da = t => n360(t - p.A), ord = (da(p.B) < da(p.C) && da(p.C) < da(p.D)) || (da(p.B) > da(p.C) && da(p.C) > da(p.D));\n      const a = Math.round(ang(A, D, B).deg), b = Math.round(ang(B, A, C).deg), c = Math.round(ang(C, B, D).deg), d = Math.round(ang(D, C, A).deg);\n      markA(A, D, B, C1, a + '\u00B0', false, 26); markA(C, B, D, C2, c + '\u00B0', H, 26);\n      markA(B, A, C, C3, b + '\u00B0', false, 22); markA(D, C, A, C4, d + '\u00B0', false, 22);\n      lab(A, 'A'); lab(B, 'B'); lab(C, 'C'); lab(D, 'D');\n      out.eq = H ? ['\u2220A + \u2220C = 180\u00B0', '\u2220A = ' + a + '\u00B0'] : ['\u2220A + \u2220C = ' + a + '\u00B0 + ' + c + '\u00B0 = 180\u00B0', '\u2220B + \u2220D = ' + b + '\u00B0 + ' + d + '\u00B0 = 180\u00B0'];\n      if (!ord) out.note = 'Keep the corners in order round the circle so ABCD is a proper quadrilateral.';\n      out.answer = c; out.ask = 'Find angle C.';\n      dr(A, 'A'); dr(B, 'B'); dr(C, 'C'); dr(D, 'D');\n    }\n    else if (id === 'c5') {\n      const T = on(p.T), u = { x: -Math.sin(rad(p.T)), y: Math.cos(rad(p.T)) }, o = Math.abs(p.th);\n      const E = add(T, mul(u, Math.sign(p.th) * R * Math.tan(rad(o))));\n      circ(); L(sub(T, mul(u, 240)), add(T, mul(u, 240)), { c: C1.s }); L(O, T); L(O, E, { dash: '6 5' }); dot(O); sq(T, O, E);\n      markA(O, T, E, C1, o + '\u00B0', false, 26); markA(E, T, O, C2, (90 - o) + '\u00B0', H, 30);\n      lab(T, 'T'); lab(E, 'E'); const w = unit(sub(O, T)); tx(w.x * 18, w.y * 18, 'O', { wt: 700, size: 16 });\n      out.eq = H ? ['\u2220OTE = 90\u00B0', '\u2220TOE + \u2220OET = 90\u00B0'] : ['\u2220OTE = 90\u00B0', '\u2220TOE + \u2220OET = ' + o + '\u00B0 + ' + (90 - o) + '\u00B0 = 90\u00B0'];\n      out.answer = 90 - o; out.ask = 'Find angle OET.';\n      dr(T, 'T'); dr(E, 'E');\n    }\n    else if (id === 'c6') {\n      const E = p.E, d = len(E), phi = dg(Math.acos(R / d)), base = dir(O, E), T = on(base + phi), S = on(base - phi);\n      circ(); L(E, T); L(E, S); L(O, T); L(O, S); L(O, E, { c: MUTED, dash: '6 5' }); dot(O);\n      sq(T, O, E); sq(S, O, E); tick(E, T, 2); tick(E, S, 2);\n      const e = Math.round(ang(E, T, S).deg), o = 180 - e, ln = fx(Math.sqrt(d * d - R * R) * SC);\n      markA(E, T, S, C1, e + '\u00B0', false, 34); markA(O, T, S, C2, o + '\u00B0', H, 24);\n      lab(T, 'T'); lab(S, 'S'); lab(E, 'E'); const w = unit(mul(E, -1)); tx(w.x * 20, w.y * 20, 'O', { wt: 700, size: 16 });\n      out.eq = H ? ['ET = ES = ' + ln + ' cm', '\u2220OTE = \u2220OSE = 90\u00B0'] : ['ET = ES = ' + ln + ' cm', '\u2220TOS = 180\u00B0 \u2212 ' + e + '\u00B0 = ' + o + '\u00B0'];\n      out.answer = o; out.ask = 'Find angle TOS.';\n      dr(E, 'E');\n    }\n    else if (id === 'c7') {\n      const T = on(p.T), A = on(p.A), B = on(p.B), u = { x: -Math.sin(rad(p.T)), y: Math.cos(rad(p.T)) };\n      circ(); L(sub(T, mul(u, 240)), add(T, mul(u, 240)), { c: C1.s }); L(T, A); L(T, B); L(A, B);\n      const y = ang(B, T, A).deg, dA = dir(T, A);\n      let best = null;\n      [p.T + 90, p.T - 90].forEach(t => { const sw = n180(dA - t); if (!best || Math.abs(Math.abs(sw) - y) < Math.abs(Math.abs(best.sw) - y)) best = { t, sw }; });\n      const v = Math.round(y);\n      mark(T, best.t, best.sw, C1, v + '\u00B0', false, 32); markA(B, T, A, C2, v + '\u00B0', H, 30);\n      lab(T, 'T'); lab(A, 'A'); lab(B, 'B');\n      out.eq = H ? ['Tangent to chord TA = ' + v + '\u00B0', '\u2220TBA is in the alternate segment'] : ['Tangent to chord TA = ' + v + '\u00B0', '\u2220TBA = ' + v + '\u00B0'];\n      out.answer = v; out.ask = 'Find angle TBA.';\n      dr(T, 'T'); dr(A, 'A'); dr(B, 'B');\n    }\n    else if (id === 'c8') {\n      const A = on(p.A), B = on(p.B), M = mid(A, B);\n      circ(); L(A, B); L(O, A, { c: MUTED, dash: '6 5' }); L(O, M); dot(O); dot(M);\n      if (len(M) > 6) sq(M, O, B);\n      tick(A, M, 1); tick(M, B, 1);\n      const am = fx(len(sub(A, M)) * SC);\n      lenLab(A, M, am, C1); lenLab(M, B, H ? '?' : am, C2);\n      lab(A, 'A'); lab(B, 'B'); const w = len(M) > 6 ? unit(mul(M, -1)) : { x: 0, y: -1 }; tx(w.x * 18, w.y * 18, 'O', { wt: 700, size: 16 });\n      if (len(M) > 30) { const m = unit(M); tx(M.x - m.x * 0 + (-m.y) * 18, M.y + m.x * 18, 'M', { wt: 700, size: 16 }); }\n      out.eq = H ? ['OM is perpendicular to AB', 'AM = ' + am + ' cm'] : ['AM = MB = ' + am + ' cm', 'AB = 2 \u00D7 ' + am + ' = ' + (2 * am).toFixed(1) + ' cm'];\n      out.answer = +am; out.unit = 'cm'; out.tol = 0.15; out.ask = 'Find MB. The radius is 5 cm.';\n      dr(A, 'A'); dr(B, 'B');\n    }\n    else if (id === 'c9') {\n      const A = on(p.A), B = on(p.B), C = on(p.C), D = on(p.D);\n      circ(); L(A, B, { c: C1.s, w: 3 }); L(C, D, { c: C2.s, w: 3 });\n      lab(A, 'A'); lab(B, 'B'); lab(C, 'C'); lab(D, 'D');\n      const X = segX(A, B, C, D);\n      if (!X) { out.note = 'Drag the points so the two chords cross inside the circle.'; out.eq = ['The chords need to cross']; out.ask = 'Make the chords cross first.'; }\n      else {\n        dot(X); tx(X.x + 14, X.y - 14, 'X', { wt: 700, size: 16 });\n        const pw = r1(len(sub(A, X)) * len(sub(X, B)) * SC * SC).toFixed(1);\n        const ax = r1(len(sub(A, X)) * SC), xb = r1(len(sub(X, B)) * SC), cx = r1(len(sub(C, X)) * SC), xd = r1(len(sub(X, D)) * SC);\n        lenLab(A, X, ax.toFixed(1), C1); lenLab(X, B, xb.toFixed(1), C1); lenLab(C, X, cx.toFixed(1), C2); lenLab(X, D, H ? '?' : xd.toFixed(1), C2);\n        out.eq = H ? ['AX \u00D7 XB = CX \u00D7 XD', ax.toFixed(1) + ' \u00D7 ' + xb.toFixed(1) + ' = ' + cx.toFixed(1) + ' \u00D7 XD'] : ['AX \u00D7 XB = ' + ax.toFixed(1) + ' \u00D7 ' + xb.toFixed(1) + ' \u2248 ' + pw, 'CX \u00D7 XD = ' + cx.toFixed(1) + ' \u00D7 ' + xd.toFixed(1) + ' \u2248 ' + pw];\n        out.answer = ax * xb / cx; out.unit = 'cm'; out.tol = 0.15; out.ask = 'Find XD to 1 decimal place.';\n      }\n      dr(A, 'A'); dr(B, 'B'); dr(C, 'C'); dr(D, 'D');\n    }\n    else if (id === 'c10') {\n      const P = p.P, B0 = on(p.B), D0 = on(p.D);\n      const other = Q => { const v = sub(Q, P); return add(P, mul(v, (len(P) * len(P) - R * R) / (len(v) * len(v)))); };\n      const pair = Q => { const Z = other(Q); return len(sub(Z, P)) < len(sub(Q, P)) ? [Z, Q] : [Q, Z]; };\n      const [A, B] = pair(B0), [C, D] = pair(D0);\n      circ(); L(P, B, { c: C1.s, w: 3 }); L(P, D, { c: C2.s, w: 3 }); dot(A); dot(C);\n      lab(P, 'P'); lab(A, 'A', P); lab(B, 'B'); lab(C, 'C', P); lab(D, 'D');\n      const pa = r1(len(sub(A, P)) * SC), ab = r1(len(sub(B, A)) * SC), pc = r1(len(sub(C, P)) * SC), cd = r1(len(sub(D, C)) * SC);\n      lenLab(P, A, pa.toFixed(1), C1); lenLab(A, B, ab.toFixed(1), C1); lenLab(P, C, pc.toFixed(1), C2); lenLab(C, D, H ? '?' : cd.toFixed(1), C2);\n      const pb = r1(pa + ab), pd = r1(pc + cd), pw = r1((len(P) * len(P) - R * R) * SC * SC).toFixed(1);\n      out.eq = H ? ['PA \u00D7 PB = PC \u00D7 PD', 'PB = ' + pa.toFixed(1) + ' + ' + ab.toFixed(1) + ' = ' + pb.toFixed(1)] : ['PA \u00D7 PB = ' + pa.toFixed(1) + ' \u00D7 ' + pb.toFixed(1) + ' \u2248 ' + pw, 'PC \u00D7 PD = ' + pc.toFixed(1) + ' \u00D7 ' + pd.toFixed(1) + ' \u2248 ' + pw];\n      out.answer = pa * pb / pc - pc; out.unit = 'cm'; out.tol = 0.2; out.ask = 'Find CD to 1 decimal place.';\n      dr(P, 'P'); dr(B0, 'B'); dr(D0, 'D');\n    }\n    else if (id === 'l1') {\n      const t = p.t, m = MODES.find(x => x.key === s.mode), k = Math.cos(rad(t)) / Math.sin(rad(t));\n      const r = p.r || 0, cr = Math.cos(rad(r)), sr = Math.sin(rad(r));\n      const RT = P => ({ x: P.x * cr + P.y * sr, y: -P.x * sr + P.y * cr });\n      const IL = [null, { x: 60 * k, y: -60 }, { x: -60 * k, y: 60 }], I = [null, RT(IL[1]), RT(IL[2])];\n      const dL = { x: Math.cos(rad(t)), y: -Math.sin(rad(t)) };\n      const st = [0, t, 180, 180 + t], sw = [t, 180 - t, t, 180 - t], D = len(sub(IL[1], IL[2]));\n      const list = PAIRS[m.key], pi = Math.min(s.pairIdx, list.length - 1), pr = list[pi];\n      const rayEnd = (q, a) => {\n        a = n360(a);\n        let l = 120;\n        if (Math.abs(n180(a - t)) < 0.5 || Math.abs(n180(a - t - 180)) < 0.5) {\n          const toward = q[0] === 1 ? Math.abs(n180(a - t - 180)) < 0.5 : Math.abs(n180(a - t)) < 0.5;\n          l = toward ? D : 70;\n        }\n        return RT(add(IL[q[0]], { x: l * Math.cos(rad(a)), y: -l * Math.sin(rad(a)) }));\n      };\n      const glow = (q, col, o) => [st[q[1]], st[q[1]] + sw[q[1]]].forEach(a => { const E = rayEnd(q, a), V = I[q[0]]; paths.push({ d: 'M' + N(V.x) + ' ' + N(V.y) + ' L' + N(E.x) + ' ' + N(E.y), fill: 'none', stroke: col.s, w: 9, dash: 'none', op: (o || 0.28) * s.ap }); });\n      if (!s.seeAll) { glow(pr[0], C1); glow(pr[1], C2); }\n      [-60, 60].forEach(y => {\n        L(RT({ x: -245, y }), RT({ x: 245, y }));\n        const c1 = [[-182, y - 7], [-172, y], [-182, y + 7]], c2 = [[-172, y - 7], [-162, y], [-172, y + 7]];\n        const pp = c => c.map((q, i) => { const P = RT({ x: q[0], y: q[1] }); return (i ? 'L' : 'M') + N(P.x) + ' ' + N(P.y); }).join(' ');\n        paths.push({ d: pp(c1) + ' ' + pp(c2), fill: 'none', stroke: INK, w: 2.5, dash: 'none' });\n      });\n      L(RT(mul(dL, -250)), RT(mul(dL, 250)));\n      const mm = (q, col, hide, rr) => mark(I[q[0]], -(st[q[1]] + r), -sw[q[1]], col, sw[q[1]] + '\u00B0', hide, rr || 28);\n      if (s.seeAll) {\n        const PAL = [C1, C2, C3, C4];\n        if (m.key === 'line') {\n          [1, 2].forEach(i => [0, 1, 2, 3].forEach(j => mm([i, j], j % 2 ? C2 : C1, false, 26)));\n          out.eq = ['Side by side on a line: ' + t + '\u00B0 + ' + (180 - t) + '\u00B0 = 180\u00B0'];\n        } else {\n          list.forEach((q, i) => { mm(q[0], PAL[i % 4], false, 26); mm(q[1], PAL[i % 4], false, 26); });\n          out.eq = m.eq ? [list.length + ' ' + m.label.toLowerCase() + ' pairs, one colour each', 'Each pair is equal: ' + t + '\u00B0 or ' + (180 - t) + '\u00B0']\n                        : [list.length + ' co-interior pairs, one colour each', 'Each pair: ' + t + '\u00B0 + ' + (180 - t) + '\u00B0 = 180\u00B0'];\n        }\n      } else {\n        mm(pr[0], C1, false); mm(pr[1], C2, H);\n        const v1 = sw[pr[0][1]], v2 = sw[pr[1][1]];\n        out.eq = H ? ['Blue angle = ' + v1 + '\u00B0'] : (m.eq ? [m.label + ': ' + v1 + '\u00B0 = ' + v2 + '\u00B0'] : [v1 + '\u00B0 + ' + v2 + '\u00B0 = 180\u00B0']);\n        out.answer = v2; out.ask = 'Find the orange angle.';\n      }\n      out.pairs = list.length; out.pi = pi;\n      dr(RT(mul(dL, 205)), 'H');\n      dr(RT({ x: 200, y: -60 }), 'R');\n    }\n    else if (id === 'l4') {\n      const keys = ['A', 'B', 'C', 'D'].sort((u, v) => n360(p[u]) - n360(p[v]));\n      const PAL = [C1, C2, C3, C4], vals = [];\n      keys.forEach((kk, i) => { const a0 = n360(p[kk]), a1 = n360(p[keys[(i + 1) % 4]]); vals.push(Math.round(n360(a1 - a0)) || 360); });\n      keys.forEach(kk => L(O, mul(on(p[kk]), 1.55)));\n      dot(O);\n      const hideI = 3;\n      keys.forEach((kk, i) => mark(O, n360(p[kk]), vals[i], PAL[i], vals[i] + '\u00B0', H && i === hideI, 40 + (i % 2) * 12));\n      keys.forEach(kk => dr(on(p[kk]), kk));\n      const sum = vals.reduce((x, y) => x + y, 0);\n      out.eq = H ? [vals.slice(0, 3).map(v => v + '\u00B0').join(' + ') + ' + ? = 360\u00B0'] : [vals.map(v => v + '\u00B0').join(' + ') + ' = ' + sum + '\u00B0'];\n      out.answer = vals[hideI]; out.ask = 'Find the missing angle.';\n    }\n    else if (id === 'l5') {\n      const A = p.A, C = p.C, B = { x: -C.x, y: C.y }, G = { x: 0, y: (A.y + 2 * C.y) / 3 };\n      L(A, B); L(A, C); L(B, C); tick(A, B, 1); tick(A, C, 1);\n      L(A, { x: 0, y: C.y }, { c: MUTED, dash: '6 5', w: 2 });\n      const b = Math.round(ang(B, A, C).deg), apex = 180 - 2 * b;\n      markA(B, A, C, C1, b + '\u00B0', false, 30); markA(C, A, B, C1, b + '\u00B0', false, 30); markA(A, B, C, C2, apex + '\u00B0', H, 30);\n      lab(A, 'A', G); lab(B, 'B', G); lab(C, 'C', G);\n      out.eq = H ? ['AB = AC, so \u2220B = \u2220C = ' + b + '\u00B0'] : ['\u2220B = \u2220C = ' + b + '\u00B0', '\u2220A = 180\u00B0 \u2212 2 \u00D7 ' + b + '\u00B0 = ' + apex + '\u00B0'];\n      out.answer = apex; out.ask = 'Find angle A.';\n      dr(A, 'A'); dr(C, 'C');\n    }\n    else if (id === 'p0') {\n      const A = p.A, B = p.B, C = p.C, D = p.D, Q = [A, B, C, D], G = { x: (A.x + B.x + C.x + D.x) / 4, y: (A.y + B.y + C.y + D.y) / 4 };\n      L(A, B); L(B, C); L(C, D); L(D, A); L(A, C, { c: MUTED, dash: '6 5', w: 2 });\n      const sg = Q.map((P, i) => Math.sign(cross(P, Q[(i + 1) % 4], Q[(i + 2) % 4])));\n      const convex = sg.every(v => v === sg[0]);\n      const a = Math.round(ang(A, D, B).deg), b2 = Math.round(ang(B, A, C).deg), c = Math.round(ang(C, B, D).deg), d = 360 - a - b2 - c;\n      markA(A, D, B, C1, a + '\u00B0', false, 28); markA(B, A, C, C3, b2 + '\u00B0', false, 28); markA(C, B, D, C4, c + '\u00B0', false, 28); markA(D, C, A, C2, d + '\u00B0', H, 28);\n      lab(A, 'A', G); lab(B, 'B', G); lab(C, 'C', G); lab(D, 'D', G);\n      out.eq = H ? [a + '\u00B0 + ' + b2 + '\u00B0 + ' + c + '\u00B0 + \u2220D = 360\u00B0'] : [a + '\u00B0 + ' + b2 + '\u00B0 + ' + c + '\u00B0 + ' + d + '\u00B0 = 360\u00B0', 'Two triangles: 2 \u00D7 180\u00B0 = 360\u00B0'];\n      if (!convex) out.note = 'Keep the corners in order round the shape. This one bends inwards, so check the angles carefully.';\n      out.answer = d; out.ask = 'Find angle D.';\n      ['A', 'B', 'C', 'D'].forEach((kk, i) => dr(Q[i], kk));\n    }\n    else if (id === 'l3') {\n      const A = p.A, B = p.B, C = p.C, G = { x: (A.x + B.x + C.x) / 3, y: (A.y + B.y + C.y) / 3 };\n      const E = add(C, mul(unit(sub(C, B)), 90));\n      L(A, B); L(B, C); L(C, A); L(C, E, { dash: '6 5' });\n      const a = Math.round(ang(A, B, C).deg), b = Math.round(ang(B, A, C).deg), c = 180 - a - b, ex = a + b;\n      markA(A, B, C, C1, a + '\u00B0', false, 26); markA(B, A, C, C3, b + '\u00B0', false, 26); markA(C, A, B, C4, c + '\u00B0', false, 20); markA(C, E, A, C2, ex + '\u00B0', H, 34);\n      lab(A, 'A', G); lab(B, 'B', G); lab(C, 'C', G);\n      out.eq = H ? ['\u2220A = ' + a + '\u00B0, \u2220B = ' + b + '\u00B0'] : [a + '\u00B0 + ' + b + '\u00B0 + ' + c + '\u00B0 = 180\u00B0', 'Exterior angle = ' + a + '\u00B0 + ' + b + '\u00B0 = ' + ex + '\u00B0'];\n      out.answer = ex; out.ask = 'Find the exterior angle at C.';\n      dr(A, 'A'); dr(B, 'B'); dr(C, 'C');\n    }\n    else {\n      const n = s.n, RP = 170, V = [];\n      for (let i = 0; i < n; i++) { const t = rad(90 + 180 / n + 360 * i / n); V.push({ x: RP * Math.cos(t), y: RP * Math.sin(t) }); }\n      const show = Math.floor(n / 2), sum = (n - 2) * 180, each = sum / n, ex = 360 / n;\n      if (id === 'p1') {\n        for (let i = 1; i < n - 1; i++) {\n          paths.push({ d: 'M' + N(V[0].x) + ' ' + N(V[0].y) + ' L' + N(V[i].x) + ' ' + N(V[i].y) + ' L' + N(V[i + 1].x) + ' ' + N(V[i + 1].y) + ' Z', fill: i % 2 ? 'rgba(46,127,168,0.10)' : 'rgba(107,79,160,0.10)', stroke: 'none', w: 0, dash: 'none' });\n          tx((V[0].x + V[i].x + V[i + 1].x) / 3, (V[0].y + V[i].y + V[i + 1].y) / 3, String(i), { c: C4.t, size: 14, wt: 700 });\n        }\n        for (let i = 2; i < n - 1; i++) L(V[0], V[i], { c: MUTED, dash: '6 5', w: 2 });\n        for (let i = 0; i < n; i++) L(V[i], V[(i + 1) % n]);\n        for (let i = 0; i < n; i++) markA(V[i], V[(i + n - 1) % n], V[(i + 1) % n], i === show ? C2 : C4, i === show ? nice(each) + '\u00B0' : '', i === show && H, i === show ? 24 : 16);\n        out.eq = H ? [(n - 2) + ' triangles \u00D7 180\u00B0 = ' + sum + '\u00B0'] : [(n - 2) + ' triangles \u00D7 180\u00B0 = ' + sum + '\u00B0', 'Each angle = ' + sum + '\u00B0 \u00F7 ' + n + ' = ' + nice(each) + '\u00B0'];\n        out.answer = each; out.tol = 0.06; out.ask = 'Find one interior angle of this regular ' + POLY[n] + '.';\n      } else {\n        for (let i = 0; i < n; i++) {\n          const a = V[i], b = V[(i + 1) % n], c = V[(i + 2) % n], E = add(b, mul(unit(sub(b, a)), 62));\n          L(a, b); L(b, E, { c: MUTED, dash: '6 5', w: 2 });\n          markA(b, E, c, (i + 1) % n === show ? C2 : C1, (i + 1) % n === show ? nice(ex) + '\u00B0' : '', (i + 1) % n === show && H, (i + 1) % n === show ? 24 : 18);\n        }\n        out.eq = H ? ['All ' + n + ' exterior angles add up to 360\u00B0'] : [n + ' \u00D7 ' + nice(ex) + '\u00B0 = 360\u00B0', 'Interior angle = 180\u00B0 \u2212 ' + nice(ex) + '\u00B0 = ' + nice(180 - ex) + '\u00B0'];\n        out.answer = ex; out.tol = 0.06; out.ask = 'Find one exterior angle of this regular ' + POLY[n] + '.';\n      }\n    }\n    paths.forEach(q => { if (q.op === undefined) q.op = 1; });\n    return out;\n  }\n\n  renderVals() {\n    const s = this.state, th = TH.find(t => t.id === s.id), fig = this.build();\n    const mode = MODES.find(m => m.key === s.mode);\n    const groups = GROUPS.map(g => ({ label: g.label, bg: g.key === th.g ? '#FFFFFF' : 'transparent', fg: INK, sh: g.key === th.g ? '0 1px 3px rgba(18,36,58,0.15)' : 'none', pick: () => this.pick(TH.find(t => t.g === g.key).id) }));\n    const list = TH.filter(t => t.g === th.g).map((t, i) => ({ name: t.name, igcse: !!t.igcse, bg: t.id === s.id ? INK : 'transparent', fg: t.id === s.id ? '#FFFFFF' : '#2B3A50', wt: t.id === s.id ? 600 : 500, tag: t.id === s.id ? '#FFB59A' : '#B4471C', pick: () => this.pick(t.id) }));\n    const modes = MODES.map(m => ({ label: m.label, bg: m.key === s.mode ? INK : '#FFFFFF', fg: m.key === s.mode ? '#FFFFFF' : INK, bd: m.key === s.mode ? INK : '#D3DCE7', pick: () => { this.setState({ mode: m.key, guess: '', result: null, reveal: false, pairIdx: 0, seeAll: false }); this.grow(); } }));\n    const np = fig.pairs || 1, stepPair = dlt => { this.setState({ pairIdx: (this.state.pairIdx + dlt + np) % np, result: null, reveal: false, guess: '' }); this.grow(); };\n    const check = () => {\n      if (fig.answer === null) return;\n      const g = parseFloat(String(this.state.guess).replace(',', '.').replace('\u00B0', ''));\n      if (isNaN(g)) return;\n      const ok = Math.abs(g - fig.answer) <= fig.tol;\n      this.setState({ result: ok ? 'right' : 'wrong', score: this.state.score + (ok ? 1 : 0), tries: this.state.tries + 1 });\n    };\n    return {\n      th, fig, groups, list, modes,\n      rule: s.id === 'l1' ? mode.rule : th.rule,\n      reason: s.id === 'l1' ? mode.reason : th.reason,\n      figLabel: th.name + ' diagram',\n      isLines: s.id === 'l1', isPoly: s.id === 'p1' || s.id === 'p2',\n      polyName: POLY[s.n], n: s.n, turnLines: () => this.turnLines(),\n      seeAll: s.seeAll, pairNav: !s.seeAll, pairText: 'Example ' + ((fig.pi || 0) + 1) + ' of ' + np,\n      prevPair: () => stepPair(-1), nextPair: () => stepPair(1),\n      toggleAll: () => { this.setState({ seeAll: !this.state.seeAll, test: false, result: null, reveal: false }); this.grow(); },\n      allLabel: s.seeAll ? 'One pair' : 'See all', aBg: s.seeAll ? INK : '#FFFFFF', aFg: s.seeAll ? '#FFFFFF' : INK,\n      showReason: s.showReason, showTip: s.showTip,\n      toggleReason: () => this.setState({ showReason: !this.state.showReason }),\n      toggleTip: () => this.setState({ showTip: !this.state.showTip }),\n      rBg: s.showReason ? '#E7F0F9' : '#FFFFFF', rBd: s.showReason ? '#9FC0DD' : '#D3DCE7',\n      tBg: s.showTip ? '#FDF0EA' : '#FFFFFF', tBd: s.showTip ? '#F2B79C' : '#D3DCE7',\n      qBg: s.test ? INK : '#E9683A', qFg: s.test ? '#FFFFFF' : INK, testLabel: s.test ? 'Stop test' : 'Test me',\n      hint: !s.dragged && fig.drags.length > 0,\n      inBd: s.result === 'right' ? '#1D9E62' : s.result === 'wrong' ? '#D64545' : '#C5D3E2',\n      hasScore: s.tries > 0,\n      eqOp: String(Math.min(1, 0.25 + s.ap)),\n      fewer: () => { this.setState({ n: Math.max(3, s.n - 1), result: null, reveal: false }); this.grow(); },\n      more: () => { this.setState({ n: Math.min(12, s.n + 1), result: null, reveal: false }); this.grow(); },\n      newPos: () => this.fresh(s.id),\n      move: e => this.move(e),\n      up: () => { this.dragKey = null; },\n      test: s.test, testOff: !s.test,\n      toggleTest: () => { if (s.test) this.setState({ test: false, guess: '', result: null, reveal: false }); else this.fresh(s.id, { test: true, seeAll: false }); },\n      guess: s.guess,\n      onGuess: e => this.setState({ guess: e.target.value, result: this.state.result === 'right' ? 'right' : null }),\n      onKey: e => { if (e.key === 'Enter') check(); },\n      check,\n      reveal: () => this.setState({ reveal: true, showReason: true }),\n      showRight: s.result === 'right', showWrong: s.result === 'wrong' && !s.reveal, showReveal: s.reveal,\n      answerText: fig.answer === null ? '' : 'Answer: ' + (fig.unit === '\u00B0' ? nice(fig.answer) + '\u00B0' : r1(fig.answer).toFixed(1) + ' cm'),\n      scoreText: s.tries ? s.score + ' / ' + s.tries + ' correct' : ''\n    };\n  }\n}\n\n/* Angle Facts Lab: plain-JS screen around the design's logic (Component from design/Main.dc.html).\n   build.py puts: shim + design logic + this file into dist/angle-lab.js. */\nvar AFL_N = 0;\nvar AFL_IC = {\n  reason: '<path d=\"M4 5h16M4 10h16M4 15h10\"/>',\n  tip: '<path d=\"M9 18h6M10 21h4M12 3a6 6 0 0 0-4 10.5c.7.7 1 1.5 1 2.5h6c0-1 .3-1.8 1-2.5A6 6 0 0 0 12 3z\"/>',\n  test: '<path d=\"M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6V14M12 17.5h.01\"/><circle cx=\"12\" cy=\"12\" r=\"9.5\"/>',\n  shuffle: '<path d=\"M16 3h5v5M4 20 21 3M21 16v5h-5M15 15l6 6M4 4l5 5\"/>',\n  prev: '<path d=\"M15 6l-6 6 6 6\"/>',\n  next: '<path d=\"M9 6l6 6-6 6\"/>',\n  turn: '<path d=\"M20 12a8 8 0 1 1-2.3-5.7\"/><path d=\"M20 4v5h-5\"/>',\n  grid: '<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.5\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.5\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.5\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.5\"/>'\n};\nfunction aflIc(k, sz) { sz = sz || 16; return '<svg class=\"afl-ic\" width=\"' + sz + '\" height=\"' + sz + '\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">' + AFL_IC[k] + '</svg>'; }\n/* angle names: the middle letter wears the hat (A\u00D4B), a lone corner too (\u00C2); drawn by css so every letter gets one */\nfunction aflHat(h) {\n  return String(h).replace(/\\bangle ([A-Z]{1,3})\\b/g, '\u2220$1')\n    .replace(/\u2220([A-Z])([A-Z])([A-Z])/g, '$1<span class=\"afl-hat\">$2</span>$3')\n    .replace(/\u2220([A-Z])(?![A-Z])/g, '<span class=\"afl-hat\">$1</span>');\n}\n/* each rule's own frame (half-width in diagram units), so the drawing fills the board instead of a fixed 520 box */\nvar AFL_VIEW = { c1: 196, c2: 196, c3: 196, c4: 196, c8: 196, c9: 196, c7: 205, c5: 272, c6: 272, c10: 272, l1: 240, l4: 228, l3: 262, l5: 262, p0: 262, p1: 205, p2: 248 };\nvar AFL_DARK = { '#12243A': '#E8EEF6', '#FBFDFF': '#0F1A2C', '#FFFFFF': '#0F1A2C', '#1F5F80': '#8FD0F2', '#B4471C': '#FFAA85', '#553C85': '#CDB8F5', '#3E4A5C': '#B8C4D4', '#8A97AB': '#6F7F98' };\nfunction aflEsc(s) { return String(s == null ? '' : s).replace(/[&<>\"]/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]; }); }\n\nfunction aflMount(el, opts) {\n  opts = opts || {};\n  var uid = 'afl' + (++AFL_N);\n  if (opts.shadow) {\n    /* inside a host app (Skills Lab) the page's own button rules would win on specificity: draw in a shadow root */\n    var sr = el.shadowRoot || el.attachShadow({ mode: 'open' });\n    sr.innerHTML = '<style>' + AFL_CSS + ':host{display:block}</style>';\n    var inner = document.createElement('div'); sr.appendChild(inner); el = inner;\n  }\n  var rootNode = el.getRootNode ? el.getRootNode() : document;\n  function active() { return (rootNode && rootNode.activeElement) || document.activeElement; }\n  var c = new Component({});\n  var v = null, raf = 0, cache = {};\n  if (opts.start) { var st = TH.find(function (t) { return t.id === opts.start; }); if (st) c.state.id = st.id; }\n  el.classList.add('afl');\n  if (opts.dark) el.classList.add('afl--dark');\n  if (opts.fit) el.classList.add('afl--fit');\n  var dk = function (col) { return opts.dark && AFL_DARK[col] ? AFL_DARK[col] : col; };\n  /* TEACH LOOK (2026-11-13, Aadam: \"make the explorer look more similar to the teach mode\"): inside the lab, wider\n     than a phone: rules down a full-height side column, a bar with the topic chip and an Explore / Test me switch,\n     the rule as a big centred title, the diagram on a dark board, centred buttons, a caption line under them */\n  var teach = !!opts.fit && (typeof window === 'undefined' || window.innerWidth > 700);\n  var svgHTML = '<svg class=\"afl-svg\" viewBox=\"-260 -260 520 520\" role=\"group\" aria-label=\"Diagram\">' +\n    '<defs><pattern id=\"' + uid + 'd\" width=\"20\" height=\"20\" patternUnits=\"userSpaceOnUse\"><circle cx=\"10\" cy=\"10\" r=\"1.1\" fill=\"' + (opts.dark ? '#22314A' : '#D6DFEA') + '\"/></pattern></defs>' +\n    '<rect x=\"-320\" y=\"-320\" width=\"640\" height=\"640\" fill=\"url(#' + uid + 'd)\"/><g data-r=\"fig\"></g></svg>';\n  if (teach) el.classList.add('afl--teach');\n  el.innerHTML = teach ?\n    '<div class=\"afl-tl\">' +\n      '<nav class=\"afl-rail afl-side\" aria-label=\"Rules\" data-r=\"list\"></nav>' +\n      '<section class=\"afl-tmain\">' +\n        '<div class=\"afl-tbar\" data-r=\"tbar\"></div>' +\n        /* ROUND 6 (2026-11-13, Aadam: \"move the new position to the top bar, put the main fact into the top bar too,\n           a clear button saying show fact, use the side spaces more\"): the board and a side panel sit side by side */\n        '<div class=\"afl-tbody\">' +\n          '<div class=\"afl-board\"><div class=\"afl-stage\">' + svgHTML + '<p class=\"afl-hint\" data-r=\"hint\" aria-hidden=\"true\">Drag the white points</p></div></div>' +\n          '<aside class=\"afl-tside\">' +\n            '<h3 class=\"afl-big\" data-r=\"big\"></h3>' +\n            '<div class=\"afl-beq\" data-r=\"beq\" aria-live=\"polite\"></div>' +\n            '<div class=\"afl-tacts\" data-r=\"tacts\"></div>' +\n            '<div class=\"afl-rule\" data-r=\"rule\" aria-live=\"polite\"></div>' +\n            '<p class=\"afl-cap\" data-r=\"cap\" aria-live=\"polite\"></p>' +\n          '</aside>' +\n        '</div>' +\n      '</section>' +\n    '</div>' :\n    '<div class=\"afl-top\"><h2 class=\"afl-h1\">' + aflEsc(opts.title || 'Angle Facts') + '</h2><nav class=\"afl-seg\" aria-label=\"Topic\" data-r=\"groups\"></nav></div>' +\n    '<div class=\"afl-main\">' +\n      '<nav class=\"afl-rail\" aria-label=\"Theorems\" data-r=\"list\"></nav>' +\n      '<section class=\"afl-card\">' +\n        '<div class=\"afl-head\" data-r=\"head\"></div>' +\n        '<div data-r=\"panels\"></div>' +\n        '<div class=\"afl-stage\"><svg class=\"afl-svg\" viewBox=\"-260 -260 520 520\" role=\"group\" aria-label=\"Diagram\">' +\n          '<defs><pattern id=\"' + uid + 'd\" width=\"20\" height=\"20\" patternUnits=\"userSpaceOnUse\"><circle cx=\"10\" cy=\"10\" r=\"1.1\" fill=\"' + (opts.dark ? '#26354F' : '#D6DFEA') + '\"/></pattern></defs>' +\n          '<rect x=\"-320\" y=\"-320\" width=\"640\" height=\"640\" fill=\"url(#' + uid + 'd)\"/><g data-r=\"fig\"></g></svg>' +\n          '<p class=\"afl-hint\" data-r=\"hint\" aria-hidden=\"true\">Drag the dark points</p></div>' +\n        '<div data-r=\"controls\"></div>' +\n        '<div class=\"afl-foot\" data-r=\"foot\" aria-live=\"polite\"></div>' +\n      '</section>' +\n    '</div>';\n  var R = {};\n  Array.prototype.forEach.call(el.querySelectorAll('[data-r]'), function (n) { R[n.getAttribute('data-r')] = n; });\n  var svg = el.querySelector('.afl-svg');\n\n  function put(name, html) {\n    if (!R[name] || cache[name] === html) return;\n    cache[name] = html;\n    var a = active(), inside = a && R[name].contains(a);\n    var keep = inside ? (a.getAttribute('data-act') || a.getAttribute('data-drag') || (a.classList.contains('afl-in') ? 'IN' : '')) : '';\n    R[name].innerHTML = html;\n    if (keep) {\n      var n = keep === 'IN' ? R[name].querySelector('.afl-in') : R[name].querySelector('[data-act=\"' + keep + '\"],[data-drag=\"' + keep + '\"]');\n      if (n) { n.focus({ preventScroll: true }); if (keep === 'IN') { var l = n.value.length; try { n.setSelectionRange(l, l); } catch (_) {} } }\n    }\n  }\n  function btn(act, label, cls, extra) { return '<button type=\"button\" class=\"' + cls + '\" data-act=\"' + act + '\"' + (extra || '') + '>' + label + '</button>'; }\n  function figSVG(f) {\n    var o = '';\n    f.paths.forEach(function (p) { o += '<path d=\"' + p.d + '\" fill=\"' + dk(p.fill) + '\" stroke=\"' + dk(p.stroke) + '\" stroke-width=\"' + p.w + '\" stroke-dasharray=\"' + p.dash + '\" opacity=\"' + p.op + '\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/>'; });\n    f.dots.forEach(function (d) { o += '<circle cx=\"' + d.x + '\" cy=\"' + d.y + '\" r=\"4.5\" fill=\"' + dk('#12243A') + '\"/>'; });\n    f.texts.forEach(function (t) { o += '<text x=\"' + t.x + '\" y=\"' + t.y + '\" class=\"afl-t\" fill=\"' + dk(t.fill) + '\" font-size=\"' + t.size + '\" font-weight=\"' + t.weight + '\">' + aflEsc(t.t) + '</text>'; });\n    f.drags.forEach(function (h, i) {\n      o += '<g class=\"afl-h\" data-drag=\"' + i + '\" tabindex=\"0\" role=\"button\" aria-label=\"' + aflEsc(h.key === 'H' ? 'Point on the crossing line' : h.key === 'R' ? 'Turn the whole diagram' : 'Point ' + h.key) + '. Arrow keys move it.\">' +\n        '<circle cx=\"' + h.x + '\" cy=\"' + h.y + '\" r=\"34\" fill=\"rgba(18,36,58,0.001)\"/>' +\n        '<circle class=\"afl-halo\" cx=\"' + h.x + '\" cy=\"' + h.y + '\" r=\"18\" fill=\"' + (h.key === 'R' ? 'rgba(233,104,58,0.18)' : 'rgba(46,127,168,0.16)') + '\"/>' +\n        (h.key === 'R' ? '<path d=\"M' + (+h.x - 7) + ' ' + (+h.y - 3) + 'a8 8 0 1 1 3 9\" fill=\"none\" stroke=\"#E9683A\" stroke-width=\"2.4\" stroke-linecap=\"round\"/>' : '') +\n        '<circle cx=\"' + h.x + '\" cy=\"' + h.y + '\" r=\"' + (h.key === 'R' ? 7 : 10) + '\" fill=\"' + (h.key === 'R' ? '#E9683A' : (opts.dark ? '#FFFFFF' : '#12243A')) + '\" stroke=\"' + (opts.dark ? '#0F1A2C' : '#FFFFFF') + '\" stroke-width=\"3\"/></g>';\n    });\n    return o;\n  }\n\n  function draw() {\n    v = c.renderVals();\n    var s = c.state, f = v.fig;\n    put('groups', v.groups.map(function (g, i) { return btn('g:' + i, aflEsc(g.label), 'afl-seg-b' + (g.bg === '#FFFFFF' ? ' is-on' : ''), ' aria-pressed=\"' + (g.bg === '#FFFFFF') + '\"'); }).join(''));\n    put('list', GROUPS.map(function (g) {\n      var cur = g.key === v.th.g;\n      return '<button type=\"button\" class=\"afl-rh' + (cur ? ' is-cur' : '') + '\" data-act=\"G:' + g.key + '\"' + (cur ? ' aria-current=\"true\"' : '') + '><span>' + aflEsc(g.label) + '</span>' + (cur ? '' : aflIc('next', 14)) + '</button>' + TH.filter(function (t) { return t.g === g.key; }).map(function (t) {\n        var on = t.id === s.id;\n        return btn('T:' + t.id, '<span>' + aflEsc(t.name) + '</span>' + (t.igcse ? '<span class=\"afl-tag\">IGCSE</span>' : ''), 'afl-li' + (on ? ' is-on' : '') + (t.g === v.th.g ? '' : ' is-other'), on ? ' aria-current=\"true\"' : '');\n      }).join('');\n    }).join(''));\n    var onLi = R.list.querySelector('.is-on');\n    if (onLi && R.list.scrollWidth > R.list.clientWidth + 4) { var want = onLi.offsetLeft - (R.list.clientWidth - onLi.offsetWidth) / 2; if (Math.abs(R.list.scrollLeft - want) > 8 && R.list._sel !== c.state.id) { R.list._sel = c.state.id; R.list.scrollLeft = want; } }\n    put('head',\n      '<div class=\"afl-title\"><h3>' + aflEsc(v.th.name) + '</h3>' + (v.th.igcse ? '<span class=\"afl-ig\">IGCSE only, not UK GCSE</span>' : '') + '</div>' +\n      '<div class=\"afl-tools\">' +\n        btn('toggleReason', aflIc('reason') + '<span class=\"afl-tl\">Reason</span>', 'afl-tb' + (s.showReason ? ' is-on afl-tb--r' : ''), ' aria-pressed=\"' + s.showReason + '\"') +\n        btn('toggleTip', aflIc('tip') + '<span class=\"afl-tl\">Tip</span>', 'afl-tb' + (s.showTip ? ' is-on afl-tb--t' : ''), ' aria-pressed=\"' + s.showTip + '\"') +\n        btn('toggleTest', aflIc('test') + '<span class=\"afl-tl\">' + aflEsc(v.testLabel) + '</span>', 'afl-tb afl-tb--q' + (s.test ? ' is-on' : ''), ' aria-pressed=\"' + s.test + '\"') +\n        btn('newPos', aflIc('shuffle', 18), 'afl-tb afl-tb--sq', ' aria-label=\"New position\"') +\n      '</div>');\n    put('panels',\n      (s.showReason ? '<div class=\"afl-pan afl-pan--r\"><p class=\"afl-pan-h\">' + aflEsc(v.reason) + '</p><p>' + aflEsc(v.rule) + '</p></div>' : '') +\n      (s.showTip ? '<div class=\"afl-pan afl-pan--t\"><p>' + aflEsc(v.th.trap) + '</p></div>' : ''));\n    var vr = AFL_VIEW[s.id] || 260;\n    if (svg._vr !== vr) { svg._vr = vr; svg.setAttribute('viewBox', -vr + ' ' + -vr + ' ' + 2 * vr + ' ' + 2 * vr); }\n    R.fig.innerHTML = figSVG(f);\n    svg.setAttribute('aria-label', v.figLabel);\n    R.hint.hidden = !v.hint;\n    if (teach) { drawTeach(s, f); fin(s); return; }\n    var ctl = '';\n    if (v.isLines) {\n      ctl += '<div class=\"afl-row\">' + v.modes.map(function (m, i) { var on = m.bg === INK; return btn('m:' + i, aflEsc(m.label), 'afl-chip' + (on ? ' is-on' : ''), ' aria-pressed=\"' + on + '\"'); }).join('') + '</div>';\n      ctl += '<div class=\"afl-row\">' +\n        (v.pairNav ? '<div class=\"afl-step\">' + btn('prevPair', aflIc('prev', 18), 'afl-sb', ' aria-label=\"Previous example\"') + '<span>' + aflEsc(v.pairText) + '</span>' + btn('nextPair', aflIc('next', 18), 'afl-sb', ' aria-label=\"Next example\"') + '</div>' : '') +\n        btn('toggleAll', aflIc('grid', 18) + aflEsc(v.allLabel), 'afl-all' + (v.seeAll ? ' is-on' : ''), ' aria-pressed=\"' + v.seeAll + '\"') +\n        btn('turnLines', aflIc('turn', 18) + 'Turn', 'afl-all afl-turn', ' aria-label=\"Turn the lines 45 degrees\"') + '</div>';\n    }\n    if (v.isPoly) ctl += '<div class=\"afl-row afl-poly\">' + btn('fewer', '\u2212', 'afl-pm', ' aria-label=\"Fewer sides\"') + '<span><b>' + v.n + '</b> sides \u00B7 ' + aflEsc(v.polyName) + '</span>' + btn('more', '+', 'afl-pm', ' aria-label=\"More sides\"') + '</div>';\n    put('controls', ctl);\n    var ft = '';\n    if (!s.test) ft += '<div class=\"afl-eq\" style=\"opacity:' + v.eqOp + '\">' + f.eq.map(function (e) { return '<p>' + aflHat(aflEsc(e)) + '</p>'; }).join('') + '</div>';\n    else {\n      ft += '<div class=\"afl-quiz\"><p class=\"afl-ask\">' + aflHat(aflEsc(f.ask)) + '</p>' +\n        '<div class=\"afl-qrow\"><label class=\"afl-sr\" for=\"' + uid + 'in\">Your answer</label>' +\n        '<input id=\"' + uid + 'in\" class=\"afl-in' + (s.result === 'right' ? ' is-right' : s.result === 'wrong' ? ' is-wrong' : '') + '\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"?\" value=\"' + aflEsc(s.guess) + '\">' +\n        '<span class=\"afl-unit\">' + aflEsc(f.unit) + '</span>' + btn('check', 'Check', 'afl-check') + '</div>';\n      if (v.showRight) ft += '<div class=\"afl-res\"><p class=\"afl-ok\">Correct</p>' + btn('newPos', 'Next', 'afl-next') + '</div>';\n      if (v.showWrong) ft += '<div class=\"afl-res\"><p class=\"afl-no\">Not yet</p>' + btn('toggleReason', 'Show reason', 'afl-tb') + btn('reveal', 'Show answer', 'afl-tb') + '</div>';\n      if (v.showReveal) ft += '<div class=\"afl-res\"><p><b>' + aflHat(aflEsc(v.answerText)) + '</b></p>' + btn('newPos', 'Next', 'afl-next') + '</div>';\n      if (v.hasScore) ft += '<p class=\"afl-score\">' + aflEsc(v.scoreText) + '</p>';\n      ft += '</div>';\n    }\n    if (f.note) ft += '<p class=\"afl-note\">' + aflHat(aflEsc(f.note)) + '</p>';\n    put('foot', ft);\n    fin(s);\n  }\n  function fin(s) {\n    if (s.score >= 5 && !c._fin) {\n      c._fin = true;\n      try { (window.dataLayer = window.dataLayer || []).push({ event: 'shlc_quiz_complete', tool: 'angle-facts', score: s.score, tries: s.tries }); } catch (_) {}\n      try { el.dispatchEvent(new CustomEvent('afl:finish', { bubbles: true, composed: true, detail: { score: s.score, tries: s.tries } })); } catch (_) {}\n    }\n    if (opts.onChange) opts.onChange(s, v.th);\n  }\n  function drawTeach(s, f) {\n    /* top bar: the fact (a clear Show fact button until opened), New position, Explore | Test me, Tip */\n    var fact = s.showReason ?\n      btn('toggleReason', '<span class=\"afl-fact-k\">' + aflIc('reason', 16) + 'Fact</span><span class=\"afl-fact-t\">' + aflHat(aflEsc(v.reason)) + '</span>', 'afl-fact is-on', ' aria-pressed=\"true\" title=\"Hide the fact\"') :\n      btn('toggleReason', aflIc('reason', 18) + 'Show fact', 'afl-fact', ' aria-pressed=\"false\"');\n    var right = '<div class=\"afl-tright\">' +\n      btn('newPos', aflIc('shuffle', 18) + '<span>' + (s.test ? 'New question' : 'New position') + '</span>', 'afl-npos') +\n      '<div class=\"afl-tseg\" role=\"group\" aria-label=\"Mode\">' +\n      btn('setExplore', aflIc('grid', 16) + 'Explore', 'afl-tsb' + (s.test ? '' : ' is-on'), ' aria-pressed=\"' + !s.test + '\"') +\n      btn('setTest', aflIc('test', 16) + 'Test me', 'afl-tsb' + (s.test ? ' is-on' : ''), ' aria-pressed=\"' + s.test + '\"') + '</div>' +\n      btn('toggleTip', aflIc('tip', 18), 'afl-icb' + (s.showTip ? ' is-on' : ''), ' aria-label=\"Watch out tip\" aria-pressed=\"' + s.showTip + '\" title=\"Watch out\"') + '</div>';\n    put('tbar', fact + right);\n    /* side panel: what you are looking at, the numbers, then the controls stacked down the side */\n    put('big', (s.test ? aflHat(aflEsc(f.ask)) : aflEsc(v.th.name)) + (v.th.igcse ? '<span class=\"afl-big-ig\">IGCSE only</span>' : ''));\n    put('beq', (!s.test ? f.eq.map(function (e) { return '<p>' + aflHat(aflEsc(e)) + '</p>'; }).join('') : '') +\n      (f.note ? '<p class=\"afl-note\">' + aflHat(aflEsc(f.note)) + '</p>' : ''));\n    var a = '';\n    if (!s.test) {\n      if (v.isLines) {\n        a += '<div class=\"afl-modes\" role=\"group\" aria-label=\"Angle pair\">' + v.modes.map(function (m, i) { var on = m.bg === INK; return btn('m:' + i, aflEsc(m.label), 'afl-lv' + (on ? ' is-on' : ''), ' aria-pressed=\"' + on + '\"'); }).join('') + '</div>';\n        if (v.pairNav) a += '<div class=\"afl-step\">' + btn('prevPair', aflIc('prev', 18), 'afl-sb', ' aria-label=\"Previous example\"') + '<span>' + aflEsc(v.pairText) + '</span>' + btn('nextPair', aflIc('next', 18), 'afl-sb', ' aria-label=\"Next example\"') + '</div>';\n        a += '<div class=\"afl-row2\">' + btn('toggleAll', aflIc('grid', 18) + aflEsc(v.allLabel), 'afl-sec' + (v.seeAll ? ' is-on' : ''), ' aria-pressed=\"' + v.seeAll + '\"') +\n          btn('turnLines', aflIc('turn', 18) + 'Turn', 'afl-sec', ' aria-label=\"Turn the lines 45 degrees\"') + '</div>';\n      }\n    } else if (v.showRight || v.showReveal) {\n      a += '<p class=\"' + (v.showRight ? 'afl-ok' : 'afl-ans') + '\">' + (v.showRight ? 'Correct' : aflHat(aflEsc(v.answerText))) + '</p>' + btn('newPos', 'Next question' + aflIc('next', 18), 'afl-pri');\n    } else {\n      a += '<div class=\"afl-qrow\"><label class=\"afl-sr\" for=\"' + uid + 'in\">Your answer</label>' +\n        '<input id=\"' + uid + 'in\" class=\"afl-in' + (s.result === 'wrong' ? ' is-wrong' : '') + '\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"?\" value=\"' + aflEsc(s.guess) + '\">' +\n        '<span class=\"afl-unit\">' + aflEsc(f.unit) + '</span></div>' + btn('check', 'Check' + aflIc('next', 18), 'afl-pri');\n      if (v.showWrong) a += '<div class=\"afl-row2\">' + (s.showReason ? '' : btn('toggleReason', 'Show fact', 'afl-sec')) + btn('reveal', 'Show answer', 'afl-sec') + '</div>';\n    }\n    if (v.isPoly) a += '<div class=\"afl-step afl-polyst\">' + btn('fewer', '\u2212', 'afl-sb', ' aria-label=\"Fewer sides\"') + '<span><b>' + v.n + '</b> sides \u00B7 ' + aflEsc(v.polyName) + '</span>' + btn('more', '+', 'afl-sb', ' aria-label=\"More sides\"') + '</div>';\n    put('tacts', a);\n    put('rule', s.showTip ? '<p class=\"afl-rule-t\"><span class=\"afl-rule-k\">Watch out</span>' + aflHat(aflEsc(v.th.trap)) + '</p>' : '');\n    var cap = '';\n    if (s.test) cap = v.showWrong ? 'Not yet. Try again.' : (v.hasScore ? v.scoreText : '');\n    else if (v.hint) cap = 'Drag the white points.';\n    put('cap', aflHat(aflEsc(cap)));\n  }\n  c._render = function (now) {\n    if (now) { if (raf) { cancelAnimationFrame(raf); raf = 0; } draw(); return; }\n    if (raf) return;\n    raf = requestAnimationFrame(function () { raf = 0; draw(); });\n  };\n\n  function act(a) {\n    var p = a.split(':'), i = +p[1];\n    if (p[0] === 'g') v.groups[i].pick();\n    else if (p[0] === 't') v.list[i].pick();\n    else if (p[0] === 'T') c.pick(p[1]);\n    else if (p[0] === 'G') { if (v.th.g !== p[1]) c.pick(TH.filter(function (t) { return t.g === p[1]; })[0].id); }\n    else if (p[0] === 'm') v.modes[i].pick();\n    else if (a === 'setExplore') { if (c.state.test) v.toggleTest(); }\n    else if (a === 'setTest') { if (!c.state.test) v.toggleTest(); }\n    else if (typeof v[a] === 'function') v[a]();\n    if ((a === 'toggleTest' || a === 'setTest') && c.state.test) setTimeout(function () { var n = el.querySelector('.afl-in'); if (n && !('ontouchstart' in window)) n.focus({ preventScroll: true }); }, 60);\n    if (opts.track) opts.track(a.split(':')[0], c.state.id);\n  }\n  el.addEventListener('click', function (e) {\n    var b = e.target.closest('[data-act]');\n    if (b && el.contains(b)) act(b.getAttribute('data-act'));\n  });\n  svg.addEventListener('pointerdown', function (e) {\n    var h = e.target.closest('[data-drag]'), idx = h ? +h.getAttribute('data-drag') : -1;\n    if (idx < 0) {\n      /* missed the dot: take the nearest point within reach, so a finger does not have to land exactly */\n      var rc = svg.getBoundingClientRect(), vb = svg.viewBox.baseVal, x = vb.x + (e.clientX - rc.left) / rc.width * vb.width, y = vb.y + (e.clientY - rc.top) / rc.height * vb.height, best = 64 * vb.width / 520;\n      v.fig.drags.forEach(function (d, i) { var dd = Math.hypot(+d.x - x, +d.y - y); if (dd < best) { best = dd; idx = i; } });\n      if (idx < 0) return;\n    }\n    v.fig.drags[idx].down({ preventDefault: function () { e.preventDefault(); }, currentTarget: { ownerSVGElement: svg }, pointerId: e.pointerId });\n  });\n  svg.addEventListener('pointermove', function (e) { c.move({ currentTarget: svg, clientX: e.clientX, clientY: e.clientY }); });\n  ['pointerup', 'pointercancel', 'lostpointercapture'].forEach(function (n) { svg.addEventListener(n, function () { c.dragKey = null; }); });\n  svg.addEventListener('keydown', function (e) {\n    var h = e.target.closest('[data-drag]');\n    if (!h) return;\n    var k = e.key, d = v.fig.drags[+h.getAttribute('data-drag')], step = e.shiftKey ? 10 : 2;\n    var kind = (KIND[c.state.id] || {})[d.key] || 'circ';\n    var x = +d.x, y = +d.y, pt;\n    if (kind === 'xy') {\n      var m = e.shiftKey ? 20 : 4;\n      pt = { x: x + (k === 'ArrowRight' ? m : k === 'ArrowLeft' ? -m : 0), y: y + (k === 'ArrowDown' ? m : k === 'ArrowUp' ? -m : 0) };\n    } else {\n      var a = Math.atan2(y, x), r = Math.hypot(x, y);\n      if (k === 'ArrowRight' || k === 'ArrowDown') a += step * Math.PI / 180;\n      else if (k === 'ArrowLeft' || k === 'ArrowUp') a -= step * Math.PI / 180;\n      pt = { x: r * Math.cos(a), y: r * Math.sin(a) };\n    }\n    if (!/^Arrow/.test(k)) return;\n    e.preventDefault();\n    if (!c.state.dragged) c.state.dragged = true;\n    c.applyDrag(d.key, pt);\n    c._render(true);\n  });\n  el.addEventListener('input', function (e) {\n    if (!e.target.classList.contains('afl-in')) return;\n    c.state.guess = e.target.value;\n    if (c.state.result === 'wrong') c.setState({ result: null });\n  });\n  el.addEventListener('keydown', function (e) { if (e.key === 'Enter' && e.target.classList.contains('afl-in')) { e.preventDefault(); act('check'); } });\n  draw();\n  return { component: c, redraw: draw, pick: function (id) { c.pick(id); }, el: el };\n}\n\nvar AFL_REDUCE = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\nif (AFL_REDUCE) Component.prototype.tween = function (name, ms, fn, done) { fn(1); if (done) done(); };\nvar AFL_CSS = \".afl{--ink:#12243A;--sub:#3E4A5C;--line:#D3DCE7;--card:#FFFFFF;--ground:#EEF3F8;--blue:#2E7FA8;--orange:#E9683A;color:var(--ink);font-family:Lexend,system-ui,sans-serif;font-size:16px;line-height:1.45;letter-spacing:0;display:flex;flex-direction:column;gap:16px;box-sizing:border-box}\\n.afl *,.afl *::before,.afl *::after{box-sizing:border-box}\\n.afl p,.afl h2,.afl h3{margin:0;letter-spacing:0}\\n.afl button{font-family:inherit;cursor:pointer;color:var(--ink);letter-spacing:0;line-height:1.2}\\n.afl button:focus-visible,.afl input:focus-visible,.afl .afl-h:focus-visible{outline:3px solid var(--orange);outline-offset:2px}\\n.afl-ic{fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;flex:none}\\n.afl-top{display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;justify-content:space-between}\\n.afl-h1{font-size:26px;font-weight:800;letter-spacing:-.01em;color:var(--ink)}\\n.afl-seg{display:flex;flex-wrap:wrap;gap:4px;padding:4px;background:#DCE5EF;border-radius:12px}\\n.afl-seg-b{min-height:40px;padding:0 16px;border:0;border-radius:9px;background:transparent;font-size:14px;font-weight:600;transition:background .2s,box-shadow .2s}\\n.afl-seg-b.is-on{background:#fff;box-shadow:0 1px 3px rgba(18,36,58,.15)}\\n.afl-main{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start}\\n.afl-rail{position:relative;flex:0 1 220px;max-width:100%;display:flex;flex-direction:column;gap:2px}\\n.afl-li{text-align:left;min-height:44px;padding:8px 12px;border:0;border-radius:10px;background:transparent;font-size:14px;font-weight:500;color:#2B3A50;display:flex;justify-content:space-between;align-items:center;gap:8px;transition:background .18s,color .18s,transform .18s}\\n.afl-li:hover{background:rgba(18,36,58,.06)}\\n.afl-li.is-on{background:var(--ink);color:#fff;font-weight:600}\\n.afl-tag{font-size:11px;font-weight:700;color:#B4471C}\\n.afl-li.is-on .afl-tag{color:#FFB59A}\\n.afl-card{flex:999 1 620px;min-width:0;background:var(--card);border-radius:20px;box-shadow:0 1px 2px rgba(18,36,58,.06),0 8px 28px rgba(18,36,58,.06);overflow:hidden;display:flex;flex-direction:column}\\n.afl-head{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;padding:14px 16px 0 20px}\\n.afl-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}\\n.afl-title h3{font-size:21px;font-weight:700;color:var(--ink)}\\n.afl-ig{font-size:13px;font-weight:600;color:#B4471C}\\n.afl-tools{display:flex;gap:6px;flex-wrap:wrap}\\n.afl-tb{min-height:40px;padding:0 12px;border-radius:10px;border:1px solid var(--line);background:#fff;font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:6px;transition:background .18s,border-color .18s,transform .12s}\\n.afl-tb:active,.afl-chip:active,.afl-sb:active,.afl-pm:active,.afl-all:active,.afl-check:active,.afl-next:active{transform:scale(.96)}\\n.afl-tb--r.is-on{background:#E7F0F9;border-color:#9FC0DD}\\n.afl-tb--t.is-on{background:#FDF0EA;border-color:#F2B79C}\\n.afl-tb--q{border:0;background:var(--orange);font-weight:700}\\n.afl-tb--q.is-on{background:var(--ink);color:#fff}\\n.afl-tb--sq{width:40px;padding:0;justify-content:center}\\n.afl-tb--sq:hover .afl-ic{transform:rotate(-20deg)}\\n.afl-tb--sq .afl-ic{transition:transform .25s}\\n.afl-pan{margin:12px 16px 0;padding:12px 16px;border-radius:12px;display:flex;flex-direction:column;gap:4px;animation:afl-rise .22s ease-out}\\n.afl-pan--r{background:#E7F0F9}\\n.afl-pan--r p{font-size:14px;color:var(--sub)}\\n.afl-pan--r .afl-pan-h{font-size:15px;font-weight:700;color:var(--ink)}\\n.afl-pan--t{background:#FDF0EA}\\n.afl-pan--t p{font-size:14px;color:#5A2A12}\\n.afl-stage{position:relative;display:flex;justify-content:center;padding:4px 8px 0}\\n.afl-svg{width:100%;max-width:max(340px,min(100%,calc(100vh - 230px),820px));aspect-ratio:1/1;touch-action:none;user-select:none;-webkit-user-select:none;display:block;cursor:crosshair}\\n.afl-t{font-family:Lexend,sans-serif;text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:#fff;stroke-width:5px;stroke-linejoin:round}\\n.afl-h{cursor:grab;outline:none}\\n.afl-h:active{cursor:grabbing}\\n.afl-halo{transition:r .15s}\\n.afl-h:hover .afl-halo,.afl-h:focus-visible .afl-halo{r:24px;fill:rgba(233,104,58,.22)}\\n.afl-h:active .afl-halo{r:26px}\\n.afl-hint{position:absolute;top:10px;left:50%;transform:translateX(-50%);padding:6px 12px;border-radius:10px;background:var(--ink);color:#fff;font-size:13px;font-weight:500;white-space:nowrap;pointer-events:none;animation:afl-bob 2.4s ease-in-out infinite}\\n.afl-hint[hidden]{display:none}\\n.afl-row{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;align-items:center;padding:8px 16px 0}\\n.afl-chip{min-height:40px;padding:0 12px;border-radius:10px;border:1px solid var(--line);background:#fff;font-size:13px;font-weight:600;transition:background .18s,color .18s}\\n.afl-chip.is-on{background:var(--ink);color:#fff;border-color:var(--ink)}\\n.afl-step{display:flex;align-items:center;gap:6px;background:#F1F5F9;border-radius:12px;padding:3px}\\n.afl-step span{min-width:116px;text-align:center;font-size:14px;font-weight:600}\\n.afl-sb{width:40px;height:40px;border:0;border-radius:9px;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 2px rgba(18,36,58,.12)}\\n.afl-all{min-height:46px;padding:0 16px;border-radius:12px;border:1px solid var(--ink);background:#fff;font-size:14px;font-weight:700;display:inline-flex;align-items:center;gap:8px;transition:background .18s,color .18s}\\n.afl-all.is-on{background:var(--ink);color:#fff}\\n.afl-turn .afl-ic{transition:transform .3s}.afl-turn:active .afl-ic{transform:rotate(45deg)}\\n.afl-poly{gap:12px}\\n.afl-poly span{min-width:150px;text-align:center;font-weight:600}\\n.afl-poly b{font-size:22px}\\n.afl-pm{width:44px;height:44px;border-radius:12px;border:1px solid var(--line);background:#fff;font-size:22px;font-weight:600}\\n.afl-foot{margin-top:14px;padding:18px 20px 20px;border-top:1px solid #E6ECF3;background:#FAFCFE;display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center;min-height:96px;justify-content:center}\\n.afl-eq{display:flex;flex-direction:column;gap:2px;align-items:center;transition:opacity .2s}\\n.afl-eq p{font-size:22px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink)}\\n.afl-quiz{display:flex;flex-direction:column;gap:10px;align-items:center;width:100%;max-width:520px;animation:afl-rise .22s ease-out}\\n.afl-ask{font-size:18px;font-weight:600}\\n.afl-qrow{display:flex;gap:8px;width:100%;align-items:center}\\n.afl-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}\\n.afl-in{flex:1 1 auto;min-width:0;min-height:48px;padding:0 14px;border-radius:12px;border:2px solid #C5D3E2;background:#fff;color:var(--ink);font:600 20px Lexend,sans-serif;text-align:center}\\n.afl-in.is-right{border-color:#1D9E62;animation:afl-pop .35s ease-out}\\n.afl-in.is-wrong{border-color:#D64545;animation:afl-shake .35s ease-in-out}\\n.afl-unit{font-size:18px;color:var(--sub);min-width:22px}\\n.afl-check{min-height:48px;padding:0 22px;border-radius:12px;border:0;background:var(--ink);color:#fff !important;font-size:15px;font-weight:700}\\n.afl-res{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:center;animation:afl-rise .22s ease-out}\\n.afl-ok{color:#177A4C;font-weight:700}\\n.afl-no{color:#B42318;font-weight:600}\\n.afl-next{min-height:40px;padding:0 16px;border-radius:10px;border:0;background:var(--orange);font-size:14px;font-weight:700}\\n.afl-score{font-size:13px;color:var(--sub)}\\n.afl-note{font-size:14px;color:#8A3412;font-weight:500;max-width:520px;animation:afl-rise .22s ease-out}\\n.afl--dark{--ground:#0B1220}\\n.afl--dark .afl-h1{color:#fff}\\n.afl--dark .afl-seg{background:#16233B}\\n.afl--dark .afl-seg-b{color:#C9D6E6}\\n.afl--dark .afl-seg-b.is-on{color:var(--ink)}\\n.afl--dark .afl-li{color:#C9D6E6}\\n.afl--dark .afl-li:hover{background:rgba(255,255,255,.06)}\\n.afl--dark .afl-li.is-on{background:#fff;color:var(--ink)}\\n.afl--dark .afl-li.is-on .afl-tag{color:#B4471C}\\n.afl--dark .afl-tag{color:#FFB59A}\\n@keyframes afl-rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}\\n@keyframes afl-pop{0%{transform:scale(1)}40%{transform:scale(1.04)}100%{transform:scale(1)}}\\n@keyframes afl-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}\\n@keyframes afl-bob{0%,100%{transform:translate(-50%,0)}50%{transform:translate(-50%,-3px)}}\\n@media (max-width:1000px){.afl-rail{flex:1 1 100%;flex-direction:row;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;padding-bottom:2px}.afl-rail::-webkit-scrollbar{display:none}.afl-li{flex:none}.afl-card{flex-basis:100%}}\\n@media (max-width:700px){.afl-seg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%}.afl-seg-b{padding:4px 6px;font-size:13px;min-height:44px}.afl-tb .afl-tl{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.afl-tb{padding:0 11px}.afl-tb--q .afl-tl{position:static;width:auto;height:auto;clip:auto}.afl-t{font-size:20px}.afl-stage{padding:0}.afl-svg{max-width:none}.afl-title h3{font-size:19px}.afl-rail{flex-direction:row;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;padding-bottom:2px}.afl-rail::-webkit-scrollbar{display:none}.afl-li{flex:none}.afl-head{padding:12px 12px 0 14px}.afl-eq p{font-size:18px}.afl-foot{padding:14px}.afl-h1{font-size:22px}}\\n@media (prefers-reduced-motion:reduce){.afl *{animation:none !important;transition:none !important}}\\n/* ---- round 3 (2026-11-13): hat names, grouped sidebar, the lab's dark look, fit to the screen ---- */\\n.afl-hat{position:relative;display:inline-block}\\n.afl-hat::after{content:'';position:absolute;left:50%;top:-.02em;width:.34em;height:.34em;border-left:.09em solid currentColor;border-top:.09em solid currentColor;transform:translateX(-50%) rotate(45deg);border-radius:1px}\\n.afl-rh{margin:14px 6px 4px;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#6B7A90}\\n.afl-rh:first-child{margin-top:2px}\\n.afl-rail{gap:3px}\\n.afl-li{min-height:38px;padding:7px 12px;border:1px solid transparent}\\n@media (min-width:1001px){.afl-top .afl-seg{display:none}.afl-top{min-height:0}}\\n@media (max-width:1000px){.afl-rh,.afl-li.is-other{display:none}}\\n/* dark: the Skills Lab look (rail rows like the strands, navy panels, blue selection) */\\n.afl--dark{color:#E8EEF6}\\n.afl--dark .afl-rh{color:#8A9BB5}\\n.afl--dark .afl-li{background:#16233B;border-color:#24324A;color:#DCE5F0;border-radius:12px}\\n.afl--dark .afl-li:hover{background:#1C2C47}\\n.afl--dark .afl-li.is-on{background:#3A6A9A;border-color:#6FA0CF;color:#fff}\\n.afl--dark .afl-card{background:#16233B;border:1px solid #24324A;box-shadow:none;border-radius:18px}\\n.afl--dark .afl-title h3{color:#F2F6FB}\\n.afl--dark .afl-ig{color:#FFB59A}\\n.afl--dark .afl-tb,.afl--dark .afl-chip,.afl--dark .afl-pm,.afl--dark .afl-all{background:#1E2C46;border-color:#2E3F5E;color:#E8EEF6}\\n.afl--dark .afl-tb--q{background:#F07B4A;border-color:#F07B4A;color:#12243A}\\n.afl--dark .afl-tb--q.is-on,.afl--dark .afl-chip.is-on,.afl--dark .afl-all.is-on{background:#3A6A9A;border-color:#6FA0CF;color:#fff}\\n.afl--dark .afl-tb--r.is-on{background:#23466A;border-color:#3D6E9E}\\n.afl--dark .afl-tb--t.is-on{background:#4A2C22;border-color:#8A4A33}\\n.afl--dark .afl-pan--r{background:#1E3550}.afl--dark .afl-pan--r p{color:#C9D6E6}.afl--dark .afl-pan--r .afl-pan-h{color:#fff}\\n.afl--dark .afl-pan--t{background:#3A2620}.afl--dark .afl-pan--t p{color:#FFD9C9}\\n.afl--dark .afl-step{background:#1E2C46}.afl--dark .afl-step span{color:#E8EEF6}\\n.afl--dark .afl-sb{background:#2A3A55;color:#fff;box-shadow:none}\\n.afl--dark .afl-poly span{color:#E8EEF6}\\n.afl--dark .afl-foot{background:#121D31;border-top-color:#24324A}\\n.afl--dark .afl-eq p,.afl--dark .afl-ask{color:#F2F6FB}\\n.afl--dark .afl-in{background:#0B1220;border-color:#2E3F5E;color:#fff}\\n.afl--dark .afl-unit,.afl--dark .afl-score{color:#AEBBCC}\\n.afl--dark .afl-check{background:#F07B4A;color:#12243A !important}\\n.afl--dark .afl-ok{color:#7EE0B0}.afl--dark .afl-no{color:#FF9B8A}.afl--dark .afl-note{color:#FFB59A}\\n.afl--dark .afl-hint{background:#E8EEF6;color:#12243A}\\n.afl--dark .afl-t{stroke:#0F1A2C}\\n.afl--dark .afl-seg{background:#16233B}.afl--dark .afl-seg-b{color:#C9D6E6}.afl--dark .afl-seg-b.is-on{background:#3A6A9A;color:#fff;box-shadow:none}\\n/* fit: no page scroll; the diagram takes whatever height is left */\\n@media (min-width:701px){\\n.afl--fit{height:100%;min-height:0;gap:10px}\\n.afl--fit .afl-top{display:none}\\n.afl--fit .afl-main{flex:1 1 auto;min-height:0;flex-wrap:nowrap;align-items:stretch}\\n.afl--fit .afl-rail{flex:0 0 236px;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}\\n.afl--fit .afl-card{flex:1 1 auto;min-width:0;min-height:0}\\n.afl--fit .afl-head{padding-top:12px}\\n.afl--fit .afl-stage{flex:1 1 auto;min-height:120px;padding:4px 8px 0;align-items:center}\\n.afl--fit .afl-svg{width:auto;height:100%;max-width:100%;max-height:100%}\\n.afl--fit .afl-row{padding-top:6px}\\n.afl--fit .afl-foot{margin-top:8px;padding:10px 16px 12px;min-height:72px}\\n.afl--fit .afl-eq p{font-size:19px}\\n}\\n@media (min-width:701px) and (max-width:1000px){.afl--fit .afl-top{display:flex}.afl--fit .afl-main{flex-direction:column}.afl--fit .afl-rail{flex:0 0 auto;flex-direction:row;overflow-x:auto;overflow-y:hidden}}\\n.afl--fit .afl-li{min-height:34px;padding:6px 12px;font-size:13.5px}\\n.afl--fit .afl-rh{margin:10px 6px 3px}\\n.afl-hat::after{top:.05em;width:.32em;height:.32em}\\n.afl--fit .afl-rail{flex-basis:262px;gap:2px}\\n.afl--fit .afl-li{min-height:31px;padding:5px 11px;font-size:13px;line-height:1.2}\\n.afl--fit .afl-rh{margin:8px 6px 2px;font-size:10.5px}\\n/* ---- round 4 (2026-11-13): the Teach mode look inside the lab ---- */\\n.afl--teach{height:100%;gap:0}\\n.afl--teach .afl-hint{display:none}\\n.afl-tl{display:flex;height:100%;min-height:0}\\n.afl--teach .afl-side{flex:0 0 288px;height:100%;overflow-y:auto;overflow-x:hidden;padding:16px 14px 18px;border-right:1px solid #1E2A40;scrollbar-width:thin;display:flex;flex-direction:column;gap:3px;box-sizing:border-box}\\n.afl--teach .afl-rh{margin:12px 4px 4px;font-size:11px;letter-spacing:.14em}\\n.afl--teach .afl-rh:first-child{margin-top:0}\\n.afl--teach .afl-li{min-height:36px;padding:6px 12px;font-size:13.5px;border-radius:12px}\\n.afl-tmain{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;align-items:stretch;padding:14px 22px 14px;box-sizing:border-box}\\n.afl-tbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid #1E2A40}\\n.afl-chip0{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:5px 6px 5px 14px;border-radius:14px;background:#111B2C;border:1px solid #1E2A40}\\n.afl-chip0-t{font-size:14px;font-weight:700;color:#E8EEF6;margin-right:6px}\\n.afl-chip0-n{font-size:14px;font-weight:600;color:#C9D6E6;padding:0 6px}\\n.afl-chip0-n b{font-size:17px;color:#fff}\\n.afl-lv{min-height:34px;padding:0 13px;border-radius:999px;border:1px solid #2A3A55;background:#1A263B;color:#C9D6E6;font-size:13px;font-weight:600}\\n.afl-lv--r{width:34px;padding:0;font-size:18px}\\n.afl-lv.is-on{background:#3A6A9A;border-color:#6FA0CF;color:#fff}\\n.afl-tright{display:flex;align-items:center;gap:8px}\\n.afl-tseg{display:flex;gap:3px;padding:3px;border-radius:14px;background:#111B2C;border:1px solid #1E2A40}\\n.afl-tsb{display:inline-flex;align-items:center;gap:7px;min-height:38px;padding:0 14px;border:0;border-radius:11px;background:transparent;color:#C9D6E6;font-size:14px;font-weight:700}\\n.afl-tsb.is-on{background:#3A6A9A;color:#fff}\\n.afl-icb{width:42px;height:42px;border-radius:50%;border:1px solid #2E3F5E;background:#1E2C46;color:#E8EEF6;display:flex;align-items:center;justify-content:center}\\n.afl-big{margin:14px 0 10px;text-align:center;font-size:clamp(24px,2.6vw,36px);font-weight:800;color:#F2F6FB;letter-spacing:-.01em}\\n.afl-big-ig{font-size:13px;font-weight:700;color:#FFB59A;vertical-align:middle;margin-left:8px}\\n.afl-board{position:relative;flex:1 1 auto;min-height:140px;display:flex;flex-direction:column;border-radius:18px;border:1px solid #1E2A40;background:linear-gradient(180deg,#121C2E,#0E1626);overflow:hidden}\\n.afl--teach .afl-stage{flex:1 1 auto;min-height:0;padding:8px;display:flex;justify-content:center;align-items:center}\\n.afl--teach .afl-svg{width:auto;height:100%;max-width:100%;max-height:100%}\\n.afl-beq{flex:none;display:flex;flex-direction:column;align-items:center;gap:2px;padding:0 16px 14px}\\n.afl-beq p{margin:0;font-size:22px;font-weight:600;color:#F2F6FB;font-variant-numeric:tabular-nums}\\n.afl-beq .afl-note{font-size:14px;font-weight:500;color:#FFB59A}\\n.afl-tacts{display:flex;justify-content:center;align-items:center;gap:10px;flex-wrap:wrap;padding-top:14px;min-height:52px}\\n.afl-pri{display:inline-flex;align-items:center;gap:8px;min-height:50px;padding:0 26px;border-radius:14px;border:0;background:#F07B4A;color:#12243A !important;font-size:16px;font-weight:800;box-shadow:0 6px 18px rgba(240,123,74,.28)}\\n.afl-sec{display:inline-flex;align-items:center;gap:8px;min-height:50px;padding:0 18px;border-radius:14px;border:1px solid #2E3F5E;background:#1E2C46;color:#E8EEF6;font-size:15px;font-weight:700}\\n.afl-sec.is-on{background:#3A6A9A;border-color:#6FA0CF;color:#fff}\\n.afl-pri:active,.afl-sec:active,.afl-lv:active,.afl-tsb:active,.afl-icb:active{transform:scale(.96)}\\n.afl--teach .afl-step{min-height:50px;border-radius:14px;background:#1E2C46;border:1px solid #2E3F5E}\\n.afl--teach .afl-in{flex:0 1 180px;min-height:50px;border-radius:14px;font-size:22px}\\n.afl--teach .afl-unit{font-size:20px}\\n.afl--teach .afl-ok{font-size:20px;font-weight:800;color:#7EE0B0}\\n.afl-ans{font-size:20px;font-weight:700;color:#F2F6FB}\\n.afl-cap{margin:10px 0 0;min-height:22px;text-align:center;font-size:16px;color:#9AA9BF}\\n/* the lab's light theme */\\n.afl--teach:not(.afl--dark) .afl-side,.afl--teach:not(.afl--dark) .afl-tbar{border-color:#D3DCE7}\\n.afl--teach:not(.afl--dark) .afl-chip0,.afl--teach:not(.afl--dark) .afl-tseg{background:#fff;border-color:#D3DCE7}\\n.afl--teach:not(.afl--dark) .afl-chip0-t,.afl--teach:not(.afl--dark) .afl-chip0-n,.afl--teach:not(.afl--dark) .afl-chip0-n b{color:#12243A}\\n.afl--teach:not(.afl--dark) .afl-lv{background:#F1F5F9;border-color:#D3DCE7;color:#12243A}\\n.afl--teach:not(.afl--dark) .afl-tsb{color:#3E4A5C}\\n.afl--teach:not(.afl--dark) .afl-lv.is-on,.afl--teach:not(.afl--dark) .afl-tsb.is-on,.afl--teach:not(.afl--dark) .afl-sec.is-on{background:#12243A;border-color:#12243A;color:#fff}\\n.afl--teach:not(.afl--dark) .afl-icb,.afl--teach:not(.afl--dark) .afl-sec,.afl--teach:not(.afl--dark) .afl-step{background:#fff;border-color:#D3DCE7;color:#12243A}\\n.afl--teach:not(.afl--dark) .afl-big,.afl--teach:not(.afl--dark) .afl-beq p,.afl--teach:not(.afl--dark) .afl-ans{color:#12243A}\\n.afl--teach:not(.afl--dark) .afl-board{background:#fff;border-color:#D3DCE7}\\n.afl--teach:not(.afl--dark) .afl-cap{color:#4F5D73}\\n.afl .afl-tsb,.afl .afl-lv{color:#C9D6E6}.afl .afl-sec,.afl .afl-icb{color:#E8EEF6}\\n.afl .afl-tsb.is-on,.afl .afl-lv.is-on,.afl .afl-sec.is-on{color:#fff}\\n.afl--teach:not(.afl--dark) .afl-tsb,.afl--teach:not(.afl--dark) .afl-lv,.afl--teach:not(.afl--dark) .afl-sec,.afl--teach:not(.afl--dark) .afl-icb{color:#12243A}\\n.afl--teach:not(.afl--dark) .afl-tsb.is-on,.afl--teach:not(.afl--dark) .afl-lv.is-on,.afl--teach:not(.afl--dark) .afl-sec.is-on{color:#fff}\\n.afl-tbar{flex-wrap:nowrap}\\n.afl-chip0{flex:0 1 auto;min-width:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}\\n.afl-chip0::-webkit-scrollbar{display:none}\\n.afl-lv,.afl-chip0-t,.afl-chip0-n{flex:none;white-space:nowrap}\\n.afl-tright{flex:none}\\n.afl .afl-icb.is-on{background:#3A6A9A;border-color:#6FA0CF;color:#fff}\\n.afl--teach:not(.afl--dark) .afl-icb.is-on{background:#12243A;border-color:#12243A;color:#fff}\\n@media (max-width:1180px){.afl--teach .afl-side{flex-basis:240px}.afl-tmain{padding:12px 16px}.afl-tsb{padding:0 11px}}\\n.afl--teach .afl-chip0{padding-left:6px}\\n.afl--teach .afl-chip0-t{padding-left:8px}\\n.afl-tmain{padding-bottom:10px}\\n.afl-big{margin:10px 0 8px}\\n.afl-tacts{padding-top:10px;min-height:50px}\\n.afl-cap{margin-top:6px;min-height:20px;font-size:15px}\\n@media (max-height:820px){.afl-pri,.afl-sec,.afl--teach .afl-step,.afl--teach .afl-in{min-height:44px}.afl-big{font-size:26px;margin:8px 0 6px}.afl-tbar{padding-bottom:8px}}\\n/* ---- round 5 (2026-11-13): spread the rule list, exam words at the top, nothing squashed ---- */\\n.afl-tbar,.afl-big,.afl-rule,.afl-tacts,.afl-cap{flex:none}\\n.afl--teach .afl-side{gap:clamp(3px,.7vh,8px);padding:18px 16px 18px}\\n.afl--teach .afl-li{flex:1 1 0;min-height:36px;max-height:60px;font-size:clamp(14px,1.75vh,17px);font-weight:600;padding:4px 14px;line-height:1.2}\\n.afl--teach .afl-tag{font-size:clamp(11px,1.3vh,13px)}\\n.afl--teach .afl-rh{flex:none;font-size:clamp(11px,1.35vh,13px);margin:clamp(8px,1.6vh,18px) 4px 4px}\\n.afl--teach .afl-rh:first-child{margin-top:0}\\n.afl-rule{display:flex;flex-direction:column;align-items:center;gap:8px;margin:0 auto 10px;max-width:920px;text-align:center}\\n.afl-rule:empty{display:none}\\n.afl-rule p{margin:0;padding:10px 18px;border-radius:14px;font-size:clamp(17px,2.1vh,22px);font-weight:600;line-height:1.35;animation:afl-rise .22s ease-out}\\n.afl-rule-r{background:#1E3550;color:#F2F6FB;border:1px solid #2F5578}\\n.afl-rule-t{background:#3A2620;color:#FFE3D6;border:1px solid #6B3E2E}\\n.afl-rule-k{display:block;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;opacity:.75;margin-bottom:3px}\\n.afl--teach:not(.afl--dark) .afl-rule-r{background:#E7F0F9;color:#12243A;border-color:#C5D8EC}\\n.afl--teach:not(.afl--dark) .afl-rule-t{background:#FDF0EA;color:#5A2A12;border-color:#F2C9B5}\\n.afl-cap{font-size:16px;color:#C9D6E6}\\n.afl-cap:empty{display:none}\\n@media (max-height:700px){.afl-board{min-height:110px}.afl-tmain{padding-top:10px}.afl-big{font-size:24px;margin:6px 0 6px}.afl-tbar{padding-bottom:6px}.afl-tacts{padding-top:8px}.afl-beq p{font-size:19px}}\\n/* ---- round 5b (GPT layout review 2026-11-13) ---- */\\n.afl-rh{display:flex;align-items:center;justify-content:space-between;width:100%;border:0;background:transparent;text-align:left;cursor:pointer;padding:0;font-family:inherit}\\n.afl-rh .afl-ic{width:14px;height:14px;opacity:.8}\\n.afl-rh.is-cur{cursor:default}\\n@media (max-width:1000px){.afl-rh{display:none}}\\n.afl--teach .afl-li{font-size:16px;font-weight:600;min-height:44px;max-height:58px;padding:8px 14px;line-height:1.2}\\n.afl--teach .afl-rh{font-size:12px;color:#8A9BB5}\\n.afl--teach .afl-rh:not(.is-cur):hover{color:#E8EEF6}\\n@media (max-height:760px){\\n  .afl--teach .afl-li.is-other{display:none}\\n  .afl--teach .afl-rh:not(.is-cur){margin:10px 4px 0;padding:10px 12px;border:1px solid #24324A;border-radius:12px;background:#121D31;color:#C9D6E6;font-size:12.5px}\\n  .afl--teach .afl-li{font-size:15px;min-height:40px;padding:6px 14px}\\n}\\n.afl-big{font-size:clamp(26px,2.1vw,38px);line-height:1.1;margin:10px 0 8px}\\n.afl-rule{width:min(720px,calc(100% - 32px));margin:4px auto 10px}\\n.afl-rule p{width:100%;box-sizing:border-box;padding:10px 20px;font-size:18px;line-height:24px}\\n.afl--teach .afl-stage{padding:10px 14px}\\n@media (max-height:700px){\\n  .afl-big{font-size:26px;margin:6px 0 4px}\\n  .afl-rule p{font-size:16px;line-height:21px;padding:8px 16px}\\n  .afl-rule{margin:2px auto 8px}\\n  .afl-cap{display:none}\\n  .afl--teach .afl-stage{padding:6px 10px}\\n}\\n@media (max-height:980px){\\n  .afl--teach .afl-li.is-other{display:none}\\n  .afl--teach .afl-rh:not(.is-cur){margin:10px 4px 0;padding:10px 12px;border:1px solid #24324A;border-radius:12px;background:#121D31;color:#C9D6E6;font-size:12.5px}\\n}\\n@media (max-height:620px){\\n  .afl--teach .afl-side{padding:12px 12px;gap:4px}\\n  .afl--teach .afl-li{font-size:14px;min-height:34px;padding:5px 12px;line-height:1.15}\\n  .afl--teach .afl-tag{font-size:10.5px}\\n  .afl--teach .afl-rh:not(.is-cur){margin-top:6px;padding:7px 12px}\\n}\\n.afl--teach .afl-rh{display:flex}\\n.afl--teach .afl-li{max-height:52px}\\n@media (max-height:620px){\\n  .afl--teach .afl-side{gap:3px;padding:10px 12px}\\n  .afl--teach .afl-li{min-height:30px;padding:4px 12px;font-size:13.5px}\\n  .afl--teach .afl-rh.is-cur{margin:0 4px 2px}\\n  .afl--teach .afl-rh:not(.is-cur){margin-top:5px;padding:6px 10px}\\n}\\n.afl--teach .afl-li{max-height:50px}\\n.afl--teach .afl-side{gap:clamp(3px,.55vh,6px)}\\n/* ---- round 6 (2026-11-13): fact + New position in the top bar, side panel beside the board ---- */\\n.afl-tbar{display:flex;align-items:center;gap:12px;flex-wrap:nowrap;padding-bottom:12px}\\n.afl-fact{flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:0 18px;border-radius:14px;border:2px solid #F07B4A;background:transparent;color:#FFB59A;font:700 16px/1 inherit;font-family:inherit;cursor:pointer;white-space:nowrap}\\n.afl-fact:hover{background:rgba(240,123,74,.12)}\\n.afl-fact.is-on{flex:1 1 auto;min-width:0;white-space:normal;text-align:left;gap:14px;padding:8px 18px;border:1px solid #2F5578;background:#1E3550;color:#F2F6FB;animation:afl-in .25s ease-out}\\n.afl-fact-k{flex:none;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#8FB7DE}\\n.afl-fact-t{font-size:clamp(16px,1.25vw,20px);font-weight:600;line-height:1.3}\\n.afl-tright{flex:none;margin-left:auto;display:flex;align-items:center;gap:8px}\\n.afl-npos{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:0 18px;border-radius:14px;border:0;background:#F07B4A;color:#fff;font-family:inherit;font-size:15.5px;font-weight:700;cursor:pointer;white-space:nowrap}\\n.afl-npos:active,.afl-fact:active{transform:scale(.96)}\\n.afl-tbody{flex:1 1 auto;min-height:0;display:flex;gap:16px;padding-top:14px}\\n.afl-tbody .afl-board{flex:1 1 auto;min-width:0;min-height:0}\\n.afl-tside{flex:0 0 clamp(270px,25vw,400px);min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:14px;padding:20px 18px;box-sizing:border-box;border-radius:18px;border:1px solid #1E2A40;background:#111B2C}\\n.afl-tside .afl-big{flex:none;margin:0;text-align:left;font-size:clamp(22px,1.75vw,32px);line-height:1.15}\\n.afl-tside .afl-big-ig{display:block;margin:8px 0 0;font-size:13px}\\n.afl-tside .afl-beq{flex:none;align-items:flex-start;gap:4px;padding:0}\\n.afl-tside .afl-beq p{font-size:clamp(20px,1.6vw,26px);line-height:1.25}\\n.afl-tside .afl-beq:empty{display:none}\\n.afl-tside .afl-tacts{flex:none;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;padding:0;min-height:0}\\n.afl-tside .afl-tacts:empty{display:none}\\n.afl-modes{display:grid;grid-template-columns:1fr 1fr;gap:6px}\\n.afl-modes .afl-lv{min-height:42px;border-radius:12px;font-size:14px;padding:0 8px;white-space:normal;line-height:1.1}\\n.afl-modes .afl-lv:last-child:nth-child(odd){grid-column:1 / -1}\\n.afl-tside .afl-step{justify-content:space-between;width:100%;box-sizing:border-box}\\n.afl-tside .afl-step span{flex:1;min-width:0}\\n.afl-row2{display:flex;gap:8px}\\n.afl-row2 .afl-sec{flex:1 1 0;justify-content:center;padding:0 10px}\\n.afl-tside .afl-pri{justify-content:center}\\n.afl-qrow{display:flex;align-items:center;gap:8px}\\n.afl--teach .afl-qrow .afl-in{flex:1 1 auto;min-width:0}\\n.afl-tside .afl-ok,.afl-tside .afl-ans{margin:0;font-size:22px;font-weight:800}\\n.afl-tside .afl-rule{width:auto;max-width:none;margin:0;align-items:stretch;text-align:left}\\n.afl-tside .afl-rule p{font-size:16px;line-height:22px;padding:10px 14px}\\n.afl-tside .afl-cap{margin:auto 0 0;text-align:left;font-size:15px;min-height:0}\\n.afl--teach:not(.afl--dark) .afl-tside{background:#fff;border-color:#D3DCE7}\\n.afl--teach:not(.afl--dark) .afl-fact{color:#C2491A}\\n.afl--teach:not(.afl--dark) .afl-fact.is-on{background:#E7F0F9;border-color:#C5D8EC;color:#12243A}\\n.afl--teach:not(.afl--dark) .afl-fact-k{color:#2E5E8C}\\n@media (max-width:1180px){.afl-tside{flex-basis:270px;padding:16px 14px}.afl-npos,.afl-fact{padding:0 14px}.afl-fact.is-on{padding:6px 14px;gap:10px}.afl-fact-k{display:none}}\\n@media (max-height:760px){\\n  .afl-tbody{padding-top:10px;gap:12px}\\n  .afl-tbar{padding-bottom:10px}\\n  .afl-tside{gap:10px;padding:14px}\\n  .afl-tside .afl-big{font-size:22px}\\n  .afl-tside .afl-beq p{font-size:20px}\\n  .afl-modes .afl-lv{min-height:36px;font-size:13.5px}\\n  .afl-tside .afl-pri,.afl-tside .afl-sec,.afl-tside .afl-step,.afl-tside .afl-in{min-height:42px}\\n  .afl-tside .afl-sb{width:36px;height:36px}\\n  .afl-fact,.afl-npos{min-height:42px}\\n  .afl-fact-t{font-size:16px;line-height:1.25}\\n}\\n@media (max-width:899px){\\n  .afl-tbody{flex-direction:column}\\n  .afl-tside{flex:none;flex-direction:row;flex-wrap:wrap;align-items:center;padding:12px}\\n  .afl-npos span{display:none}\\n  .afl-npos{padding:0 12px}\\n}\\n.afl .afl-fact{color:#fff;background:#1E3550;border:2px solid #5B95CC;font-size:16px;font-weight:700}\\n.afl .afl-fact:hover{background:#25406A}\\n.afl .afl-fact.is-on{border:1px solid #2F5578;background:#1E3550;color:#F2F6FB;font-weight:600}\\n.afl .afl-fact .afl-ic{color:#8FB7DE}\\n.afl--teach:not(.afl--dark) .afl-fact{background:#E7F0F9;border-color:#2E5E8C;color:#12243A}\\n.afl-tside .afl-step span{font-size:16px;color:#E8EEF6}\\n.afl-tside .afl-step span b{font-size:20px}\\n.afl-tside .afl-sb{background:#2A3A55;color:#fff}\\n.afl--teach .afl-qrow .afl-unit{font-size:24px;font-weight:700;color:#E8EEF6}\\n@media (max-width:1180px){.afl-tsb .afl-ic{display:none}}\\n\";\nfunction aflCss() {\n  if (document.getElementById('afl-css')) return;\n  var st = document.createElement('style'); st.id = 'afl-css'; st.textContent = AFL_CSS; document.head.appendChild(st);\n}\nwindow.AngleLab = {\n  version: \"44498561\",\n  mount: function (el, opts) { if (!opts || (!opts.noCss && !opts.shadow)) aflCss(); return aflMount(el, opts); },\n  theorems: function () { return TH.map(function (t) { var g = GROUPS.filter(function (x) { return x.key === t.g; })[0]; return { id: t.id, name: t.name, group: t.g, groupName: g ? g.label : '', igcse: !!t.igcse }; }); }\n};\n})();\n"],
  "mappings": "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",
  "names": ["R", "act", "on"]
}
