// Query2Box pipeline: projection -> intersection -> scoring.
// Compile: typst compile query2box_pipeline.typ query2box_pipeline.png --ppi 500 --root ..
#import "../_diagram-style.typ": *
#set page(width: 780pt, height: 185pt, margin: 14pt)
#set text(font: base-font, size: label-size)

#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge

#align(center)[
  #text(title-size, weight: "bold", fill: fg)[Query2Box pipeline] \
  #text(label-size, fill: fg2, style: "italic")["Where did Canadian Turing Award winners graduate?"]

  #v(0.8em)

  #diagram(
    spacing: (5.5em, 3em),
    node-corner-radius: 3pt,

    // Row 0: TuringAward -> Winners
    node((0, 0), text(label-size, fill: amber.text)[TuringAward], stroke: 1.2pt + amber.stroke, fill: amber.fill, shape: fletcher.shapes.pill),
    edge((0, 0), (1, 0), "-|>", label: text(annot-size, fill: fg2, style: "italic")[project: Win], label-side: left),
    node((1, 0), text(label-size, weight: "bold", fill: amber.text)[Winners], stroke: 1.2pt + amber.stroke, fill: amber.fill),

    // Row 1: Canada -> Canadians
    node((0, 1), text(label-size, fill: green.text)[Canada], stroke: 1.2pt + green.stroke, fill: green.fill, shape: fletcher.shapes.pill),
    edge((0, 1), (1, 1), "-|>", label: text(annot-size, fill: fg2, style: "italic")[project: Citizen], label-side: left),
    node((1, 1), text(label-size, weight: "bold", fill: green.text)[Canadians], stroke: 1.2pt + green.stroke, fill: green.fill),

    // Intersect edges -> center
    edge((1, 0), (2, 0.5), "-|>"),
    edge((1, 1), (2, 0.5), "-|>"),

    // Intersection node
    node((2, 0.5), text(label-size, weight: "bold", fill: purple.text)[Canadian\ Turing winners], stroke: 1.2pt + purple.stroke, fill: purple.fill),

    // Intersect label
    node((1.5, 0.1), text(annot-size, fill: fg2, style: "italic")[intersect], stroke: none),

    // Project to answer
    edge((2, 0.5), (3, 0.5), "-|>", label: text(annot-size, fill: fg2, style: "italic")[project: Graduate], label-side: left, label-pos: 0.85, label-sep: 4pt),

    // Answer box
    node((3, 0.5), text(label-size, weight: "bold", fill: pink.text)[Universities], stroke: 1.2pt + pink.stroke, fill: pink.fill),

    // Score annotations
    node((3.8, 0.15), text(label-size, fill: green.text)[#sym.bullet answers ($d_"in"$ small)], stroke: none),
    node((3.8, 0.85), text(label-size, fill: red.text)[#sym.bullet far ($d_"out"$ large)], stroke: none),
  )
]
