curl 'https://api.duocards.com/graphql?cardsQuery' \
  -X POST \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0' \
  -H 'Accept: */*' \
  -H 'Accept-Language: en-US,en;q=0.5' \
  -H 'Accept-Encoding: gzip, deflate, br, zstd' \
  -H 'Referer: https://app.duocards.com/' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer (skip)' \
  -H 'x-js-version: 2025-06-04T14:06:15.707Z' \
  -H 'x-app-version: undefined' \
  -H 'Origin: https://app.duocards.com' \
  -H 'Connection: keep-alive' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-site' \
  -H 'Priority: u=0' \
  --data-raw '{"query":"query cardsQuery(\n  $count: Int!\n  $cursor: String\n  $deckId: ID!\n  $search: String\n  $cardState: CardState\n) {\n  node(id: $deckId) {\n    __typename\n    ...cardsQuery_Deck_1yGN6X\n    id\n  }\n}\n\nfragment cardsQuery_Deck_1yGN6X on Deck {\n  cards(first: $count, after: $cursor, search: $search, cardState: $cardState) {\n    edges {\n      node {\n        id\n        sCardId\n        sBackId\n        sourceId\n        front\n        back\n        hint\n        waiting\n        knownCount\n        source {\n          kind\n          course\n          id\n        }\n        sCard {\n          theory {\n            sCardId\n            theory\n            theoryIsChecked\n            theoryNative\n            theoryNativeIsChecked\n            theoryEn\n            lang\n            langNative\n            canEdit\n          }\n          id\n        }\n        svg {\n          flatId\n          url\n          id\n        }\n        __typename\n      }\n      cursor\n    }\n    pageInfo {\n      endCursor\n      hasNextPage\n    }\n  }\n  id\n}\n","variables":{"count":30,"cursor":null,"deckId":"RGVjazo0NmYyYjllZC1hYmYzLTRiZDgtYTA1NC02OGRmYTRhNDIwM2U=","search":"","cardState":null}}'
