    /* the playlist-FILE door, the fifth: the phone's own document picker,
       and the picked document's NAME deciding both the format and the
       draft's title — then the two answers a picker can give that are not a
       file, armed through the mock's fail door */
    { do: `__click('.newpl', 'Import')`, name: "import-file-sheet", wait: 700 },
    { do: `__click('.halfsheet .row', 'Playlist file')`, name: "import-file-review", wait: 2200 },
    { do: `__click('.imp-foot .btn-fill', 'Create playlist')`, name: "import-file-created", wait: 1500 },
    { do: `history.back()`, wait: 900 },
    { do: `__ssMock.fail('plugin:storage|pick_file', 'cancelled')`, wait: 200 },
    { do: `__click('.newpl', 'Import')`, wait: 700 },
    { do: `__click('.halfsheet .row', 'Playlist file')`, name: "import-file-cancelled", wait: 1400 },
    { do: `__ssMock.fail('plugin:storage|pick_file', 'that file is not on this phone')`, wait: 200 },
    { do: `__click('.newpl', 'Import')`, wait: 700 },
    { do: `__click('.halfsheet .row', 'Playlist file')`, name: "import-file-refused", wait: 1400 },
    /* disarmed and the red dismissed, or every step after this one inherits
       both — the toast stays until it is tapped */
    { do: `__ssMock.fail('plugin:storage|pick_file', '')`, wait: 200 },
    { do: `(function () { var t = document.querySelector('.toast:not(.notice)'); if (t) t.click(); return true; })()`, name: "import-file-cleared", wait: 600 },
