{
  "artboards": [
    { "file": "Main.dc.html",     "x": 0,    "y": 0,    "w": 1440, "h": 980,  "title": "Screen — the dense grid",        "is_interactive": true },
    { "file": "Logbook.dc.html",  "x": 1560, "y": 0,    "w": 900,  "h": 1160, "title": "Logbook — one name, shown work", "is_interactive": true },
    { "file": "Loadout.dc.html",  "x": 0,    "y": 1300, "w": 1440, "h": 880,  "title": "Loadout — pick your lenses",     "is_interactive": true },
    { "file": "Mobile.dc.html",   "x": 1560, "y": 1300, "w": 390,  "h": 844,  "title": "Phone — cards, plain language",  "is_interactive": true },
    { "file": "RunState.dc.html", "x": 2070, "y": 1300, "w": 1440, "h": 760,  "title": "Empty + scanning states",        "is_interactive": true }
  ],
  "annotations": [
    { "id": "note-screen", "x": 0, "y": -160, "w": 620,
      "text": "THE SCREEN\nBorrowed from TradingView: column presets (Overview / Value / Momentum / Squeeze), filter chips that apply instantly, saved screens, sortable dense rows, a real status line.\n\nThe game layer earns its keep: rarity is the strongest SINGLE-lens fit, so it answers a different question than the score. Try it — click BEST LENS or SCORE to sort, toggle a rarity chip, then change the loadout at the bottom and watch the order move." },
    { "id": "note-logbook", "x": 1560, "y": -160, "w": 620,
      "text": "THE LOGBOOK\nToday the composite is a number with no explanation, and the deep dive is four columns of tiny captions.\n\nThis shows its work: every sub-signal with its real name, raw value, 0..1 contribution and actual weight from screener/strategies/*.py — and missing Yahoo fields called out as VOID with the weight visibly removed, instead of quietly vanishing into an average. The four lens tabs and the three loadout chips both work." },
    { "id": "note-loadout", "x": 0, "y": 1060, "w": 620,
      "text": "THE LOADOUT\nReplaces four unlabelled 0.0–2.0 sliders in the sidebar. Each lens gets a plain-English description, its real signal list, and five stacks instead of twenty steps — then a live top-five so you can see the weight actually do something. Arrows show the move against an even loadout." },
    { "id": "note-phone", "x": 1560, "y": 1180, "w": 400,
      "text": "THE PHONE\nThe Wealthsimple half — cards instead of a grid, one idea per row, plain language over jargon, and the full breakdown only on tap. Every hit target is 44px or more." },
    { "id": "note-run", "x": 2070, "y": 1180, "w": 620,
      "text": "EMPTY + SCANNING\nCurrently one st.info line and a bare progress bar. Press CHARGE TELEPORTER — the scan log is the point: it says when Yahoo throttles and which names came back too thin, so a slow scan stops looking broken." }
  ],
  "launch": { "view": "canvas" }
}
