[
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Typescript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# dotenv environment variables file\n.env.*\n\n# gatsby files\n.cache/\npublic\n\n# Mac files\n.DS_Store\n\n# Yarn\nyarn-error.log\n.pnp/\n.pnp.js\n# Yarn Integrity file\n.yarn-integrity\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Vojta Holik\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Gatsby Theme Simplecast\n\n### [→ Preview](https://gatsby-theme-simplecast.netlify.com)\n\n<img src=\"https://cl.ly/c53006ad1d5d/ezgif.com-optimize%252520(1).gif\" />\n\n## Running demo\n- `yarn`\n- `yarn workspace demo develop`\n\n## Using theme\n- [Read me →](https://github.com/vojtaholik/gatsby-theme-simplecast/blob/master/gatsby-theme-simplecast/README.md)"
  },
  {
    "path": "demo/content/episodes/1/index.md",
    "content": "---\nid: a\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nresources: ['[Link](/)','[Link](/)','[Link](/)']\nguestName: 'Anna Doe'\nguestSummary: '[Twitter](/)'\nimage: null\nguestPhoto: ./guest.png\n---\n\nGround round pork shoulder buffalo, short ribs chuck bresaola doner pig burgdoggen andouille turducken shankle strip steak fatback. Beef alcatra swine boudin corned beef drumstick hamburger tri-tip shankle. Meatball leberkas strip steak, burgdoggen biltong swine boudin. T-bone short ribs sausage tri-tip, rump pancetta bacon filet mignon jowl turducken ham.\n\nTri-tip bacon cow rump. Andouille pig fatback kielbasa, venison bacon burgdoggen sirloin sausage tri-tip ground round frankfurter pork chop. Kielbasa shoulder hamburger salami drumstick pork tail landjaeger meatball burgdoggen ribeye pork belly cupim beef ribs. Biltong bacon bresaola, ribeye shank turducken pancetta beef ribs turkey t-bone. Biltong jerky buffalo venison ground round boudin. Picanha fatback t-bone, boudin capicola sirloin biltong."
  },
  {
    "path": "demo/content/episodes/2/index.md",
    "content": "---\nid: b\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nimage: './banner.png'\nguestName: 'Charlie Doe'\nguestSummary: 'Lorem ipsum dolor sit amet. [Twitter](/)'\nguestPhoto: './guest.png'\n---\n\nMaecenas a augue vitae mauris interdum accumsan. Morbi auctor velit sed justo tempor, nec blandit purus iaculis. In hac habitasse platea dictumst. Ut in rutrum justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ullamcorper libero id sapien eleifend, et ornare lectus rhoncus. Donec tempor dapibus metus, quis ornare diam rhoncus eget. Ut molestie cursus ornare. Aenean iaculis eget enim congue vestibulum. Curabitur imperdiet nisi quis interdum auctor.\n\nVivamus semper consectetur purus, at blandit nibh congue vel. Phasellus rhoncus, leo et commodo tempus, quam metus commodo tellus, sit amet interdum sem leo id nisl. Cras a pretium mauris. Sed nec justo ultricies, tincidunt lorem eu, accumsan dolor. Pellentesque eu auctor nisi, non tincidunt ante. Quisque lacinia dictum risus, a dignissim ipsum malesuada in. Morbi tristique risus metus, at porta mauris fermentum id. Quisque sit amet tincidunt enim, a auctor est. Morbi condimentum vestibulum ex non varius."
  },
  {
    "path": "demo/content/episodes/3/index.md",
    "content": "---\nid: c\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nresources: ['[Badass: Making Users Awesome](https://www.goodreads.com/book/show/24737268-badass)',\n'[Shambhala: The Sacred Path of the Warrior](https://www.goodreads.com/book/show/336248.Shambhala)']\nguestName: 'Robert Doe'\nguestSummary: '[Twitter](https://twitter.com/janelleallen?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor)'\nguestPhoto: './guest.png'\nimage: './banner.png'\n---\n\nFlank pork belly leberkas pig jowl corned beef. Hamburger ham salami, venison pastrami strip steak spare ribs pork belly brisket. Bacon chicken tenderloin shankle tongue doner, corned beef shoulder burgdoggen cupim chuck pig turkey. Biltong brisket doner sirloin kielbasa short ribs porchetta prosciutto turkey leberkas ground round landjaeger spare ribs. Kevin strip steak tongue, bacon cupim chicken drumstick rump.\n\nShort ribs jowl biltong corned beef chuck, shoulder landjaeger burgdoggen frankfurter sausage hamburger meatball pork loin. Sausage doner beef ribs salami beef shankle. Jerky ground round rump, cow strip steak short loin doner ham hock meatloaf porchetta andouille beef ribs. Tri-tip ribeye doner sirloin, frankfurter meatball tail beef drumstick shankle. Kielbasa pancetta ham, flank fatback jowl turkey boudin leberkas. Tongue drumstick shankle, strip steak picanha pork filet mignon leberkas andouille flank landjaeger short loin corned beef meatball."
  },
  {
    "path": "demo/content/episodes/4/index.md",
    "content": "---\nid: d\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nimage: './banner.png'\nresources: ['[Link](/)', '[Link](/)', '[Link](/)']\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel volutpat nulla, vitae egestas dui. Donec sodales eros id purus gravida, quis egestas lorem mollis. Morbi sapien velit, finibus eget dapibus eget, auctor a justo. Etiam cursus congue luctus. Nam dui dolor, convallis vel hendrerit fringilla, interdum vitae odio. Vivamus at interdum nunc, sed cursus magna. Praesent malesuada hendrerit magna nec euismod. Curabitur placerat pellentesque tincidunt.\n\nDonec odio justo, ornare ac massa vel, ullamcorper aliquam leo. Fusce facilisis diam vitae mi consequat suscipit. Nunc pharetra magna sit amet dui rhoncus malesuada. Integer hendrerit pellentesque lorem a pulvinar. Aenean at nunc tempus, semper nisi vitae, imperdiet nibh. Donec accumsan lacus ac sapien egestas aliquet. Sed lectus ex, auctor et varius quis, accumsan sed felis. Duis sit amet mattis nisi, sed tempor libero. Curabitur in tristique justo. Cras eu ipsum at nibh tristique iaculis. Suspendisse rhoncus laoreet fringilla. Cras tincidunt odio non facilisis fermentum. Quisque vel odio vel purus molestie pellentesque nec sit amet augue. Duis a neque sodales est pretium porttitor. Praesent at lacus rutrum, elementum dui ac, consequat mi. "
  },
  {
    "path": "demo/content/episodes/5/index.md",
    "content": "---\nid: e\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nimage: './banner.png'\n---\n\nPancetta ham hock tongue t-bone pork loin. Boudin burgdoggen alcatra, buffalo beef meatball ham corned beef short loin flank pancetta. Pastrami short loin spare ribs, alcatra shoulder rump pork kielbasa fatback meatball doner swine ribeye. Leberkas tongue shank ball tip prosciutto flank turkey frankfurter pig hamburger. Corned beef swine short ribs boudin. Drumstick rump salami shank jerky flank meatloaf strip steak bresaola bacon brisket tail meatball t-bone pig. Capicola boudin salami porchetta beef turkey brisket.\n\nBoudin buffalo chuck capicola. Short ribs meatloaf pork chop drumstick short loin pig frankfurter ground round meatball buffalo shoulder swine prosciutto tail ham. Venison meatball drumstick capicola, pig ribeye biltong fatback porchetta picanha sirloin. Ground round jowl porchetta shankle chuck pancetta. Kevin hamburger corned beef filet mignon tongue prosciutto beef ribs pancetta drumstick short loin chuck capicola. Shankle sausage porchetta shank. Sirloin short loin pork, ground round turkey ribeye chuck tail tri-tip t-bone buffalo bresaola."
  },
  {
    "path": "demo/content/episodes/6/index.md",
    "content": "---\nid: f\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nimage: './banner.png'\n---\n\nHam salami biltong pastrami turkey frankfurter. Ham hock prosciutto pork, tenderloin beef ribs kielbasa swine biltong pancetta boudin turkey hamburger tongue strip steak jowl. Bresaola pork loin venison boudin. Shank pig porchetta boudin. Swine prosciutto short ribs kielbasa shankle ball tip flank ribeye biltong meatloaf salami bacon.\n\nBrisket burgdoggen shank corned beef, chicken frankfurter boudin pork loin shankle porchetta jowl ground round sirloin alcatra biltong. Turkey drumstick porchetta alcatra pork jerky, turducken biltong fatback cupim tail. Jerky filet mignon capicola, leberkas jowl brisket venison. Rump jerky boudin prosciutto, sausage short loin chicken pastrami buffalo."
  },
  {
    "path": "demo/content/episodes/7/index.md",
    "content": "---\nid: g\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nimage: './banner.png'\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel volutpat nulla, vitae egestas dui. Donec sodales eros id purus gravida, quis egestas lorem mollis. Morbi sapien velit, finibus eget dapibus eget, auctor a justo. Etiam cursus congue luctus. Nam dui dolor, convallis vel hendrerit fringilla, interdum vitae odio. Vivamus at interdum nunc, sed cursus magna. Praesent malesuada hendrerit magna nec euismod. Curabitur placerat pellentesque tincidunt.\n\nDonec odio justo, ornare ac massa vel, ullamcorper aliquam leo. Fusce facilisis diam vitae mi consequat suscipit. Nunc pharetra magna sit amet dui rhoncus malesuada. Integer hendrerit pellentesque lorem a pulvinar. Aenean at nunc tempus, semper nisi vitae, imperdiet nibh. Donec accumsan lacus ac sapien egestas aliquet. Sed lectus ex, auctor et varius quis, accumsan sed felis. Duis sit amet mattis nisi, sed tempor libero. Curabitur in tristique justo. Cras eu ipsum at nibh tristique iaculis. Suspendisse rhoncus laoreet fringilla. Cras tincidunt odio non facilisis fermentum. Quisque vel odio vel purus molestie pellentesque nec sit amet augue. Duis a neque sodales est pretium porttitor. Praesent at lacus rutrum, elementum dui ac, consequat mi."
  },
  {
    "path": "demo/content/episodes/8/index.md",
    "content": "---\nid: h\nsummary: 'Summary. Lorem ipsum dolor sit amet.'\nimage: './banner.png'\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel volutpat nulla, vitae egestas dui. Donec sodales eros id purus gravida, quis egestas lorem mollis. Morbi sapien velit, finibus eget dapibus eget, auctor a justo. Etiam cursus congue luctus. Nam dui dolor, convallis vel hendrerit fringilla, interdum vitae odio. Vivamus at interdum nunc, sed cursus magna. Praesent malesuada hendrerit magna nec euismod. Curabitur placerat pellentesque tincidunt.\n\nDonec odio justo, ornare ac massa vel, ullamcorper aliquam leo. Fusce facilisis diam vitae mi consequat suscipit. Nunc pharetra magna sit amet dui rhoncus malesuada. Integer hendrerit pellentesque lorem a pulvinar. Aenean at nunc tempus, semper nisi vitae, imperdiet nibh. Donec accumsan lacus ac sapien egestas aliquet. Sed lectus ex, auctor et varius quis, accumsan sed felis. Duis sit amet mattis nisi, sed tempor libero. Curabitur in tristique justo. Cras eu ipsum at nibh tristique iaculis. Suspendisse rhoncus laoreet fringilla. Cras tincidunt odio non facilisis fermentum. Quisque vel odio vel purus molestie pellentesque nec sit amet augue. Duis a neque sodales est pretium porttitor. Praesent at lacus rutrum, elementum dui ac, consequat mi."
  },
  {
    "path": "demo/gatsby-config.js",
    "content": "require('dotenv').config({\n  path: `.env.${process.env.NODE_ENV}`,\n})\n\nmodule.exports = {\n  plugins: [\n    {\n      resolve: '@vojtaholik/gatsby-theme-simplecast',\n      options: {\n        simplecastApiSecret: process.env.SIMPLECAST_API_SECRET,\n        //podcastId: process.env.PODCAST_ID,\n        markdownPath: 'content/episodes',\n        episodeSlug: 'show',\n      },\n    },\n    `gatsby-plugin-theme-ui`,\n  ],\n}\n"
  },
  {
    "path": "demo/package.json",
    "content": "{\n  \"private\": true,\n  \"name\": \"demo\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"gatsby build\",\n    \"develop\": \"gatsby develop\",\n    \"clean\": \"gatsby clean\"\n  },\n  \"dependencies\": {\n    \"@vojtaholik/gatsby-theme-simplecast\": \"^1.0.8\",\n    \"gatsby\": \"^2.13.41\",\n    \"gatsby-plugin-theme-ui\": \"^0.2.18\",\n    \"gatsby-theme-ui\": \"^0.2.0\",\n    \"react\": \"^16.8.6\",\n    \"react-dom\": \"^16.8.6\",\n    \"theme-ui\": \"^0.2.21\"\n  }\n}\n"
  },
  {
    "path": "demo/src/@vojtaholik/gatsby-theme-simplecast/lib/config/index.js",
    "content": "export default {\n  podcastSeason: '1',\n  headerImageHeight: [300, 400],\n  spotifyUrl: '/',\n  applePodcastsUrl: '/',\n  googlePodcastsUrl: '/',\n}\n"
  },
  {
    "path": "demo/src/gatsby-plugin-theme-ui/index.js",
    "content": "export default {\n  useCustomProperties: true,\n  initialColorMode: 'dark',\n  colors: {\n    text: 'rgba(255, 255, 255, 0.9)',\n    background: '#1A2232',\n    backgroundLighten10: '#232B3B',\n    backgroundLighten20: '#2C3648',\n    primaryDarken: '#7A5EFF',\n    primary: '#A085FF',\n    primaryLighten10: '#9D82FF',\n    primaryLighten50: '#B298FF',\n    primaryLighten70: '#D2C8FF',\n    secondary: '#85FFD0',\n  },\n}\n"
  },
  {
    "path": "demo/src/pages/404.js",
    "content": "import React from 'react'\n\nexport default function NotFound() {\n  return (\n    <div>\n      <h1>404 - page not found.</h1>\n    </div>\n  )\n}\n"
  },
  {
    "path": "demo/src/pages/index.js",
    "content": "import React from 'react'\nimport {graphql} from 'gatsby'\nimport IndexPage from '@vojtaholik/gatsby-theme-simplecast/src/pages/index'\n\nexport default function Index({data: {allEpisode, allMarkdownRemark}}) {\n  return <IndexPage data={{allEpisode, allMarkdownRemark}} />\n}\n\nexport const indexQuery = graphql`\n  query {\n    allEpisode {\n      totalCount\n      nodes {\n        id\n        title\n        description\n        number\n        enclosure_url\n        fields {\n          slug\n        }\n      }\n    }\n    allMarkdownRemark {\n      edges {\n        node {\n          html\n          frontmatter {\n            id\n            title\n            resources\n            guestSummary\n            guestName\n            guestPhoto {\n              childImageSharp {\n                fluid(maxWidth: 200) {\n                  ...GatsbyImageSharpFluid_noBase64\n                }\n              }\n            }\n            image {\n              childImageSharp {\n                original {\n                  src\n                }\n                fluid(maxWidth: 700) {\n                  ...GatsbyImageSharpFluid_noBase64\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`\n"
  },
  {
    "path": "demo/src/pages/page-2.js",
    "content": "import React from 'react'\n\nexport default function Page() {\n  return (\n    <div>\n      <h1>hello!</h1>\n    </div>\n  )\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Typescript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# dotenv environment variables file\n.env.development\n\n# gatsby files\n.cache/\npublic\n\n# Mac files\n.DS_Store\n\n# Yarn\nyarn-error.log\n.pnp/\n.pnp.js\n# Yarn Integrity file\n.yarn-integrity\n"
  },
  {
    "path": "gatsby-theme-simplecast/.prettierrc",
    "content": "{\n  \"endOfLine\": \"lf\",\n  \"semi\": false,\n  \"singleQuote\": false,\n  \"tabWidth\": 2,\n  \"trailingComma\": \"es5\"\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 gatsbyjs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "gatsby-theme-simplecast/README.md",
    "content": "# Gatsby Theme Simplecast\n\nGatsby theme that sources data from Simplecast API which can be combined with Markdown files to associate more information to each episode. Inspired by [syntax.fm](http://syntax.fm).\n\n[→ Preview Theme](https://gatsby-theme-simplecast.netlify.com)\n\n## Installation\nTo use this theme in your Gatsby sites, follow these instructions:\n\n1. Install the theme\n   ```  \n   yarn add @vojtaholik/gatsby-theme-simplecast\n   ```\n2. Add the theme to your `gatsby-config.js`:\n  ```\n  module.exports = {\n  plugins: [\n    {\n      resolve: '@vojtaholik/gatsby-theme-simplecast',\n      options: {\n        podcastId: PODCAST_ID, // theme uses mockup data if no podcastId provided\n        simplecastApiSecret: SIMPLECAST_API_SECRET, \n        markdownPath: 'content/episodes',\n      },\n    },\n  ],\n}\n  ```\nPlugin options\n   - `simplecastApiSecret`: Grab [your Simplecast API token here](https://dashboard.simplecast.com/account/private-apps).\n   - `podcastId`: Podcast ID can be found in your Simplecast account under embeds settings.\n   - `markdownPath`: Path to your markdown files. For markdown file to show up, it's `frontmatter.id` must match `episode.id`.\n   - `episodeSlug`: default \"show\". (`/show/05/episode-title`)\n\n3. Create index page in `src/pages/index.js` \n   - You can use [this example](https://github.com/vojtaholik/gatsby-theme-simplecast/blob/master/demo/src/pages/index.js) which displays latest episode by default.\n\n4. Start your site\n   ```\n   gatsby develop\n   ```\n"
  },
  {
    "path": "gatsby-theme-simplecast/data/mockupEpisodes.json",
    "content": "{\n  \"href\": \"https://api.simplecast.com/podcasts/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/episodes?limit=10\",\n  \"pages\": {\n    \"total\": 5,\n    \"previous\": null,\n    \"next\": {\n      \"href\": \"https://api.simplecast.com/podcasts/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/episodes?limit=10&offset=10&private=true&status=importing%2Caudio_imported%2Ctranscoding%2Ctranscoding_error%2Cdraft%2Cscheduled%2Cpublished%2Cdirty%2Cprivate\"\n    },\n    \"limit\": 10,\n    \"current\": 1\n  },\n  \"dashboard_link\": \"https://dashboard.simplecast.com/shows/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/episodes\",\n  \"create\": null,\n  \"count\": 47,\n  \"collection\": [\n    {\n      \"updated_at\": \"2019-07-07T21:18:37.988516-07:00\",\n      \"type\": \"full\",\n      \"token\": \"GRGoBLV0\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"podcast-episode-1\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-07-07T21:18:37.988429-07:00\",\n      \"number\": 8,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/55d7f360-05c1-43af-9c2d-eb89e156734a/2965154a-b5d2-4479-ab85-6a8b06242014/j_c_hiatt.jpg\",\n      \"image_path\": \"/prod/images/55d7f360-05c1-43af-9c2d-eb89e156734a/2965154a-b5d2-4479-ab85-6a8b06242014/j_c_hiatt.jpg\",\n      \"id\": \"a\",\n      \"href\": \"https://api.simplecast.com/episodes/39917452-ddc9-4b42-8471-a07fc4487277?preview=true\",\n      \"guid\": \"a985054e-dc9b-45dd-93c9-3691c3690bec\",\n      \"enclosure_url\": \"https://cl.ly/3ba8c8b8d9fe/Helping_Hands_ID_1202.mp3\",\n      \"description\": \"Spicy jalapeno biltong kielbasa swine buffalo, prosciutto meatball shank. Tenderloin sirloin ground round, short ribs biltong cow tri-tip sausage buffalo andouille chicken turkey beef ribs shoulder. Tongue bresaola kielbasa picanha salami doner rump. Picanha corned beef tri-tip strip steak drumstick leberkas rump brisket pork loin sausage short ribs frankfurter. Hamburger jerky corned beef biltong kielbasa. Sirloin filet mignon shankle ribeye jerky pig. Spare ribs pork kielbasa tri-tip corned beef capicola.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=39917452-ddc9-4b42-8471-a07fc4487277&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T12:44:03.792833-07:00\",\n      \"type\": \"full\",\n      \"token\": \"cMNsoKRl\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"podcast-episode-2\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-05-31T17:22:47.299272-07:00\",\n      \"number\": 7,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/55d7f360-05c1-43af-9c2d-eb89e156734a/3d52cc0a-c791-4b98-95d1-1b2e45b005b1/Jason_Avatar.jpg\",\n      \"image_path\": \"/prod/images/55d7f360-05c1-43af-9c2d-eb89e156734a/3d52cc0a-c791-4b98-95d1-1b2e45b005b1/Jason_Avatar.jpg\",\n      \"id\": \"b\",\n      \"href\": \"https://api.simplecast.com/episodes/7979994f-c577-4728-aa5e-4f2c1e9314ae?preview=true\",\n      \"guid\": \"39623c8c-1401-45e9-a803-382f9136eb26\",\n      \"enclosure_url\": \"https://cl.ly/195b9e8b7c60/Lobo_Loco_-_10_-_Pianoman_Play_Sofa_Again_ID_1159.mp3\",\n      \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla at sagittis felis. Quisque lacus sapien, consectetur quis nibh nec, dapibus euismod mi. Mauris vel luctus libero. Donec semper suscipit nibh eu mattis. Donec aliquet lacinia laoreet. Ut gravida hendrerit orci eu hendrerit. Nam vel tristique ex.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=7979994f-c577-4728-aa5e-4f2c1e9314ae&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T12:45:07.197070-07:00\",\n      \"type\": \"full\",\n      \"token\": \"edf78b39\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"edf78b39\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-05-17T08:00:00.000000-07:00\",\n      \"number\": 6,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/815fd97a-c688-43a0-89ec-adb51771d245/1558126643artwork.jpg\",\n      \"image_path\": \"/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/815fd97a-c688-43a0-89ec-adb51771d245/1558126643artwork.jpg\",\n      \"id\": \"c\",\n      \"href\": \"https://api.simplecast.com/episodes/815fd97a-c688-43a0-89ec-adb51771d245?preview=true\",\n      \"guid\": \"471b8cf9-bd58-425a-9809-823c37e24389\",\n      \"enclosure_url\": \"https://cl.ly/4a27ffd65e7c/Lobo_Loco_-_05_-_Overchill_ID_1140.mp3\",\n      \"description\": \"Corned beef pork belly prosciutto tenderloin shank capicola. Swine spare ribs pork chop shank ham hock leberkas meatball. Prosciutto venison flank drumstick, bacon sausage pancetta leberkas meatloaf doner shoulder. Sausage ball tip pork chop alcatra, fatback brisket short loin.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=815fd97a-c688-43a0-89ec-adb51771d245&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T13:00:33.648782-07:00\",\n      \"type\": \"full\",\n      \"token\": \"b14002cc\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"b14002cc\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-05-13T18:59:00.000000-07:00\",\n      \"number\": 5,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/831dd452-0017-431f-a6aa-e67f656bcbb5/1557799504artwork.jpg\",\n      \"image_path\": \"/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/831dd452-0017-431f-a6aa-e67f656bcbb5/1557799504artwork.jpg\",\n      \"id\": \"d\",\n      \"href\": \"https://api.simplecast.com/episodes/831dd452-0017-431f-a6aa-e67f656bcbb5?preview=true\",\n      \"guid\": \"38e0bb24-2c80-4448-8435-585ef9b87e97\",\n      \"enclosure_url\": \"https://cl.ly/b0adbc9c58d4/Art_Of_Escapism_-_Dont_Feel_So_Low.mp3\",\n      \"description\": \"Filet mignon leberkas meatball burgdoggen. Pastrami doner chuck, shank tenderloin ground round shankle ham hock burgdoggen cupim swine shoulder. Tenderloin burgdoggen turkey sausage, leberkas tail short ribs strip steak bacon filet mignon. Pork loin leberkas picanha swine.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=831dd452-0017-431f-a6aa-e67f656bcbb5&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T13:01:22.454517-07:00\",\n      \"type\": \"full\",\n      \"token\": \"e855d7bc\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"e855d7bc\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-05-03T08:00:00.000000-07:00\",\n      \"number\": 4,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/27992848-007f-4c0e-b0b6-74518b758f7e/1556842744artwork.jpg\",\n      \"image_path\": \"/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/27992848-007f-4c0e-b0b6-74518b758f7e/1556842744artwork.jpg\",\n      \"id\": \"e\",\n      \"href\": \"https://api.simplecast.com/episodes/27992848-007f-4c0e-b0b6-74518b758f7e?preview=true\",\n      \"guid\": \"b61428c6-2974-4deb-a74f-6c22a9c2991f\",\n      \"enclosure_url\": \"https://cl.ly/100c0e77180c/Ainst_Char_-_03_-_Your_Cellar_My_Shrine.mp3\",\n      \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla at sagittis felis. Quisque lacus sapien, consectetur quis nibh nec, dapibus euismod mi. Mauris vel luctus libero. Donec semper suscipit nibh eu mattis. Donec aliquet lacinia laoreet. Ut gravida hendrerit orci eu hendrerit. Nam vel tristique ex.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=27992848-007f-4c0e-b0b6-74518b758f7e&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T13:01:58.802141-07:00\",\n      \"type\": \"full\",\n      \"token\": \"49266475\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"49266475\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-04-29T16:19:00.000000-07:00\",\n      \"number\": 3,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4/1556580270artwork.jpg\",\n      \"image_path\": \"/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4/1556580270artwork.jpg\",\n      \"id\": \"f\",\n      \"href\": \"https://api.simplecast.com/episodes/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4?preview=true\",\n      \"guid\": \"5943566f-d1d5-48e1-9498-6972121ff6fd\",\n      \"enclosure_url\": \"https://cl.ly/196987184667/Andrew_Walton_-_02_-_The_Curse_Of_The_Albatross.mp3\",\n      \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla at sagittis felis. Quisque lacus sapien, consectetur quis nibh nec, dapibus euismod mi. Mauris vel luctus libero. Donec semper suscipit nibh eu mattis. Donec aliquet lacinia laoreet. Ut gravida hendrerit orci eu hendrerit. Nam vel tristique ex.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T13:01:58.802141-07:00\",\n      \"type\": \"full\",\n      \"token\": \"49266475\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"49266475\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-04-29T16:19:00.000000-07:00\",\n      \"number\": 2,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4/1556580270artwork.jpg\",\n      \"image_path\": \"/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4/1556580270artwork.jpg\",\n      \"id\": \"g\",\n      \"href\": \"https://api.simplecast.com/episodes/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4?preview=true\",\n      \"guid\": \"5943566f-d1d5-48e1-9498-6972121ff6fd\",\n      \"enclosure_url\": \"https://cl.ly/196987184667/Andrew_Walton_-_02_-_The_Curse_Of_The_Albatross.mp3\",\n      \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla at sagittis felis. Quisque lacus sapien, consectetur quis nibh nec, dapibus euismod mi. Mauris vel luctus libero. Donec semper suscipit nibh eu mattis. Donec aliquet lacinia laoreet. Ut gravida hendrerit orci eu hendrerit. Nam vel tristique ex.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4&preview=true\"\n      }\n    },\n    {\n      \"updated_at\": \"2019-06-12T13:01:58.802141-07:00\",\n      \"type\": \"full\",\n      \"token\": \"49266475\",\n      \"title\": \"Podcast Episode Title\",\n      \"status\": \"published\",\n      \"slug\": \"49266475\",\n      \"season\": {\n        \"href\": \"https://api.simplecast.com/seasons/37157954-19df-4d38-9087-6fe015020f77\",\n        \"number\": 1\n      },\n      \"scheduled_for\": null,\n      \"published_at\": \"2019-04-29T16:19:00.000000-07:00\",\n      \"number\": 1,\n      \"is_hidden\": false,\n      \"image_url\": \"https://cdn.simplecast.com/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4/1556580270artwork.jpg\",\n      \"image_path\": \"/images/2ac34c/2ac34cab-4949-40aa-bac7-d7e3a70f0a39/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4/1556580270artwork.jpg\",\n      \"id\": \"h\",\n      \"href\": \"https://api.simplecast.com/episodes/a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4?preview=true\",\n      \"guid\": \"5943566f-d1d5-48e1-9498-6972121ff6fd\",\n      \"enclosure_url\": \"https://cl.ly/196987184667/Andrew_Walton_-_02_-_The_Curse_Of_The_Albatross.mp3\",\n      \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla at sagittis felis. Quisque lacus sapien, consectetur quis nibh nec, dapibus euismod mi. Mauris vel luctus libero. Donec semper suscipit nibh eu mattis. Donec aliquet lacinia laoreet. Ut gravida hendrerit orci eu hendrerit. Nam vel tristique ex.\",\n      \"analytics\": {\n        \"href\": \"https://api.simplecast.com/analytics/downloads?episode=a593adfa-6bc5-4774-9fe9-cc5e34e6f2c4&preview=true\"\n      }\n    }\n  ],\n  \"average_duration\": 1994.26\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/gatsby-browser.js",
    "content": "import React from \"react\"\nimport Layout from \"./src/components/layout\"\nimport Player from \"./src/components/player\"\nimport { EpisodeProvider, EpisodeConsumer } from \"./src/components/context\"\nimport { ThemeProvider, Styled } from \"theme-ui\"\nimport theme from \"./src/gatsby-plugin-theme-ui/index\"\nimport { SkipNavLink } from \"@reach/skip-nav\"\n\nexport const wrapPageElement = ({ element, props }, options) => {\n  const episodeSlug = options.episodeSlug ? options.episodeSlug : \"show\"\n  return (\n    <ThemeProvider theme={theme}>\n      <EpisodeProvider>\n        <Styled.root>\n          <SkipNavLink />\n          <Layout {...props}>\n            {props.location.pathname.includes(episodeSlug) ||\n            props.location.pathname === \"/\" ? (\n              <EpisodeConsumer>\n                {context => <Player episode={context.state} />}\n              </EpisodeConsumer>\n            ) : null}\n            {element}\n          </Layout>\n        </Styled.root>\n      </EpisodeProvider>\n    </ThemeProvider>\n  )\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/gatsby-config.js",
    "content": "module.exports = ({ markdownPath = `${__dirname}/content/episodes` }) => ({\n  siteMetadata: {\n    title: `Podcast Name`,\n    description: `Podcast description.`,\n    author: `@vojtaholik`,\n  },\n  plugins: [\n    `gatsby-plugin-react-helmet`,\n    `gatsby-plugin-sharp`,\n    `gatsby-transformer-remark`,\n    `gatsby-transformer-sharp`,\n    `gatsby-plugin-theme-ui`,\n    {\n      resolve: `gatsby-source-filesystem`,\n      options: {\n        name: `images`,\n        path: `${__dirname}/src/images`,\n      },\n    },\n    {\n      resolve: `gatsby-source-filesystem`,\n      options: {\n        path: markdownPath,\n        name: `episodes`,\n      },\n    },\n    {\n      resolve: `gatsby-plugin-manifest`,\n      options: {\n        name: `gatsby-theme-simplecast`,\n        short_name: `simplecast`,\n        start_url: `/`,\n        background_color: `#A085FF`,\n        theme_color: `#A085FF`,\n        display: `minimal-ui`,\n        icon: `src/images/icon.png`, // This path is relative to the root of the site.\n      },\n    },\n    // this (optional) plugin enables Progressive Web App + Offline functionality\n    // To learn more, visit: https://gatsby.dev/offline\n    // `gatsby-plugin-offline`,\n  ],\n})\n"
  },
  {
    "path": "gatsby-theme-simplecast/gatsby-node.js",
    "content": "require(\"dotenv\").config({\n  path: `.env.${process.env.NODE_ENV}`,\n})\nconst axios = require(\"axios\")\nconst crypto = require(\"crypto\")\nconst path = require(\"path\")\nconst slugify = require(\"@sindresorhus/slugify\")\n\nexports.sourceNodes = async (\n  { actions: { createNode, createNodeField }, plugins },\n  options\n) => {\n  axios.defaults.headers.common.Authorization = `Bearer ${options.simplecastApiSecret}`\n  axios.defaults.headers.common.Accept = \"application/json\"\n\n  const mockupEpisodes = require(\"./data/mockupEpisodes.json\")\n\n  const { data } = options.podcastId\n    ? await axios(\n        `https://api.simplecast.com/podcasts/${options.podcastId}/episodes`\n      )\n    : mockupEpisodes\n\n  const packagePodcast = p => {\n    const nodeContent = JSON.stringify(p)\n    const nodeContentDigest = crypto\n      .createHash(\"md5\")\n      .update(nodeContent)\n      .digest(\"hex\")\n    const node = {\n      ...p,\n      content: nodeContent,\n      internal: {\n        type: \"Episode\",\n        contentDigest: nodeContentDigest,\n      },\n    }\n\n    createNode(node)\n  }\n\n  // fallback to mockup data if no podcast id provided\n\n  options.podcastId\n    ? data.collection.map(packagePodcast)\n    : mockupEpisodes.collection.map(packagePodcast)\n}\n\nexports.createPages = async ({ actions, graphql }, options) => {\n  const { data } = await graphql(`\n    {\n      site {\n        siteMetadata {\n          title\n        }\n      }\n      allEpisode {\n        edges {\n          node {\n            id\n            title\n            number\n          }\n        }\n      }\n      allMarkdownRemark {\n        edges {\n          node {\n            id\n            html\n            frontmatter {\n              title\n            }\n          }\n        }\n      }\n    }\n  `)\n\n  data.allEpisode.edges.forEach(({ node }, options) => {\n    actions.createPage({\n      path: `${options.episodeSlug ? options.episodeSlug : \"show\"}/${\n        node.number\n      }/${slugify(node.title)}`,\n      component: require.resolve(`./src/templates/episode.js`),\n      context: {\n        slug: slugify(node.title),\n        id: node.id,\n        title: node.title,\n      },\n    })\n  })\n}\n\nexports.onCreateNode = ({ node, getNode, actions }, options) => {\n  const { createNodeField } = actions\n  const showsSlug = options.episodeSlug ? options.episodeSlug : \"show\"\n  createNodeField({\n    name: \"slug\",\n    node,\n    value: \"/\" + showsSlug + \"/\" + node.number + \"/\" + slugify(`${node.title}`),\n  })\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/gatsby-ssr.js",
    "content": "import React from \"react\"\nimport Layout from \"./src/components/layout\"\nimport Player from \"./src/components/player\"\nimport { EpisodeProvider, EpisodeConsumer } from \"./src/components/context\"\nimport { ThemeProvider, Styled } from \"theme-ui\"\nimport theme from \"./src/gatsby-plugin-theme-ui/index\"\nimport { SkipNavLink } from \"@reach/skip-nav\"\n\nexport const wrapPageElement = ({ element, props }, options) => {\n  const episodeSlug = options.episodeSlug ? options.episodeSlug : \"show\"\n  return (\n    <ThemeProvider theme={theme}>\n      <EpisodeProvider>\n        <Styled.root>\n          <SkipNavLink />\n          <Layout {...props}>\n            {props.location.pathname.includes(episodeSlug) ||\n            props.location.pathname === \"/\" ? (\n              <EpisodeConsumer>\n                {context => <Player episode={context.state} />}\n              </EpisodeConsumer>\n            ) : null}\n            {element}\n          </Layout>\n        </Styled.root>\n      </EpisodeProvider>\n    </ThemeProvider>\n  )\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/index.js",
    "content": "/** @jsx jsx */\nimport { jsx } from \"theme-ui\"\nimport { graphql } from \"gatsby\"\nimport Episode from \"gatsby-theme-simplecast/src/templates/episode\"\n\nexport default function Index({ data: { allEpisode, allMarkdownRemark } }) {\n  const MarkdownForLatestEpisode = allMarkdownRemark.edges.filter(\n    Markdown => Markdown.node.frontmatter.id === allEpisode.nodes[0].id\n  )\n\n  const data = useStaticQuery(graphql`\n    {\n      allEpisode {\n        totalCount\n        nodes {\n          id\n          title\n          description\n          number\n          enclosure_url\n          fields {\n            slug\n          }\n        }\n      }\n      allMarkdownRemark {\n        edges {\n          node {\n            html\n            frontmatter {\n              id\n              title\n              resources\n              guestSummary\n              guestName\n              guestPhoto {\n                childImageSharp {\n                  fluid(maxWidth: 200) {\n                    ...GatsbyImageSharpFluid_noBase64\n                  }\n                }\n              }\n              image {\n                childImageSharp {\n                  original {\n                    src\n                  }\n                  fluid(maxWidth: 700) {\n                    ...GatsbyImageSharpFluid_noBase64\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  `)\n  return (\n    <Episode\n      data={{\n        episode: data.allEpisode.nodes[0],\n        markdownRemark:\n          MarkdownForLatestEpisode[0] && MarkdownForLatestEpisode[0].node,\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/package.json",
    "content": "{\n  \"name\": \"@vojtaholik/gatsby-theme-simplecast\",\n  \"main\": \"index.js\",\n  \"description\": \"Simplecast gatsby theme.\",\n  \"version\": \"1.0.8\",\n  \"author\": \"Vojta Holik <vojta@egghead.io>\",\n  \"dependencies\": {\n    \"@emotion/core\": \"^10.0.14\",\n    \"@emotion/styled\": \"^10.0.14\",\n    \"@mdx-js/react\": \"^1.0.27\",\n    \"@reach/skip-nav\": \"^0.1.3\",\n    \"@reach/visually-hidden\": \"^0.1.4\",\n    \"@sindresorhus/slugify\": \"^0.9.1\",\n    \"axios\": \"^0.19.0\",\n    \"crypto\": \"^1.0.1\",\n    \"dotenv\": \"^8.0.0\",\n    \"fs\": \"^0.0.1-security\",\n    \"gatsby\": \"^2.13.41\",\n    \"gatsby-image\": \"^2.2.7\",\n    \"gatsby-plugin-manifest\": \"^2.2.4\",\n    \"gatsby-plugin-offline\": \"^2.2.4\",\n    \"gatsby-plugin-react-helmet\": \"^3.1.2\",\n    \"gatsby-plugin-sharp\": \"^2.2.9\",\n    \"gatsby-plugin-theme-ui\": \"^0.2.18\",\n    \"gatsby-source-filesystem\": \"^2.1.6\",\n    \"gatsby-theme-ui\": \"^0.2.0\",\n    \"gatsby-transformer-json\": \"^2.2.2\",\n    \"gatsby-transformer-remark\": \"^2.6.9\",\n    \"gatsby-transformer-sharp\": \"^2.2.4\",\n    \"lodash\": \"^4.17.15\",\n    \"prop-types\": \"^15.7.2\",\n    \"react\": \"^16.8.6\",\n    \"react-dom\": \"^16.8.6\",\n    \"react-helmet\": \"^5.2.1\",\n    \"react-icons\": \"^3.7.0\",\n    \"react-markdown\": \"^4.1.0\",\n    \"react-onclickoutside\": \"^6.8.0\",\n    \"theme-ui\": \"^0.2.21\"\n  },\n  \"devDependencies\": {\n    \"gatsby\": \"^2.13.41\",\n    \"prettier\": \"^1.18.2\",\n    \"react\": \"^16.8.6\",\n    \"react-dom\": \"^16.8.6\",\n    \"theme-ui\": \"^0.2.21\"\n  },\n  \"keywords\": [\n    \"gatsby\",\n    \"gatsby-theme\",\n    \"gatsby-plugin\",\n    \"simplecast\"\n  ],\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"gatsby build\",\n    \"develop\": \"gatsby develop\",\n    \"clean\": \"gatsby clean\",\n    \"format\": \"prettier --write src/**/*.{js,jsx}\",\n    \"start\": \"npm run develop\",\n    \"serve\": \"gatsby serve\",\n    \"test\": \"echo \\\"Write tests! -> https://gatsby.dev/unit-testing\\\"\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/vojtaholik/gatsby-theme-simplecast\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/vojtaholik/gatsby-theme-simplecast/issues\"\n  },\n  \"peerDependencies\": {\n    \"gatsby\": \"^2.13.41\",\n    \"react\": \"^16.8.6\",\n    \"react-dom\": \"^16.8.6\",\n    \"theme-ui\": \"^0.2.21\"\n  }\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/aside.js",
    "content": "/** @jsx jsx */\nimport { jsx } from \"theme-ui\"\nimport Img from \"gatsby-image\"\nimport { FaExternalLinkAlt as ExternalLinkIcon } from \"react-icons/fa\"\nimport config from \"../lib/config\"\nimport { css } from \"@emotion/core\"\nimport styled from \"@emotion/styled\"\nimport Link from \"./link\"\nimport Markdown from \"react-markdown\"\nimport itunesIcon from \"../images/apple.svg\"\nimport spotifyImage from \"../images/spotify.png\"\nimport googleImage from \"../images/google.svg\"\n\nconst PodcastProvider = styled(Link)(\n  css({\n    mb: 5,\n    display: \"flex\",\n    alignItems: \"center\",\n    img: { m: 0, mr: 3 },\n  })\n)\n\nfunction Aside({ markdown }) {\n  return (\n    <aside className=\"sidebar\">\n      <div\n        sx={{\n          mb: 2,\n          pr: [10, 0],\n          a: { color: \"text\", textDecoration: \"none\" },\n        }}\n      >\n        {config.spotifyUrl && (\n          <PodcastProvider to={config.spotifyUrl}>\n            <img src={spotifyImage} alt=\"Spotify logo\" width=\"90\" />\n          </PodcastProvider>\n        )}\n        {config.applePodcastsUrl && (\n          <PodcastProvider to={config.applePodcastsUrl}>\n            <img src={itunesIcon} alt=\"Apple Podcasts\" />\n          </PodcastProvider>\n        )}\n        {config.googlePodcastsUrl && (\n          <PodcastProvider to={config.googlePodcastsUrl}>\n            <img src={googleImage} alt=\"Google Podcasts\" />\n          </PodcastProvider>\n        )}\n      </div>\n      {markdown && (\n        <div>\n          {markdown.frontmatter.guestName && (\n            <div\n              sx={{\n                display: \"flex\",\n                flexDirection: \"column\",\n              }}\n            >\n              <h5 className=\"guest\">Guest</h5>\n              {markdown.frontmatter.guestPhoto && (\n                <Img\n                  sx={{\n                    borderRadius: 0,\n                    width: \"100%\",\n                    maxWidth: 100,\n                  }}\n                  fluid={markdown.frontmatter.guestPhoto.childImageSharp.fluid}\n                  alt={markdown.frontmatter.guestName}\n                />\n              )}\n              <h4 sx={{ mt: 3, mb: 1 }}>{markdown.frontmatter.guestName}</h4>\n              <Markdown>{markdown.frontmatter.guestSummary}</Markdown>\n            </div>\n          )}\n        </div>\n      )}\n      {markdown && markdown.frontmatter.resources && (\n        <div>\n          <h5>Resources</h5>\n          <ul>\n            {markdown.frontmatter.resources.map((resource, i) => (\n              <li key={i}>\n                <ExternalLinkIcon />\n                <Markdown>{resource}</Markdown>\n              </li>\n            ))}\n          </ul>\n        </div>\n      )}\n    </aside>\n  )\n}\n\nexport default Aside\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/bars.js",
    "content": "import React from \"react\"\n\nconst Bars = () => (\n  <div className=\"bars bars--paused\">\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n    <div className=\"bar\" />\n  </div>\n)\n\nexport default Bars\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/context.js",
    "content": "import React, { Component } from \"react\"\nimport { graphql, useStaticQuery } from \"gatsby\"\n\nconst EpisodeContext = React.createContext()\n\nexport function EpisodeProvider(props) {\n  const data = useStaticQuery(graphql`\n    {\n      allEpisode {\n        totalCount\n        nodes {\n          id\n          title\n          description\n          number\n          enclosure_url\n          fields {\n            slug\n          }\n        }\n      }\n    }\n  `)\n\n  const [currentPlaying, setCurrentPlaying] = React.useState(\n    data.allEpisode.nodes[0]\n  )\n\n  return (\n    <EpisodeContext.Provider\n      value={{\n        state: currentPlaying,\n        setCurrentPlaying,\n      }}\n      {...props}\n    />\n  )\n}\n\nexport class EpisodeConsumer extends Component {\n  render() {\n    return (\n      <EpisodeContext.Consumer>{this.props.children}</EpisodeContext.Consumer>\n    )\n  }\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/header.js",
    "content": "/** @jsx jsx */\nimport { jsx, useThemeUI, Header as ThemedHeader, Box, Flex } from \"theme-ui\"\nimport Img from \"gatsby-image\"\nimport { FaPlay as PlayIcon } from \"react-icons/fa\"\nimport VisuallyHidden from \"@reach/visually-hidden\"\nimport config from \"../lib/config\"\n\nfunction Header({ context, episode, image }) {\n  const themeContext = useThemeUI()\n  const { theme } = themeContext\n  return (\n    <ThemedHeader\n      sx={{\n        backgroundImage: image\n          ? \"none\"\n          : `linear-gradient(224deg, ${theme.colors.primaryLighten50} 0%, ${theme.colors.primaryDarken} 100%)`,\n      }}\n    >\n      {image && (\n        <Img\n          alt={episode.title}\n          fluid={image.childImageSharp.fluid}\n          sx={{ height: config.headerImageHeight }}\n        />\n      )}\n      <Box className=\"header_content\">\n        <Flex\n          sx={{\n            height: \"100%\",\n            width: \"100%\",\n            alignItems: \"flex-end\",\n            flexDirection: \"row\",\n            pb: 8,\n          }}\n        >\n          <Flex sx={{ width: \"100%\" }}>\n            <button onClick={() => context.setCurrentPlaying(episode)}>\n              <VisuallyHidden>Play</VisuallyHidden>\n              <PlayIcon aria-hidden=\"true\" />\n            </button>\n            <div>\n              <h1>{episode.title}</h1>\n              <h5>EP{episode.number}</h5>\n            </div>\n          </Flex>\n        </Flex>\n      </Box>\n    </ThemedHeader>\n  )\n}\n\nexport default Header\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/image.js",
    "content": "import React from \"react\"\nimport { useStaticQuery, graphql } from \"gatsby\"\nimport Img from \"gatsby-image\"\n\n/*\n * This component is built using `gatsby-image` to automatically serve optimized\n * images with lazy loading and reduced file sizes. The image is loaded using a\n * `useStaticQuery`, which allows us to load the image from directly within this\n * component, rather than having to pass the image data down from pages.\n *\n * For more information, see the docs:\n * - `gatsby-image`: https://gatsby.dev/gatsby-image\n * - `useStaticQuery`: https://www.gatsbyjs.org/docs/use-static-query/\n */\n\nconst Image = () => {\n  const data = useStaticQuery(graphql`\n    query {\n      placeholderImage: file(relativePath: { eq: \"gatsby-astronaut.png\" }) {\n        childImageSharp {\n          fluid(maxWidth: 300) {\n            ...GatsbyImageSharpFluid\n          }\n        }\n      }\n    }\n  `)\n\n  return <Img fluid={data.placeholderImage.childImageSharp.fluid} />\n}\n\nexport default Image\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/layout.css",
    "content": "html {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.progress {\n  background: gray;\n  /* height: 2rem; */\n  cursor: crosshair;\n  overflow: hidden;\n}\n.progress__time {\n  background: green;\n  border-right: 1px solid rgba(0, 0, 0, 0.1);\n  min-width: 5px;\n  height: 100%;\n  transition: width 0.1s;\n  background: yellow;\n}\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\nprogress {\n  vertical-align: baseline;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n  -webkit-text-decoration-skip: objects;\n}\na:active,\na:hover {\n  outline-width: 0;\n}\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  text-decoration: underline dotted;\n}\nb,\nstrong {\n  font-weight: inherit;\n  font-weight: bolder;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background-color: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\nimg {\n  border-style: none;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font: inherit;\n  margin: 0;\n}\noptgroup {\n  font-weight: 700;\n}\nbutton,\ninput {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\n[type=\"reset\"],\n[type=\"submit\"],\nbutton,\nhtml [type=\"button\"] {\n  -webkit-appearance: button;\n}\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner,\nbutton::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring,\nbutton:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\nfieldset {\n  border: 1px solid silver;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  box-sizing: border-box;\n  color: inherit;\n  display: table;\n  max-width: 100%;\n  padding: 0;\n  white-space: normal;\n}\ntextarea {\n  overflow: auto;\n}\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n[type=\"search\"] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n::-webkit-input-placeholder {\n  color: inherit;\n  opacity: 0.54;\n}\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  font: inherit;\n}\nhtml {\n  font: 112.5%/1.45em georgia, serif;\n  box-sizing: border-box;\n  overflow-y: scroll;\n}\n* {\n  box-sizing: inherit;\n}\n*:before {\n  box-sizing: inherit;\n}\n*:after {\n  box-sizing: inherit;\n}\nbody {\n  color: hsla(0, 0%, 0%, 0.8);\n  font-family: georgia, serif;\n  font-weight: normal;\n  word-wrap: break-word;\n  font-kerning: normal;\n  -moz-font-feature-settings: \"kern\", \"liga\", \"clig\", \"calt\";\n  -ms-font-feature-settings: \"kern\", \"liga\", \"clig\", \"calt\";\n  -webkit-font-feature-settings: \"kern\", \"liga\", \"clig\", \"calt\";\n  font-feature-settings: \"kern\", \"liga\", \"clig\", \"calt\";\n}\nimg {\n  max-width: 100%;\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nh1 {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  color: inherit;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n  font-weight: bold;\n  text-rendering: optimizeLegibility;\n  font-size: 2.25rem;\n  line-height: 1.1;\n}\nh2 {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  color: inherit;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n  font-weight: bold;\n  text-rendering: optimizeLegibility;\n  font-size: 1.62671rem;\n  line-height: 1.1;\n}\nh3 {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  color: inherit;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n  font-weight: bold;\n  text-rendering: optimizeLegibility;\n  font-size: 1.38316rem;\n  line-height: 1.1;\n}\nh4 {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  color: inherit;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n  font-weight: bold;\n  text-rendering: optimizeLegibility;\n  font-size: 1rem;\n  line-height: 1.1;\n}\nh5 {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  color: inherit;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n  font-weight: bold;\n  text-rendering: optimizeLegibility;\n  font-size: 0.85028rem;\n  line-height: 1.1;\n}\nh6 {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  color: inherit;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n  font-weight: bold;\n  text-rendering: optimizeLegibility;\n  font-size: 0.78405rem;\n  line-height: 1.1;\n}\nhgroup {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nul {\n  list-style: none;\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  list-style-position: outside;\n  list-style-image: none;\n}\nol {\n  margin-left: 1.45rem;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  list-style-position: outside;\n  list-style-image: none;\n}\ndl {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\ndd {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\np {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nfigure {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\npre {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  margin-bottom: 1.45rem;\n  font-size: 0.85rem;\n  line-height: 1.42;\n  background: hsla(0, 0%, 0%, 0.04);\n  border-radius: 3px;\n  overflow: auto;\n  word-wrap: normal;\n  padding: 1.45rem;\n}\ntable {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n  font-size: 1rem;\n  line-height: 1.45rem;\n  border-collapse: collapse;\n  width: 100%;\n}\nfieldset {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nblockquote {\n  margin-left: 1.45rem;\n  margin-right: 1.45rem;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nform {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nnoscript {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\niframe {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nhr {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: calc(1.45rem - 1px);\n  background: hsla(0, 0%, 0%, 0.2);\n  border: none;\n  height: 1px;\n}\naddress {\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: 0;\n  margin-bottom: 1.45rem;\n}\nb {\n  font-weight: bold;\n}\nstrong {\n  font-weight: bold;\n}\ndt {\n  font-weight: bold;\n}\nth {\n  font-weight: bold;\n}\nli {\n  margin-bottom: calc(1.45rem / 2);\n}\nol li {\n  padding-left: 0;\n}\nul li {\n  padding-left: 0;\n}\nli > ol {\n  margin-left: 1.45rem;\n  margin-bottom: calc(1.45rem / 2);\n  margin-top: calc(1.45rem / 2);\n}\nli > ul {\n  margin-left: 1.45rem;\n  margin-bottom: calc(1.45rem / 2);\n  margin-top: calc(1.45rem / 2);\n}\nblockquote *:last-child {\n  margin-bottom: 0;\n}\nli *:last-child {\n  margin-bottom: 0;\n}\np *:last-child {\n  margin-bottom: 0;\n}\nli > p {\n  margin-bottom: calc(1.45rem / 2);\n}\ncode {\n  font-size: 0.85rem;\n  line-height: 1.45rem;\n}\nkbd {\n  font-size: 0.85rem;\n  line-height: 1.45rem;\n}\nsamp {\n  font-size: 0.85rem;\n  line-height: 1.45rem;\n}\nabbr {\n  border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);\n  cursor: help;\n}\nacronym {\n  border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);\n  cursor: help;\n}\nabbr[title] {\n  border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);\n  cursor: help;\n  text-decoration: none;\n}\nthead {\n  text-align: left;\n}\ntd,\nth {\n  text-align: left;\n  border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);\n  font-feature-settings: \"tnum\";\n  -moz-font-feature-settings: \"tnum\";\n  -ms-font-feature-settings: \"tnum\";\n  -webkit-font-feature-settings: \"tnum\";\n  padding-left: 0.96667rem;\n  padding-right: 0.96667rem;\n  padding-top: 0.725rem;\n  padding-bottom: calc(0.725rem - 1px);\n}\nth:first-child,\ntd:first-child {\n  padding-left: 0;\n}\nth:last-child,\ntd:last-child {\n  padding-right: 0;\n}\ntt,\ncode {\n  background-color: hsla(0, 0%, 0%, 0.04);\n  border-radius: 3px;\n  font-family: \"SFMono-Regular\", Consolas, \"Roboto Mono\", \"Droid Sans Mono\",\n    \"Liberation Mono\", Menlo, Courier, monospace;\n  padding: 0;\n  padding-top: 0.2em;\n  padding-bottom: 0.2em;\n}\npre code {\n  background: none;\n  line-height: 1.42;\n}\ncode:before,\ncode:after,\ntt:before,\ntt:after {\n  letter-spacing: -0.2em;\n  content: \" \";\n}\npre code:before,\npre code:after,\npre tt:before,\npre tt:after {\n  content: \"\";\n}\n@media only screen and (max-width: 480px) {\n  html {\n    font-size: 100%;\n  }\n}\n\n.bars {\n  height: 45px;\n  width: 0;\n  position: relative;\n  top: -9px;\n  left: -1px;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n}\n\n.bar {\n  background: #a085ff;\n  bottom: 1px;\n  height: 3px;\n  position: absolute;\n  width: 3px;\n  animation: sound 0ms -800ms linear infinite alternate;\n}\n\n.bars--paused > * {\n  animation-play-state: paused;\n}\n\n@keyframes sound {\n  0% {\n    opacity: 0.35;\n    background: #a085ff;\n    width: 3px;\n  }\n  100% {\n    opacity: 1;\n    background: #a085ff;\n    width: 10px;\n  }\n}\n\n.bar:nth-child(1) {\n  top: 1px;\n  animation-duration: 474ms;\n}\n.bar:nth-child(2) {\n  top: 5px;\n  animation-duration: 433ms;\n}\n.bar:nth-child(3) {\n  top: 9px;\n  animation-duration: 407ms;\n}\n.bar:nth-child(4) {\n  top: 13px;\n  animation-duration: 458ms;\n}\n.bar:nth-child(5) {\n  top: 17px;\n  animation-duration: 400ms;\n}\n.bar:nth-child(6) {\n  top: 21px;\n  animation-duration: 427ms;\n}\n.bar:nth-child(7) {\n  top: 25px;\n  animation-duration: 441ms;\n}\n.bar:nth-child(8) {\n  top: 29px;\n  animation-duration: 419ms;\n}\n.bar:nth-child(9) {\n  top: 33px;\n  animation-duration: 487ms;\n}\n\n.bar:nth-child(10) {\n  top: 37px;\n  animation-duration: 442ms;\n}\n\n.bar:nth-child(11) {\n  top: 41px;\n  animation-duration: 435ms;\n}\n\n.bar:nth-child(12) {\n  top: 45px;\n  animation-duration: 510ms;\n}\n\n.bar:nth-child(13) {\n  top: 49px;\n  animation-duration: 485ms;\n}\n\n.bar:nth-child(14) {\n  top: 53px;\n  animation-duration: 455ms;\n}\n\n.bar:nth-child(15) {\n  top: 57px;\n  animation-duration: 425ms;\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/layout.js",
    "content": "/** @jsx jsx */\nimport PropTypes from \"prop-types\"\nimport Navigation from \"./navigation\"\nimport \"./layout.css\"\nimport { jsx, Layout as Wrapper, Container } from \"theme-ui\"\n\nfunction Layout({ children }) {\n  return (\n    <Wrapper>\n      <Container\n        sx={{\n          p: 0,\n          display: \"flex\",\n          flexDirection: [\"column\", \"row\"],\n          flexGrow: \"1\",\n        }}\n      >\n        <Navigation eventTypes=\"click\" />\n        <main sx={{ width: \"100%\", ml: [0, 0, 0, 5] }}>{children}</main>\n      </Container>\n    </Wrapper>\n  )\n}\n\nLayout.propTypes = {\n  children: PropTypes.node.isRequired,\n}\n\nexport default Layout\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/link.js",
    "content": "import React from \"react\"\nimport GatsbyLink from \"gatsby-link\"\n\nconst Link = ({ children, to, ...other }) => {\n  const internal = /^\\/(?!\\/)/.test(to)\n\n  if (internal) {\n    return (\n      <GatsbyLink to={to} {...other}>\n        {children}\n      </GatsbyLink>\n    )\n  }\n\n  return (\n    <a href={to} {...other}>\n      {children}\n    </a>\n  )\n}\n\nexport default Link\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/navigation.js",
    "content": "/** @jsx jsx */\nimport React from \"react\"\nimport { useStaticQuery, graphql } from \"gatsby\"\nimport { jsx, Flex } from \"theme-ui\"\nimport { EpisodeConsumer } from \"./context\"\nimport { FaPlay as PlayIcon } from \"react-icons/fa\"\nimport { MdMenu as MenuIcon, MdClose as CloseMenuIcon } from \"react-icons/md\"\nimport onClickOutside from \"react-onclickoutside\"\nimport config from \"../lib/config\"\nimport Link from \"./link\"\nimport Bars from \"./bars\"\n\nfunction Navigation() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  const toggleMenu = () => setIsOpen(!isOpen)\n  Navigation.handleClickOutside = () => setIsOpen(false)\n  const twoDigits = n => (n.toString().length < 2 ? `0${n}` : n)\n\n  const Logo = () => (\n    <>\n      <Link to=\"/\">\n        <h1 sx={{ fontSize: 6, color: \"primary\", mb: 0 }}>\n          {data.site.siteMetadata.title\n            ? data.site.siteMetadata.title\n            : \"Podcast Name\"}\n        </h1>\n      </Link>\n      {config.podcastSeason && (\n        <h5\n          sx={{\n            textTransform: \"uppercase\",\n            mt: 2,\n            mb: 0,\n            fontWeight: 400,\n            fontSize: 0,\n            opacity: 0.6,\n          }}\n        >\n          season {twoDigits(config.podcastSeason)}\n        </h5>\n      )}\n    </>\n  )\n\n  const data = useStaticQuery(graphql`\n    query navQuery {\n      site {\n        siteMetadata {\n          title\n        }\n      }\n      allEpisode {\n        totalCount\n        nodes {\n          id\n          title\n          description\n          number\n          enclosure_url\n          fields {\n            slug\n          }\n        }\n      }\n      allMarkdownRemark {\n        edges {\n          node {\n            id\n            frontmatter {\n              id\n              summary\n            }\n          }\n        }\n      }\n    }\n  `)\n  return (\n    <EpisodeConsumer>\n      {context => (\n        <>\n          <Flex\n            sx={{\n              variant: \"header.logo.container\",\n            }}\n          >\n            <Flex\n              sx={{\n                variant: \"header.logo\",\n              }}\n            >\n              <Logo />\n            </Flex>\n            <button\n              sx={{\n                position: \"relative\",\n                zIndex: 998,\n                display: \"flex\",\n                p: 3,\n                backgroundColor: \"background\",\n                color: \"text\",\n                borderColor: \"backgroundLighten20\",\n                fontSize: 5,\n              }}\n              onClick={toggleMenu}\n              aria-controls=\"menu\"\n              aria-haspopup=\"true\"\n              aria-expanded={isOpen ? \"true\" : \"false\"}\n            >\n              {isOpen ? <CloseMenuIcon /> : <MenuIcon />}\n            </button>\n          </Flex>\n          <nav\n            className=\"episodes_list\"\n            sx={{\n              variant: \"navigation.episodes\",\n              transform: [`translateX(${isOpen ? \"0\" : \"-100%\"})`, \"none\"],\n              transition: \"300ms cubic-bezier(1, 0, 0, 1)\",\n            }}\n          >\n            <div sx={{ ml: 6, pb: 4 }}>\n              <Logo />\n            </div>\n            <ul id=\"menu\" role=\"menu\" sx={{ pb: 14 }}>\n              {data.allEpisode.nodes.map(episode => (\n                <li role=\"none\" key={episode.id}>\n                  {episode.id === context.state.id && <Bars />}\n                  <Link\n                    role=\"menuitem\"\n                    activeClassName=\"active\"\n                    to={episode.fields.slug}\n                  >\n                    <h4>{episode.title}</h4>\n                    {data.allMarkdownRemark.edges.map(({ node: markdown }) => {\n                      if (markdown.frontmatter.id === episode.id)\n                        return (\n                          markdown.frontmatter.summary && (\n                            <p key={markdown.id} className=\"summary\">\n                              {markdown.frontmatter.summary}\n                            </p>\n                          )\n                        )\n                      else return null\n                    })}\n                  </Link>\n                  {episode.id !== context.state.id && (\n                    <button\n                      tabIndex=\"-1\"\n                      onClick={() => context.setCurrentPlaying(episode)}\n                    >\n                      <PlayIcon aria-hidden=\"true\" />\n                    </button>\n                  )}\n                </li>\n              ))}\n            </ul>\n          </nav>\n        </>\n      )}\n    </EpisodeConsumer>\n  )\n}\n\nconst clickOutsideConfig = {\n  handleClickOutside: () => Navigation.handleClickOutside,\n}\n\nexport default onClickOutside(Navigation, clickOutsideConfig)\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/player.js",
    "content": "// by Wes Bos, syntax.fm\n// https://github.com/wesbos/Syntax/blob/master/components/Player.js\n/** @jsx jsx */\nimport React from \"react\"\nimport PropTypes from \"prop-types\"\nimport { FaPlay, FaPause } from \"react-icons/fa\"\nimport { jsx, Container } from \"theme-ui\"\nimport { keyframes } from \"@emotion/core\"\nimport formatTime from \"../lib/formatTime\"\nimport VisuallyHidden from \"@reach/visually-hidden\"\n// import VolumeBars from \"./volumeBars\"\n\nexport default class Player extends React.Component {\n  static propTypes = {\n    episode: PropTypes.object.isRequired,\n  }\n\n  constructor(props) {\n    super(props)\n\n    let lastPlayed = 0\n    let lastVolumePref = 1\n    // let lastPlaybackRate = 1\n\n    // for Server Side Rendering\n    if (typeof window !== \"undefined\") {\n      const { episode } = this.props\n      const lp = localStorage.getItem(`lastPlayed${episode.number}`)\n      const lastVolume = localStorage.getItem(`lastVolumeSetting`)\n      // const lastPlayback = localStorage.getItem(`lastPlaybackSetting`)\n\n      if (lp) lastPlayed = JSON.parse(lp).lastPlayed\n      if (lastVolume) lastVolumePref = JSON.parse(lastVolume).lastVolumePref\n      // if (lastPlayback)\n      //   lastPlaybackRate = JSON.parse(lastPlayback).lastPlaybackRate\n    }\n\n    this.state = {\n      progressTime: 50,\n      playing: false,\n      duration: 0,\n      currentTime: lastPlayed,\n      currentVolume: lastVolumePref,\n      // playbackRate: lastPlaybackRate,\n      timeWasLoaded: lastPlayed !== 0,\n      showTooltip: false,\n      tooltipPosition: 0,\n      tooltipTime: \"0:00\",\n    }\n  } // END Constructor\n\n  componentWillUpdate(nextProps, nextState) {\n    // this.audio.playbackRate = nextState.playbackRate\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    const { episode } = this.props\n    const {\n      currentTime,\n      currentVolume,\n      // playbackRate\n    } = this.state\n    if (episode.number !== prevProps.episode.number) {\n      const lp = localStorage.getItem(`lastPlayed${episode.number}`)\n      if (lp) {\n        const lastVolume = localStorage.getItem(`lastVolumeSetting`)\n        // const lastPlayback = localStorage.getItem(`lastPlaybackSetting`)\n        const data = JSON.parse(lp)\n        const data2 = JSON.parse(lastVolume)\n        // const data3 = JSON.parse(lastPlayback)\n\n        this.setState({\n          currentTime: data.lastPlayed,\n          currentVolume: data2.lastVolumePref,\n          // playbackRate: data3.lastPlaybackRate,\n        })\n        this.audio.currentTime = data.lastPlayed\n        this.audio.volume = data2.lastVolumePref\n        // this.audio.playbackRate = data3.lastPlaybackRate\n      }\n      this.audio.play()\n    } else {\n      localStorage.setItem(\n        `lastPlayed${episode.number}`,\n        JSON.stringify({ lastPlayed: currentTime })\n      )\n      localStorage.setItem(\n        `lastVolumeSetting`,\n        JSON.stringify({ lastVolumePref: currentVolume })\n      )\n      // localStorage.setItem(\n      //   `lastPlaybackSetting`,\n      //   JSON.stringify({ lastPlaybackRate: playbackRate })\n      // )\n    }\n  }\n\n  timeUpdate = e => {\n    // console.log('Updating Time');\n    const { episode } = this.props\n    const { timeWasLoaded } = this.state\n    // Check if the user already had a curent time\n    if (timeWasLoaded) {\n      const lp = localStorage.getItem(`lastPlayed${episode.number}`)\n\n      if (lp) {\n        e.currentTarget.currentTime = JSON.parse(lp).lastPlayed\n      }\n      this.setState({ timeWasLoaded: false })\n    } else {\n      const { currentTime = 0, duration = 0 } = e.currentTarget\n\n      const progressTime = (currentTime / duration) * 100\n      if (Number.isNaN(progressTime)) return\n      this.setState({ progressTime, currentTime, duration })\n    }\n  }\n\n  volumeUpdate = e => {\n    const { timeWasLoaded } = this.state\n    // Check if the user already had a curent volume\n    if (timeWasLoaded) {\n      const lastVolume = localStorage.getItem(`lastVolumeSetting`)\n      if (lastVolume) {\n        e.currentTarget.volume = JSON.parse(lastVolume).lastVolumePref\n      }\n      this.setState({ timeWasLoaded: false })\n    }\n  }\n\n  groupUpdates = e => {\n    this.timeUpdate(e)\n    this.volumeUpdate(e)\n  }\n\n  togglePlay = () => {\n    const { playing } = this.state\n    const method = playing ? \"pause\" : \"play\"\n    this.audio[method]()\n  }\n\n  scrubTime = eventData =>\n    (eventData.nativeEvent.offsetX / this.progress.offsetWidth) *\n    this.audio.duration\n\n  scrub = e => {\n    this.audio.currentTime = this.scrubTime(e)\n  }\n\n  seekTime = e => {\n    this.setState({\n      tooltipPosition: e.nativeEvent.offsetX,\n      tooltipTime: formatTime(this.scrubTime(e)),\n    })\n  }\n\n  playPause = () => {\n    this.setState({ playing: !this.audio.paused })\n    const method = this.audio.paused ? \"add\" : \"remove\"\n    document.querySelector(\".bars\").classList[method](\"bars--paused\") // 💩\n  }\n\n  volume = e => {\n    this.audio.volume = e.currentTarget.value\n    this.setState({\n      currentVolume: `${e.currentTarget.value}`,\n    })\n  }\n\n  speedUp = () => {\n    this.speed(0.25)\n  }\n\n  speedDown = e => {\n    e.preventDefault()\n    this.speed(-0.25)\n  }\n\n  // speed = change => {\n  //   const playbackRateMax = 2.5\n  //   const playbackRateMin = 0.75\n\n  //   let playbackRate = this.state.playbackRate + change\n\n  //   if (playbackRate > playbackRateMax) {\n  //     playbackRate = playbackRateMin\n  //   }\n\n  //   if (playbackRate < playbackRateMin) {\n  //     playbackRate = playbackRateMax\n  //   }\n\n  //   this.setState({ playbackRate })\n  // }\n\n  render() {\n    const { episode } = this.props\n    const {\n      playing,\n      // playbackRate,\n      progressTime,\n      currentTime,\n      duration,\n      showTooltip,\n      tooltipPosition,\n      tooltipTime,\n    } = this.state\n\n    const bounce = keyframes`\n    from {\n      transform: translateX(0)\n    }\n  to {\n    transform: translateX(-200px)\n  }\n  `\n\n    return (\n      <div\n        sx={{\n          zIndex: 10,\n          position: \"fixed\",\n          width: \"100%\",\n          color: \"text\",\n          borderTop: \"2px solid\",\n          borderColor: \"backgroundLighten10\",\n          backgroundColor: \"background\",\n          height: [\"auto\", 60],\n          bottom: 0,\n          left: 0,\n          display: \"flex\",\n\n          alignItems: \"center\",\n        }}\n        className=\"player\"\n      >\n        <Container\n          sx={{\n            display: \"flex\",\n            flexDirection: [\"column\", \"row\"],\n            alignItems: [\"flex-start\", \"center\"],\n            pb: [2, \"inherit\"],\n            pt: [0, \"inherit\"],\n          }}\n        >\n          <div\n            sx={{\n              width: \"100%\",\n              maxWidth: [\"100%\", 310],\n              display: \"flex\",\n              alignItems: \"center\",\n              \"*\": {\n                m: 0,\n              },\n            }}\n          >\n            <button\n              tabIndex=\"0\"\n              sx={{\n                backgroundImage:\n                  \"linear-gradient(224deg, #B298FF 0%, #7A5EFF 100%)\",\n                color: \"text\",\n                border: \"none\",\n                width: \"100%\",\n                maxWidth: 40,\n                height: 40,\n                borderRadius: 1,\n                display: \"flex\",\n                alignItems: \"center\",\n                justifyContent: \"center\",\n                fontSize: 1,\n                cursor: \"pointer\",\n                svg: {\n                  mt: \"1px\",\n                  ml: playing ? \"0\" : \"2px\",\n                },\n              }}\n              onClick={this.togglePlay}\n              aria-label={playing ? \"pause\" : `play ${episode.title}`}\n              type=\"button\"\n            >\n              <VisuallyHidden>{playing ? \"Pause\" : \"Play\"}</VisuallyHidden>{\" \"}\n              {playing ? <FaPause /> : <FaPlay />}\n            </button>\n            <div\n              sx={{\n                ml: 4,\n                display: \"flex\",\n                alignItems: \"center\",\n                justifyContent: [\"flex-start\", \"flex-end\"],\n                width: \"100%\",\n                overflow: \"hidden\",\n                whiteSpace: \"nowrap\",\n                height: 60,\n                \".fade-out\": {\n                  display: [\"none\", \"block\"],\n                  position: \"absolute\",\n                  zIndex: 999,\n                  width: 40,\n                  height: 60,\n                  backgroundImage:\n                    \"linear-gradient(270deg, #1A2232 20%, rgba(26,34,50,0) 100%)\",\n                },\n                h3: {\n                  overflow: \"hidden\",\n                  position: \"relative\",\n                  fontSize: 4,\n                  display: \"block\",\n                },\n                \":hover\": {\n                  h3: { animation: `${bounce} 5s linear infinite` },\n                },\n              }}\n            >\n              <h3>\n                {episode.title} - EP{episode.number}\n              </h3>\n              <div className=\"fade-out\" />\n            </div>\n          </div>\n\n          <div\n            sx={{\n              ml: [0, 2],\n              width: \"100%\",\n              display: \"flex\",\n              alignItems: \"center\",\n              span: {\n                fontVariantNumeric: \"tabular-nums\",\n                width: [\"auto\", 50],\n                fontSize: 1,\n                textAlign: \"center\",\n                opacity: 0.6,\n              },\n            }}\n          >\n            <span>{formatTime(currentTime)}</span>\n            <div\n              sx={{\n                mx: 2,\n                height: [4, 2],\n                flexGrow: \"1\",\n                borderRadius: [\"3px\", \"0px\"],\n                maxWidth: 460,\n                backgroundColor: \"backgroundLighten20\",\n              }}\n              className=\"progress\"\n              onClick={this.scrub}\n              onMouseMove={this.seekTime}\n              onMouseEnter={() => {\n                this.setState({ showTooltip: true })\n              }}\n              onMouseLeave={() => {\n                this.setState({ showTooltip: false })\n              }}\n              ref={x => (this.progress = x)}\n            >\n              {/* eslint-enable */}\n              <div\n                className=\"progress__time\"\n                sx={{\n                  width: `${progressTime}%`,\n                  backgroundImage:\n                    \"linear-gradient(224deg, #B298FF 0%, #7A5EFF 100%)\",\n                }}\n              />\n            </div>\n            <span>{formatTime(duration)}</span>\n            <div\n              style={{\n                position: \"absolute\",\n                left: `${tooltipPosition}px`,\n                opacity: `${showTooltip ? \"1\" : \"0\"}`,\n              }}\n            >\n              {tooltipTime}\n            </div>\n          </div>\n\n          {/* <div className=\"player__section player__section--right\">\n          <button\n            onClick={this.speedUp}\n            onContextMenu={this.speedDown}\n            className=\"player__speed\"\n            type=\"button\"\n          >\n            <p>FASTNESS</p>\n            <span className=\"player__speeddisplay\">{playbackRate} &times;</span>\n          </button>\n        </div> */}\n          {/* <div\n          className=\"player__volume\"\n          style={{ display: \"flex\", width: \"100%\" }}\n        >\n          <p>LOUDNESS</p>\n          <div className=\"player__inputs\">\n            <VolumeBars volume={this.volume} />\n          </div>\n        </div> */}\n          <audio\n            ref={audio => (this.audio = audio)}\n            onPlay={this.playPause}\n            onPause={this.playPause}\n            onTimeUpdate={this.timeUpdate}\n            onVolumeChange={this.volumeUpdate}\n            onLoadedMetadata={this.groupUpdates}\n            src={episode.enclosure_url}\n          />\n        </Container>\n      </div>\n    )\n  }\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/seo.js",
    "content": "/**\n * SEO component that queries for data with\n *  Gatsby's useStaticQuery React hook\n *\n * See: https://www.gatsbyjs.org/docs/use-static-query/\n */\n\nimport React from \"react\"\nimport PropTypes from \"prop-types\"\nimport Helmet from \"react-helmet\"\nimport { useStaticQuery, graphql } from \"gatsby\"\n\nfunction SEO({ description, lang, meta, title, image }) {\n  const { site } = useStaticQuery(\n    graphql`\n      query {\n        site {\n          siteMetadata {\n            title\n            description\n            author\n          }\n        }\n      }\n    `\n  )\n\n  const metaDescription = description || site.siteMetadata.description\n\n  return (\n    <Helmet\n      htmlAttributes={{\n        lang,\n      }}\n      title={title}\n      titleTemplate={`%s | ${site.siteMetadata.title}`}\n      meta={[\n        {\n          name: `description`,\n          content: metaDescription,\n        },\n        {\n          property: `og:title`,\n          content: title,\n        },\n        {\n          property: `og:description`,\n          content: metaDescription,\n        },\n        {\n          property: `og:type`,\n          content: `website`,\n        },\n        {\n          name: `twitter:card`,\n          content: `summary`,\n        },\n        {\n          name: `twitter:creator`,\n          content: site.siteMetadata.author,\n        },\n        {\n          name: `twitter:title`,\n          content: title,\n        },\n        {\n          name: `twitter:description`,\n          content: metaDescription,\n        },\n        {\n          name: `og:image`,\n          content: image,\n        },\n      ].concat(meta)}\n    />\n  )\n}\n\nSEO.defaultProps = {\n  lang: `en`,\n  meta: [],\n  description: ``,\n}\n\nSEO.propTypes = {\n  description: PropTypes.string,\n  lang: PropTypes.string,\n  meta: PropTypes.arrayOf(PropTypes.object),\n  title: PropTypes.string.isRequired,\n}\n\nexport default SEO\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/components/volumeBars.js",
    "content": "import React, { Component, Fragment } from \"react\"\n\n// TODO Fix all eslint issues\n\n// data generator -> to create 10 volume bars\nconst getItems = count => {\n  return Array.from({ length: count }, (v, i) => (i + 1) * 10).map(k => {\n    let decimal = k / 100\n    return {\n      integer: `${k}`,\n      deci: `${decimal}`,\n      vol: `vol${k}`,\n      level: `${k}/100`,\n      checked: true,\n    }\n  }) // END MAP\n} // END ARROW\n\nclass VolumeBars extends Component {\n  state = {\n    volumeBarList: getItems(10),\n  }\n\n  componentDidMount() {\n    const localKey = `lastVolumeBarsOn`\n    const localStorageRef = localStorage.getItem(localKey)\n    if (localStorageRef) {\n      this.setState({ volumeBarList: JSON.parse(localStorageRef) })\n    }\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    const localKey = `lastVolumeBarsOn`\n    const localValue = JSON.stringify(this.state.volumeBarList)\n    localStorage.setItem(localKey, localValue)\n  }\n\n  //We are going to track which volume bars are \"checked\"\n  handleOnClick = index => {\n    // make a copy of state\n    const volumeBarList = [...this.state.volumeBarList]\n    // Get the index positions from 0 till index (index clicked)\n    for (let i = 0; i <= index; i++) {\n      volumeBarList[i].checked = true\n    }\n    // Get the index positions of the remaining non-checked\n    for (let i = index + 1; i < 10; i++) {\n      volumeBarList[i].checked = null\n    }\n    // Update State\n    this.setState({\n      volumeBarList,\n    })\n  }\n\n  render() {\n    return (\n      <Fragment>\n        {this.state.volumeBarList.map((item, index) => (\n          <Fragment key={item.integer}>\n            <input\n              onClick={() => {\n                this.handleOnClick(index)\n              }}\n              onChange={this.props.volume}\n              type=\"radio\"\n              name=\"volume\"\n              value={item.deci}\n              id={item.vol}\n              className=\"sr-only\"\n            />\n            <label\n              htmlFor={item.vol}\n              style={\n                item.checked\n                  ? { background: \"#03fff3\" }\n                  : { background: \"#e4e4e4\" }\n              }\n            >\n              <span className=\"sr-only\">{item.level}</span>\n            </label>\n          </Fragment>\n        ))}\n      </Fragment>\n    )\n  }\n}\n\nexport default VolumeBars\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/gatsby-plugin-theme-ui/index.js",
    "content": "import config from \"../lib/config\"\n\nexport default {\n  useCustomProperties: true,\n  initialColorMode: \"dark\",\n  breakpoints: [\"992px\", \"1200px\", \"1920px\"],\n  space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 56, 64, 72, 80, 128, 256, 512],\n  sizes: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 56, 64, 72, 80, 128, 256, 512],\n  fontSizes: [12, 14, 16, 18, 20, 22, 24, 32, 40, 48, 64],\n  colors: {\n    modes: {\n      dark: {\n        text: \"rgba(255, 255, 255, 0.9)\",\n        background: \"#1A2232\",\n        backgroundLighten10: \"#232B3B\",\n        backgroundLighten20: \"#2C3648\",\n        primaryDarken: \"#7A5EFF\",\n        primary: \"#A085FF\",\n        primaryLighten10: \"#9D82FF\",\n        primaryLighten50: \"#B298FF\",\n        primaryLighten70: \"#D2C8FF\",\n        secondary: \"#85FFD0\",\n      },\n    },\n  },\n  radii: [5, \"50%\"],\n  fontWeights: {\n    body: 300,\n    heading: 500,\n  },\n  lineHeights: {\n    body: 1.675,\n    heading: 1.125,\n  },\n  letterSpacings: {\n    heading: \"1.5\",\n  },\n  fonts: {\n    body: \"system-ui, sans-serif\",\n    heading: \"inherit\",\n  },\n  header: {\n    logo: {\n      flexDirection: \"column\",\n      justifyContent: \"center\",\n      a: { textDecoration: \"none\" },\n      container: {\n        p: 3,\n        display: [\"flex\", \"none\"],\n        visibility: [\"visible\", \"hidden\"],\n        width: \"100%\",\n        justifyContent: \"space-between\",\n        alignItems: \"center\",\n      },\n    },\n  },\n\n  styles: {\n    color: \"primary\",\n    Header: {\n      position: \"relative\",\n      display: \"flex\",\n      flexDirection: \"column\",\n      width: \"100%\",\n      height: config.headerImageHeight,\n      color: \"text\",\n      h1: { fontSize: [6, 8], textShadow: \"0 2px 5px rgba(0,0,0,0.2)\" },\n      \"h1, h5\": { m: 0 },\n      h5: { mt: 1, fontSize: 1, opacity: 0.6 },\n      \".header_content\": {\n        width: \"100%\",\n        height: \"100%\",\n        position: \"absolute\",\n        //pb: [5, 8],\n        px: [5, 8],\n        zIndex: 1,\n        display: \"flex\",\n        alignItems: \"flex-start\",\n        justifyContent: \"flex-end\",\n        button: {\n          width: \"100%\",\n          maxWidth: 7,\n          height: 7,\n          background: \"transparent\",\n          border: \"1px solid\",\n          borderColor: \"text\",\n          color: \"text\",\n          fontSize: \"10px\",\n          borderRadius: 1,\n          display: \"flex\",\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          cursor: \"pointer\",\n          mr: 3,\n          mt: 2,\n          svg: {\n            mt: \"1px\",\n            ml: \"2px\",\n          },\n        },\n      },\n    },\n    root: {\n      \".episodes_list\": {\n        backgroundColor: \"background\",\n        position: [\"absolute\", \"static\"],\n        zIndex: 2,\n        width: \"100%\",\n        maxWidth: [375, 300],\n        px: 5,\n        pt: 40,\n        a: {\n          textDecoration: \"none\",\n          color: \"text\",\n          fontSize: 3,\n          fontWeight: \"heading\",\n        },\n        li: {\n          py: 0,\n          display: \"flex\",\n          justifyContent: \"flex-start\",\n          alignItems: \"center\",\n          \".summary\": {\n            fontSize: 2,\n            lineHeight: 1.4,\n            fontWeight: 300,\n            opacity: 0.7,\n            mt: 3,\n          },\n          \".active\": {\n            borderLeft: \"3px solid\",\n            borderColor: \"primary\",\n            backgroundColor: \"backgroundLighten10\",\n          },\n          a: {\n            px: 5,\n            py: 4,\n            borderLeft: \"3px solid\",\n            borderColor: \"background\",\n            fontSize: 4,\n            width: \"100%\",\n          },\n          \":hover\": {\n            a: { borderColor: \"backgroundLighten10\" },\n            \".active\": {\n              borderColor: \"primary\",\n            },\n            button: {\n              opacity: 1,\n              \":hover\": {\n                opacity: 1,\n              },\n            },\n          },\n          h4: {\n            mb: 0,\n          },\n          button: {\n            position: \"absolute\",\n            opacity: 0,\n            ml: -3,\n            backgroundColor: \"background\",\n            border: \"1px solid\",\n            borderColor: \"text\",\n            color: \"text\",\n            display: \"flex\",\n            width: \"100%\",\n            maxWidth: \"24px\",\n            height: \"24px\",\n            flexGrow: \"1\",\n            borderRadius: \"50%\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            svg: { mt: \"1px\", ml: \"1px\" },\n            cursor: \"pointer\",\n          },\n        },\n      },\n      \"[data-reach-skip-link]\": {\n        border: \"0\",\n        clip: \"rect(0 0 0 0)\",\n        height: \"1px\",\n        width: \"1px\",\n        margin: \"-1px\",\n        padding: \"0\",\n        overflow: \"hidden\",\n        position: \"absolute\",\n        zIndex: \"999\",\n      },\n      \"[data-reach-skip-link]:focus\": {\n        padding: \"1rem\",\n        position: \"fixed\",\n        top: \"10px\",\n        left: \"10px\",\n        backgroundColor: \"background\",\n        width: \"auto\",\n        height: \"auto\",\n        clip: \"auto\",\n      },\n      backgroundColor: \"background\",\n      lineHeight: \"body\",\n      fontFamily: \"body\",\n      fontSize: [2, 3],\n      color: \"text\",\n      bg: \"background\",\n      a: {\n        color: \"primaryLighten50\",\n      },\n      \"a:hover\": {\n        color: \"primaryLighten70\",\n      },\n      article: {\n        p: [5, 8],\n        pb: [2, 14],\n        borderLeft: \"2px solid\",\n        borderRight: \"2px solid\",\n        borderColor: \"backgroundLighten10\",\n      },\n      \".sidebar\": {\n        display: \"flex\",\n        flexDirection: \"column\",\n        p: [5, 8],\n        pb: [13, 8],\n        width: \"100%\",\n        maxWidth: [\"100%\", 250],\n        fontSize: \"15px\",\n        h5: { my: 4, fontSize: 3 },\n        \"h5:not(:first-of-type)\": { mb: 10, mt: 0 },\n        \".guest\": {\n          fontSize: 1,\n          textTransform: \"uppercase\",\n          opacity: 0.8,\n          fontWeight: \"body\",\n        },\n\n        li: {\n          mb: 2,\n          display: \"flex\",\n          a: { color: \"text\" },\n          svg: {\n            mt: 1,\n            mr: 1,\n            width: \"100%\",\n            maxWidth: 3,\n            color: \"text\",\n            opacity: 0.5,\n          },\n        },\n      },\n      hr: {\n        backgroundColor: \"backgroundLighten10\",\n        height: \"2px\",\n      },\n    },\n    Container: {\n      maxWidth: 1200,\n    },\n    a: {\n      color: \"primary\",\n      textDecoration: \"none\",\n      \":hover\": {\n        color: \"secondary\",\n        textDecoration: \"underline\",\n      },\n    },\n  },\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/lib/config/index.js",
    "content": "export default {\n  podcastSeason: \"1\",\n  headerImageHeight: [300, 400],\n  spotifyUrl: \"/\",\n  applePodcastsUrl: \"/\",\n  googlePodcastsUrl: \"/\",\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/lib/formatTime.js",
    "content": "// TODO figure out the ~~ thing\n\nexport default function formatTime(time) {\n  // Hours, minutes and seconds\n  const hrs = Math.floor(~~(time / 3600)) // eslint-disable-line\n  const mins = Math.floor(~~((time % 3600) / 60)) // eslint-disable-line\n  const secs = Math.floor(time % 60)\n\n  // Output like \"1:01\" or \"4:03:59\" or \"123:03:59\"\n  let ret = \"\"\n\n  if (hrs > 0) {\n    ret += `${hrs}:${mins < 10 ? \"0\" : \"\"}`\n  }\n\n  ret += `${mins}:${secs < 10 ? \"0\" : \"\"}`\n  ret += `${secs}`\n  return ret\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/pages/404.js",
    "content": "import React from \"react\"\n\nimport Layout from \"../components/layout\"\nimport SEO from \"../components/seo\"\n\nconst NotFoundPage = () => (\n  <Layout>\n    <SEO title=\"404: Not found\" />\n    <h1>NOT FOUND</h1>\n    <p>You just hit a route that doesn&#39;t exist... the sadness.</p>\n  </Layout>\n)\n\nexport default NotFoundPage\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/pages/index.js",
    "content": "/** @jsx jsx */\nimport { jsx } from \"theme-ui\"\nimport { graphql, useStaticQuery } from \"gatsby\"\nimport Episode from \"../templates/episode\"\n\nexport default function Index({ data: { allEpisode, allMarkdownRemark } }) {\n  const MarkdownForLatestEpisode = allMarkdownRemark.edges.filter(\n    Markdown => Markdown.node.frontmatter.id === allEpisode.nodes[0].id\n  )\n\n  const data = useStaticQuery(graphql`\n    {\n      allEpisode {\n        totalCount\n        nodes {\n          id\n          title\n          description\n          number\n          enclosure_url\n          fields {\n            slug\n          }\n        }\n      }\n      allMarkdownRemark {\n        edges {\n          node {\n            html\n            frontmatter {\n              id\n              title\n              resources\n              guestSummary\n              guestName\n              guestPhoto {\n                childImageSharp {\n                  fluid(maxWidth: 200) {\n                    ...GatsbyImageSharpFluid_noBase64\n                  }\n                }\n              }\n              image {\n                childImageSharp {\n                  original {\n                    src\n                  }\n                  fluid(maxWidth: 700) {\n                    ...GatsbyImageSharpFluid_noBase64\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  `)\n  return (\n    <Episode\n      data={{\n        episode: data.allEpisode.nodes[0],\n        markdownRemark:\n          MarkdownForLatestEpisode[0] && MarkdownForLatestEpisode[0].node,\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "gatsby-theme-simplecast/src/templates/episode.js",
    "content": "/** @jsx jsx */\nimport { jsx } from \"theme-ui\"\nimport { graphql } from \"gatsby\"\nimport { EpisodeConsumer } from \"../components/context\"\nimport SEO from \"../components/seo\"\nimport Header from \"../components/header\"\nimport Aside from \"../components/aside\"\nimport { SkipNavContent } from \"@reach/skip-nav\"\n\nfunction EpisodeTemplate({ data: { episode, markdownRemark } }) {\n  const image = markdownRemark && markdownRemark.frontmatter.image\n  const markdown = markdownRemark && markdownRemark\n\n  return (\n    <EpisodeConsumer>\n      {context => (\n        <div>\n          <SEO\n            title={episode.title && episode.title}\n            image={image && image.childImageSharp.original.src}\n            description={episode.description && episode.description}\n          />\n          <div\n            sx={{\n              display: \"flex\",\n              flexDirection: [\"column\", \"row\"],\n            }}\n          >\n            <SkipNavContent sx={{ maxWidth: [\"100%\", 710] }}>\n              <Header context={context} episode={episode} image={image} />\n              <article>\n                <p>{episode.description && episode.description}</p>\n                {markdown && (\n                  <div dangerouslySetInnerHTML={{ __html: markdown.html }} />\n                )}\n              </article>\n            </SkipNavContent>\n            <Aside markdown={markdown} />\n          </div>\n        </div>\n      )}\n    </EpisodeConsumer>\n  )\n}\n\nexport default EpisodeTemplate\n\nexport const episodeQuery = graphql`\n  query($id: String!) {\n    episode(id: { eq: $id }) {\n      id\n      title\n      description\n      number\n      enclosure_url\n      fields {\n        slug\n      }\n    }\n    markdownRemark(frontmatter: { id: { eq: $id } }) {\n      html\n      frontmatter {\n        id\n        title\n        resources\n        guestName\n        guestSummary\n        guestPhoto {\n          childImageSharp {\n            fluid(maxWidth: 200) {\n              ...GatsbyImageSharpFluid\n            }\n          }\n        }\n        image {\n          childImageSharp {\n            original {\n              src\n            }\n            fluid(maxWidth: 700) {\n              ...GatsbyImageSharpFluid\n            }\n          }\n        }\n      }\n    }\n  }\n`\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"workspaces\": [\n    \"gatsby-theme-simplecast\",\n    \"demo\"\n  ]\n}\n"
  }
]