{
 "library": "CWF Interactivity Library",
 "version": "1.0",
 "source_deck": "CWF_KES003_Courseware_Factory_deck.html",
 "source_sha256": "cf03f0baf3dd038badd08fa5e2158f9cb55d5cfaedfd3296f8f6a13d6ec9f85f",
 "engine": {
  "stage": "1920x1080 fixed, transform scale",
  "nav": [
   "ArrowRight/Down",
   "Space",
   "PageDown",
   "ArrowLeft/Up",
   "PageUp",
   "Home",
   "End",
   "wheel(650ms lock)",
   "swipe>60px",
   "buttons"
  ],
  "input_guard": "INPUT/BUTTON/SELECT/TEXTAREA skip arrow+space nav; touch on range/.chip/.seg2 skips swipe",
  "entry": [
   "scan 1.4s",
   "[data-scram] scramble 650ms +120ms each",
   "[data-type] typewriter",
   "reveal .d1-.d9 stagger 120ms"
  ],
  "special_cues": {
   "0": "stamp+shake@1020",
   "23": "riser@300",
   "28": "success@900"
  },
  "reset": "clearCues -> strip state classes -> resetFns.get(slide)()",
  "inspect": "[data-insp] or key I -> slide.inspect",
  "mute": "key M, localStorage rlee-mute",
  "edit": "hotzone/key E, Ctrl+S download",
  "reduced_motion": "animations 0.01ms, no scan"
 },
 "sfx_semantics": {
  "scan": "slide opened",
  "blip": "progress step; rising pitch = further in sequence",
  "tick": "one unit counted",
  "unlock": "pass/open/accept",
  "lock": "reject/hold/lock",
  "stamp+shake": "verdict/seal",
  "whoosh": "object relocates",
  "riser": "tension before boundary/observation",
  "success": "narrative closure",
  "key": "typed character"
 },
 "color_semantics": {
  "cyan": "governed/measured/machine truth",
  "lime": "verified/accepted",
  "amber": "human judgment/candidate/waiting",
  "red": "boundary/forbidden/HOLD",
  "grey": "legacy/historical"
 },
 "reset_contract": {
  "slide_classes_stripped": [
   "on",
   "var",
   "open",
   "locked",
   "crossed",
   "ran",
   "inspect"
  ],
  "element_classes_stripped": [
   "lit",
   "done",
   "cur",
   "rej",
   "gone",
   "fed",
   "busy",
   "run",
   "hold",
   "deny",
   "seen",
   "sel",
   "go",
   "flash",
   "swap",
   "hover",
   "sick"
  ],
  "structural_classes_never_stripped": [
   "new"
  ],
  "intentional_default_state": {
   "11": ".track div.lit (candidate)",
   "19": ".list div.cur",
   "28": ".ph.p0.cur"
  },
  "timers": "all via cue(); clearCues() on show()"
 },
 "primitives": {
  "P-TOGGLE": {
   "state": "one active value",
   "trigger": ".seg button[data-m] | tabs",
   "feedback": [
    "button .on",
    "target .on or slide class"
   ],
   "sfx": [
    "blip(700)",
    "lock/unlock when meaning is lock-vs-open"
   ],
   "reset": "segSet(default)+restore classes"
  },
  "P-STEPPER": {
   "state": "index i (-1 start); <i done, =i lit/cur",
   "trigger": "NEXT button or direct node click",
   "feedback": [
    "ascending blip ladder",
    "last step stamp+shake or unlock"
   ],
   "sfx": [
    "blip(base+i*step)",
    "stamp",
    "unlock"
   ],
   "reset": "i=-1;paint()"
  },
  "P-HOTSPOT": {
   "state": "hotspot .seen (persistent), panel .on",
   "trigger": "button.hs[data-h] | .art[data-l]",
   "feedback": [
    "pulse until seen",
    "panel text swap"
   ],
   "sfx": [
    "blip(640+i*100)"
   ],
   "reset": "panel default text, .seen removed"
  },
  "P-RUN": {
   "state": "done flag / slide class (.on .locked .ran .crossed)",
   "trigger": ".ctl click; label -> '… ✓'",
   "feedback": [
    "cue chain 70–180ms/unit",
    "tick per counted unit",
    "unlock at end"
   ],
   "sfx": [
    "tick",
    "unlock",
    "lock"
   ],
   "reset": "flag=false, label, counters"
  },
  "P-TRACE": {
   "state": ".nd.lit sequential; destination .lit.last",
   "trigger": "TRACE button",
   "feedback": [
    "cue(200+i*180)",
    "destination value text"
   ],
   "sfx": [
    "blip(420+i*40)",
    "unlock"
   ],
   "reset": "remove .lit, destination text default"
  },
  "P-SCRUB": {
   "state": "range value -> set() on input",
   "trigger": "input[type=range]",
   "feedback": [
    "discrete (svg .on, table) or continuous (clip-path, marker %)"
   ],
   "sfx": [
    "tick"
   ],
   "reset": "r.value=default;set()",
   "guard": "E3 arrow-key nav guard required"
  },
  "P-COLLAPSE": {
   "state": "on boolean; scatter[i] vs tgt[i] coords",
   "trigger": "COLLAPSE<->EXPAND button",
   "feedback": [
    "transition left/top 1.1s",
    "cluster labels fade",
    "counter N<->K"
   ],
   "sfx": [
    "whoosh",
    "tick"
   ],
   "reset": "on=false;apply()"
  },
  "P-FEED": {
   "state": "input .fed (permanent), machine .busy (temp), output .on",
   "trigger": "click input block",
   "feedback": [
    "clone .mover.run feedRun 1.6s",
    "coreThrob @700",
    "output @1600"
   ],
   "sfx": [
    "whoosh",
    "tick",
    "blip(760)"
   ],
   "reset": "generic class strip"
  },
  "P-GATE": {
   "state": "chip .rej (720ms) | .gone; wall .rej | .ok",
   "trigger": "click chip OR HTML5 drag->drop on wall (same send())",
   "feedback": [
    "chipBounce+wallHit+shake on reject",
    "chip exits, wall lime, .pc.on on accept"
   ],
   "sfx": [
    "lock",
    "unlock"
   ],
   "reset": "wall clean, passed empty, verdict default"
  },
  "P-REJECT-ALL": {
   "state": "counter n; each option .rej permanent",
   "trigger": "click option",
   "feedback": [
    "wallHit + reason text",
    "n==total -> amber stamp @400ms"
   ],
   "sfx": [
    "lock",
    "stamp+shake"
   ],
   "reset": "n=0, stamp removed"
  },
  "P-HOLD": {
   "state": "lane .hold toggle per lane",
   "trigger": "HOLD/RELEASE per lane",
   "feedback": [
    "animation-play-state paused on that lane only",
    "red banner",
    "counters"
   ],
   "sfx": [
    "lock+shake",
    "unlock"
   ],
   "reset": "labels, recount"
  },
  "P-PARK": {
   "state": "slide .open",
   "trigger": "PARK button OR click/Enter on block (role=button)",
   "feedback": [
    "block moves 1s to bay red->amber",
    "road traffic running",
    "status @700ms"
   ],
   "sfx": [
    "whoosh",
    "unlock"
   ],
   "reset": "status default"
  },
  "P-REMOVE": {
   "state": "segment .gone (flex:0); legend .gone",
   "trigger": "click removable segment (fixed segment not a button)",
   "feedback": [
    "flex transition .8s",
    "total recount from data-w",
    "amber->lime when only fixed remains"
   ],
   "sfx": [
    "whoosh",
    "unlock"
   ],
   "reset": "tot()"
  },
  "P-GATED-UNLOCK": {
   "state": "slide .ran; secondary buttons .g2 -> .a2",
   "trigger": "RUN primary (2.4s); secondary before -> .deny 700ms",
   "feedback": [
    "progress bar",
    "challenger unlock",
    "deny shake + OBSERVE FIRST"
   ],
   "sfx": [
    "riser",
    "unlock",
    "lock"
   ],
   "reset": ".ran removed, buttons .g2, status text"
  },
  "P-COMPARE-SLIDER": {
   "state": "0–100 -> clip-path inset(0 0 0 X%) + divider left X% (X=100-v)",
   "trigger": "input[type=range] default 50",
   "feedback": [
    "top layer revealed toward AFTER"
   ],
   "sfx": [],
   "reset": "value 50"
  },
  "P-LEVER": {
   "state": "slide .crossed",
   "trigger": "button.lever (arm -40deg -> +40deg)",
   "feedback": [
    "left side dims + packets pause + FROZEN",
    "right side lights + figure enters 1.2s"
   ],
   "sfx": [
    "lock+shake",
    "unlock @700"
   ],
   "reset": "label default"
  }
 },
 "slides": [
  {
   "n": 1,
   "title": "Courseware Factory",
   "primitive": "P-RUN",
   "trigger": "#s01start",
   "state": [
    ".s01.on"
   ],
   "sfx": [
    "unlock",
    "lock"
   ],
   "timing": "immediate"
  },
  {
   "n": 2,
   "title": "27 Documents. One Story.",
   "primitive": "P-COLLAPSE",
   "trigger": "#s02btn",
   "state": [
    ".s02.on",
    ".doc.L1/L2/L3",
    ".clus"
   ],
   "sfx": [
    "whoosh",
    "tick"
   ],
   "timing": "1.1s"
  },
  {
   "n": 3,
   "title": "The Staircase",
   "primitive": "P-STEPPER",
   "trigger": "g.step[data-i]",
   "state": [
    ".on",
    ".done"
   ],
   "sfx": [
    "blip(520+i*110)"
   ],
   "timing": "—"
  },
  {
   "n": 4,
   "title": "The Mindset Shift",
   "primitive": "P-TOGGLE",
   "trigger": "#s04seg",
   "state": [
    ".mp.on"
   ],
   "sfx": [
    "blip(700)"
   ],
   "timing": ".5s"
  },
  {
   "n": 5,
   "title": "What Makes a Factory a Factory?",
   "primitive": "P-FEED",
   "trigger": ".blk[data-t]",
   "state": [
    ".fed",
    ".busy",
    ".out.on"
   ],
   "sfx": [
    "whoosh",
    "tick",
    "blip(760)"
   ],
   "timing": "700/1600ms"
  },
  {
   "n": 6,
   "title": "Evidence ≠ Authority",
   "primitive": "P-GATE",
   "trigger": ".chip[data-k] | drop #s06wall",
   "state": [
    ".rej",
    ".gone",
    ".wall.ok"
   ],
   "sfx": [
    "lock+shake",
    "unlock"
   ],
   "timing": "720ms"
  },
  {
   "n": 7,
   "title": "One Human Sentence → Runtime",
   "primitive": "P-TRACE",
   "trigger": "#s07trace",
   "state": [
    ".nd.lit",
    ".rn.lit"
   ],
   "sfx": [
    "blip(420+i*40)",
    "unlock"
   ],
   "timing": "200+i*180ms"
  },
  {
   "n": 8,
   "title": "The Cabinet Problem",
   "primitive": "P-REJECT-ALL",
   "trigger": ".drw",
   "state": [
    ".rej",
    "#s08gap.on"
   ],
   "sfx": [
    "lock",
    "stamp+shake"
   ],
   "timing": "+400ms"
  },
  {
   "n": 9,
   "title": "Common Contract First",
   "primitive": "P-TOGGLE",
   "trigger": "#s09seg",
   "state": [
    ".s09.var"
   ],
   "sfx": [
    "unlock",
    "lock"
   ],
   "timing": ".9s"
  },
  {
   "n": 10,
   "title": "Two Ledgers",
   "primitive": "P-HOTSPOT",
   "trigger": ".art[data-l]",
   "state": [
    ".sel",
    ".ldg.lit"
   ],
   "sfx": [
    "blip(680)",
    "lock"
   ],
   "timing": ".5s"
  },
  {
   "n": 11,
   "title": "Candidate ≠ Ruling ≠ Write",
   "primitive": "P-STEPPER",
   "trigger": "#s11next",
   "state": [
    ".stn.lit",
    ".stn.done",
    ".track div.lit"
   ],
   "sfx": [
    "blip(520+i*110)",
    "stamp+shake"
   ],
   "timing": "—"
  },
  {
   "n": 12,
   "title": "504 → 518",
   "primitive": "P-RUN",
   "trigger": "#s12btn",
   "state": [
    ".s12.locked",
    ".rw.new.on"
   ],
   "sfx": [
    "lock",
    "tick",
    "unlock"
   ],
   "timing": "400+i*70ms"
  },
  {
   "n": 13,
   "title": "HOLD Is a Feature",
   "primitive": "P-HOLD",
   "trigger": ".hb",
   "state": [
    ".lane.hold"
   ],
   "sfx": [
    "lock+shake",
    "unlock"
   ],
   "timing": "—"
  },
  {
   "n": 14,
   "title": "Parked ≠ Cancelled",
   "primitive": "P-PARK",
   "trigger": "#s14park | #s14blk",
   "state": [
    ".s14.open"
   ],
   "sfx": [
    "whoosh",
    "unlock"
   ],
   "timing": "1s/700ms"
  },
  {
   "n": 15,
   "title": "Complexity Goes Behind the Glass",
   "primitive": "P-COMPARE-SLIDER",
   "trigger": "#s15rng",
   "state": [
    "clip-path",
    "#s15div.left"
   ],
   "sfx": [],
   "timing": "live"
  },
  {
   "n": 16,
   "title": "One Governed Work Item",
   "primitive": "P-TOGGLE",
   "trigger": "#s16tabs button",
   "state": [
    ".pv.on"
   ],
   "sfx": [
    "blip(600+p*90)"
   ],
   "timing": ".4s"
  },
  {
   "n": 17,
   "title": "Same Player. Different Questions.",
   "primitive": "P-TOGGLE",
   "trigger": "#s17seg",
   "state": [
    ".side.on"
   ],
   "sfx": [
    "blip(700)"
   ],
   "timing": ".4s"
  },
  {
   "n": 18,
   "title": "S13 Shared Example",
   "primitive": "P-HOTSPOT",
   "trigger": ".hs[data-h]",
   "state": [
    ".seen",
    ".pop.on"
   ],
   "sfx": [
    "blip(640+i*100)"
   ],
   "timing": "—"
  },
  {
   "n": 19,
   "title": "T1 ≠ T2 Player Products",
   "primitive": "P-TOGGLE",
   "trigger": "#s19seg",
   "state": [
    ".sc.swap",
    ".shell.flash"
   ],
   "sfx": [
    "blip(700)"
   ],
   "timing": "260/700ms"
  },
  {
   "n": 20,
   "title": "Legacy → P2 → P3",
   "primitive": "P-SCRUB",
   "trigger": "#s20rng",
   "state": [
    "svg.on",
    ".v.ok/.no/.pt"
   ],
   "sfx": [
    "tick"
   ],
   "timing": ".45s"
  },
  {
   "n": 21,
   "title": "Production Byte Journey",
   "primitive": "P-STEPPER",
   "trigger": ".gt",
   "state": [
    ".cur",
    ".done",
    ".asset.fin",
    "#s21fill"
   ],
   "sfx": [
    "blip(500+i*70)",
    "unlock"
   ],
   "timing": ".6s"
  },
  {
   "n": 22,
   "title": "PL01 Pays the Calibration Tax",
   "primitive": "P-RUN",
   "trigger": "#s22lock",
   "state": [
    ".s22.locked"
   ],
   "sfx": [
    "unlock",
    "tick"
   ],
   "timing": "200+i*120ms"
  },
  {
   "n": 23,
   "title": "Parallel, Not PL-by-PL",
   "primitive": "P-TOGGLE",
   "trigger": "#s23seg",
   "state": [
    "bar left/width",
    "#s23end"
   ],
   "sfx": [
    "unlock",
    "lock"
   ],
   "timing": "1s"
  },
  {
   "n": 24,
   "title": "9 September: Cross the Boundary",
   "primitive": "P-LEVER",
   "trigger": "#s24lever",
   "state": [
    ".s24.crossed"
   ],
   "sfx": [
    "lock+shake",
    "unlock"
   ],
   "timing": "1.2s"
  },
  {
   "n": 25,
   "title": "Control Before Challenger",
   "primitive": "P-GATED-UNLOCK",
   "trigger": "#s25run | .chb",
   "state": [
    ".s25.ran",
    ".ch.deny",
    ".ch.sel"
   ],
   "sfx": [
    "riser",
    "unlock",
    "lock"
   ],
   "timing": "2.4s"
  },
  {
   "n": 26,
   "title": "Tomorrow's Operating Lock",
   "primitive": "P-STEPPER",
   "trigger": "#s26next | g.st",
   "state": [
    ".cur",
    ".done",
    "arc stroke-dasharray"
   ],
   "sfx": [
    "blip(500+j*70)",
    "unlock"
   ],
   "timing": ".7s"
  },
  {
   "n": 27,
   "title": "What Actually Makes Delivery Slow?",
   "primitive": "P-REMOVE",
   "trigger": ".seg2.fr",
   "state": [
    ".gone"
   ],
   "sfx": [
    "whoosh",
    "unlock"
   ],
   "timing": ".8s"
  },
  {
   "n": 28,
   "title": "K1 Convergence",
   "primitive": "P-SCRUB",
   "trigger": "#s28rng",
   "state": [
    ".ph.cur",
    ".ph.past",
    "#s28mk",
    "#s28fill"
   ],
   "sfx": [
    "tick"
   ],
   "timing": "live"
  }
 ]
}