{
  "schemaVersion": "1.0.0",
  "readme": "",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "src/audio.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Defines a single sound sample for use within a `<game-audio>` parent.\nSupports synthesized tones (marimba, sine, etc.), noise bursts,\nscale-based scoring sounds, and haptic vibration. Trigger-matched\nby the parent audio element.",
          "name": "GameSample",
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ name: { type: \"string\" }, trigger: { type: \"string\" }, type: { type: \"string?\" }, gain: { type: \"number\", default: 0.35 }, duration: { type: \"string?\" }, notes: { type: \"string?\" }, \"noise-decay\": { type: \"number?\" }, \"noise-filter\": { type: \"string?\" }, \"noise-frequency\": { type: \"number?\" }, vibrate: { type: \"string\", default: \"auto\" }, scale: { type: \"string?\" }, \"scale-root\": { type: \"number\", default: 220 }, \"scale-spacing\": { type: \"number\", default: 0.1 }, value: { type: \"string?\" }, }"
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag",
                  "default": "\"game-sample\""
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#vibrate",
              "privacy": "private",
              "parameters": [
                {
                  "name": "pattern"
                }
              ]
            },
            {
              "kind": "method",
              "name": "play",
              "parameters": [
                {
                  "name": "state",
                  "description": "Game state snapshot. Required when `scale` is\nset — reads `state.roundScores`, `state.rounds`, and `state.scoreOrder`\nto compute note count and pitch proportionally to the last round's score.\nOmit (or pass null) for fixed-note samples.",
                  "optional": true,
                  "type": {
                    "text": "object"
                  }
                }
              ],
              "description": "Play this sample immediately."
            },
            {
              "kind": "method",
              "name": "#playScale",
              "privacy": "private",
              "parameters": [
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "field",
              "name": "name",
              "type": {
                "text": "string"
              },
              "attribute": "name"
            },
            {
              "kind": "field",
              "name": "trigger",
              "type": {
                "text": "string"
              },
              "attribute": "trigger"
            },
            {
              "kind": "field",
              "name": "type",
              "type": {
                "text": "string | null"
              },
              "attribute": "type"
            },
            {
              "kind": "field",
              "name": "gain",
              "type": {
                "text": "number"
              },
              "attribute": "gain",
              "default": "0.35"
            },
            {
              "kind": "field",
              "name": "duration",
              "type": {
                "text": "string | null"
              },
              "attribute": "duration"
            },
            {
              "kind": "field",
              "name": "notes",
              "type": {
                "text": "string | null"
              },
              "attribute": "notes"
            },
            {
              "kind": "field",
              "name": "noiseDecay",
              "type": {
                "text": "string"
              },
              "attribute": "noise-decay"
            },
            {
              "kind": "field",
              "name": "noiseFilter",
              "type": {
                "text": "string | null"
              },
              "attribute": "noise-filter"
            },
            {
              "kind": "field",
              "name": "noiseFrequency",
              "type": {
                "text": "string"
              },
              "attribute": "noise-frequency"
            },
            {
              "kind": "field",
              "name": "vibrate",
              "type": {
                "text": "string"
              },
              "attribute": "vibrate",
              "default": "auto"
            },
            {
              "kind": "field",
              "name": "scale",
              "type": {
                "text": "string | null"
              },
              "attribute": "scale"
            },
            {
              "kind": "field",
              "name": "scaleRoot",
              "type": {
                "text": "number"
              },
              "attribute": "scale-root",
              "default": "220"
            },
            {
              "kind": "field",
              "name": "scaleSpacing",
              "type": {
                "text": "number"
              },
              "attribute": "scale-spacing",
              "default": "0.1"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string | null"
              },
              "attribute": "value"
            }
          ],
          "superclass": {
            "name": "HTMLElement"
          },
          "summary": "Individual sound/vibration sample definition",
          "tagName": "game-sample",
          "customElement": true,
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name"
            },
            {
              "name": "trigger",
              "type": {
                "text": "string"
              },
              "fieldName": "trigger"
            },
            {
              "name": "type",
              "type": {
                "text": "string | null"
              },
              "fieldName": "type"
            },
            {
              "name": "gain",
              "type": {
                "text": "number"
              },
              "fieldName": "gain",
              "default": "0.35"
            },
            {
              "name": "duration",
              "type": {
                "text": "string | null"
              },
              "fieldName": "duration"
            },
            {
              "name": "notes",
              "type": {
                "text": "string | null"
              },
              "fieldName": "notes"
            },
            {
              "name": "noise-decay",
              "type": {
                "text": "string"
              },
              "fieldName": "noiseDecay"
            },
            {
              "name": "noise-filter",
              "type": {
                "text": "string | null"
              },
              "fieldName": "noiseFilter"
            },
            {
              "name": "noise-frequency",
              "type": {
                "text": "string"
              },
              "fieldName": "noiseFrequency"
            },
            {
              "name": "vibrate",
              "type": {
                "text": "string"
              },
              "fieldName": "vibrate",
              "default": "auto"
            },
            {
              "name": "scale",
              "type": {
                "text": "string | null"
              },
              "fieldName": "scale"
            },
            {
              "name": "scale-root",
              "type": {
                "text": "number"
              },
              "fieldName": "scaleRoot",
              "default": "220"
            },
            {
              "name": "scale-spacing",
              "type": {
                "text": "number"
              },
              "fieldName": "scaleSpacing",
              "default": "0.1"
            },
            {
              "name": "value",
              "type": {
                "text": "string | null"
              },
              "fieldName": "value"
            }
          ]
        },
        {
          "kind": "class",
          "description": "Audio controller that manages sound playback and haptic feedback.\nContains `<game-sample>` children and plays them in response to\ngame triggers (pass, fail, timeout, countdown, etc.). Respects\nmute state and volume level.",
          "name": "GameAudio",
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ muted: { type: \"boolean\" }, vibration: { type: \"boolean\" }, volume: { type: \"number\", default: 1 }, }"
            },
            {
              "kind": "method",
              "name": "play",
              "parameters": [
                {
                  "name": "name",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "state",
                  "description": "Passed to `GameSample.play()`. Required for\nscale-mode samples; see `GameSample.play()` for details.",
                  "optional": true,
                  "type": {
                    "text": "object"
                  }
                }
              ],
              "description": "Manually play a named sample by its `name` attribute."
            },
            {
              "kind": "method",
              "name": "timeoutCallback",
              "parameters": [
                {
                  "name": "event"
                }
              ]
            },
            {
              "kind": "method",
              "name": "triggerCallback",
              "parameters": [
                {
                  "name": "triggerName"
                },
                {
                  "name": "event"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#playSample",
              "privacy": "private",
              "parameters": [
                {
                  "name": "el"
                },
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "field",
              "name": "muted",
              "type": {
                "text": "boolean"
              },
              "attribute": "muted"
            },
            {
              "kind": "field",
              "name": "vibration",
              "type": {
                "text": "boolean"
              },
              "attribute": "vibration"
            },
            {
              "kind": "field",
              "name": "volume",
              "type": {
                "text": "number"
              },
              "attribute": "volume",
              "default": "1"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Audio/vibration controller for game sounds",
          "tagName": "game-audio",
          "customElement": true,
          "attributes": [
            {
              "name": "muted",
              "type": {
                "text": "boolean"
              },
              "fieldName": "muted"
            },
            {
              "name": "vibration",
              "type": {
                "text": "boolean"
              },
              "fieldName": "vibration"
            },
            {
              "name": "volume",
              "type": {
                "text": "number"
              },
              "fieldName": "volume",
              "default": "1"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "GameSample",
          "declaration": {
            "name": "GameSample",
            "module": "src/audio.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameAudio",
            "module": "src/audio.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-sample",
          "declaration": {
            "name": "GameSample",
            "module": "src/audio.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-audio",
          "declaration": {
            "name": "GameAudio",
            "module": "src/audio.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/between.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Between-rounds overlay that displays feedback, scores, and round\nprogress. Populates descendant elements via `data-between` attribute\nvalues: \"feedback\", \"round\", \"score\", \"round-score\", \"countdown\".\n\nThe last round score is also reflected as a CSS custom state based on\nits value relative to the shell's `score-order`:\n- For `asc` (lower-is-better): `:state(good)` when in the best tercile,\n  `:state(bad)` in the worst, `:state(ok)` in between.\n- For `desc` (higher-is-better): reversed.\nThe thresholds are derived from the progression's score range or, when\nunavailable, from `score-good` and `score-bad` attributes (raw score units).",
          "name": "GameBetween",
          "cssProperties": [
            {
              "description": "Background color of the overlay",
              "name": "--game-between-bg",
              "default": "#111"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ \"score-good\": { type: \"number?\" }, \"score-bad\": { type: \"number?\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { position: fixed; inset: 0; z-index: 30; display: flex; flex-direction: column; justify-content: center; align-items: center; background: var(--game-between-bg, #111); text-align: center; padding: 40px; color: var(--game-text, #eee); } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#countdownInterval",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#startCountdown",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#stopCountdown",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#populate",
              "privacy": "private",
              "parameters": [
                {
                  "name": "s"
                }
              ]
            },
            {
              "kind": "field",
              "name": "scoreGood",
              "type": {
                "text": "string"
              },
              "attribute": "score-good"
            },
            {
              "kind": "field",
              "name": "scoreBad",
              "type": {
                "text": "string"
              },
              "attribute": "score-bad"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "attributes": [
            {
              "type": {
                "text": "number"
              },
              "description": "Raw score threshold below which (asc) the round is \"good\"",
              "name": "score-good"
            },
            {
              "type": {
                "text": "number"
              },
              "description": "Raw score threshold above which (asc) the round is \"bad\"",
              "name": "score-bad"
            }
          ],
          "cssStates": [
            {
              "description": "The last round score was in the \"good\" tier",
              "name": "good"
            },
            {
              "description": "The last round score was in the \"ok\" tier",
              "name": "ok"
            },
            {
              "description": "The last round score was in the \"bad\" tier",
              "name": "bad"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Between-rounds feedback overlay",
          "tagName": "game-between",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameBetween",
            "module": "src/between.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-between",
          "declaration": {
            "name": "GameBetween",
            "module": "src/between.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/challenge.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Challenge mode display. Shows the opponent's score with a random\ntaunt when a challenge result is decoded from the URL. Reads the\n`challenge` signal from the shell and changes the start button\ntext to \"Challenge accepted\".",
          "name": "GameChallenge",
          "cssProperties": [
            {
              "description": "Start color of the score gradient",
              "name": "--game-result-gradient-from",
              "default": "#6ee7b7"
            },
            {
              "description": "End color of the score gradient",
              "name": "--game-result-gradient-to",
              "default": "#3b82f6"
            }
          ],
          "cssParts": [
            {
              "description": "The \"Their score\" heading",
              "name": "label"
            },
            {
              "description": "The opponent's formatted score",
              "name": "score"
            },
            {
              "description": "The randomly selected taunt text",
              "name": "taunt"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: none; margin-bottom: 12px; text-align: center; } :host(:state(active)) { display: block; } .label { font-size: clamp(14px, 2vw, 18px); opacity: 0.6; font-weight: 400; text-transform: uppercase; letter-spacing: 0.08em; } .score { font-size: clamp(48px, 8vw, 96px); font-weight: 900; letter-spacing: -0.03em; margin: 4px 0 8px; background: linear-gradient( 135deg, var(--game-result-gradient-from, #6ee7b7), var(--game-result-gradient-to, #3b82f6) ); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .taunt { font-size: clamp(14px, 2vw, 20px); font-weight: 600; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#formatScoreFn",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "formatScore"
            },
            {
              "kind": "field",
              "name": "#scoreEl",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#tauntEl",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ challenge, formatScoreSignal }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Challenge mode opponent score display",
          "tagName": "game-challenge",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameChallenge",
            "module": "src/challenge.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-challenge",
          "declaration": {
            "name": "GameChallenge",
            "module": "src/challenge.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/component.js",
      "declarations": [
        {
          "kind": "function",
          "name": "camelCase",
          "parameters": [
            {
              "name": "str"
            }
          ]
        },
        {
          "kind": "function",
          "name": "initAttrs",
          "parameters": [
            {
              "name": "Ctor"
            }
          ],
          "description": "Install IDL property reflections on a custom-element class based on its\n`static attrs` declaration. Call once per class (e.g. in a static block\nor from `define()`). Safe to call multiple times — no-ops if already done.\n\nAlso wires up `observedAttributes` (merging with any hand-written list)\nand a base `attributeChangedCallback` that calls `this.attributeChanged()`\nwhen it exists."
        },
        {
          "kind": "class",
          "description": "Base class for all interactive HTMLGameKit custom elements. Provides\nreactive signal effects, shell access, trigger lifecycle, and\nautomatic cleanup via AbortController.",
          "name": "GameComponent",
          "members": [
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\""
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1"
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\""
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ]
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private"
            }
          ],
          "superclass": {
            "name": "HTMLElement"
          },
          "summary": "Base class for game components",
          "customElement": true
        },
        {
          "kind": "variable",
          "name": "scene"
        },
        {
          "kind": "variable",
          "name": "round"
        },
        {
          "kind": "function",
          "name": "css",
          "parameters": [
            {
              "name": "strings"
            },
            {
              "name": "values"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "camelCase",
          "declaration": {
            "name": "camelCase",
            "module": "src/component.js"
          }
        },
        {
          "kind": "js",
          "name": "initAttrs",
          "declaration": {
            "name": "initAttrs",
            "module": "src/component.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameComponent",
            "module": "src/component.js"
          }
        },
        {
          "kind": "js",
          "name": "css",
          "declaration": {
            "name": "css",
            "module": "src/component.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/debug.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Debug panel that visualises the condition tree of a game-shell's\ndescendants. Shows all elements with `when-*` attributes as nodes\nin a graph, colour-coded by pass/fail state. Updates live as\nsignals change.\n\nToggle with Ctrl+Shift+D or by setting the `open` attribute.\nPlace as a child of `<game-shell>`.",
          "name": "GameDebug",
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ open: { type: \"boolean\" }, }"
            },
            {
              "kind": "field",
              "name": "#shadow",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#graphNodes",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "#effectDisposers",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "#panel",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#canvas",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#stateList",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#resizeObs",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag",
                  "default": "\"game-debug\""
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#buildDOM",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#bindKeys",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#open",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#close",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#refresh",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#renderState",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#renderGraph",
              "privacy": "private",
              "parameters": [
                {
                  "name": "graph"
                },
                {
                  "name": "dims"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#inspectNode",
              "privacy": "private",
              "parameters": [
                {
                  "name": "node"
                }
              ]
            },
            {
              "kind": "field",
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "attribute": "open"
            }
          ],
          "superclass": {
            "name": "HTMLElement"
          },
          "summary": "Visual condition-tree debugger",
          "tagName": "game-debug",
          "customElement": true,
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "fieldName": "open"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameDebug",
            "module": "src/debug.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-debug",
          "declaration": {
            "name": "GameDebug",
            "module": "src/debug.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/events.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "GameRequestEvent",
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameRoundPassEvent",
          "members": [
            {
              "kind": "field",
              "name": "score",
              "default": "score"
            },
            {
              "kind": "field",
              "name": "feedback",
              "default": "feedback"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameRoundFailEvent",
          "members": [
            {
              "kind": "field",
              "name": "reason",
              "default": "reason"
            },
            {
              "kind": "field",
              "name": "retry",
              "default": "retry"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameTimerTickEvent",
          "members": [
            {
              "kind": "field",
              "name": "remaining",
              "default": "remaining"
            },
            {
              "kind": "field",
              "name": "fraction",
              "default": "fraction"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameTimerExpiredEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameTimerCountdownEvent",
          "members": [
            {
              "kind": "field",
              "name": "seconds",
              "default": "seconds"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameStatUpdateEvent",
          "members": [
            {
              "kind": "field",
              "name": "key",
              "default": "key"
            },
            {
              "kind": "field",
              "name": "value",
              "default": "value"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameLifecycleEvent",
          "members": [
            {
              "kind": "field",
              "name": "action",
              "default": "action"
            },
            {
              "kind": "field",
              "name": "state",
              "default": "state"
            },
            {
              "kind": "field",
              "name": "scene"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameStartRequestEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameRestartRequestEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameCompleteEvent",
          "members": [
            {
              "kind": "field",
              "name": "score",
              "default": "score"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GamePauseRequestEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameResumeRequestEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameNextRoundEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GamePracticeStartEvent",
          "superclass": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameTileInputEvent",
          "members": [
            {
              "kind": "field",
              "name": "value",
              "default": "value"
            },
            {
              "kind": "field",
              "name": "position",
              "default": "position"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameTileSubmitEvent",
          "members": [
            {
              "kind": "field",
              "name": "value",
              "default": "value"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameCollectionAddEvent",
          "members": [
            {
              "kind": "field",
              "name": "collection",
              "default": "collection"
            },
            {
              "kind": "field",
              "name": "itemId",
              "default": "itemId"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        },
        {
          "kind": "class",
          "description": "",
          "name": "GameCollectionRemoveEvent",
          "members": [
            {
              "kind": "field",
              "name": "collection",
              "default": "collection"
            },
            {
              "kind": "field",
              "name": "itemId",
              "default": "itemId"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/events.js"
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "GameRequestEvent",
          "declaration": {
            "name": "GameRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRoundPassEvent",
          "declaration": {
            "name": "GameRoundPassEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRoundFailEvent",
          "declaration": {
            "name": "GameRoundFailEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimerTickEvent",
          "declaration": {
            "name": "GameTimerTickEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimerExpiredEvent",
          "declaration": {
            "name": "GameTimerExpiredEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimerCountdownEvent",
          "declaration": {
            "name": "GameTimerCountdownEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameStatUpdateEvent",
          "declaration": {
            "name": "GameStatUpdateEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameLifecycleEvent",
          "declaration": {
            "name": "GameLifecycleEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameStartRequestEvent",
          "declaration": {
            "name": "GameStartRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRestartRequestEvent",
          "declaration": {
            "name": "GameRestartRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameCompleteEvent",
          "declaration": {
            "name": "GameCompleteEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePauseRequestEvent",
          "declaration": {
            "name": "GamePauseRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameResumeRequestEvent",
          "declaration": {
            "name": "GameResumeRequestEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameNextRoundEvent",
          "declaration": {
            "name": "GameNextRoundEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePracticeStartEvent",
          "declaration": {
            "name": "GamePracticeStartEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTileInputEvent",
          "declaration": {
            "name": "GameTileInputEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTileSubmitEvent",
          "declaration": {
            "name": "GameTileSubmitEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameCollectionAddEvent",
          "declaration": {
            "name": "GameCollectionAddEvent",
            "module": "src/events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameCollectionRemoveEvent",
          "declaration": {
            "name": "GameCollectionRemoveEvent",
            "module": "src/events.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/flash.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Full-screen color flash overlay that briefly pulses green or red\nwhen a round passes or fails. The flash appears for 300ms during\nthe \"between\" scene.",
          "name": "GameFlash",
          "cssProperties": [
            {
              "description": "Flash color on a passed round",
              "name": "--game-flash-pass",
              "default": "rgba(50, 220, 120, 0.35)"
            },
            {
              "description": "Flash color on a failed round",
              "name": "--game-flash-fail",
              "default": "rgba(230, 40, 40, 0.3)"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { position: fixed; inset: 0; z-index: 5; pointer-events: none; opacity: 0; transition: opacity 0.12s ease-out; } :host(:state(pass)) { background: var(--game-flash-pass, rgba(50, 220, 120, 0.35)); opacity: 1; } :host(:state(fail)) { background: var(--game-flash-fail, rgba(230, 40, 40, 0.3)); opacity: 1; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#timer",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene, lastRoundPassed }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "cssStates": [
            {
              "description": "The flash is showing a pass (green) pulse",
              "name": "pass"
            },
            {
              "description": "The flash is showing a fail (red) pulse",
              "name": "fail"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Pass/fail color flash overlay",
          "tagName": "game-flash",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameFlash",
            "module": "src/flash.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-flash",
          "declaration": {
            "name": "GameFlash",
            "module": "src/flash.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/format.js",
      "declarations": [
        {
          "kind": "function",
          "name": "formatValue",
          "parameters": [
            {
              "name": "v",
              "description": "Value to format.",
              "type": {
                "text": "*"
              }
            },
            {
              "name": "format",
              "description": "Format specifier:\n- `\"ms\"` — rounds to integer and appends \"ms\" (e.g. `342.7` → `\"343ms\"`)\n- `\"Ndp\"` — fixed-point with N decimal places (e.g. `\"2dp\"` formats `0.1` as `\"0.10\"`)\n- anything else — `String(v)`",
              "optional": true,
              "type": {
                "text": "string"
              }
            }
          ],
          "description": "Format a numeric game value for display.",
          "return": {
            "type": {
              "text": "string"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "formatValue",
          "declaration": {
            "name": "formatValue",
            "module": "src/format.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/game-signal.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Inline text binding that renders a live shell signal value as a text\nnode. Has no shadow DOM — renders directly as text content. Supports\nall shell signals plus `url`, `groupid`, `groupname`, difficulty props,\nand custom stats. The `round` key renders \"N/M\" when a fixed round\ncount is set; `score` respects `formatScoreSignal`.",
          "name": "GameSignal",
          "members": [
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ key: { type: \"string\" }, format: { type: \"string?\" }, }"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ round, rounds, score, formatScoreSignal }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "key",
              "type": {
                "text": "string"
              },
              "attribute": "key"
            },
            {
              "kind": "field",
              "name": "format",
              "type": {
                "text": "string | null"
              },
              "attribute": "format"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Live signal value text binding",
          "tagName": "game-signal",
          "customElement": true,
          "attributes": [
            {
              "name": "key",
              "type": {
                "text": "string"
              },
              "fieldName": "key"
            },
            {
              "name": "format",
              "type": {
                "text": "string | null"
              },
              "fieldName": "format"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameSignal",
            "module": "src/game-signal.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-signal",
          "declaration": {
            "name": "GameSignal",
            "module": "src/game-signal.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/histogram.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Standalone histogram bar chart showing the distribution of player\nscores. Highlights the current player's bucket and displays a \"Top\nN%\" percentile. Loads data from the scores API on the result scene.",
          "name": "GameScoreHistogram",
          "cssParts": [
            {
              "description": "The top row showing player count and percentile",
              "name": "label"
            },
            {
              "description": "The bar chart container",
              "name": "bars"
            },
            {
              "description": "The bottom \"Better / Worse\" labels",
              "name": "axis"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ buckets: { type: \"long\", default: 80 }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: block; margin-top: 16px; width: 100%; max-width: 320px; color: var(--game-text, #eee); } .label { display: flex; justify-content: space-between; font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; opacity: 0.5; padding: 0 2px 6px; } .bars { display: flex; align-items: flex-end; gap: 2px; height: 80px; } .bar { flex: 1; background: color-mix(in srgb, currentColor 15%, transparent); border-radius: 2px 2px 0 0; height: var(--h); position: relative; transition: background 0.2s; } .bar.you { background: var(--game-accent, #3b82f6); } .you-label { position: absolute; top: -18px; left: 50%; transform: translateX(-50%); font-size: 10px; font-weight: 700; color: var(--game-accent, #3b82f6); white-space: nowrap; text-shadow: none; } .axis { display: flex; justify-content: space-between; font-size: 10px; opacity: 0.35; padding: 4px 2px 0; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "resultCallback",
              "parameters": [
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#render",
              "privacy": "private",
              "parameters": [
                {
                  "name": "data"
                },
                {
                  "name": "playerScore"
                },
                {
                  "name": "scoreOrder",
                  "default": "\"desc\""
                }
              ]
            },
            {
              "kind": "field",
              "name": "buckets",
              "type": {
                "text": "number"
              },
              "attribute": "buckets",
              "default": "80"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "PendingTaskEvent"
              },
              "description": "Wraps the histogram data fetch for loading coordination",
              "name": "pending-task"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Score distribution histogram chart",
          "tagName": "game-score-histogram",
          "customElement": true,
          "attributes": [
            {
              "name": "buckets",
              "type": {
                "text": "number"
              },
              "fieldName": "buckets",
              "default": "80"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameScoreHistogram",
            "module": "src/histogram.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-score-histogram",
          "declaration": {
            "name": "GameScoreHistogram",
            "module": "src/histogram.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/hud.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Displays the current round number and a progress bar. Automatically\nadapts to fixed-round games (showing \"N/M\") or open-ended games\n(showing just the round number).",
          "name": "GameRoundCounter",
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: inline-flex; align-items: center; gap: 8px; } .val { font-weight: 700; font-variant-numeric: tabular-nums; } progress { width: clamp(80px, 15vw, 160px); height: 6px; appearance: none; border: none; background: rgba(255, 255, 255, 0.15); border-radius: 3px; overflow: hidden; } progress::-webkit-progress-bar { background: rgba(255, 255, 255, 0.15); border-radius: 3px; } progress::-webkit-progress-value { background: var(--game-accent, #fff); border-radius: 3px; transition: width 0.3s ease; } progress::-moz-progress-bar { background: var(--game-accent, #fff); border-radius: 3px; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#val",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#bar",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ round, rounds, difficulty }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Round counter with progress bar",
          "tagName": "game-round-counter",
          "customElement": true
        },
        {
          "kind": "class",
          "description": "Displays a single game statistic from the shell's stats signal.\nThe label is provided via the default slot; the value is rendered\nfrom `stats[key]` with optional formatting.",
          "name": "GameStat",
          "slots": [
            {
              "description": "Label text for the stat",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ key: { type: \"string\" }, format: { type: \"string\", default: \"plain\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: inline-flex; align-items: center; gap: 4px; } .val { font-weight: 700; font-variant-numeric: tabular-nums; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "`<span class=\"label\"><slot></slot></span> <span class=\"val\"></span>`",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#valEl",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ stats }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "key",
              "type": {
                "text": "string"
              },
              "attribute": "key"
            },
            {
              "kind": "field",
              "name": "format",
              "type": {
                "text": "string"
              },
              "attribute": "format",
              "default": "plain"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Single stat display (e.g. streak, tier)",
          "tagName": "game-stat",
          "customElement": true,
          "attributes": [
            {
              "name": "key",
              "type": {
                "text": "string"
              },
              "fieldName": "key"
            },
            {
              "name": "format",
              "type": {
                "text": "string"
              },
              "fieldName": "format",
              "default": "plain"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "GameRoundCounter",
          "declaration": {
            "name": "GameRoundCounter",
            "module": "src/hud.js"
          }
        },
        {
          "kind": "js",
          "name": "GameStat",
          "declaration": {
            "name": "GameStat",
            "module": "src/hud.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-round-counter",
          "declaration": {
            "name": "GameRoundCounter",
            "module": "src/hud.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-stat",
          "declaration": {
            "name": "GameStat",
            "module": "src/hud.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/icon.js",
      "declarations": [
        {
          "kind": "class",
          "description": "SVG sprite icon renderer. Renders a `<use>` element pointing at the\nsprite sheet provided by the nearest `<game-shell sprite-sheet>`. When\n`<option>` children are present, the displayed icon is selected\nconditionally via `when-*` attributes, falling back to the `name` attribute.",
          "name": "GameIcon",
          "cssProperties": [
            {
              "description": "Width and height of the icon",
              "name": "--game-icon-size",
              "default": "1em"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ name: { type: \"string\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: inline-flex; align-items: center; justify-content: center; width: var(--game-icon-size, 1em); height: var(--game-icon-size, 1em); vertical-align: middle; } svg { width: 100%; height: 100%; fill: currentColor; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#options",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ spriteSheet }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "attributeChanged"
            },
            {
              "kind": "method",
              "name": "#render",
              "privacy": "private",
              "parameters": [
                {
                  "name": "name"
                },
                {
                  "name": "sheet"
                }
              ]
            },
            {
              "kind": "field",
              "name": "name",
              "type": {
                "text": "string"
              },
              "attribute": "name"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Conditional SVG sprite icon",
          "tagName": "game-icon",
          "customElement": true,
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameIcon",
            "module": "src/icon.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-icon",
          "declaration": {
            "name": "GameIcon",
            "module": "src/icon.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/index.js",
      "declarations": [
        {
          "kind": "function",
          "name": "defineAll",
          "parameters": [
            {
              "name": "registry",
              "default": "customElements"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "GameShell",
          "declaration": {
            "name": "default",
            "module": "./shell.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRoundCounter",
          "declaration": {
            "name": "GameRoundCounter",
            "module": "./hud.js"
          }
        },
        {
          "kind": "js",
          "name": "GameStat",
          "declaration": {
            "name": "GameStat",
            "module": "./hud.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimer",
          "declaration": {
            "name": "default",
            "module": "./timer.js"
          }
        },
        {
          "kind": "js",
          "name": "GameShare",
          "declaration": {
            "name": "default",
            "module": "./share.js"
          }
        },
        {
          "kind": "js",
          "name": "GameScoreForm",
          "declaration": {
            "name": "default",
            "module": "./score-form.js"
          }
        },
        {
          "kind": "js",
          "name": "GameLeaderboard",
          "declaration": {
            "name": "default",
            "module": "./leaderboard.js"
          }
        },
        {
          "kind": "js",
          "name": "GameScoreHistogram",
          "declaration": {
            "name": "default",
            "module": "./histogram.js"
          }
        },
        {
          "kind": "js",
          "name": "GameChallenge",
          "declaration": {
            "name": "default",
            "module": "./challenge.js"
          }
        },
        {
          "kind": "js",
          "name": "GameResultStat",
          "declaration": {
            "name": "default",
            "module": "./result-stat.js"
          }
        },
        {
          "kind": "js",
          "name": "GameQuiz",
          "declaration": {
            "name": "default",
            "module": "./quiz.js"
          }
        },
        {
          "kind": "js",
          "name": "GameResultMessage",
          "declaration": {
            "name": "default",
            "module": "./result-message.js"
          }
        },
        {
          "kind": "js",
          "name": "GameFlash",
          "declaration": {
            "name": "default",
            "module": "./flash.js"
          }
        },
        {
          "kind": "js",
          "name": "GameBetween",
          "declaration": {
            "name": "default",
            "module": "./between.js"
          }
        },
        {
          "kind": "js",
          "name": "GameSignal",
          "declaration": {
            "name": "default",
            "module": "./game-signal.js"
          }
        },
        {
          "kind": "js",
          "name": "GameIcon",
          "declaration": {
            "name": "default",
            "module": "./icon.js"
          }
        },
        {
          "kind": "js",
          "name": "GameAudio",
          "declaration": {
            "name": "default",
            "module": "./audio.js"
          }
        },
        {
          "kind": "js",
          "name": "GameSample",
          "declaration": {
            "name": "GameSample",
            "module": "./audio.js"
          }
        },
        {
          "kind": "js",
          "name": "GameSequencer",
          "declaration": {
            "name": "default",
            "module": "./sequencer.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTileInput",
          "declaration": {
            "name": "default",
            "module": "./tile-input.js"
          }
        },
        {
          "kind": "js",
          "name": "GameToast",
          "declaration": {
            "name": "default",
            "module": "./toast.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTrophy",
          "declaration": {
            "name": "default",
            "module": "./trophy.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTrophyUnlockEvent",
          "declaration": {
            "name": "GameTrophyUnlockEvent",
            "module": "./trophy.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePreferences",
          "declaration": {
            "name": "default",
            "module": "./preferences.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePreference",
          "declaration": {
            "name": "GamePreference",
            "module": "./preferences.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePreferenceChangeEvent",
          "declaration": {
            "name": "GamePreferenceChangeEvent",
            "module": "./preferences.js"
          }
        },
        {
          "kind": "js",
          "name": "GameWordSource",
          "declaration": {
            "name": "default",
            "module": "./words.js"
          }
        },
        {
          "kind": "js",
          "name": "gameWordContext",
          "declaration": {
            "name": "gameWordContext",
            "module": "./words.js"
          }
        },
        {
          "kind": "js",
          "name": "GameDebug",
          "declaration": {
            "name": "default",
            "module": "./debug.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePassage",
          "declaration": {
            "name": "default",
            "module": "./passage.js"
          }
        },
        {
          "kind": "js",
          "name": "FixedProgression",
          "declaration": {
            "name": "default",
            "module": "./progressions/fixed.js"
          }
        },
        {
          "kind": "js",
          "name": "StaircaseProgression",
          "declaration": {
            "name": "default",
            "module": "./progressions/staircase.js"
          }
        },
        {
          "kind": "js",
          "name": "TierProgression",
          "declaration": {
            "name": "default",
            "module": "./progressions/tier.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRoundPassEvent",
          "declaration": {
            "name": "GameRoundPassEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRoundFailEvent",
          "declaration": {
            "name": "GameRoundFailEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimerTickEvent",
          "declaration": {
            "name": "GameTimerTickEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimerExpiredEvent",
          "declaration": {
            "name": "GameTimerExpiredEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTimerCountdownEvent",
          "declaration": {
            "name": "GameTimerCountdownEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameStatUpdateEvent",
          "declaration": {
            "name": "GameStatUpdateEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameLifecycleEvent",
          "declaration": {
            "name": "GameLifecycleEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameStartRequestEvent",
          "declaration": {
            "name": "GameStartRequestEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameRestartRequestEvent",
          "declaration": {
            "name": "GameRestartRequestEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameCompleteEvent",
          "declaration": {
            "name": "GameCompleteEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePauseRequestEvent",
          "declaration": {
            "name": "GamePauseRequestEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameResumeRequestEvent",
          "declaration": {
            "name": "GameResumeRequestEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameNextRoundEvent",
          "declaration": {
            "name": "GameNextRoundEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePracticeStartEvent",
          "declaration": {
            "name": "GamePracticeStartEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTileInputEvent",
          "declaration": {
            "name": "GameTileInputEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameTileSubmitEvent",
          "declaration": {
            "name": "GameTileSubmitEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameCollectionAddEvent",
          "declaration": {
            "name": "GameCollectionAddEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "GameCollectionRemoveEvent",
          "declaration": {
            "name": "GameCollectionRemoveEvent",
            "module": "./events.js"
          }
        },
        {
          "kind": "js",
          "name": "PendingTaskEvent",
          "declaration": {
            "name": "PendingTaskEvent",
            "module": "./pending-task.js"
          }
        },
        {
          "kind": "js",
          "name": "GameComponent",
          "declaration": {
            "name": "default",
            "module": "./component.js"
          }
        },
        {
          "kind": "js",
          "name": "css",
          "declaration": {
            "name": "css",
            "module": "./component.js"
          }
        },
        {
          "kind": "js",
          "name": "initAttrs",
          "declaration": {
            "name": "initAttrs",
            "module": "./component.js"
          }
        },
        {
          "kind": "js",
          "name": "formatValue",
          "declaration": {
            "name": "formatValue",
            "module": "./format.js"
          }
        },
        {
          "kind": "js",
          "name": "createContext",
          "declaration": {
            "name": "createContext",
            "module": "./context.js"
          }
        },
        {
          "kind": "js",
          "name": "ContextProvider",
          "declaration": {
            "name": "ContextProvider",
            "module": "./context.js"
          }
        },
        {
          "kind": "js",
          "name": "subscribe",
          "declaration": {
            "name": "subscribe",
            "module": "./context.js"
          }
        },
        {
          "kind": "js",
          "name": "ContextRequestEvent",
          "declaration": {
            "name": "ContextRequestEvent",
            "module": "./context.js"
          }
        },
        {
          "kind": "js",
          "name": "Signal",
          "declaration": {
            "name": "Signal",
            "module": "./signals.js"
          }
        },
        {
          "kind": "js",
          "name": "effect",
          "declaration": {
            "name": "effect",
            "module": "./signals.js"
          }
        },
        {
          "kind": "js",
          "name": "matchesConditions",
          "declaration": {
            "name": "matchesConditions",
            "module": "./conditions.js"
          }
        },
        {
          "kind": "js",
          "name": "STATE_TRIGGERS",
          "declaration": {
            "name": "STATE_TRIGGERS",
            "module": "./triggers.js"
          }
        },
        {
          "kind": "js",
          "name": "DOM_TRIGGERS",
          "declaration": {
            "name": "DOM_TRIGGERS",
            "module": "./triggers.js"
          }
        },
        {
          "kind": "js",
          "name": "gameScores",
          "declaration": {
            "name": "default",
            "module": "./scores.js"
          }
        },
        {
          "kind": "js",
          "name": "noopScores",
          "declaration": {
            "name": "noopScores",
            "module": "./scores.js"
          }
        },
        {
          "kind": "js",
          "name": "gameTrophies",
          "declaration": {
            "name": "default",
            "module": "./trophies.js"
          }
        },
        {
          "kind": "js",
          "name": "noopTrophies",
          "declaration": {
            "name": "noopTrophies",
            "module": "./trophies.js"
          }
        },
        {
          "kind": "js",
          "name": "groupParam",
          "declaration": {
            "name": "groupParam",
            "module": "./shell.js"
          }
        },
        {
          "kind": "js",
          "name": "appendGroupParam",
          "declaration": {
            "name": "appendGroupParam",
            "module": "./shell.js"
          }
        },
        {
          "kind": "js",
          "name": "defineAll",
          "declaration": {
            "name": "defineAll",
            "module": "src/index.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/leaderboard.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Leaderboard display with a score table and histogram chart. Shows\nthe top 3 and bottom 3 scores with a separator, plus a bar chart\nwith the player's position highlighted and a \"Top N%\" percentile.",
          "name": "GameLeaderboard",
          "cssParts": [
            {
              "description": "The leaderboard score table",
              "name": "table"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ \"score-label\": { type: \"string\", default: \"Score\" }, best: { type: \"long\", default: 3 }, worst: { type: \"long\", default: 3 }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: block; margin-top: 16px; width: 100%; max-width: 320px; color: var(--game-text, #eee); } table { width: 100%; border-collapse: collapse; font-size: 14px; font-variant-numeric: tabular-nums; } th { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; opacity: 0.5; padding: 4px 8px; text-align: left; } th:last-child { text-align: right; } td { padding: 4px 8px; border-top: 1px solid color-mix(in srgb, currentColor 8%, transparent); } td:first-child { opacity: 0.4; width: 30px; } td:last-child { text-align: right; font-weight: 600; } .sep td { text-align: center; border-top: none; opacity: 0.3; padding: 2px 8px; font-size: 12px; letter-spacing: 0.2em; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "'<table part=\"table\"></table>'",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#formatScoreFn",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "formatScore"
            },
            {
              "kind": "method",
              "name": "resultCallback",
              "parameters": [
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#fmt",
              "privacy": "private",
              "parameters": [
                {
                  "name": "entry"
                },
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#row",
              "privacy": "private",
              "parameters": [
                {
                  "name": "entry"
                },
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#render",
              "privacy": "private",
              "parameters": [
                {
                  "name": "best"
                },
                {
                  "name": "worst"
                },
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "field",
              "name": "scoreLabel",
              "type": {
                "text": "string"
              },
              "attribute": "score-label",
              "default": "Score"
            },
            {
              "kind": "field",
              "name": "best",
              "type": {
                "text": "number"
              },
              "attribute": "best",
              "default": "3"
            },
            {
              "kind": "field",
              "name": "worst",
              "type": {
                "text": "number"
              },
              "attribute": "worst",
              "default": "3"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "PendingTaskEvent"
              },
              "description": "Wraps the leaderboard data fetch for loading coordination",
              "name": "pending-task"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Score leaderboard with table and histogram",
          "tagName": "game-leaderboard",
          "customElement": true,
          "attributes": [
            {
              "name": "score-label",
              "type": {
                "text": "string"
              },
              "fieldName": "scoreLabel",
              "default": "Score"
            },
            {
              "name": "best",
              "type": {
                "text": "number"
              },
              "fieldName": "best",
              "default": "3"
            },
            {
              "name": "worst",
              "type": {
                "text": "number"
              },
              "fieldName": "worst",
              "default": "3"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameLeaderboard",
            "module": "src/leaderboard.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-leaderboard",
          "declaration": {
            "name": "GameLeaderboard",
            "module": "src/leaderboard.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/passage.js",
      "declarations": [
        {
          "kind": "class",
          "description": "An addressable content block for narrative/dialog trees. Manages\nconditional visibility of its children via `when-*` attributes and\ntracks visits in the shell's `visited` collection.\n\nPlace as a direct child of `<game-shell>` with a `when-eq-*`\ncondition so the shell controls when it's active. Children can\nuse `when-*` conditions (including `when-no-visited` /\n`when-some-visited`) for first-visit vs revisit content.\n\nWhen the passage becomes active (visible via shell slot assignment),\nit adds its `id` to the shell's `visited` collection and\nre-evaluates child conditions.",
          "name": "GamePassage",
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ collection: { type: \"string\", default: \"visited\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: contents; } :host([hidden]) { display: none !important; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#active",
              "privacy": "private",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag",
                  "default": "\"game-passage\""
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "effectCallback"
            },
            {
              "kind": "field",
              "name": "collection",
              "type": {
                "text": "string"
              },
              "attribute": "collection",
              "default": "visited"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "GameCollectionAddEvent"
              },
              "description": "Fires when the passage is visited for the first time",
              "name": "game-collection-add"
            }
          ],
          "attributes": [
            {
              "type": {
                "text": "string"
              },
              "description": "Unique passage identifier (used for visit tracking)",
              "name": "id"
            },
            {
              "type": {
                "text": "string"
              },
              "description": "Name of the collection to track visits in",
              "name": "collection",
              "default": "visited"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Addressable content block with visit tracking",
          "tagName": "game-passage",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GamePassage",
            "module": "src/passage.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-passage",
          "declaration": {
            "name": "GamePassage",
            "module": "src/passage.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/preferences.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "GamePreferenceChangeEvent",
          "members": [
            {
              "kind": "field",
              "name": "key",
              "default": "key"
            },
            {
              "kind": "field",
              "name": "value",
              "default": "value"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/preferences.js"
          }
        },
        {
          "kind": "class",
          "description": "Self-sufficient preference element. Owns its current value, persists\nto localStorage, and applies hardwired audio keys automatically.\nWorks standalone anywhere inside a `<game-shell>`, or as a child of\n`<game-preferences>` for a full settings panel.\n\nBoolean preferences have `default=\"true\"` or `default=\"false\"`.\nNumeric preferences have a numeric `default` plus `min`/`max`.",
          "name": "GamePreference",
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ key: { type: \"string\" }, label: { type: \"string?\" }, default: { type: \"string\" }, min: { type: \"string\", default: \"0\" }, max: { type: \"string\", default: \"100\" }, }"
            },
            {
              "kind": "field",
              "name": "#value",
              "privacy": "private",
              "default": "undefined"
            },
            {
              "kind": "field",
              "name": "#connected",
              "privacy": "private",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag",
                  "default": "\"game-preference\""
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ]
            },
            {
              "kind": "field",
              "name": "boolean",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "#defaultValue",
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "value",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "set",
              "parameters": [
                {
                  "name": "value"
                }
              ]
            },
            {
              "kind": "method",
              "name": "toggle"
            },
            {
              "kind": "method",
              "name": "#persist",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "key",
              "type": {
                "text": "string"
              },
              "attribute": "key"
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string | null"
              },
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "default",
              "type": {
                "text": "string"
              },
              "attribute": "default"
            },
            {
              "kind": "field",
              "name": "min",
              "type": {
                "text": "string"
              },
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "max",
              "type": {
                "text": "string"
              },
              "attribute": "max",
              "default": "100"
            }
          ],
          "events": [
            {
              "type": {
                "text": "GamePreferenceChangeEvent"
              },
              "name": "game-preference-change"
            }
          ],
          "superclass": {
            "name": "HTMLElement"
          },
          "summary": "Single user preference (standalone or inside preferences panel)",
          "tagName": "game-preference",
          "customElement": true,
          "attributes": [
            {
              "name": "key",
              "type": {
                "text": "string"
              },
              "fieldName": "key"
            },
            {
              "name": "label",
              "type": {
                "text": "string | null"
              },
              "fieldName": "label"
            },
            {
              "name": "default",
              "type": {
                "text": "string"
              },
              "fieldName": "default"
            },
            {
              "name": "min",
              "type": {
                "text": "string"
              },
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "string"
              },
              "fieldName": "max",
              "default": "100"
            }
          ]
        },
        {
          "kind": "class",
          "description": "User preferences panel with toggle switches and range sliders.\nReads `<game-preference>` children for configuration and renders\ncontrols. Value ownership lives on each `<game-preference>` element;\nthis panel provides the UI chrome.",
          "name": "GamePreferences",
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { color: var(--game-text, #eee); } .prefs { display: flex; flex-direction: column; gap: 16px; padding: 24px; min-width: 260px; } h2 { margin: 0 0 8px; font-size: 18px; font-weight: 700; } .pref-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .pref-label { font-size: 15px; font-weight: 500; } .toggle { position: relative; width: 44px; height: 24px; flex-shrink: 0; } .toggle input { opacity: 0; width: 0; height: 0; } .toggle-track { position: absolute; inset: 0; background: rgba(255, 255, 255, 0.15); border-radius: 12px; cursor: pointer; transition: background 0.2s ease; } .toggle-track::after { content: \"\"; position: absolute; width: 18px; height: 18px; left: 3px; bottom: 3px; background: #fff; border-radius: 50%; transition: transform 0.2s ease; } .toggle input:checked + .toggle-track { background: var(--game-accent, #4c6ef5); } .toggle input:checked + .toggle-track::after { transform: translateX(20px); } .range { flex-shrink: 0; width: 100px; } .range input { width: 100%; accent-color: var(--game-accent, #4c6ef5); } .done-btn { margin-top: 8px; padding: 10px 24px; font-size: 15px; font-weight: 600; border: none; border-radius: 6px; background: var(--game-btn-bg, #fff); color: var(--game-btn-text, #111); cursor: pointer; font-family: inherit; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "`<div class=\"prefs\"><h2>Preferences</h2><div class=\"pref-list\"></div><button class=\"done-btn\" type=\"button\">Done</button></div>`",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "get",
              "parameters": [
                {
                  "name": "key"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#render",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "GamePreferenceChangeEvent"
              },
              "description": "Bubbles from child preferences",
              "name": "game-preference-change"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "User preferences UI panel",
          "tagName": "game-preferences",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "GamePreferenceChangeEvent",
          "declaration": {
            "name": "GamePreferenceChangeEvent",
            "module": "src/preferences.js"
          }
        },
        {
          "kind": "js",
          "name": "GamePreference",
          "declaration": {
            "name": "GamePreference",
            "module": "src/preferences.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GamePreferences",
            "module": "src/preferences.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-preference",
          "declaration": {
            "name": "GamePreference",
            "module": "src/preferences.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-preferences",
          "declaration": {
            "name": "GamePreferences",
            "module": "src/preferences.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/quiz.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A multiple-choice quiz engine. Reads `<fieldset>` children as question\npools (optionally tiered via `data-tier`), randomizes answer order each\nround, and dispatches pass/fail events based on the selected answer.",
          "name": "GameQuiz",
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: flex; flex-direction: column; align-items: center; justify-content: center; position: absolute; inset: 0; padding: 60px 20px 20px; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#tiers",
              "privacy": "private",
              "default": "new Map()"
            },
            {
              "kind": "field",
              "name": "#used",
              "privacy": "private",
              "default": "new Map()"
            },
            {
              "kind": "field",
              "name": "#round",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#active",
              "privacy": "private",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "field",
              "name": "#streak",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#currentFieldset",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene, round, difficulty }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#indexQuestions",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#setupRound",
              "privacy": "private",
              "parameters": [
                {
                  "name": "diff"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#pickQuestion",
              "privacy": "private",
              "parameters": [
                {
                  "name": "tierIndex"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#handleAnswer",
              "privacy": "private",
              "parameters": [
                {
                  "name": "input"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "GameRoundPassEvent"
              },
              "description": "Fires when the player selects the correct answer",
              "name": "game-round-pass"
            },
            {
              "type": {
                "text": "GameRoundFailEvent"
              },
              "description": "Fires when the player selects a wrong answer",
              "name": "game-round-fail"
            },
            {
              "type": {
                "text": "GameStatUpdateEvent"
              },
              "description": "Fires to update the \"tier\" and \"streak\" stats",
              "name": "game-stat-update"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Multiple-choice quiz game component",
          "tagName": "game-quiz",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameQuiz",
            "module": "src/quiz.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-quiz",
          "declaration": {
            "name": "GameQuiz",
            "module": "src/quiz.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/result-message.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Selects and displays a random `<option>` child on the result scene.\nOptions are filtered by `when-*` conditions before random selection.\nSets the `:state(active)` state when a message is shown.",
          "name": "GameResultMessage",
          "members": [
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "`<span part=\"output\"></span>`",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#output",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#options",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "cssStates": [
            {
              "description": "A matching option was found and its text is displayed",
              "name": "active"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Conditional result screen message picker",
          "tagName": "game-result-message",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameResultMessage",
            "module": "src/result-message.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-result-message",
          "declaration": {
            "name": "GameResultMessage",
            "module": "src/result-message.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/result-stat.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Result screen score display with gradient text. Supports animated\ncount-up, custom formatting, and score-threshold CSS states for\nconditional styling. Use `score-*` attributes to define named\nthresholds (e.g. `score-gold=\"8\"` adds `:state(gold)` when score >= 8).",
          "name": "GameResultStat",
          "cssProperties": [
            {
              "description": "Start color of the score gradient",
              "name": "--game-result-gradient-from",
              "default": "#6ee7b7"
            },
            {
              "description": "End color of the score gradient",
              "name": "--game-result-gradient-to",
              "default": "#3b82f6"
            }
          ],
          "cssParts": [
            {
              "description": "The stat label text",
              "name": "label"
            },
            {
              "description": "The stat value (score) display",
              "name": "value"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ label: { type: \"string\" }, format: { type: \"string\", default: \"plain\" }, animate: { type: \"string?\" }, \"min-score\": { type: \"string?\" }, \"max-score\": { type: \"string?\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: block; text-align: center; } .label { font-size: clamp(14px, 2vw, 18px); opacity: 0.6; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 4px; } .value { font-size: clamp(48px, 8vw, 96px); font-weight: 900; letter-spacing: -0.03em; margin: 16px 0; background: linear-gradient( 135deg, var(--game-result-gradient-from, #6ee7b7), var(--game-result-gradient-to, #3b82f6) ); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#formatFn",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#thresholds",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "formatScore"
            },
            {
              "kind": "method",
              "name": "attributeChanged",
              "parameters": [
                {
                  "name": "name"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#valueEl",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene, score, formatScoreSignal }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#parseThresholds",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#applyScoreStates",
              "privacy": "private",
              "parameters": [
                {
                  "name": "score"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#raf",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "method",
              "name": "#animateCountUp",
              "privacy": "private",
              "parameters": [
                {
                  "name": "target"
                },
                {
                  "name": "el"
                },
                {
                  "name": "fmt"
                }
              ]
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string"
              },
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "format",
              "type": {
                "text": "string"
              },
              "attribute": "format",
              "default": "plain"
            },
            {
              "kind": "field",
              "name": "animate",
              "type": {
                "text": "string | null"
              },
              "attribute": "animate"
            },
            {
              "kind": "field",
              "name": "minScore",
              "type": {
                "text": "string | null"
              },
              "attribute": "min-score"
            },
            {
              "kind": "field",
              "name": "maxScore",
              "type": {
                "text": "string | null"
              },
              "attribute": "max-score"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "cssStates": [
            {
              "description": "Score is within the min-score/max-score range",
              "name": "in-range"
            },
            {
              "description": "Score equals the total number of rounds (perfect game)",
              "name": "perfect"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Animated result score display",
          "tagName": "game-result-stat",
          "customElement": true,
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "format",
              "type": {
                "text": "string"
              },
              "fieldName": "format",
              "default": "plain"
            },
            {
              "name": "animate",
              "type": {
                "text": "string | null"
              },
              "fieldName": "animate"
            },
            {
              "name": "min-score",
              "type": {
                "text": "string | null"
              },
              "fieldName": "minScore"
            },
            {
              "name": "max-score",
              "type": {
                "text": "string | null"
              },
              "fieldName": "maxScore"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameResultStat",
            "module": "src/result-stat.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-result-stat",
          "declaration": {
            "name": "GameResultStat",
            "module": "src/result-stat.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/score-form.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Score submission form for the leaderboard. Displays a name input\nand submit button on the result screen. Waits for the scores API\ntoken before enabling submission, and dispatches a PendingTaskEvent\nto coordinate with loading indicators.",
          "name": "GameScoreForm",
          "cssParts": [
            {
              "description": "The form element",
              "name": "form"
            },
            {
              "description": "The \"Submit your score\" label",
              "name": "label"
            },
            {
              "description": "The name text input",
              "name": "input"
            },
            {
              "description": "The submit button",
              "name": "button"
            },
            {
              "description": "The confirmation message shown after successful submission",
              "name": "submitted"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: block; margin-top: 16px; } label { display: block; font-size: 14px; opacity: 0.6; margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.06em; } .row { display: flex; gap: 8px; justify-content: center; align-items: stretch; } input { width: 140px; padding: 8px 12px; font-size: 16px; font-family: inherit; font-weight: 700; text-transform: uppercase; text-align: center; letter-spacing: 0.1em; color: var(--game-text, #eee); background: color-mix(in srgb, currentColor 10%, transparent); border: 1px solid color-mix(in srgb, currentColor 25%, transparent); border-radius: 6px; } input:focus { outline: none; border-color: color-mix(in srgb, currentColor 50%, transparent); } button { padding: 8px 20px; font-size: 16px; font-weight: 700; border: 1px solid color-mix(in srgb, currentColor 25%, transparent); border-radius: 6px; background: color-mix(in srgb, currentColor 10%, transparent); color: var(--game-text, #fff); cursor: pointer; font-family: inherit; transition: border-color 0.15s ease; } button:hover:not(:disabled) { border-color: currentColor; } button:disabled { opacity: 0.5; cursor: default; } .submitted { font-size: 14px; opacity: 0.6; margin-top: 8px; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#submitted",
              "privacy": "private",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "field",
              "name": "#form",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#nameInput",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#submitBtn",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#msgEl",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "resultCallback",
              "parameters": [
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#updateForm",
              "privacy": "private",
              "parameters": [
                {
                  "name": "shell"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "PendingTaskEvent"
              },
              "description": "Wraps the score submission promise for loading coordination",
              "name": "pending-task"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Leaderboard score submission form",
          "tagName": "game-score-form",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameScoreForm",
            "module": "src/score-form.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-score-form",
          "declaration": {
            "name": "GameScoreForm",
            "module": "src/score-form.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/sequencer.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Musical sequencer that plays accelerating note patterns or rising\ntones during gameplay. Supports two modes: \"sequence\" (BPM-ramping\nnote loop synced to a timer) and \"hum\" (rising sine oscillator).\nAutomatically starts when the scene enters \"playing\" and stops on\npause or scene change.",
          "name": "GameSequencer",
          "members": [
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ notes: { type: \"string\" }, root: { type: \"number\", default: 261.63 }, \"start-bpm\": { type: \"number\", default: 72 }, \"end-bpm\": { type: \"number\", default: 160 }, gain: { type: \"number\", default: 0.07 }, type: { type: \"string\", default: \"marimba\" }, mode: { type: \"enum\", values: [\"sequence\", \"hum\"], default: \"sequence\" }, \"end-freq\": { type: \"number\", default: 220 }, \"silent-fraction\": { type: \"number\", default: 0.25 }, }"
            },
            {
              "kind": "field",
              "name": "#scheduler",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#step",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#nextTime",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#startTime",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#totalMs",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#humOsc",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#humGain",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#lastScene",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"\""
            },
            {
              "kind": "field",
              "name": "#muted",
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "#sync",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene }"
                }
              ]
            },
            {
              "kind": "field",
              "name": "#parsedNotes",
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "start"
            },
            {
              "kind": "method",
              "name": "#startSequence",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#startHum",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "stop"
            },
            {
              "kind": "method",
              "name": "#scheduleNote",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "notes",
              "type": {
                "text": "string"
              },
              "attribute": "notes"
            },
            {
              "kind": "field",
              "name": "root",
              "type": {
                "text": "number"
              },
              "attribute": "root",
              "default": "261.63"
            },
            {
              "kind": "field",
              "name": "startBpm",
              "type": {
                "text": "number"
              },
              "attribute": "start-bpm",
              "default": "72"
            },
            {
              "kind": "field",
              "name": "endBpm",
              "type": {
                "text": "number"
              },
              "attribute": "end-bpm",
              "default": "160"
            },
            {
              "kind": "field",
              "name": "gain",
              "type": {
                "text": "number"
              },
              "attribute": "gain",
              "default": "0.07"
            },
            {
              "kind": "field",
              "name": "type",
              "type": {
                "text": "string"
              },
              "attribute": "type",
              "default": "marimba"
            },
            {
              "kind": "field",
              "name": "mode",
              "type": {
                "text": "'sequence' | 'hum'"
              },
              "attribute": "mode",
              "default": "'sequence'"
            },
            {
              "kind": "field",
              "name": "endFreq",
              "type": {
                "text": "number"
              },
              "attribute": "end-freq",
              "default": "220"
            },
            {
              "kind": "field",
              "name": "silentFraction",
              "type": {
                "text": "number"
              },
              "attribute": "silent-fraction",
              "default": "0.25"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Background music sequencer (sequence or hum mode)",
          "tagName": "game-sequencer",
          "customElement": true,
          "attributes": [
            {
              "name": "notes",
              "type": {
                "text": "string"
              },
              "fieldName": "notes"
            },
            {
              "name": "root",
              "type": {
                "text": "number"
              },
              "fieldName": "root",
              "default": "261.63"
            },
            {
              "name": "start-bpm",
              "type": {
                "text": "number"
              },
              "fieldName": "startBpm",
              "default": "72"
            },
            {
              "name": "end-bpm",
              "type": {
                "text": "number"
              },
              "fieldName": "endBpm",
              "default": "160"
            },
            {
              "name": "gain",
              "type": {
                "text": "number"
              },
              "fieldName": "gain",
              "default": "0.07"
            },
            {
              "name": "type",
              "type": {
                "text": "string"
              },
              "fieldName": "type",
              "default": "marimba"
            },
            {
              "name": "mode",
              "type": {
                "text": "'sequence' | 'hum'"
              },
              "fieldName": "mode",
              "default": "'sequence'"
            },
            {
              "name": "end-freq",
              "type": {
                "text": "number"
              },
              "fieldName": "endFreq",
              "default": "220"
            },
            {
              "name": "silent-fraction",
              "type": {
                "text": "number"
              },
              "fieldName": "silentFraction",
              "default": "0.25"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameSequencer",
            "module": "src/sequencer.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-sequencer",
          "declaration": {
            "name": "GameSequencer",
            "module": "src/sequencer.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/share.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Share/copy-to-clipboard button for game results. Extracts the plain\ntext content of its light DOM children (collapsing blank lines) to\nbuild the share message. Use `<game-signal>` elements inside to\ninject live values. Falls back through Web Share API, Clipboard API,\nexecCommand, and finally a visible textarea.",
          "name": "GameShare",
          "cssProperties": [
            {
              "description": "Color of the button when the result has been copied",
              "name": "--game-share-copied",
              "default": "#6ee7b7"
            }
          ],
          "cssParts": [
            {
              "description": "The share button",
              "name": "button"
            },
            {
              "description": "The readonly textarea shown as a last-resort copy fallback",
              "name": "fallback"
            }
          ],
          "slots": [
            {
              "description": "Free-form share message content; `<game-signal>` elements are resolved to their text values",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: inline-flex; flex-direction: column; align-items: center; gap: 12px; } button { padding: 14px 40px; font-size: 18px; font-weight: 700; border: 2px solid color-mix(in srgb, currentColor 50%, transparent); border-radius: 8px; background: transparent; color: var(--game-text, #fff); cursor: pointer; transition: transform 0.15s ease, border-color 0.15s ease; font-family: inherit; } button:hover { border-color: currentColor; transform: scale(1.04); } button.copied { border-color: var(--game-share-copied, #6ee7b7); color: var(--game-share-copied, #6ee7b7); } textarea { display: none; width: 100%; max-width: 500px; padding: 10px 14px; font-size: 14px; font-family: inherit; color: var(--game-text, #eee); background: color-mix(in srgb, currentColor 10%, transparent); border: 1px solid color-mix(in srgb, currentColor 25%, transparent); border-radius: 6px; text-align: center; user-select: all; -webkit-user-select: all; resize: none; field-sizing: content; } textarea:focus { outline: none; border-color: color-mix(in srgb, currentColor 50%, transparent); } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#buildText",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Share/copy result button",
          "tagName": "game-share",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameShare",
            "module": "src/share.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-share",
          "declaration": {
            "name": "GameShare",
            "module": "src/share.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shell.js",
      "declarations": [
        {
          "kind": "function",
          "name": "groupParam"
        },
        {
          "kind": "function",
          "name": "appendGroupParam",
          "parameters": [
            {
              "name": "url"
            }
          ]
        },
        {
          "kind": "class",
          "description": "The root state machine and context provider for an HTMLGameKit game.\nManages game lifecycle (scenes), scoring, round progression, and\nreactive state via TC39 Signals. All child components access shared\ngame state through this element.",
          "name": "GameShell",
          "slots": [
            {
              "description": "Default slot; children are shown/hidden via manual slot assignment based on their `when-*` condition attributes",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ \"game-id\": { type: \"string\", prop: \"gameIdAttr\" }, rounds: { type: \"long\", default: 0, prop: \"roundsAttr\" }, \"score-order\": { type: \"enum\", values: [\"asc\", \"desc\"], default: \"asc\", prop: \"scoreOrderAttr\", }, \"between-delay\": { type: \"string\", default: \"500\", prop: \"betweenDelayAttr\", }, \"score-url\": { type: \"string?\" }, \"trophy-url\": { type: \"string?\" }, scenes: { type: \"string?\" }, \"storage-key\": { type: \"string?\", prop: \"storageKeyAttr\" }, \"sprite-sheet\": { type: \"string?\", prop: \"spriteSheetAttr\" }, \"session-save\": { type: \"boolean\" }, \"save-stats\": { type: \"enum\", values: [\"persist\", \"daily\"], missing: null, invalid: \"auto\", }, demo: { type: \"boolean\" }, group: { type: \"string?\" }, progression: { type: \"string?\" }, \"score-scale\": { type: \"long\", default: 1 }, }"
            },
            {
              "kind": "field",
              "name": "scene",
              "default": "new Signal.State(\"init\")"
            },
            {
              "kind": "field",
              "name": "round",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "rounds",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "score",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "roundScores",
              "default": "new Signal.State([])"
            },
            {
              "kind": "field",
              "name": "roundScore",
              "default": "new Signal.Computed(() => { const rs = this.roundScores.get(); return rs.length ? rs.at(-1) : 0; })"
            },
            {
              "kind": "field",
              "name": "bestRoundScore",
              "default": "new Signal.Computed(() => { const rs = this.roundScores.get(); return rs.length ? rs.reduce((a, b) => Math.max(a, b), -Infinity) : 0; })"
            },
            {
              "kind": "field",
              "name": "worstRoundScore",
              "default": "new Signal.Computed(() => { const rs = this.roundScores.get(); return rs.length ? rs.reduce((a, b) => Math.min(a, b), Infinity) : 0; })"
            },
            {
              "kind": "field",
              "name": "scoreOrder",
              "default": "new Signal.State(\"asc\")"
            },
            {
              "kind": "field",
              "name": "lastRoundPassed",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "lastFeedback",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "passStreak",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "failStreak",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "peakPassStreak",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "peakFailStreak",
              "default": "new Signal.State(0)"
            },
            {
              "kind": "field",
              "name": "difficulty",
              "default": "new Signal.State({})"
            },
            {
              "kind": "field",
              "name": "stats",
              "default": "new Signal.State({})"
            },
            {
              "kind": "field",
              "name": "storageKey",
              "default": "new Signal.State(\"\")"
            },
            {
              "kind": "field",
              "name": "gameId",
              "default": "new Signal.State(\"\")"
            },
            {
              "kind": "field",
              "name": "betweenDelay",
              "default": "new Signal.State(500)"
            },
            {
              "kind": "field",
              "name": "encodedResult",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "groupId",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "groupName",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "challenge",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "formatScoreSignal",
              "default": "new Signal.State(null)"
            },
            {
              "kind": "field",
              "name": "spriteSheet",
              "default": "new Signal.State(\"\")"
            },
            {
              "kind": "field",
              "name": "muted",
              "default": "new Signal.State(false)"
            },
            {
              "kind": "field",
              "name": "day",
              "default": "new Signal.Computed(() => Math.floor((Date.now() - Date.UTC(2025, 11, 31)) / 864e5), )"
            },
            {
              "kind": "field",
              "name": "#shadow",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#slot",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#customStates",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#allStates",
              "privacy": "private",
              "default": "new Set(BUILTIN_STATES)"
            },
            {
              "kind": "field",
              "name": "#scores",
              "privacy": "private",
              "default": "noopScores"
            },
            {
              "kind": "field",
              "name": "#progression",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#betweenTimer",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#encodeResult",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#decodeResult",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#trophyUnlocked",
              "privacy": "private",
              "default": "new Set()"
            },
            {
              "kind": "field",
              "name": "#trophyStorageKey",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"\""
            },
            {
              "kind": "field",
              "name": "#trophyService",
              "privacy": "private",
              "default": "noopTrophies"
            },
            {
              "kind": "field",
              "name": "#collections",
              "privacy": "private",
              "default": "new Map()"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#effectDisposers",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag",
                  "default": "\"game-shell\""
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ]
            },
            {
              "kind": "field",
              "name": "gameScores",
              "static": true,
              "default": "gameScores"
            },
            {
              "kind": "field",
              "name": "noopScores",
              "static": true,
              "default": "noopScores"
            },
            {
              "kind": "field",
              "name": "toBase64Url",
              "static": true,
              "default": "toBase64Url"
            },
            {
              "kind": "field",
              "name": "fromBase64Url",
              "static": true,
              "default": "fromBase64Url"
            },
            {
              "kind": "method",
              "name": "encodeUint16WithBitmask",
              "static": true,
              "parameters": [
                {
                  "name": "scale",
                  "default": "1",
                  "description": "Documented only; the shell stores the pre-scaled score.\nPass the same value used for `score-scale` as a hint to readers.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Returns an `encodeResult` function that packs the shell score and\nround pass/fail history into a compact binary URL token.\n\nByte layout: `[score:uint16be] [correct:uint8] [total:uint8] [bitmask:ceil(total/8)bytes]`\n\n- `score` is stored as `Math.round(state.score)` — pair with `score-scale` so\n  the shell stores the threshold pre-scaled.\n- `correct` is the count of truthy `roundScores` entries.\n- `total` is `roundScores.length`.\n- `bitmask` encodes each round as a single bit (1 = pass, 0 = fail), MSB first.\n\nUse when `roundScores` are pass/fail (0 or non-zero) and `score` is already\na fixed-point integer via `score-scale` (e.g. jnd=0.02, scale=100000 → score=2000).\n\nPair with `decodeUint16WithBitmask` using the same scale.",
              "return": {
                "type": {
                  "text": "function(object): string"
                }
              }
            },
            {
              "kind": "method",
              "name": "decodeUint16WithBitmask",
              "static": true,
              "parameters": [
                {
                  "name": "scale",
                  "default": "1",
                  "description": "Pass the same value used for `score-scale`.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Returns a `decodeResult` function matching `encodeUint16WithBitmask`.\nThe decoded object contains `{ score, strip }` where `strip` is a\nboolean array of per-round pass/fail results.",
              "return": {
                "type": {
                  "text": "function(string): {score: number, strip: boolean[]} | null"
                }
              }
            },
            {
              "kind": "method",
              "name": "encodeUint16Array",
              "static": true,
              "parameters": [
                {
                  "name": "scale",
                  "default": "1",
                  "description": "Documented only; pass the same value as `score-scale`.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                },
                {
                  "name": "roundCount",
                  "default": "null",
                  "description": "Fixed number of rounds to encode; null infers from `roundScores.length`.",
                  "optional": true,
                  "type": {
                    "text": "number|null"
                  }
                }
              ],
              "description": "Returns an `encodeResult` function that packs the shell score and all\nround scores into a compact binary URL token.\n\nByte layout: `[score:uint16be] [round0:uint16be] ... [roundN:uint16be]`\n\n- `score` and each `roundScores[i]` are stored as `Math.round(value)`.\n- Pair with `score-scale` so the shell stores values pre-scaled.\n- `roundCount` pads or truncates `roundScores` to a fixed length, which\n  is required for a stable URL format across games with a fixed round count.\n\nUse when `roundScores` are continuous values (e.g. per-round dE stored as\n`Math.round(dE * 10000)`).\n\nPair with `decodeUint16Array` using the same `roundCount`.",
              "return": {
                "type": {
                  "text": "function(object): string"
                }
              }
            },
            {
              "kind": "method",
              "name": "decodeUint16Array",
              "static": true,
              "parameters": [
                {
                  "name": "scale",
                  "default": "1",
                  "description": "Pass the same value as `score-scale`.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                },
                {
                  "name": "roundCount",
                  "description": "Must match the value used when encoding.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Returns a `decodeResult` function matching `encodeUint16Array`.\nThe decoded object contains `{ score, roundScores }` where `roundScores`\nis an array of scaled integer values.",
              "return": {
                "type": {
                  "text": "function(string): {score: number, roundScores: number[]} | null"
                }
              }
            },
            {
              "kind": "method",
              "name": "attributeChanged",
              "parameters": [
                {
                  "name": "name"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#parseBetweenDelay",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "scores"
            },
            {
              "kind": "field",
              "name": "progressionSet"
            },
            {
              "kind": "field",
              "name": "encodeResult"
            },
            {
              "kind": "field",
              "name": "decodeResult"
            },
            {
              "kind": "field",
              "name": "formatScore"
            },
            {
              "kind": "field",
              "name": "gameUrl",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "gameTitle",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "isTrophyUnlocked",
              "parameters": [
                {
                  "name": "id"
                }
              ]
            },
            {
              "kind": "field",
              "name": "trophyCount",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "addToCollection",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name (e.g. \"inventory\", \"visited\")",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "id",
                  "description": "Item ID to add",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Add an item to a named collection. Collections are generic sets of\nstring IDs, persisted to localStorage. Use for inventory, visited\nrooms, story flags, achievements, etc.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "removeFromCollection",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "id",
                  "description": "Item ID to remove",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Remove an item from a named collection.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "hasInCollection",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "id",
                  "description": "Item ID to check",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Check if an item exists in a named collection.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "collectionSize",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Get the number of items in a named collection.",
              "return": {
                "type": {
                  "text": "number"
                }
              }
            },
            {
              "kind": "method",
              "name": "collectionEntries",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Get all item IDs in a named collection.",
              "return": {
                "type": {
                  "text": "string[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "clearCollection",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Clear all items from a named collection."
            },
            {
              "kind": "method",
              "name": "isCollection",
              "parameters": [
                {
                  "name": "name",
                  "description": "Collection name",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Check whether a named collection has been registered (even if empty).\nUsed by the condition system to distinguish collection keys from\nsignal/stat keys.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "#saveCollection",
              "privacy": "private",
              "parameters": [
                {
                  "name": "name"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#loadCollection",
              "privacy": "private",
              "parameters": [
                {
                  "name": "name"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#effect",
              "privacy": "private",
              "parameters": [
                {
                  "name": "fn"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#init",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#restoreSession",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#restoreResult",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#stateSnapshot",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#roundPass",
              "privacy": "private",
              "parameters": [
                {
                  "name": "roundScore"
                },
                {
                  "name": "feedback"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#roundFail",
              "privacy": "private",
              "parameters": [
                {
                  "name": "reason"
                },
                {
                  "name": "retry"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#createProgression",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#loadTrophies",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#saveTrophies",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#syncRemoteTrophies",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#syncCustomStates",
              "privacy": "private",
              "parameters": [
                {
                  "name": "to"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#refreshCustomStates",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#advanceOrComplete",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#onResult",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "start"
            },
            {
              "kind": "method",
              "name": "pause"
            },
            {
              "kind": "method",
              "name": "resume"
            },
            {
              "kind": "field",
              "name": "gameIdAttr",
              "type": {
                "text": "string"
              },
              "attribute": "game-id"
            },
            {
              "kind": "field",
              "name": "roundsAttr",
              "type": {
                "text": "number"
              },
              "attribute": "rounds",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "scoreOrderAttr",
              "type": {
                "text": "'asc' | 'desc'"
              },
              "attribute": "score-order",
              "default": "'asc'"
            },
            {
              "kind": "field",
              "name": "betweenDelayAttr",
              "type": {
                "text": "string"
              },
              "attribute": "between-delay",
              "default": "500"
            },
            {
              "kind": "field",
              "name": "scoreUrl",
              "type": {
                "text": "string | null"
              },
              "attribute": "score-url"
            },
            {
              "kind": "field",
              "name": "trophyUrl",
              "type": {
                "text": "string | null"
              },
              "attribute": "trophy-url"
            },
            {
              "kind": "field",
              "name": "scenes",
              "type": {
                "text": "string | null"
              },
              "attribute": "scenes"
            },
            {
              "kind": "field",
              "name": "storageKeyAttr",
              "type": {
                "text": "string | null"
              },
              "attribute": "storage-key"
            },
            {
              "kind": "field",
              "name": "spriteSheetAttr",
              "type": {
                "text": "string | null"
              },
              "attribute": "sprite-sheet"
            },
            {
              "kind": "field",
              "name": "sessionSave",
              "type": {
                "text": "boolean"
              },
              "attribute": "session-save"
            },
            {
              "kind": "field",
              "name": "saveStats",
              "type": {
                "text": "'persist' | 'daily'"
              },
              "attribute": "save-stats"
            },
            {
              "kind": "field",
              "name": "demo",
              "type": {
                "text": "boolean"
              },
              "attribute": "demo"
            },
            {
              "kind": "field",
              "name": "group",
              "type": {
                "text": "string | null"
              },
              "attribute": "group"
            },
            {
              "kind": "field",
              "name": "progression",
              "type": {
                "text": "string | null"
              },
              "attribute": "progression"
            },
            {
              "kind": "field",
              "name": "scoreScale",
              "type": {
                "text": "number"
              },
              "attribute": "score-scale",
              "default": "1"
            }
          ],
          "events": [
            {
              "type": {
                "text": "GameLifecycleEvent"
              },
              "description": "Fires on every scene transition with the new scene name and a state snapshot",
              "name": "game-lifecycle"
            }
          ],
          "attributes": [
            {
              "type": {
                "text": "string"
              },
              "description": "Unique game identifier used for score storage and the scores API",
              "name": "game-id"
            },
            {
              "type": {
                "text": "number"
              },
              "description": "Fixed number of rounds; 0 means progression-controlled",
              "name": "rounds",
              "default": "0"
            },
            {
              "type": {
                "text": "\"asc\"|\"desc\""
              },
              "description": "Whether lower (asc) or higher (desc) scores are better",
              "name": "score-order",
              "default": "asc"
            },
            {
              "type": {
                "text": "string"
              },
              "description": "Ms to wait between rounds, or \"manual\" to advance programmatically",
              "name": "between-delay",
              "default": "500"
            },
            {
              "type": {
                "text": "string"
              },
              "description": "Base URL of the scores API",
              "name": "score-url"
            },
            {
              "type": {
                "text": "string"
              },
              "description": "localStorage key for persisting results; defaults to game-id",
              "name": "storage-key"
            },
            {
              "type": {
                "text": "boolean"
              },
              "description": "Start in demo/attract mode before the ready screen",
              "name": "demo"
            },
            {
              "type": {
                "text": "string"
              },
              "description": "Enables group/party play; value is the group key or omit for auto-key",
              "name": "group"
            },
            {
              "type": {
                "text": "string"
              },
              "description": "Progression algorithm: \"staircase\", \"tier\", or \"fixed\"",
              "name": "progression"
            },
            {
              "type": {
                "text": "number"
              },
              "description": "Integer multiplier applied to the progression's computed threshold before storing as `score`. Use when the threshold is a small float (e.g. a JND of 0.02) and you want to store it as a compact integer (0.02 × 100000 = 2000). Display formatting via `shell.formatScore` should divide by the same scale.",
              "name": "score-scale",
              "default": "1"
            },
            {
              "name": "trophy-url",
              "type": {
                "text": "string | null"
              },
              "fieldName": "trophyUrl"
            },
            {
              "name": "scenes",
              "type": {
                "text": "string | null"
              },
              "fieldName": "scenes"
            },
            {
              "name": "sprite-sheet",
              "type": {
                "text": "string | null"
              },
              "fieldName": "spriteSheetAttr"
            },
            {
              "name": "session-save",
              "type": {
                "text": "boolean"
              },
              "fieldName": "sessionSave"
            },
            {
              "name": "save-stats",
              "type": {
                "text": "'persist' | 'daily'"
              },
              "fieldName": "saveStats"
            }
          ],
          "cssStates": [
            {
              "description": "The game is in the initial loading state",
              "name": "init"
            },
            {
              "description": "The game is showing a demo/attract mode",
              "name": "demo"
            },
            {
              "description": "The game is ready to start",
              "name": "ready"
            },
            {
              "description": "The game is in practice mode",
              "name": "practice"
            },
            {
              "description": "A round is actively being played",
              "name": "playing"
            },
            {
              "description": "Between rounds, showing feedback",
              "name": "between"
            },
            {
              "description": "The game is complete, showing results",
              "name": "result"
            },
            {
              "description": "The game is paused",
              "name": "paused"
            }
          ],
          "superclass": {
            "name": "HTMLElement"
          },
          "summary": "Root game shell and state machine",
          "tagName": "game-shell",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "groupParam",
          "declaration": {
            "name": "groupParam",
            "module": "src/shell.js"
          }
        },
        {
          "kind": "js",
          "name": "appendGroupParam",
          "declaration": {
            "name": "appendGroupParam",
            "module": "src/shell.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameShell",
            "module": "src/shell.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-shell",
          "declaration": {
            "name": "GameShell",
            "module": "src/shell.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/tile-input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Wordle-style letter tile input. Renders a row of square tiles\nbacked by a hidden text input. Supports marking tiles with states\n(good, close, wrong, used, bad) and displaying results.",
          "name": "GameTileInput",
          "cssProperties": [
            {
              "description": "Gap between tiles",
              "name": "--game-tile-gap",
              "default": "6px"
            },
            {
              "description": "Font family for tile text",
              "name": "--game-tile-font",
              "default": "monospace"
            },
            {
              "description": "Width and height of each tile",
              "name": "--game-tile-size",
              "default": "40px"
            },
            {
              "description": "Border radius of each tile",
              "name": "--game-tile-radius",
              "default": "6px"
            },
            {
              "description": "Border color of empty tiles",
              "name": "--game-tile-border",
              "default": "rgba(255, 255, 255, 0.3)"
            },
            {
              "description": "Background color of empty tiles",
              "name": "--game-tile-bg",
              "default": "rgba(255, 255, 255, 0.05)"
            },
            {
              "description": "Text color of tiles",
              "name": "--game-tile-text",
              "default": "var(--game-text, #eee)"
            },
            {
              "description": "Border color of filled tiles",
              "name": "--game-tile-filled-border",
              "default": "rgba(255, 255, 255, 0.5)"
            },
            {
              "description": "Background color of filled tiles",
              "name": "--game-tile-filled-bg",
              "default": "rgba(255, 255, 255, 0.1)"
            },
            {
              "description": "Color of the cursor tile",
              "name": "--game-tile-cursor",
              "default": "#0b7285"
            },
            {
              "description": "Color for tiles marked as \"used\"",
              "name": "--game-tile-used",
              "default": "#4c6ef5"
            },
            {
              "description": "Color for tiles marked as \"bad\"",
              "name": "--game-tile-bad",
              "default": "#e03131"
            },
            {
              "description": "Color for tiles marked as \"good\" (correct position)",
              "name": "--game-tile-good",
              "default": "#2b8a3e"
            },
            {
              "description": "Color for tiles marked as \"close\" (wrong position)",
              "name": "--game-tile-close",
              "default": "#e67700"
            },
            {
              "description": "Color for tiles marked as \"wrong\" When used as a standalone element directly inside `<game-shell>`, the component automatically enables/disables itself based on the scene and clears and focuses on each new round. Set the `manual` attribute to suppress this behaviour when managing multiple rows yourself (e.g. a Wordle-style board where you control which row is active).",
              "name": "--game-tile-wrong",
              "default": "#c92a2a"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ length: { type: \"long\", default: 5 }, disabled: { type: \"boolean\" }, value: { type: \"string\" }, manual: { type: \"boolean\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: inline-block; font-family: var(--game-tile-font, monospace); user-select: none; -webkit-user-select: none; } :host([disabled]) { pointer-events: none; opacity: 0.5; } .tiles { display: inline-flex; gap: var(--game-tile-gap, 6px); } .tile { display: flex; align-items: center; justify-content: center; width: var(--game-tile-size, 40px); aspect-ratio: 1; border-radius: var(--game-tile-radius, 6px); border: 2px solid var(--game-tile-border, rgba(255, 255, 255, 0.3)); background: var(--game-tile-bg, rgba(255, 255, 255, 0.05)); color: var(--game-tile-text, var(--game-text, #eee)); font-size: calc(var(--game-tile-size, 40px) * 0.55); font-weight: 700; text-transform: uppercase; transition: background 0.1s ease, border-color 0.1s ease; box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.2); } .tile.filled { border-color: var(--game-tile-filled-border, rgba(255, 255, 255, 0.5)); background: var(--game-tile-filled-bg, rgba(255, 255, 255, 0.1)); } .tile.cursor { border-color: var(--game-tile-cursor, #0b7285); background: var(--game-tile-cursor, #0b7285); animation: tile-blink 1s linear infinite; } .tile.used { border-color: var(--game-tile-used, #4c6ef5); color: var(--game-tile-used, #4c6ef5); } .tile.bad { border-color: var(--game-tile-bad, #e03131); color: var(--game-tile-bad, #e03131); } .tile.good { border-color: var(--game-tile-good, #2b8a3e); background: var(--game-tile-good, #2b8a3e); color: #fff; } .tile.close { border-color: var(--game-tile-close, #e67700); background: var(--game-tile-close, #e67700); color: #fff; } .tile.wrong { border-color: var(--game-tile-wrong, #c92a2a); background: var(--game-tile-wrong, #c92a2a); color: #fff; } @keyframes tile-blink { 50% { background: var(--game-tile-border, rgba(255, 255, 255, 0.3)); } } input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "`<input type=\"text\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"><div class=\"tiles\"></div>`",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#input",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#tilesEl",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#tiles",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "#marks",
              "privacy": "private",
              "default": "new Map()"
            },
            {
              "kind": "field",
              "name": "value"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene, round }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "attributeChanged",
              "parameters": [
                {
                  "name": "name"
                }
              ]
            },
            {
              "kind": "method",
              "name": "mark",
              "parameters": [
                {
                  "name": "position"
                },
                {
                  "name": "letter"
                },
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "method",
              "name": "clearMarks"
            },
            {
              "kind": "method",
              "name": "focus"
            },
            {
              "kind": "method",
              "name": "clear"
            },
            {
              "kind": "method",
              "name": "setTile",
              "parameters": [
                {
                  "name": "index"
                },
                {
                  "name": "letter"
                },
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "method",
              "name": "showResult",
              "parameters": [
                {
                  "name": "letters"
                },
                {
                  "name": "states"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#buildTiles",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#render",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "length",
              "type": {
                "text": "number"
              },
              "attribute": "length",
              "default": "5"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "attribute": "disabled"
            },
            {
              "kind": "field",
              "name": "manual",
              "type": {
                "text": "boolean"
              },
              "attribute": "manual"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "GameTileInputEvent"
              },
              "description": "Fires on each character input with the current value and cursor position",
              "name": "game-tile-input"
            },
            {
              "type": {
                "text": "GameTileSubmitEvent"
              },
              "description": "Fires when Enter is pressed with a complete word",
              "name": "game-tile-submit"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Letter tile input grid (Wordle-style)",
          "tagName": "game-tile-input",
          "customElement": true,
          "attributes": [
            {
              "name": "length",
              "type": {
                "text": "number"
              },
              "fieldName": "length",
              "default": "5"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value"
            },
            {
              "name": "manual",
              "type": {
                "text": "boolean"
              },
              "fieldName": "manual"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameTileInput",
            "module": "src/tile-input.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-tile-input",
          "declaration": {
            "name": "GameTileInput",
            "module": "src/tile-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/timer.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A visual countdown bar that tracks elapsed time during a round.\nRenders as a shrinking horizontal bar that changes color as time\nruns out. Automatically starts/stops/pauses with the game scene.",
          "name": "GameTimer",
          "cssProperties": [
            {
              "description": "Color of the timer bar in the normal phase",
              "name": "--game-timer-bar",
              "default": "var(--game-accent, #fff)"
            },
            {
              "description": "Color of the timer bar in the warn phase",
              "name": "--game-timer-warn",
              "default": "#f59e0b"
            },
            {
              "description": "Color of the timer bar in the danger phase",
              "name": "--game-timer-danger",
              "default": "#ef4444"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ duration: { type: \"number\", default: 10 }, countdown: { type: \"long\", default: 0 }, \"warn-at\": { type: \"number\", default: 0.6 }, \"danger-at\": { type: \"number\", default: 0.8 }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: block; position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 11; --game-timer-bar: var(--game-accent, #fff); --game-timer-warn: #f59e0b; --game-timer-danger: #ef4444; } .bar { height: 100%; background: var(--game-timer-bar); transition: background 0.3s ease; will-change: width; } :host(:state(warn)) .bar { background: var(--game-timer-warn); } :host(:state(danger)) .bar { background: var(--game-timer-danger); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "'<div class=\"bar\"></div><span class=\"sr-only\" role=\"timer\" aria-live=\"assertive\"></span>'",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#bar",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#lastCountdownSec",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1"
            },
            {
              "kind": "field",
              "name": "#elapsed",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#lastTickTime",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#raf",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#running",
              "privacy": "private",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "field",
              "name": "#prevScene",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\""
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "start"
            },
            {
              "kind": "method",
              "name": "stop"
            },
            {
              "kind": "method",
              "name": "reset"
            },
            {
              "kind": "method",
              "name": "#pause",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#resume",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#setPhase",
              "privacy": "private",
              "parameters": [
                {
                  "name": "phase"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#tick",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "duration",
              "type": {
                "text": "number"
              },
              "attribute": "duration",
              "default": "10"
            },
            {
              "kind": "field",
              "name": "countdown",
              "type": {
                "text": "number"
              },
              "attribute": "countdown",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "warnAt",
              "type": {
                "text": "number"
              },
              "attribute": "warn-at",
              "default": "0.6"
            },
            {
              "kind": "field",
              "name": "dangerAt",
              "type": {
                "text": "number"
              },
              "attribute": "danger-at",
              "default": "0.8"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "GameTimerTickEvent"
              },
              "description": "Fires on every animation frame with remaining time and elapsed fraction",
              "name": "game-timer-tick"
            },
            {
              "type": {
                "text": "GameTimerExpiredEvent"
              },
              "description": "Fires when the timer reaches zero",
              "name": "game-timer-expired"
            },
            {
              "type": {
                "text": "GameTimerCountdownEvent"
              },
              "description": "Fires each second during the final countdown phase",
              "name": "game-timer-countdown"
            }
          ],
          "cssStates": [
            {
              "description": "Timer is in the normal phase",
              "name": "ok"
            },
            {
              "description": "Timer has passed the warn-at threshold",
              "name": "warn"
            },
            {
              "description": "Timer has passed the danger-at threshold",
              "name": "danger"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Round timer with visual progress bar",
          "tagName": "game-timer",
          "customElement": true,
          "attributes": [
            {
              "name": "duration",
              "type": {
                "text": "number"
              },
              "fieldName": "duration",
              "default": "10"
            },
            {
              "name": "countdown",
              "type": {
                "text": "number"
              },
              "fieldName": "countdown",
              "default": "0"
            },
            {
              "name": "warn-at",
              "type": {
                "text": "number"
              },
              "fieldName": "warnAt",
              "default": "0.6"
            },
            {
              "name": "danger-at",
              "type": {
                "text": "number"
              },
              "fieldName": "dangerAt",
              "default": "0.8"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameTimer",
            "module": "src/timer.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-timer",
          "declaration": {
            "name": "GameTimer",
            "module": "src/timer.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/toast.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Animated toast notification that displays contextual messages during\ngameplay. Options are selected by matching `when-*` conditions against\nlive shell signals — including `when-min-pass-streak`, `when-prob`, etc.\nOptions sharing identical `when-*` conditions are treated as a pool and\ncycled without repetition until exhausted. Falls back through each\neligible option group in document order.",
          "name": "GameToast",
          "cssProperties": [
            {
              "description": "Font size of the toast text",
              "name": "--game-toast-size"
            },
            {
              "description": "Text color of the toast",
              "name": "--game-toast-color",
              "default": "var(--game-text, #eee)"
            },
            {
              "description": "Animation duration for non-persistent toasts",
              "name": "--game-toast-duration",
              "default": "1s"
            },
            {
              "description": "Background color for bottom/top/inline persistent toasts",
              "name": "--game-toast-bg",
              "default": "rgba(0, 0, 0, 0.6)"
            }
          ],
          "cssParts": [
            {
              "description": "The persistent message container",
              "name": "persist"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ trigger: { type: \"string\" }, persist: { type: \"boolean\" }, duration: { type: \"string?\" }, value: { type: \"string?\" }, \"use-feedback\": { type: \"boolean\" }, \"set-feedback\": { type: \"boolean\" }, position: { type: \"enum\", values: [\"center\", \"bottom\", \"top\", \"inline\"], default: \"center\", }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { position: fixed; z-index: 50; pointer-events: none; display: flex; flex-direction: column; align-items: center; gap: 4px; } :host(:not([position])), :host([position=\"center\"]) { top: 50%; left: 50%; transform: translate(-50%, -50%); } :host([position=\"bottom\"]) { bottom: max(24px, env(safe-area-inset-bottom)); left: 50%; transform: translateX(-50%); } :host([position=\"top\"]) { top: max(80px, calc(env(safe-area-inset-top) + 56px)); left: 50%; transform: translateX(-50%); } :host([position=\"inline\"]) { position: static; z-index: auto; transform: none; } .toast { font-size: var(--game-toast-size, clamp(18px, 3vw, 28px)); font-weight: 800; color: var(--game-toast-color, var(--game-text, #eee)); text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); white-space: nowrap; opacity: 0; animation: toast-float var(--game-toast-duration, 1s) ease-out forwards; pointer-events: none; } .persist { animation: none; font-size: var(--game-toast-size, clamp(28px, 5vw, 64px)); font-weight: 900; color: var(--game-toast-color, var(--game-text, #eee)); text-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); text-align: center; pointer-events: none; white-space: nowrap; opacity: 0; transition: opacity 0.3s ease; } :host([position=\"bottom\"]) .persist, :host([position=\"top\"]) .persist, :host([position=\"inline\"]) .persist { font-size: var(--game-toast-size, clamp(13px, 1.8vw, 17px)); font-weight: 600; color: var(--game-toast-color, rgba(255, 255, 255, 0.85)); background: var(--game-toast-bg, rgba(0, 0, 0, 0.6)); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); padding: 8px 20px; border-radius: 8px; text-shadow: none; } .persist:empty { display: none; } .persist.show { opacity: 1; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @keyframes toast-float { 0% { opacity: 0; transform: translateY(0); } 12% { opacity: 1; } 70% { opacity: 1; } 100% { opacity: 0; transform: translateY(-40px); } } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "'<div class=\"persist\" part=\"persist\"></div><div class=\"sr-only\" role=\"status\" aria-live=\"polite\"></div>'",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#used",
              "privacy": "private",
              "default": "new Map()"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene, round }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "show",
              "parameters": [
                {
                  "name": "text"
                },
                {
                  "name": "opts",
                  "default": "{}"
                }
              ]
            },
            {
              "kind": "method",
              "name": "hide"
            },
            {
              "kind": "method",
              "name": "triggerCallback",
              "parameters": [
                {
                  "name": "triggerName"
                },
                {
                  "name": "event"
                }
              ]
            },
            {
              "kind": "field",
              "name": "trigger",
              "type": {
                "text": "string"
              },
              "attribute": "trigger"
            },
            {
              "kind": "field",
              "name": "persist",
              "type": {
                "text": "boolean"
              },
              "attribute": "persist"
            },
            {
              "kind": "field",
              "name": "duration",
              "type": {
                "text": "string | null"
              },
              "attribute": "duration"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string | null"
              },
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "useFeedback",
              "type": {
                "text": "boolean"
              },
              "attribute": "use-feedback"
            },
            {
              "kind": "field",
              "name": "setFeedback",
              "type": {
                "text": "boolean"
              },
              "attribute": "set-feedback"
            },
            {
              "kind": "field",
              "name": "position",
              "type": {
                "text": "'center' | 'bottom' | 'top' | 'inline'"
              },
              "attribute": "position",
              "default": "'center'"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Trigger-activated toast notifications",
          "tagName": "game-toast",
          "customElement": true,
          "attributes": [
            {
              "name": "trigger",
              "type": {
                "text": "string"
              },
              "fieldName": "trigger"
            },
            {
              "name": "persist",
              "type": {
                "text": "boolean"
              },
              "fieldName": "persist"
            },
            {
              "name": "duration",
              "type": {
                "text": "string | null"
              },
              "fieldName": "duration"
            },
            {
              "name": "value",
              "type": {
                "text": "string | null"
              },
              "fieldName": "value"
            },
            {
              "name": "use-feedback",
              "type": {
                "text": "boolean"
              },
              "fieldName": "useFeedback"
            },
            {
              "name": "set-feedback",
              "type": {
                "text": "boolean"
              },
              "fieldName": "setFeedback"
            },
            {
              "name": "position",
              "type": {
                "text": "'center' | 'bottom' | 'top' | 'inline'"
              },
              "fieldName": "position",
              "default": "'center'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameToast",
            "module": "src/toast.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-toast",
          "declaration": {
            "name": "GameToast",
            "module": "src/toast.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/trophies.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "noopTrophies",
          "type": {
            "text": "object"
          },
          "default": "{ fetchTrophies() { return Promise.resolve([]); }, unlockTrophy() { return Promise.resolve(false); }, get playerId() { return null; }, }"
        },
        {
          "kind": "function",
          "name": "gameTrophies",
          "parameters": [
            {
              "name": "gameId",
              "description": "Unique identifier for this game",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "{ baseUrl = \"\" }",
              "default": "{}"
            },
            {
              "name": "options",
              "optional": true,
              "type": {
                "text": "@param {string} [options.baseUrl] - Trophy server base URL\n * "
              }
            }
          ],
          "description": "Create a trophy persistence service for a game. Syncs trophy unlocks\nwith a remote server so they persist across devices and browsers.\n\nPlayers are identified by a UUID stored in localStorage and sent as\nan `Authorization: Bearer {uuid}` header. On first contact with no\nstored ID, the server generates one and returns it in the `player`\nfield of the JSON response body.",
          "return": {
            "type": {
              "text": "object"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "noopTrophies",
          "declaration": {
            "name": "noopTrophies",
            "module": "src/trophies.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "gameTrophies",
            "module": "src/trophies.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/trophy.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "GameTrophyUnlockEvent",
          "members": [
            {
              "kind": "field",
              "name": "trophyId",
              "default": "id"
            },
            {
              "kind": "field",
              "name": "trophyName",
              "default": "name"
            }
          ],
          "superclass": {
            "name": "Event",
            "module": "src/trophy.js"
          }
        },
        {
          "kind": "class",
          "description": "Displays a trophy with locked/unlocked visual state. Trophies start\nlocked (greyed out) and unlock automatically on the result scene when\ntheir `when-*` conditions are satisfied. Unlocked state is persisted\nto localStorage via the shell. Clicking shows a tooltip with the\ndescription.",
          "name": "GameTrophy",
          "cssProperties": [
            {
              "description": "Icon color when the trophy is unlocked",
              "name": "--game-trophy-color",
              "default": "#fbbf24"
            }
          ],
          "cssParts": [
            {
              "description": "The icon container",
              "name": "icon"
            },
            {
              "description": "The trophy name label",
              "name": "name"
            },
            {
              "description": "The description tooltip",
              "name": "tooltip"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ name: { type: \"string\" }, icon: { type: \"string\" }, description: { type: \"string\" }, }"
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "default": "css` :host { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 10px 6px; border-radius: 10px; text-align: center; transition: background 0.2s ease; cursor: default; position: relative; opacity: 0.3; filter: grayscale(1); } :host(:state(unlocked)) { opacity: 1; filter: none; background: linear-gradient( 135deg, rgba(254, 249, 195, 0.15), rgba(254, 243, 199, 0.08) ); } .icon { --game-icon-size: 36px; color: var(--game-text, #eee); } :host(:state(unlocked)) .icon { color: var(--game-trophy-color, #fbbf24); } .name { font-size: 11px; font-weight: 700; line-height: 1.2; color: var(--game-text, #eee); } .tooltip { display: none; position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); background: rgba(0, 0, 0, 0.9); color: var(--game-text, #eee); padding: 6px 10px; border-radius: 6px; font-size: 12px; white-space: nowrap; pointer-events: none; z-index: 10; } :host(:hover) .tooltip, :host(:state(show-tip)) .tooltip { display: block; } `",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "\"<slot></slot>\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#states",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "trophyId",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "unlock"
            },
            {
              "kind": "field",
              "name": "unlocked",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "#hasConditions",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "name",
              "type": {
                "text": "string"
              },
              "attribute": "name"
            },
            {
              "kind": "field",
              "name": "icon",
              "type": {
                "text": "string"
              },
              "attribute": "icon"
            },
            {
              "kind": "field",
              "name": "description",
              "type": {
                "text": "string"
              },
              "attribute": "description"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "GameTrophyUnlockEvent"
              },
              "description": "Fires when the trophy is unlocked for the first time",
              "name": "game-trophy-unlock"
            }
          ],
          "cssStates": [
            {
              "description": "The trophy has been unlocked",
              "name": "unlocked"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Achievement trophy with auto-unlock conditions",
          "tagName": "game-trophy",
          "customElement": true,
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "fieldName": "icon"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "fieldName": "description"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "GameTrophyUnlockEvent",
          "declaration": {
            "name": "GameTrophyUnlockEvent",
            "module": "src/trophy.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameTrophy",
            "module": "src/trophy.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-trophy",
          "declaration": {
            "name": "GameTrophy",
            "module": "src/trophy.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/words.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "gameWordContext"
        },
        {
          "kind": "class",
          "description": "Word source for word-guessing games. Fetches words from a compatible\nwords API (e.g. `words.htmlgamekit.dev`) and distributes the current\nword to child components via context. Optionally validates submitted\nguesses against the API's `/lookup` endpoint before they are processed.\n\nIn `daily` mode the shell's `game-id` is automatically used as a seed\n(`?day&seed=game-id`), so different games on the same API get different\nwords of the day.\n\nOnly one `<game-word-source>` should exist per `<game-shell>`.\n\nThe current word is available to JS via `.word`, and to child custom\nelements via `subscribe(gameWordContext, cb)`.",
          "name": "GameWordSource",
          "members": [
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "attrs",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ \"words-url\": { type: \"string?\" }, length: { type: \"long\", default: 5 }, theme: { type: \"string?\" }, mode: { type: \"enum\", values: [\"daily\", \"random\", \"per-round\"], default: \"daily\", }, validate: { type: \"boolean\" }, }"
            },
            {
              "kind": "field",
              "name": "#provider",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#word",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"\""
            },
            {
              "kind": "field",
              "name": "#dailyWord",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"\""
            },
            {
              "kind": "field",
              "name": "#fetchAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "word",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "#validated",
              "privacy": "private",
              "default": "new WeakSet()"
            },
            {
              "kind": "method",
              "name": "effectCallback",
              "parameters": [
                {
                  "name": "{ scene, round, roundScores }"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#buildUrl",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#fetch",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "#validateGuess",
              "privacy": "private",
              "parameters": [
                {
                  "name": "guess"
                }
              ]
            },
            {
              "kind": "field",
              "name": "wordsUrl",
              "type": {
                "text": "string | null"
              },
              "attribute": "words-url"
            },
            {
              "kind": "field",
              "name": "length",
              "type": {
                "text": "number"
              },
              "attribute": "length",
              "default": "5"
            },
            {
              "kind": "field",
              "name": "theme",
              "type": {
                "text": "string | null"
              },
              "attribute": "theme"
            },
            {
              "kind": "field",
              "name": "mode",
              "type": {
                "text": "'daily' | 'random' | 'per-round'"
              },
              "attribute": "mode",
              "default": "'daily'"
            },
            {
              "kind": "field",
              "name": "validate",
              "type": {
                "text": "boolean"
              },
              "attribute": "validate"
            },
            {
              "kind": "field",
              "name": "#abort",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#shell",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevState",
              "privacy": "private",
              "type": {
                "text": "string"
              },
              "default": "\"init\"",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#prevTierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "-1",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "#domAbort",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "static": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "define",
              "static": true,
              "parameters": [
                {
                  "name": "tag"
                },
                {
                  "name": "registry",
                  "default": "customElements"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "abort",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "signal",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "field",
              "name": "shell",
              "readonly": true,
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "subscribe",
              "parameters": [
                {
                  "name": "context"
                },
                {
                  "name": "callback"
                }
              ],
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#bindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            },
            {
              "kind": "method",
              "name": "#unbindDomTriggers",
              "privacy": "private",
              "inheritedFrom": {
                "name": "GameComponent",
                "module": "src/component.js"
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "PendingTaskEvent"
              },
              "description": "Wraps each word fetch for loading coordination",
              "name": "pending-task"
            }
          ],
          "superclass": {
            "name": "GameComponent",
            "module": "/src/component.js"
          },
          "summary": "Word fetch and distribution for word-guessing games",
          "tagName": "game-word-source",
          "customElement": true,
          "attributes": [
            {
              "name": "words-url",
              "type": {
                "text": "string | null"
              },
              "fieldName": "wordsUrl"
            },
            {
              "name": "length",
              "type": {
                "text": "number"
              },
              "fieldName": "length",
              "default": "5"
            },
            {
              "name": "theme",
              "type": {
                "text": "string | null"
              },
              "fieldName": "theme"
            },
            {
              "name": "mode",
              "type": {
                "text": "'daily' | 'random' | 'per-round'"
              },
              "fieldName": "mode",
              "default": "'daily'"
            },
            {
              "name": "validate",
              "type": {
                "text": "boolean"
              },
              "fieldName": "validate"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "gameWordContext",
          "declaration": {
            "name": "gameWordContext",
            "module": "src/words.js"
          }
        },
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "GameWordSource",
            "module": "src/words.js"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "game-word-source",
          "declaration": {
            "name": "GameWordSource",
            "module": "src/words.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/progressions/fixed.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "FixedProgression",
          "members": [
            {
              "kind": "field",
              "name": "#rounds",
              "privacy": "private",
              "default": "rounds"
            },
            {
              "kind": "field",
              "name": "#params",
              "privacy": "private",
              "default": "params"
            },
            {
              "kind": "method",
              "name": "init",
              "parameters": [
                {
                  "name": "rounds"
                }
              ]
            },
            {
              "kind": "method",
              "name": "afterRound",
              "parameters": [
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "method",
              "name": "#interpolate",
              "privacy": "private",
              "parameters": [
                {
                  "name": "t"
                },
                {
                  "name": "rounds"
                }
              ]
            }
          ]
        },
        {
          "kind": "variable",
          "name": "rounds"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "FixedProgression",
            "module": "src/progressions/fixed.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/progressions/staircase.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "StaircaseProgression",
          "members": [
            {
              "kind": "field",
              "name": "#levels",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#triesPerLevel",
              "privacy": "private",
              "default": "triesPerLevel"
            },
            {
              "kind": "field",
              "name": "#reversalsToStop",
              "privacy": "private",
              "default": "reversalsToStop"
            },
            {
              "kind": "field",
              "name": "#maxTrials",
              "privacy": "private",
              "default": "maxTrials"
            },
            {
              "kind": "field",
              "name": "#correctToAdvance",
              "privacy": "private",
              "default": "correctToAdvance"
            },
            {
              "kind": "field",
              "name": "#maxFloorVisits",
              "privacy": "private",
              "default": "maxFloorVisits"
            },
            {
              "kind": "field",
              "name": "#levelIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#reversals",
              "privacy": "private",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "#lastDirection",
              "privacy": "private",
              "type": {
                "text": "null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "#triedAtLevel",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#correctAtLevel",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#floorVisits",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#totalTrials",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "method",
              "name": "computeLevels",
              "static": true,
              "parameters": [
                {
                  "name": "start"
                },
                {
                  "name": "end"
                },
                {
                  "name": "steps"
                },
                {
                  "name": "scale",
                  "default": "\"log\""
                }
              ]
            },
            {
              "kind": "method",
              "name": "init"
            },
            {
              "kind": "method",
              "name": "afterRound",
              "parameters": [
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "method",
              "name": "computeThreshold"
            },
            {
              "kind": "field",
              "name": "reversals",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "levelIndex",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "#snapshot",
              "privacy": "private"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "StaircaseProgression",
            "module": "src/progressions/staircase.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/progressions/tier.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "TierProgression",
          "members": [
            {
              "kind": "field",
              "name": "#tiers",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#promoteAfter",
              "privacy": "private",
              "default": "promoteAfter"
            },
            {
              "kind": "field",
              "name": "#points",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "#tierIndex",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#peakTier",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "#consecutiveCorrect",
              "privacy": "private",
              "type": {
                "text": "number"
              },
              "default": "0"
            },
            {
              "kind": "field",
              "name": "tiers",
              "default": "tiers"
            },
            {
              "kind": "method",
              "name": "init"
            },
            {
              "kind": "method",
              "name": "afterRound",
              "parameters": [
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "field",
              "name": "tierIndex",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "peakTier",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "#snapshot",
              "privacy": "private"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "default",
          "declaration": {
            "name": "TierProgression",
            "module": "src/progressions/tier.js"
          }
        }
      ]
    }
  ]
}
