Guest User

Untitled

a guest
Sep 29th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 267.28 KB | None | 0 0
  1.  
  2.  
  3. <!doctype html>
  4. <html lang='en' class="">
  5. <head>
  6. <title>
  7.  
  8. Humble Book Bundle: Cybersecurity presented by Wiley (pay what you want and help charity)
  9.  
  10. </title>
  11.  
  12. <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
  13. <meta name="application-name" content="Humble Bundle">
  14. <meta name="msapplication-TileColor" content="rgb(218,222,230)">
  15. <meta name="msapplication-TileImage" content="https://humblebundle-a.akamaihd.net/static/hashed/49bccd0f2050e5fcfc3c442b269d4ff47b038ed9.png">
  16. <meta name='medium' content='news' />
  17. <meta name="theme-color" content="rgb(73,79,92)">
  18. <meta property='og:site_name' content='Humble Bundle' />
  19. <meta property='og:type' content='website' />
  20. <meta property="fb:app_id" content="101146256651042" />
  21. <meta property="fb:profile_id" content="162315830478396" />
  22. <meta property="fb:pages" content="162315830478396"><meta name='robots' content='noindex, nofollow'>
  23.  
  24. <meta name='og:image:width' content='1200'>
  25. <meta name='og:image:height' content='630'>
  26. <meta itemprop='image' content='https://humblebundle.imgix.net/misc/files/hashed/b3a575f3721ad7fc82416fef6aa9a2bc1ec3177f.png?auto=format&lossless=1&ixlib=python-0.2.0&s=716eb9b765d06783f32def6a5116d206' />
  27. <meta name='title' content='Humble Book Bundle: Cybersecurity presented by Wiley'/>
  28. <meta name='description' content='Pay what you want for cybersecurity ebooks and support charity!' />
  29. <meta property='og:url' content='https://www.humblebundle.com/books/cybersecurity-wiley'/>
  30. <meta property='og:title' content='Humble Book Bundle: Cybersecurity presented by Wiley'/>
  31. <meta property='og:description' content='Pay what you want for cybersecurity ebooks and support charity!' />
  32. <meta property='og:image' content='https://humblebundle.imgix.net/misc/files/hashed/b3a575f3721ad7fc82416fef6aa9a2bc1ec3177f.png?auto=format&lossless=1&ixlib=python-0.2.0&s=716eb9b765d06783f32def6a5116d206' />
  33. <link rel='image_src' href='https://humblebundle.imgix.net/misc/files/hashed/b3a575f3721ad7fc82416fef6aa9a2bc1ec3177f.png?auto=format&lossless=1&ixlib=python-0.2.0&s=716eb9b765d06783f32def6a5116d206' />
  34. <meta name="twitter:card" content="summary_large_image" />
  35. <meta name="twitter:site" content="@humble" />
  36. <meta name="twitter:title" content="Humble Book Bundle: Cybersecurity presented by Wiley" />
  37. <meta name="twitter:description" content="Pay what you want for cybersecurity ebooks and support charity!" />
  38. <meta name="twitter:image" content="https://humblebundle.imgix.net/misc/files/hashed/a1b497a33b09ca5ed2a98ffaa05bb5ddc05fcf0b.png?auto=format&lossless=1&ixlib=python-0.2.0&s=dc028671827dd4debafa21d595065da3" />
  39. <meta name="twitter:url" content="https://www.humblebundle.com/books/cybersecurity-wiley" />
  40.  
  41. <link rel="apple-touch-icon" sizes="144x144" href="https://humblebundle-a.akamaihd.net/static/hashed/03df0490a53d595fd930f9fff52038366d60a05d.png">
  42. <link rel="icon" type="image/png" sizes="16x16" href="https://humblebundle-a.akamaihd.net/static/hashed/4c8bbc6fc7b2b8a9fa21e895afe1157188e28bfb.png">
  43. <link rel="icon" type="image/png" sizes="32x32" href="https://humblebundle-a.akamaihd.net/static/hashed/46cf2ed85a0641bfdc052121786440c70da77d75.png">
  44. <link rel="shortcut icon" href="https://humblebundle-a.akamaihd.net/static/hashed/47e474eed38083df699b7dfd8d29d575e3398f1e.ico">
  45. <link rel="search" type="application/opensearchdescription+xml" title="Humble Bundle Search" href="https://humblebundle-a.akamaihd.net/static/hashed/6606d9a78e51b66308bfa309bcba0b60395dd5e5.xml" />
  46. <link rel='alternate' type='application/rss+xml' title='Humble Mumble' href='http://blog.humblebundle.com/rss' />
  47.  
  48.  
  49. <style>
  50.  
  51. .button { border: none; border-radius: 3px; color: white !important; cursor: pointer; display: inline-block; font-size: 14px; line-height: 26px; margin: 0; padding: 0px 10px; text-decoration: none; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); transition: box-shadow 0.2s ease, background 0.2s ease; }
  52. .button.light-background { box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.1), inset 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 2px 0px 0px rgba(255, 255, 255, 0.2); }
  53. .button.dark-background { box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), 0px 1px 2px 0px rgba(0, 0, 0, 0.2), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.2); }
  54. .button:focus { outline: none; }
  55. .button:active { box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.2), inset 0px 0px 0px 1px rgba(0, 0, 0, 0.2); }
  56. .button.large { box-sizing: border-box; line-height: 46px; font-size: 18px; padding: 0 20px; margin-top: 1px; }
  57. .button.blue { background-image: linear-gradient(-180deg, #4dc4ff 0%, #17a1e6 100%); }
  58. .button.blue:hover { background-image: linear-gradient(-180deg, #80d4ff 0%, #19b2ff 100%); }
  59. .button.blue:active { background: #148fcc; }
  60. .button.red { background-image: linear-gradient(-180deg, #ff5244 0%, #e62217 100%); }
  61. .button.red:hover { background-image: linear-gradient(-180deg, #ff8280 0%, #ff0b0e 100%); }
  62. .button.red:active { background: #148fcc; }
  63. .button.green { background-color: #97b147; background-image: linear-gradient(-180deg, #97b147 0%, #7e992e 100%); }
  64. .button.green:hover { background-image: linear-gradient(-180deg, #adcc52 0%, #93b336 100%); }
  65. .button.green:active { background: #7e992e; }
  66. .button.gray { background-color: #bbb; background-image: linear-gradient(-180deg, #bbb 0%, #aaa 100%); }
  67. .button.gray:hover { background-image: linear-gradient(-180deg, #bbb 0%, #aaa 100%); }
  68. .button.gray:active { background: #999; }
  69. .button.disabled { opacity: 0.5; cursor: default; pointer-events: none; }
  70.  
  71. .plain-oval, .gray-oval, .round-active-button { padding: 5px 10px; border: 1px solid #898e97; border-radius: 18px; background: white; color: black; font-weight: bold; text-align: center; font-size: 14px; display: inline-block; }
  72. .plain-oval:focus, .gray-oval:focus, .round-active-button:focus { outline: none; }
  73.  
  74. .gray-oval, .round-active-button { background-color: #a1a7b2; color: white; text-shadow: 1px 1px #898e97; }
  75.  
  76. .round-active-button { cursor: pointer; background: linear-gradient(-180deg, #97b147 0%, #7e992e 100%); text-decoration: none; color: white !important; }
  77. .round-active-button:hover, .round-active-button:focus { filter: brightness(1.1); }
  78.  
  79. .fixed-width-button { width: 100px; }
  80.  
  81. .flat-button { border: 1px solid rgba(0, 0, 0, 0.25); border-radius: 5px; display: inline-block; background-color: transparent; color: white; padding: 0.5em 1em; font-weight: bold; text-align: center; text-decoration: none; transition: background-color 0.1s ease-in-out; }
  82. .flat-button.disabled { opacity: 0.5; cursor: default; pointer-events: none; }
  83. .flat-button.large-button { font-size: 1.15em; }
  84. .flat-button.larger-button { font-size: 1.25em; padding: 0.85em 1.75em; }
  85. .flat-button.green { background-color: #97b147; }
  86. .flat-button.green:hover { background-color: #acc368; }
  87. .flat-button.blue { background-color: #17a1e5; }
  88. .flat-button.blue:hover { background-color: #43b4ec; }
  89. .flat-button.red { background-color: #cb272c; }
  90. .flat-button.red:hover { background-color: #dc494d; }
  91. .flat-button.gray { background-color: #757b86; }
  92. .flat-button.gray:hover { background-color: #90959e; }
  93.  
  94. .subtab-button { border-radius: 3px; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-weight: bold; font-size: 14px; line-height: 17px; padding: 14px; text-decoration: none; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.2); }
  95. .subtab-button.grey { box-shadow: inset 0px 2px 0px 0px rgba(255, 255, 255, 0.2), inset 0px -2px 0px 0px rgba(0, 0, 0, 0.5); background-image: linear-gradient(-180deg, #A1A7B2 0%, #7B818C 100%); color: #FFFFFF; }
  96. .subtab-button.orange { box-shadow: inset 0px -2px 0px 0px rgba(255, 255, 255, 0.2), inset 0px 2px 0px 0px rgba(0, 0, 0, 0.2); background-image: linear-gradient(0deg, #FFAF61 0%, #EF9741 100%); color: #FFF3DD; }
  97. .subtab-button:hover, .subtab-button:focus { filter: brightness(1.1); }
  98.  
  99. .simple-payment-button { outline: none; background: none; border-radius: 3px; border: none; box-shadow: inset 0px 0px 0px 1px #3b3e48; color: #494f5c; cursor: pointer; display: inline-block; line-height: 18px; padding: 10px 15px; text-decoration: none; margin-right: 10px; transition: all, 0.1s; background: #e4e7ed; }
  100. .simple-payment-button:focus { outline: none; }
  101. .simple-payment-button:hover, .simple-payment-button:active { background: #f3f5f7; }
  102.  
  103. .payment-button { outline: none; background: none; border-radius: 3px; border: none; box-shadow: inset 0px 0px 0px 1px #3b3e48; color: #494f5c; cursor: pointer; display: inline-block; line-height: 18px; padding: 10px 15px; text-decoration: none; margin-right: 10px; transition: all, 0.1s; }
  104. .payment-button:focus { outline: none; }
  105. .payment-button:hover { box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.1), inset 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 2px 0px 0px rgba(255, 255, 255, 0.2); }
  106. .payment-button:active { box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.2), inset 0px 0px 0px 1px rgba(0, 0, 0, 0.2); }
  107. .payment-button i { vertical-align: middle; }
  108.  
  109. .stripe-payment-button { background-image: linear-gradient(#4dc4ff, #17a1e6); color: white; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.1), inset 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 2px 0px 0px rgba(255, 255, 255, 0.2); }
  110. .stripe-payment-button:hover { background-image: linear-gradient(#80d4ff, #19b2ff); }
  111. .stripe-payment-button:active { background: #148fcc; }
  112. .stripe-payment-button .hb-stripe { font-size: 18px; margin-right: 4px; }
  113.  
  114. .paypal-payment-button { background-image: linear-gradient(#ffebc1, #ffaa02); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.1), inset 0px 0px 0px 1px #c68200, inset 0px 2px 0px 0px rgba(255, 255, 255, 0.6); padding-right: 10px; }
  115. .paypal-payment-button:hover { background-image: linear-gradient(#fff4db, #ffbc36); }
  116. .paypal-payment-button:active { background: #e69a02; }
  117. .paypal-payment-button img { vertical-align: middle; }
  118.  
  119. .amazon-payment-button { background-image: linear-gradient(#ffe8ab, #f5c747); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.1), inset 0px 0px 0px 1px #b38b22, inset 0px 2px 0px 0px rgba(255, 255, 255, 0.6); }
  120. .amazon-payment-button:hover { background-image: linear-gradient(#ffeebf, #ffd359); }
  121. .amazon-payment-button:active { background: #d9b03f; }
  122. .amazon-payment-button .hb-amazon { font-size: 18px; margin-right: 4px; }
  123.  
  124. .bbm-modal { background: #3B3E48; color: white; font-size: 14px; font-weight: normal; box-shadow: 0 0 6px rgba(0, 0, 0, 0.6), 0 1px 2px rgba(0, 0, 0, 0.9); }
  125.  
  126. .bbm-wrapper { background: rgba(0, 0, 0, 0.1); position: absolute; }
  127.  
  128. /* Modal positioning */
  129. .bbm-wrapper { box-sizing: border-box; left: 0; top: 0; width: 100%; height: 100%; z-index: 100; padding: 0 10px 0 10px; text-align: left; overflow: auto; }
  130.  
  131. .bbm-wrapper * { box-sizing: border-box; }
  132.  
  133. .bbm-modal { border-radius: 3px; margin: auto; margin-bottom: 40px; width: auto; max-width: 550px; }
  134.  
  135. .bbm-views { width: 100%; box-sizing: border-box; }
  136.  
  137. .generic-bbm-views { width: 100%; }
  138.  
  139. /* BLOCKS */
  140. .bbm-modal__topbar, .bbm-modal__bottombar { padding: 0 30px; }
  141.  
  142. .bbm-modal__topbar { border-bottom: 1px solid rgba(0, 0, 0, 0.1); border-radius: 3px 3px 0 0; padding: 10px 30px; background: #272C33; font-weight: bold; font-size: 16px; margin-bottom: 30px; }
  143. .bbm-modal__topbar i { margin-right: 10px; }
  144. .bbm-modal__topbar > ul { list-style: none; text-align: center; padding: 0; margin: 0; }
  145.  
  146. .bbm-modal__tab { display: inline-block; padding: 15px 10px; }
  147. .bbm-modal__tab a { font-size: 16px; font-weight: bold; color: #999999; }
  148. .bbm-modal__tab a:hover, .bbm-modal__tab a.active { color: #222222; }
  149.  
  150. .bbm-modal__title { padding: 20px 30px; margin: 0; line-height: 1em; color: #312d3a; }
  151.  
  152. .bbm-modal__section { padding: 0 30px; font-size: 14px; font-weight: normal; line-height: 26px; color: white; }
  153. .bbm-modal__section p:last-child { padding: 0; margin-bottom: 0; }
  154. .bbm-modal__section a { color: white; }
  155. .bbm-modal__section h3 { margin: 0; font-size: 20px; line-height: 1em; }
  156.  
  157. .bbm-modal__bottombar { border-top: 1px solid rgba(0, 0, 0, 0.1); padding: 18px; text-align: right; margin-top: 30px; }
  158.  
  159. /* MODULES */
  160. .bbm-group { content: ""; display: table; clear: both; }
  161.  
  162. .bbm-button { display: inline-block; color: rgba(49, 45, 58, 0.8); text-decoration: none; font-size: 14px; font-weight: 500; position: relative; line-height: 1em; padding: 10px 14px; border-radius: 3px; background: #fcfcfc; background-image: -o-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: -moz-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: -webkit-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: -ms-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); -moz-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.2); box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.2); }
  163. .bbm-button.inactive { opacity: 0.5; pointer-events: none; }
  164. .bbm-button:active { background-image: -o-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: -moz-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: -webkit-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: -ms-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); -moz-box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.2); box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.2); }
  165.  
  166. /* ANIMATIONS */
  167. /* Open modal */
  168. @-webkit-keyframes bbm-open { 0% { -webkit-transform: matrix(0.99126, 0, 0, 0.99126, 0, 43.8813); opacity: 0.1259; }
  169. 4% { -webkit-transform: matrix(0.99295, 0, 0, 0.99295, 0, 45.06809); opacity: 0.29544; }
  170. 8% { -webkit-transform: matrix(0.99467, 0, 0, 0.99467, 0, 46.26922); opacity: 0.46703; }
  171. 12% { -webkit-transform: matrix(0.99619, 0, 0, 0.99619, 0, 47.33355); opacity: 0.61908; }
  172. 16% { -webkit-transform: matrix(0.99743, 0, 0, 0.99743, 0, 48.19991); opacity: 0.74284; }
  173. 20% { -webkit-transform: matrix(0.99837, 0, 0, 0.99837, 0, 48.86067); opacity: 0.83724; }
  174. 24% { -webkit-transform: matrix(0.99905, 0, 0, 0.99905, 0, 49.33658); opacity: 0.90523; }
  175. 28% { -webkit-transform: matrix(0.99952, 0, 0, 0.99952, 0, 49.66049); opacity: 0.9515; }
  176. 32% { -webkit-transform: matrix(0.99981, 0, 0, 0.99981, 0, 49.8675); opacity: 0.98107; }
  177. 36% { -webkit-transform: matrix(0.99999, 0, 0, 0.99999, 0, 49.98966); opacity: 0.99852; }
  178. 40% { -webkit-transform: matrix(1.00008, 0, 0, 1.00008, 0, 50.05361); opacity: 1.00766; }
  179. 44% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.08); opacity: 1.01143; }
  180. 48% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08394); opacity: 1.01199; }
  181. 52% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.07589); opacity: 1.01084; }
  182. 56% { -webkit-transform: matrix(1.00009, 0, 0, 1.00009, 0, 50.06265); opacity: 1.00895; }
  183. 60% { -webkit-transform: matrix(1.00007, 0, 0, 1.00007, 0, 50.04833); opacity: 1.0069; }
  184. 64% { -webkit-transform: matrix(1.00005, 0, 0, 1.00005, 0, 50.03518); opacity: 1.00503; }
  185. 68% { -webkit-transform: matrix(1.00004, 0, 0, 1.00004, 0, 50.02421); opacity: 1.00346; }
  186. 72% { -webkit-transform: matrix(1.00002, 0, 0, 1.00002, 0, 50.01567); opacity: 1.00224; }
  187. 76% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00941); opacity: 1.00134; }
  188. 80% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00506); opacity: 1.00072; }
  189. 84% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.00223); opacity: 1.00032; }
  190. 88% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.0005); opacity: 1.00007; }
  191. 92% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99956); opacity: 0.99994; }
  192. 96% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99913); opacity: 0.99988; }
  193. 100% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50); opacity: 1; } }
  194. .bbm-modal--open { -webkit-animation-duration: 0.3s; -webkit-animation-name: bbm-open; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  195.  
  196. /* Open a stacked modal */
  197. @-webkit-keyframes bbm-stacked { 0% { -webkit-transform: matrix(0.99874, 0, 0, 0.99874, 0, 49.1187); opacity: 0.93705; }
  198. 4% { -webkit-transform: matrix(0.99705, 0, 0, 0.99705, 0, 47.93192); opacity: 0.85228; }
  199. 8% { -webkit-transform: matrix(0.99533, 0, 0, 0.99533, 0, 46.73078); opacity: 0.76648; }
  200. 12% { -webkit-transform: matrix(0.99381, 0, 0, 0.99381, 0, 45.66645); opacity: 0.69046; }
  201. 16% { -webkit-transform: matrix(0.99257, 0, 0, 0.99257, 0, 44.80009); opacity: 0.62858; }
  202. 20% { -webkit-transform: matrix(0.99163, 0, 0, 0.99163, 0, 44.13933); opacity: 0.58138; }
  203. 24% { -webkit-transform: matrix(0.99095, 0, 0, 0.99095, 0, 43.66342); opacity: 0.54739; }
  204. 28% { -webkit-transform: matrix(0.99049, 0, 0, 0.99049, 0, 43.33951); opacity: 0.52425; }
  205. 32% { -webkit-transform: matrix(0.99019, 0, 0, 0.99019, 0, 43.1325); opacity: 0.50946; }
  206. 36% { -webkit-transform: matrix(0.99002, 0, 0, 0.99002, 0, 43.01034); opacity: 0.50074; }
  207. 40% { -webkit-transform: matrix(0.98992, 0, 0, 0.98992, 0, 42.94639); opacity: 0.49617; }
  208. 44% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92001); opacity: 0.49429; }
  209. 48% { -webkit-transform: matrix(0.98988, 0, 0, 0.98988, 0, 42.91606); opacity: 0.494; }
  210. 52% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92411); opacity: 0.49458; }
  211. 56% { -webkit-transform: matrix(0.98991, 0, 0, 0.98991, 0, 42.93736); opacity: 0.49553; }
  212. 60% { -webkit-transform: matrix(0.98993, 0, 0, 0.98993, 0, 42.95167); opacity: 0.49655; }
  213. 64% { -webkit-transform: matrix(0.98995, 0, 0, 0.98995, 0, 42.96482); opacity: 0.49749; }
  214. 68% { -webkit-transform: matrix(0.98997, 0, 0, 0.98997, 0, 42.97579); opacity: 0.49827; }
  215. 72% { -webkit-transform: matrix(0.98998, 0, 0, 0.98998, 0, 42.98433); opacity: 0.49888; }
  216. 76% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99059); opacity: 0.49933; }
  217. 80% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99494); opacity: 0.49964; }
  218. 84% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.99777); opacity: 0.49984; }
  219. 88% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.9995); opacity: 0.49996; }
  220. 92% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00044); opacity: 0.50003; }
  221. 96% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00088); opacity: 0.50006; }
  222. 100% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43); opacity: 0.5; } }
  223. .bbm-modal--stacked { -webkit-animation-duration: 0.43333s; -webkit-animation-name: bbm-stacked; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  224.  
  225. /* destroy a stacked modal */
  226. @-webkit-keyframes bbm-stacked-reverse { 0% { -webkit-transform: matrix(0.99123, 0, 0, 0.99123, 0, 43.86266); opacity: 0.56162; }
  227. 4% { -webkit-transform: matrix(0.99293, 0, 0, 0.99293, 0, 45.05306); opacity: 0.64665; }
  228. 8% { -webkit-transform: matrix(0.99465, 0, 0, 0.99465, 0, 46.25785); opacity: 0.7327; }
  229. 12% { -webkit-transform: matrix(0.99618, 0, 0, 0.99618, 0, 47.32543); opacity: 0.80896; }
  230. 16% { -webkit-transform: matrix(0.99742, 0, 0, 0.99742, 0, 48.19443); opacity: 0.87103; }
  231. 20% { -webkit-transform: matrix(0.99837, 0, 0, 0.99837, 0, 48.8572); opacity: 0.91837; }
  232. 24% { -webkit-transform: matrix(0.99905, 0, 0, 0.99905, 0, 49.33456); opacity: 0.95247; }
  233. 28% { -webkit-transform: matrix(0.99951, 0, 0, 0.99951, 0, 49.65946); opacity: 0.97568; }
  234. 32% { -webkit-transform: matrix(0.99981, 0, 0, 0.99981, 0, 49.8671); opacity: 0.99051; }
  235. 36% { -webkit-transform: matrix(0.99999, 0, 0, 0.99999, 0, 49.98963); opacity: 0.99926; }
  236. 40% { -webkit-transform: matrix(1.00008, 0, 0, 1.00008, 0, 50.05377); opacity: 1.00384; }
  237. 44% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08024); opacity: 1.00573; }
  238. 48% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08419); opacity: 1.00601; }
  239. 52% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.07612); opacity: 1.00544; }
  240. 56% { -webkit-transform: matrix(1.00009, 0, 0, 1.00009, 0, 50.06284); opacity: 1.00449; }
  241. 60% { -webkit-transform: matrix(1.00007, 0, 0, 1.00007, 0, 50.04848); opacity: 1.00346; }
  242. 64% { -webkit-transform: matrix(1.00005, 0, 0, 1.00005, 0, 50.03529); opacity: 1.00252; }
  243. 68% { -webkit-transform: matrix(1.00004, 0, 0, 1.00004, 0, 50.02428); opacity: 1.00173; }
  244. 72% { -webkit-transform: matrix(1.00002, 0, 0, 1.00002, 0, 50.01572); opacity: 1.00112; }
  245. 76% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00944); opacity: 1.00067; }
  246. 80% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00508); opacity: 1.00036; }
  247. 84% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.00223); opacity: 1.00016; }
  248. 88% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.0005); opacity: 1.00004; }
  249. 92% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99956); opacity: 0.99997; }
  250. 96% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99912); opacity: 0.99994; }
  251. 100% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50); opacity: 1; } }
  252. .bbm-modal--stacked-reverse { -webkit-animation-duration: 0.43333s; -webkit-animation-name: bbm-stacked-reverse; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  253.  
  254. /* destroy a modal */
  255. @-webkit-keyframes bbm-destroy { 0% { -webkit-transform: matrix(0.99874, 0, 0, 0.99874, 0, 49.1187); opacity: 0.8741; }
  256. 4% { -webkit-transform: matrix(0.99705, 0, 0, 0.99705, 0, 47.93192); opacity: 0.70456; }
  257. 8% { -webkit-transform: matrix(0.99533, 0, 0, 0.99533, 0, 46.73078); opacity: 0.53297; }
  258. 12% { -webkit-transform: matrix(0.99381, 0, 0, 0.99381, 0, 45.66645); opacity: 0.38092; }
  259. 16% { -webkit-transform: matrix(0.99257, 0, 0, 0.99257, 0, 44.80009); opacity: 0.25716; }
  260. 20% { -webkit-transform: matrix(0.99163, 0, 0, 0.99163, 0, 44.13933); opacity: 0.16276; }
  261. 24% { -webkit-transform: matrix(0.99095, 0, 0, 0.99095, 0, 43.66342); opacity: 0.09477; }
  262. 28% { -webkit-transform: matrix(0.99049, 0, 0, 0.99049, 0, 43.33951); opacity: 0.0485; }
  263. 32% { -webkit-transform: matrix(0.99019, 0, 0, 0.99019, 0, 43.1325); opacity: 0.01893; }
  264. 36% { -webkit-transform: matrix(0.99002, 0, 0, 0.99002, 0, 43.01034); opacity: 0.00148; }
  265. 40% { -webkit-transform: matrix(0.98992, 0, 0, 0.98992, 0, 42.94639); opacity: -0.00766; }
  266. 44% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92001); opacity: -0.01143; }
  267. 48% { -webkit-transform: matrix(0.98988, 0, 0, 0.98988, 0, 42.91606); opacity: -0.01199; }
  268. 52% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92411); opacity: -0.01084; }
  269. 56% { -webkit-transform: matrix(0.98991, 0, 0, 0.98991, 0, 42.93736); opacity: -0.00895; }
  270. 60% { -webkit-transform: matrix(0.98993, 0, 0, 0.98993, 0, 42.95167); opacity: -0.0069; }
  271. 64% { -webkit-transform: matrix(0.98995, 0, 0, 0.98995, 0, 42.96482); opacity: -0.00503; }
  272. 68% { -webkit-transform: matrix(0.98997, 0, 0, 0.98997, 0, 42.97579); opacity: -0.00346; }
  273. 72% { -webkit-transform: matrix(0.98998, 0, 0, 0.98998, 0, 42.98433); opacity: -0.00224; }
  274. 76% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99059); opacity: -0.00134; }
  275. 80% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99494); opacity: -0.00072; }
  276. 84% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.99777); opacity: -0.00032; }
  277. 88% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.9995); opacity: -7e -5; }
  278. 92% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00044); opacity: 6.0 e-05; }
  279. 96% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00088); opacity: 0.00012; }
  280. 100% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43); opacity: 0; } }
  281. .bbm-modal--destroy { -webkit-animation-duration: 0.43333s; -webkit-animation-name: bbm-destroy; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  282.  
  283. .curtain { display: none; opacity: 0.75; position: absolute; background: black; top: 0; bottom: 0; left: 0; right: 0; z-index: 10; }
  284. .curtain .dialogs { height: 0; padding-bottom: 56.25%; width: auto; margin: auto; }
  285. .curtain .dialogs.spinner, .curtain .dialogs.spinner img { width: 48px; display: none; }
  286. .curtain div.loading-bindle { display: block; width: 32; height: 26px; zoom: 3; margin: 0 auto 10px auto; background-position: -480px 0; }
  287. .curtain div.loading-bindle.f10 { background-position: -480px 0; }
  288. .curtain div.loading-bindle.f11 { background-position: -512px 0; }
  289. .curtain div.loading-bindle.f12 { background-position: -544px 0; }
  290. .curtain div.loading-bindle.f13 { background-position: -576px 0; }
  291. .curtain div.loading-bindle.f14 { background-position: -608px 0; }
  292. .curtain div.loading-bindle.f15 { background-position: -640px 0; }
  293. .curtain div.loading-bindle.f16 { background-position: -672px 0; }
  294. .curtain div.loading-bindle.f17 { background-position: -704px 0; }
  295. .curtain div.loading-bindle.f18 { background-position: -736px 0; }
  296. .curtain div.loading-bindle.f19 { background-position: -768px 0; }
  297. .curtain div.loading-bindle.f20 { background-position: -800px 0; }
  298. .curtain div.loading-bindle.f21 { background-position: -832px 0; }
  299. .curtain div.loading-bindle.f22 { background-position: -864px 0; }
  300. .curtain div.loading-bindle.f23 { background-position: -896px 0; }
  301. .curtain div.loading-bindle.f24 { background-position: -928px 0; }
  302. .curtain div.loading-bindle.f25 { background-position: 0px 0; }
  303. .curtain div.loading-bindle.f26 { background-position: -32px 0; }
  304. .curtain div.loading-bindle.f27 { background-position: -64px 0; }
  305. .curtain div.loading-bindle.f28 { background-position: -96px 0; }
  306. .curtain div.loading-bindle.f29 { background-position: -128px 0; }
  307. .curtain div.loading-bindle.f30 { background-position: -160px 0; }
  308. .curtain div.loading-bindle.f31 { background-position: -192px 0; }
  309. .curtain div.loading-bindle.f32 { background-position: -224px 0; }
  310. .curtain div.loading-bindle.f33 { background-position: -256px 0; }
  311. .curtain div.loading-bindle.f34 { background-position: -288px 0; }
  312. .curtain div.loading-bindle.f35 { background-position: -320px 0; }
  313. .curtain div.loading-bindle.f36 { background-position: -352px 0; }
  314. .curtain div.loading-bindle.f37 { background-position: -384px 0; }
  315. .curtain div.loading-bindle.f38 { background-position: -416px 0; }
  316. .curtain div.loading-bindle.f39 { background-position: -448px 0; }
  317. .curtain div.loading-bindle.f40 { background-position: -480px 0; }
  318.  
  319. .cover { position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; text-align: center; color: #fff; }
  320. .cover.start, .cover.load { cursor: pointer; font-size: 256px; display: none; }
  321. .cover.show { display: inline-block; }
  322.  
  323. .progress { display: none; width: 80%; height: 260px; margin: auto; text-align: center; }
  324. .progress .progress-bar { background: #202226; border: 1px solid #323641; height: 16px; overflow: hidden; border-radius: 3px; position: relative; padding: 4px; width: 100%; }
  325. .progress .progress-bar .progress-done { background-image: linear-gradient(to right, #C82931 11%, #A9171C 100%); border: 1px solid #282C34; height: 14px; border-radius: 3px; float: left; }
  326. .progress .status, .progress .unsupported { line-height: 20px; color: #FFF; margin-top: 10px; width: 100%; display: block; }
  327. .progress .demo-message { color: #FFF; }
  328.  
  329. .modal-holder label { display: block; }
  330. .modal-holder .controls { line-height: 40px; margin-top: 10px; }
  331. .modal-holder .controls .button { display: inline-block; }
  332. .modal-holder .button { margin: 5px; padding: 5px 20px; }
  333. .modal-holder .button.green, .modal-holder .button.red, .modal-holder .button.gray { color: white !important; border-radius: 3px; border: 0px solid rgba(0, 0, 0, 0.2); box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.2), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.2); }
  334. .modal-holder .button.green { background: #97B147; }
  335. .modal-holder .button.red { background: #E62217; }
  336. .modal-holder .button.gray { background: #A1A7B2; }
  337.  
  338. div.loading-bindle { display: block; width: 32; height: 26px; zoom: 3; margin: 0 auto 10px auto; background-position: -480px 0; }
  339. div.loading-bindle.f10 { background-position: -480px 0; }
  340. div.loading-bindle.f11 { background-position: -512px 0; }
  341. div.loading-bindle.f12 { background-position: -544px 0; }
  342. div.loading-bindle.f13 { background-position: -576px 0; }
  343. div.loading-bindle.f14 { background-position: -608px 0; }
  344. div.loading-bindle.f15 { background-position: -640px 0; }
  345. div.loading-bindle.f16 { background-position: -672px 0; }
  346. div.loading-bindle.f17 { background-position: -704px 0; }
  347. div.loading-bindle.f18 { background-position: -736px 0; }
  348. div.loading-bindle.f19 { background-position: -768px 0; }
  349. div.loading-bindle.f20 { background-position: -800px 0; }
  350. div.loading-bindle.f21 { background-position: -832px 0; }
  351. div.loading-bindle.f22 { background-position: -864px 0; }
  352. div.loading-bindle.f23 { background-position: -896px 0; }
  353. div.loading-bindle.f24 { background-position: -928px 0; }
  354. div.loading-bindle.f25 { background-position: 0px 0; }
  355. div.loading-bindle.f26 { background-position: -32px 0; }
  356. div.loading-bindle.f27 { background-position: -64px 0; }
  357. div.loading-bindle.f28 { background-position: -96px 0; }
  358. div.loading-bindle.f29 { background-position: -128px 0; }
  359. div.loading-bindle.f30 { background-position: -160px 0; }
  360. div.loading-bindle.f31 { background-position: -192px 0; }
  361. div.loading-bindle.f32 { background-position: -224px 0; }
  362. div.loading-bindle.f33 { background-position: -256px 0; }
  363. div.loading-bindle.f34 { background-position: -288px 0; }
  364. div.loading-bindle.f35 { background-position: -320px 0; }
  365. div.loading-bindle.f36 { background-position: -352px 0; }
  366. div.loading-bindle.f37 { background-position: -384px 0; }
  367. div.loading-bindle.f38 { background-position: -416px 0; }
  368. div.loading-bindle.f39 { background-position: -448px 0; }
  369. div.loading-bindle.f40 { background-position: -480px 0; }
  370.  
  371. .modal-gallery-wrapper { overflow: auto; margin: auto; height: 300px; width: 450px; background: #3b3e48; padding: 10px; }
  372. .modal-gallery-wrapper a { text-decoration: none; display: inline-block; color: white; }
  373. .modal-gallery-wrapper .grid-item { display: inline-block; position: relative; background: black; width: 200px; height: 150px; margin: 2px; }
  374. .modal-gallery-wrapper .grid-item .content { position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; width: 100%; max-height: 100%; }
  375. .modal-gallery-wrapper .grid-item.take-screenshot:hover { background: #ccc; color: black; cursor: pointer; }
  376. .modal-gallery-wrapper .grid-item.take-screenshot .content { top: 43%; text-align: center; }
  377. .modal-gallery-wrapper .grid-item.pending-image-spinner img { margin: auto; position: absolute; top: 0; right: 0; bottom: 0; left: 0; }
  378. .modal-gallery-wrapper .grid-item .hover-wrapper { position: absolute; margin: auto; top: 0; bottom: 0; left: 0; right: 0; background: rgba(0, 0, 0, 0.5); font-size: 18px; text-align: center; display: none; }
  379. .modal-gallery-wrapper .grid-item .hover-wrapper .shares { position: absolute; top: 40%; left: 0; right: 0; margin: auto; cursor: pointer; }
  380. .modal-gallery-wrapper .grid-item .hover-wrapper .shares .hb-twitter:hover { color: #55acee; }
  381. .modal-gallery-wrapper .grid-item .hover-wrapper .shares .hb-facebook:hover { color: #3b5998; }
  382. .modal-gallery-wrapper .grid-item .hover-wrapper .delete-screenshot { position: absolute; bottom: 5px; right: 5px; cursor: pointer; }
  383. .modal-gallery-wrapper .grid-item:hover .hover-wrapper { display: block; }
  384.  
  385. .sharing-modal-body { font-size: 16px; }
  386. .sharing-modal-body input[type=text] { padding: 10px; border: none; border-radius: 3px; width: 100%; }
  387.  
  388. .asm-frame { overflow: hidden; display: block; }
  389. .asm-frame iframe { display: block; }
  390.  
  391. .asm-switcher { position: relative; border-radius: 3px; white-space: nowrap; padding: 0; margin: 0; text-align: left; }
  392. .asm-switcher .iframe-holder { position: relative; height: 0; width: 100%; padding-bottom: 56.25%; }
  393. .asm-switcher .curtain, .asm-switcher .dialogs { position: absolute; top: 0; left: 0; right: 0; bottom: 0; }
  394. .asm-switcher .curtain { opacity: 1; }
  395. .asm-switcher h1 { margin-bottom: 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 200; font-size: 20px; color: #4A4C45; line-height: 24px; }
  396. .asm-switcher .toggle-collapsable { position: absolute; cursor: pointer; right: 5px; top: 5px; display: none; }
  397. .asm-switcher .toggle-collapsable.visible { display: block; }
  398. .asm-switcher .collapsable { overflow: hidden; max-height: 0; transition: .5s max-height; -webkit-transition: .5s max-height; -moz-transition: .5s max-height; -o-transition: .5s max-height; }
  399. .asm-switcher .collapsable.open { max-height: 3000px; }
  400. .asm-switcher div.game-button-panel { height: auto; }
  401. .asm-switcher div.game-button-panel div.game-list { padding: 0; margin: 15px -5px 0 -5px; display: flex; flex-direction: row; flex-wrap: wrap; width: auto; }
  402. .asm-switcher div.game-button-panel div.game-list div.game-button { flex-grow: 0; cursor: pointer; text-decoration: none; padding: 0; border-radius: 3px; background: #A1A7B2; margin: 5px; width: 172px; -moz-box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.15); box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.15); }
  403. .asm-switcher div.game-button-panel div.game-list div.game-button p { overflow: hidden; text-overflow: ellipsis; font-family: Helvetica; font-weight: bold; font-size: 14px; color: #FFFFFF; line-height: 17px; text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2); padding: 12px 16px 7px 16px; margin: 0; }
  404. .asm-switcher div.game-button-panel div.game-list div.game-button.selected { background: #4D5462; position: relative; }
  405. .asm-switcher div.game-button-panel div.game-list div.game-button .progress-bar { width: 100%; background: #3B3E48; height: 5px; overflow: hidden; border-radius: 10px; visibility: hidden; position: relative; z-index: 100; }
  406. .asm-switcher div.game-button-panel div.game-list div.game-button .progress-bar .progress-done { background-image: linear-gradient(to right, #C82931 11%, #A9171C 100%); border: 1px solid #202226; height: 3px; border-radius: 6px; float: left; }
  407. .asm-switcher .player-panel { height: auto; position: relative; white-space: normal; background: black; }
  408. .asm-switcher .player-panel:after { content: ''; height: 42px; display: block; }
  409. .asm-switcher .rec-firefox-update { text-align: center; margin: 10px; }
  410. .asm-switcher .do-popout, .asm-switcher .do-confirm-close { position: absolute; cursor: pointer; color: #555; }
  411. .asm-switcher .do-popout { right: 0; top: 0; display: inline-block; }
  412. .asm-switcher .do-confirm-close { font-size: 24px; right: 20px; top: 20px; display: none; }
  413. .asm-switcher.popout { margin: auto; position: relative; background: #fff; padding: 30px 50px 30px 40px; z-index: 9999; }
  414. .asm-switcher.popout .toggle-collapsable { display: none; }
  415. .asm-switcher.popout .do-confirm-close { display: inline-block; }
  416. .asm-switcher.popout .do-popout { display: none; }
  417.  
  418. .asm-switcher-embed { margin-bottom: 30px; }
  419. .asm-switcher-embed .asm-switcher.frame-only { border: 0; padding: 0; }
  420.  
  421. .asm-user-page { background: #eee; border: 1px solid #ccc; border-radius: 3px; padding: 20px; margin-bottom: 30px; display: none; }
  422. .asm-user-page .toggle-collapsable { right: -13px; top: -13px; }
  423. .asm-user-page .collapsable { max-height: 0; }
  424.  
  425. .asm-download-page { background: #fff; border-radius: 3px; border: 1px solid #ccc; padding: 20px; display: none; }
  426. .asm-download-page h1 { margin-top: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: bold; }
  427. .asm-download-page .toggle-collapsable { display: none; }
  428. .asm-download-page .toggle-collapsable.visible { display: none; }
  429. .asm-download-page .collapsable { height: auto; max-height: 3000px; }
  430.  
  431. #asm-grayout { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); display: none; }
  432.  
  433. body { overflow-x: auto !important; }
  434. /* Coupons */
  435. .library-coupon { width: 285px; margin-left: 5px; margin-right: 5px; margin-bottom: 20px; display: inline-block; border: 1px solid #E9E9E9; text-decoration: none; vertical-align: top; }
  436.  
  437. .library-coupon-image { width: 100%; }
  438.  
  439. .library-coupon-description { text-align: center; background: white; padding: 10px; }
  440.  
  441. .library-coupon-human-name { font-size: 16px; font-weight: bold; }
  442.  
  443. .library-coupon-expiration { color: red; font-size: 12px; width: 100%; margin-top: 3px; }
  444.  
  445. .library-coupon-terms-and-conditions { margin-top: 3px; }
  446.  
  447. .charity-item { width: 135px; padding: 35px; background-color: white; height: 80px; margin: 10px; }
  448.  
  449. .charity-image-wrapper { position: relative; height: 100%; width: 100%; }
  450. .charity-image-wrapper img { max-height: 100%; max-width: 100%; width: auto; height: auto; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; }
  451.  
  452. .charity-grid { display: flex; flex-wrap: wrap; justify-content: center; max-width: 1100px; padding: 10px; margin: auto; }
  453. @media (max-width: 590px) { .charity-grid { padding: 10px 0; }
  454. .charity-grid .charity-item { width: 100px; margin: 5px; } }
  455.  
  456. .charity-highlight { display: flex; flex-wrap: wrap; justify-content: center; margin: auto; padding: 10px; }
  457. .charity-highlight .charity-description { text-align: justify; width: 100%; margin-left: 40px; max-width: 300px; }
  458. .charity-highlight .charity-item { padding: 5px; width: 195px; height: 140px; }
  459. .charity-highlight p { line-height: 1.5; margin-bottom: 30px; }
  460. .charity-highlight h4 { line-height: 1; margin: 12px 0; text-align: left; }
  461. @media (max-width: 625px) { .charity-highlight .charity-description { margin-left: 0; width: 270px; }
  462. .charity-highlight .charity-item { width: 200px; } }
  463.  
  464. .no-feature { margin: auto; }
  465. .no-feature p { line-height: 1.5; }
  466. .no-feature .charity-button { text-align: center; }
  467.  
  468. .display-modal { position: fixed; width: 100%; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 400; }
  469.  
  470. .display-modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(40, 44, 52, 0.98); z-index: 350; }
  471.  
  472. .close-button { color: white; position: absolute; top: 10px; right: 10px; font-size: 24px; padding: 20px; }
  473. .close-button:hover { color: grey; cursor: pointer; }
  474.  
  475. .display-modal-inside { margin: auto; padding: 50px; max-width: 100%; max-height: 100vh; box-sizing: border-box; }
  476.  
  477. .charity { text-align: center; margin-top: 0; }
  478. .charity.supporting a { text-decoration: underline; }
  479. .charity img { vertical-align: middle; margin-top: -4px; display: inline-block; }
  480. .charity .charity-info, .charity .item-title { font-size: 16px; }
  481. .charity .charity-info { color: #fff; margin-bottom: 25px; }
  482. .charity .item-title { display: inline-block; text-align: right; margin-left: 10px; font-weight: normal; }
  483.  
  484. .cyoc-holder { display: block; }
  485.  
  486. .charity-selection { height: auto; }
  487.  
  488. .slideout-expandable { border: 1px solid #24282f; margin-top: 10px; padding: 30px; }
  489.  
  490. .charity-support { color: white; }
  491. .charity-support h4 { font-size: 22px; }
  492. .charity-support a { color: white; }
  493.  
  494. .charity-item { position: relative; }
  495.  
  496. .cyoc-holder .charity-highlight .charity-item { width: 255px; height: 175px; padding: 5px; }
  497. .cyoc-holder .charity-highlight .charity-item .charity-img { background-color: white; background-repeat: no-repeat; background-position: center; background-size: contain; height: 100%; width: 100%; }
  498. .cyoc-holder .charity-highlight .charity-description { max-width: 350px; text-align: left; }
  499. .cyoc-holder .charity-highlight p { font-size: 15px; }
  500.  
  501. @media (max-width: 860px) { .cyoc-holder .charity-highlight { flex-direction: column; }
  502. .cyoc-holder .charity-highlight .charity-item { margin: auto; }
  503. .cyoc-holder .charity-highlight .charity-description { text-align: center; margin: auto; }
  504. .cyoc-holder .charity-highlight h4 { text-align: center; } }
  505. .bottom-right { position: absolute; bottom: 10px; right: 10px; color: white; font-size: 24px; }
  506. .bottom-right .charity-edit { padding: 5px 10px; border: 2px solid white; background-color: rgba(0, 0, 0, 0.5); }
  507. .bottom-right .charity-edit:hover { background-color: rgba(0, 0, 0, 0.8); cursor: pointer; }
  508.  
  509. @media (max-width: 500px) { .bottom-right { font-size: 16px; } }
  510. .charity-item.none-chosen { background-color: grey; border: 5px dashed white; }
  511.  
  512. .display-modal-inside { color: white; overflow-y: scroll; }
  513. .display-modal-inside h1 { text-align: center; font-size: 28px; line-height: 4; }
  514. .display-modal-inside .charity-selection-view { max-width: 975px; margin: auto; }
  515. .display-modal-inside .charity-selection-view h2 { padding: 0px 5px; margin-bottom: 0px; line-height: 1; }
  516. .display-modal-inside .charity-selection-view button { background: grey; border-radius: 2px; border: none; padding: 4px 7px; text-transform: uppercase; font-weight: bold; letter-spacing: -0.01rem; margin-top: 10px; }
  517.  
  518. .charity-page-link { padding-top: 30px; font-size: 20px; text-align: center; }
  519. .charity-page-link a { color: white; }
  520.  
  521. .charity-item-wrapper { text-align: center; color: white; }
  522.  
  523. .display-modal-inside .charity-list { display: flex; flex-wrap: wrap; justify-content: center; margin-bottom: 50px; }
  524. .display-modal-inside .charity-preview { margin: 10px; width: 130px; text-align: center; white-space: nowrap; }
  525. .display-modal-inside .charity-preview h4, .display-modal-inside .charity-preview h5 { text-overflow: ellipsis; overflow: hidden; line-height: 1; margin: 10px auto; }
  526. .display-modal-inside .charity-preview h4 { font-size: 15px; }
  527. .display-modal-inside .charity-preview .location { color: lightgrey; font-size: 10px; }
  528. @media screen and (max-width: 500px) { .display-modal-inside .charity-preview { margin: 5px auto; } }
  529. .display-modal-inside .charity-img { background-color: white; }
  530. .display-modal-inside .charity-name { margin-top: 10px; }
  531. .display-modal-inside .results-heading, .display-modal-inside .results-heading-disclaimer { text-align: center; }
  532. .display-modal-inside .results-heading { font-size: 24px; line-height: 1em; }
  533. .display-modal-inside .results-heading-disclaimer { color: lightgrey; font-size: 15px; }
  534. .display-modal-inside .pagination { text-align: right; }
  535. .display-modal-inside .partnership-line { text-align: right; padding: 5px; }
  536. .display-modal-inside .partnership-line a { color: white; }
  537. .display-modal-inside .charity-search { padding-bottom: 20px; position: relative; font-size: 14px; }
  538. .display-modal-inside .charity-search input, .display-modal-inside .charity-search label, .display-modal-inside .charity-search button { display: inline-block; margin-right: 10px; }
  539. .display-modal-inside .charity-search input, .display-modal-inside .charity-search select { border-radius: 3px; height: 31px; padding: 4px; box-sizing: border-box; border: 1px solid #ddd; margin-top: 4px; font-size: 14px; }
  540. .display-modal-inside .charity-search button { padding: 8px 30px; border-radius: 5px; margin: 5px; }
  541. .display-modal-inside .charity-search label { text-transform: uppercase; font-size: 10px; color: #a1a7b2; margin: 5px; letter-spacing: 1.25px; }
  542. .display-modal-inside .charity-search label::first-letter { margin-left: 2px; }
  543. .display-modal-inside .charity-search .query { position: relative; width: 350px; max-width: 100%; }
  544. .display-modal-inside .charity-search .query input { width: 100%; padding-left: 26px; color: #494f5c; }
  545. .display-modal-inside .charity-search .query i { position: absolute; bottom: 8px; left: 8px; font-size: 14px; color: #a1a7b2; }
  546. .display-modal-inside .charity-search .category select, .display-modal-inside .charity-search .country select, .display-modal-inside .charity-search .state select { width: 100%; display: inline-block; color: #494f5c; }
  547. .display-modal-inside .charity-search .category { width: 250px; }
  548. .display-modal-inside .charity-search .country { width: 210px; }
  549. .display-modal-inside .charity-search .state { display: none; }
  550. .display-modal-inside .charity-search .state.is-united-states, .display-modal-inside .charity-search .country.is-united-states { width: 100px; display: inline-block; }
  551. .display-modal-inside .select-charity .unselected-text { display: inline; }
  552. .display-modal-inside .select-charity .disallowed-text, .display-modal-inside .select-charity .selected-text, .display-modal-inside .select-charity .featured-text { display: none; }
  553. .display-modal-inside .select-charity.is-unselected-featured .featured-text { display: inline; }
  554. .display-modal-inside .select-charity.is-unselected-featured .selected-text, .display-modal-inside .select-charity.is-unselected-featured .unselected-text, .display-modal-inside .select-charity.is-unselected-featured .disallowed-text { display: none; }
  555. .display-modal-inside .select-charity.is-selected { background-color: #97b147; }
  556. .display-modal-inside .select-charity.is-selected .selected-text { display: inline; }
  557. .display-modal-inside .select-charity.is-selected .disallowed-text, .display-modal-inside .select-charity.is-selected .unselected-text, .display-modal-inside .select-charity.is-selected .featured-text { display: none; }
  558. .display-modal-inside .select-charity.is-disallowed { cursor: default; background: #333; }
  559. .display-modal-inside .select-charity.is-disallowed .disallowed-text { display: inline; color: #787878; }
  560. .display-modal-inside .select-charity.is-disallowed .selected-text, .display-modal-inside .select-charity.is-disallowed .unselected-text, .display-modal-inside .select-charity.is-disallowed .featured-text { display: none; }
  561. .display-modal-inside .select-charity.is-featured { cursor: default; background: #17A1E5; }
  562. .display-modal-inside .select-charity.is-featured .featured-text { display: inline; }
  563. .display-modal-inside .select-charity.is-featured .selected-text, .display-modal-inside .select-charity.is-featured .unselected-text, .display-modal-inside .select-charity.is-featured .disallowed-text { display: none; }
  564.  
  565. .ch-main { padding-bottom: 75px; padding-top: 75px; }
  566.  
  567. .admin-tiny-link i { position: relative; }
  568.  
  569. #hibtext { margin-top: 0 !important; color: #cc0000; font-size: 20px !important; font-weight: bold; padding-top: 4px; line-height: 24px; }
  570.  
  571. .center-wrapper { float: left; width: 100%; position: relative; }
  572.  
  573. .center { overflow: visible; clear: left; float: left; position: relative; left: 50%; }
  574.  
  575. /* spiel */
  576. #spiel { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75); line-height: 21px; font-size: 14px; }
  577.  
  578. #spiel a { color: #5D801A; }
  579.  
  580. #main { font-size: 12px; margin: 0 auto; text-shadow: none; width: 831px; }
  581.  
  582. .whitebox-redux { background: white; box-sizing: border-box; padding: 20px 0; border: 1px solid #c7cbd4; border-radius: 5px; box-shadow: 0 1px 1px 0px #c7cbd4; position: relative; color: #4a4c45; width: 762px; margin: 7px auto 13px auto; }
  583.  
  584. /* inner boxes */
  585. .whitebox { position: relative; color: #4a4c45; font-weight: bold; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); width: 762px; margin: 7px auto 13px auto; }
  586.  
  587. .whitetop { position: absolute; top: 0; width: 762px; height: 20px; background: url("//humblebundle-a.akamaihd.net/static/hashed/112ab639e90490bc2dcee89740036e6ff20838f8.png") 0 0 no-repeat; }
  588.  
  589. .whitemid { position: absolute; top: 20px; width: 762px; bottom: 20px; background: url("//humblebundle-a.akamaihd.net/static/hashed/835bbcaad6a563ba85fa91773af142691ff5f6e0.png"); }
  590.  
  591. .whitebottom { position: absolute; bottom: 0; width: 762px; height: 20px; background: url("//humblebundle-a.akamaihd.net/static/hashed/112ab639e90490bc2dcee89740036e6ff20838f8.png") bottom no-repeat; }
  592.  
  593. .whitecontent { position: relative; padding: 20px; /* if you change this, remember to change the keytabs top margin by the same amount */ }
  594.  
  595. .whitecontent .hr { background: #e6e6e6; }
  596.  
  597. .whitecontent.nopadding { padding-left: 0; padding-right: 0; }
  598.  
  599. #dlplatform, #dltype, div.custominstructions { margin: 0 20px; }
  600.  
  601. #dltype.only-one-button { display: none; }
  602.  
  603. .whitecontent.nopadding .row { margin: 0 12px; }
  604.  
  605. .expandorder { display: block; height: 44px; text-align: center; color: #5d801a; font-size: 16px; }
  606.  
  607. .redeemsmallheading { width: 480px; margin: 0 auto; padding-bottom: 12px; text-align: center; font-size: 90%; font-weight: normal; }
  608.  
  609. .keyredeemer { float: left; margin-right: 10px; margin-bottom: 16px; height: 28px; width: 111px; cursor: pointer; }
  610.  
  611. .redeeminstructions { text-align: center; padding-bottom: 30px; }
  612.  
  613. .onliveusukradio { padding-left: 127px; }
  614.  
  615. .steam-profile { position: relative; top: -15px; right: -6px; text-align: right; }
  616.  
  617. .steam-profile .account-text { display: inline-block; }
  618.  
  619. .steam-profile .indicator { float: right; left: -40px; background: url("//humblebundle-a.akamaihd.net/static/hashed/e73d51c16b07d083026843ceda9c22056b9d04a2.gif") no-repeat; }
  620.  
  621. .steam-profile .profile-pic { width: 32px; height: 32px; display: inline-block; vertical-align: bottom; margin-left: 10px; }
  622.  
  623. .genericbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/aafd697db4950b99bc95a0ef740f10d7301eb437.png") no-repeat; }
  624.  
  625. .activated .genericbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/7f9102778b07eec38f1ba5911c95c24d3aa98318.png") no-repeat; }
  626.  
  627. .steambutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/4679a3c4d14fbda0fe37478d446d001fad44e3c1.png") no-repeat; }
  628.  
  629. .activated .steambutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/7d32b8cb2ed51ab18ec0e5a40208afd4a41c988c.png") no-repeat; }
  630.  
  631. .uplaybutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/4b3fd1c208843f91a063bec2349b526202a4fe6e.png") no-repeat; }
  632.  
  633. .activated .uplaybutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/4ca5ac1bf3373babd5a508d6556f5f7fd6ad4b38.png") no-repeat; }
  634.  
  635. .originbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/e76fbc1ccb8733279587f6038056cd3fdc0271a9.png") no-repeat; }
  636.  
  637. .activated .originbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/3ff62f831583f243b65f8954c08f40702eed5912.png") no-repeat; }
  638.  
  639. .ouyabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/e8916956991bdd418ccdb45e6dead81cae599a34.png") no-repeat; }
  640.  
  641. .activated .ouyabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/cb5ea8b036c49c5f6466d97c37703016668df034.png") no-repeat; }
  642.  
  643. .desurabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/97b4d580682444ec310e39480957a39d84a50106.png") no-repeat; }
  644.  
  645. .activated .desurabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/72c7a91a612ceee5ceda77133c9d79bf66b8dec3.png") no-repeat; }
  646.  
  647. .onlivebutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/e7426f51dea62e220deeb988794cb32e15c265ae.png") no-repeat; }
  648.  
  649. .activated .onlivebutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/8c812b14676720a1c5541e5ff0084336f8ca952b.png") no-repeat; }
  650.  
  651. .multiplayerbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/6f98857f10330e006847a2571bd2fcdd972da502.png") no-repeat; }
  652.  
  653. .activated .multiplayerbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/20048fabc7a0a68316b0315f584c58ad95b17055.png") no-repeat; }
  654.  
  655. .squareenix_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/ac97edf1d373f749576bab85be377698494478d9.png") no-repeat; }
  656.  
  657. .activated .squareenix_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/3af19fcba4ca44990c78e1aebee17bbadd21afe7.png") no-repeat; }
  658.  
  659. .bethesda_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/61a2c4c13f0b95b11aec7784356d325f1ad76223.png") no-repeat; }
  660.  
  661. .activated .bethesda_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/80a34f59a907904dcb29c5e434affb9f88ee6fc6.png") no-repeat; }
  662.  
  663. .telltalegames_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/c3c956701f7cbf7842d1fef8d713f829042dbfb4.png") no-repeat; }
  664.  
  665. .activated .telltalegames_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/cfe22581a0a30154a85744ae2f58671af6b731b6.png") no-repeat; }
  666.  
  667. .nintendo_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/32be74acd8de11c5a9a240c5ce3c00d0287b83a3.png") no-repeat; }
  668.  
  669. .activated .nintendo_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/2a16694e165dc6e39f3e89f6eba6d1451d278f6a.png") no-repeat; }
  670.  
  671. .soldout { visibility: hidden; }
  672.  
  673. #papers-content a { color: #360; }
  674.  
  675. .keyfield { width: 342px; padding: 0 4px; white-space: nowrap; height: 28px; color: #808080; text-align: center; line-height: 28px; font-size: 12px; float: left; background: url("//humblebundle-a.akamaihd.net/static/hashed/9e9017643ddecc7f2d3cd0032c577b88d96ce5e0.png") no-repeat; }
  676.  
  677. .keyfield-content { overflow-x: auto; width: 340px; }
  678.  
  679. .redeemholder { margin: 0 auto; width: 503px; }
  680.  
  681. .giftbutton { padding-left: 6px; padding-top: 5px; float: left; cursor: pointer; }
  682.  
  683. .redeemheading { text-align: center; font-size: 16px; padding-bottom: 18px; padding-top: 6px; width: 70%; margin: 0 auto; }
  684.  
  685. .indicator { height: 16px; position: relative; top: 2px; width: 16px; }
  686.  
  687. #steaminfo { background: url("//humblebundle-a.akamaihd.net/static/hashed/cceac795b8e3fb4e5ad5582e6bd7ac85ccda5839.png") no-repeat; height: 28px; width: 30px; position: absolute; top: 12px; left: 12px; display: block; }
  688.  
  689. #inst a { color: #5d801a; }
  690.  
  691. #inst { text-align: center; }
  692.  
  693. .displaying .infotext { display: block; }
  694.  
  695. .infotext { background: black; color: #fff; font-size: 12px; font-weight: normal; padding: 12px; text-shadow: none; width: 300px; display: none; position: absolute; top: 23px; line-height: 18px; right: -63px; }
  696.  
  697. .infotitle { text-decoration: underline; }
  698.  
  699. #moreinfolink { cursor: pointer; color: white; right: -107px; position: absolute; font-weight: bold; text-shadow: 0 1px 3px rgba(0, 0, 0, 0.75); font-size: 14px; top: -1px; z-index: 30; }
  700.  
  701. .key-expander .shrinkwrapper { display: none; }
  702.  
  703. .key-expander.kexpanded .shrinkwrapper { display: block; }
  704.  
  705. .shrinkwrapper { height: 23px; overflow: hidden; }
  706.  
  707. .shrinkwrapper.expanded { height: auto; }
  708.  
  709. .expandkeys { display: block; overflow: hidden; height: 22px; text-align: center; color: #5d801a !important; font-size: 16px; }
  710.  
  711. #normal { width: 100%; margin-top: -7px; font-size: 12px; line-height: 12px; }
  712.  
  713. #addorder.small { cursor: pointer; }
  714.  
  715. #addorder .whitecontent { box-sizing: content-box; height: 22px; overflow: hidden; }
  716.  
  717. #orderwrapper { bottom: -8px; left: 20px; overflow: hidden; position: absolute; right: 20px; top: 20px; }
  718.  
  719. #expandorder { display: block; height: 44px; text-align: center; color: #5d801a; font-size: 16px; }
  720.  
  721. a.slide-down-trigger { display: block; text-align: center; color: #5d801a; font-size: 16px; }
  722.  
  723. .slide-down { padding-top: 20px; }
  724.  
  725. .flexbtn .label { visibility: hidden; }
  726.  
  727. .flexbtn { font-weight: bold; height: 28px; line-height: 28px; position: relative; margin-right: 12px; padding-left: 33px; float: left; margin-left: 8px; }
  728.  
  729. .flexbtn .right { position: absolute; right: -12px; top: 0; bottom: 0; width: 12px; }
  730.  
  731. .flexbtn.active .right { background-position: right; }
  732.  
  733. .flexbtn .a { position: absolute; top: 0; left: 0; right: -12px; bottom: 0; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); color: #4a4c45 !important; text-decoration: none; padding-left: 33px; background: none; border: none; outline: none; }
  734.  
  735. .streaming-video-player { margin: 25px; position: relative; top: 10px; text-align: center; }
  736.  
  737. .selected-video-quality { background-color: #CACED8; cursor: pointer; }
  738.  
  739. .video-quality-selector { border: 1px solid #BFC3CC; border-radius: 3px; cursor: pointer; display: inline-block; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: bold; padding: 5px; text-align: center; vertical-align: middle; width: 70px; }
  740.  
  741. .flexbtn.active .a { text-shadow: 0 1px 0 white; }
  742.  
  743. .flexbtn.noicon, .flexbtn.noicon a { padding-left: 6px; }
  744.  
  745. .icon { position: absolute; }
  746.  
  747. .mac .icon { left: 10px; top: 4px; height: 18px; width: 14px; background: url("//humblebundle-a.akamaihd.net/static/hashed/a010a63e8e934c3b8652c314f22422fd78375f87.png") no-repeat; }
  748.  
  749. .windows .icon { left: 10px; top: 6px; height: 17px; width: 19px; background: url("//humblebundle-a.akamaihd.net/static/hashed/0caa53023b380142150807b45ed4e63b440db7a7.png") no-repeat; }
  750.  
  751. .windows .a, .windows.flexbtn { padding-left: 38px; }
  752.  
  753. .linux .icon { left: 10px; top: 6px; height: 17px; width: 14px; background: url("//humblebundle-a.akamaihd.net/static/hashed/6fdf9bdbf6874ddad9011dd07252cdc2e42e88be.png") no-repeat; }
  754.  
  755. .android .icon { left: 8px; top: 5px; height: 19px; width: 15px; background: url("//humblebundle-a.akamaihd.net/static/hashed/12ad16b0169963dd8374c09a36d83b9628301797.png") no-repeat; }
  756.  
  757. .audio .icon { left: 10px; top: 5px; height: 17px; width: 14px; background: url("//humblebundle-a.akamaihd.net/static/hashed/31ca574c537461526fe5e3882e1799d93fd3442a.png") no-repeat; }
  758.  
  759. .audio .a, .audio.flexbtn { padding-left: 38px; }
  760.  
  761. .ebook .icon { left: 10px; top: 5px; height: 17px; width: 14px; background: url("//humblebundle-a.akamaihd.net/static/hashed/2f8c311b2ad54c0996b6f2231ce69b52f9ef7b42.png") no-repeat; }
  762.  
  763. .comedy .icon { left: 10px; top: 5px; height: 17px; width: 14px; background: url("//humblebundle-a.akamaihd.net/static/hashed/0ebb919bcdef9c3b5c7fb1dc19a416f8bfddfc1f.png") no-repeat; }
  764.  
  765. .video .icon { left: 10px; top: 10px; height: 17px; width: 14px; background: url("//humblebundle-a.akamaihd.net/static/hashed/ac23ed56c286d1d8e284d7b0aa3046c8e20f00f1.png") no-repeat; }
  766.  
  767. .vertical-rule { border-left: 1px solid black; width: 1px; height: 30px; margin-left: 15px; float: left; }
  768.  
  769. .bittorrent .icon { left: 10px; top: 6px; height: 17px; width: 16px; background: url("//humblebundle-a.akamaihd.net/static/hashed/e17a19111dffdd17728c4f754dc5bb0e9dad2746.png") no-repeat; }
  770.  
  771. .bittorrent .a, .flexbtn.bittorrent { padding-left: 35px; }
  772.  
  773. .direct .icon { left: 10px; top: 6px; height: 17px; width: 16px; background: url("//humblebundle-a.akamaihd.net/static/hashed/19b899d281c429dfab8e55f4d81c5202cc5cb26d.png") no-repeat; }
  774.  
  775. .direct .a, .direct.flexbtn { padding-left: 35px; }
  776.  
  777. .hr { height: 1px; margin: 12px 0; background: #ccc; }
  778.  
  779. .download.hr { clear: both; }
  780.  
  781. .textlabel { float: left; height: 28px; line-height: 28px; width: 160px; text-align: right; }
  782.  
  783. .dlplatform-list { overflow: auto; }
  784.  
  785. .title a { text-decoration: none; font-weight: bold; }
  786.  
  787. .subtitle { color: #4a4c45; font-weight: normal; font-size: 12px; line-height: normal; }
  788.  
  789. .subtitle a { text-decoration: none; font-weight: normal; color: #4a4c45 !important; }
  790.  
  791. .row { position: relative; }
  792.  
  793. .stepoption { padding: 7px 0 7px 42px; font-weight: normal; position: relative; }
  794.  
  795. /* key page */
  796. .downloads { float: right; width: 400px; }
  797.  
  798. .downloads .flexbtn { margin-left: 0; min-width: 120px; text-align: center; }
  799.  
  800. .newbuilds, .custominstructions { display: none; }
  801.  
  802. .small .flexbtn { margin-left: 0; min-width: 69px; text-align: center; }
  803.  
  804. .small .dldetails { width: 79px; }
  805.  
  806. .download { float: right; margin-left: 14px; }
  807.  
  808. .dldetails { clear: both; width: 130px; padding: 0 4px; }
  809.  
  810. .dlsize { text-align: center; padding-top: 8px; font-size: 12px; font-weight: bold; }
  811.  
  812. .dlsize.showmd5 { padding-top: 2px; }
  813.  
  814. .dldate, .newdate { font-size: 11px; font-weight: normal; }
  815.  
  816. .newdate { color: #c00; }
  817.  
  818. .row.arc64 .arc32 { display: none; }
  819.  
  820. .row.arc64 .arc64 { display: block; }
  821.  
  822. .row .arc64 { display: none; }
  823.  
  824. .arc-toggle { white-space: nowrap; float: right; }
  825.  
  826. .newbuilds div { text-align: center; margin: 14px 0 16px 0; }
  827.  
  828. .newbuilds { display: none; }
  829.  
  830. .newbuilds.show { display: block; text-align: center; }
  831.  
  832. .showmd5, .showdate { font-size: 11px; font-weight: normal; }
  833.  
  834. .dlmd5 { word-wrap: break-word; }
  835.  
  836. #steam { height: 20px; padding-left: 0; margin: 12px 0; width: 120px; background: url("//humblebundle-a.akamaihd.net/static/hashed/8daad48c8018906de902cfe0dbbd59d75f462ca3.png") no-repeat; font-size: 10px; font-weight: normal; }
  837.  
  838. #desura { height: 25px; width: 98px; background: url("//humblebundle-a.akamaihd.net/static/hashed/dc5ab80a0b9ceb87eb3e713ed68a3dc5c72d08c9.png") no-repeat; }
  839.  
  840. #onlive { height: 24px; width: 118px; position: absolute; top: 27px; left: 120px; background: url("//humblebundle-a.akamaihd.net/static/hashed/fd3afea08ca2008119469cbf053f5eccb374602c.png") no-repeat; }
  841.  
  842. .clear { clear: both; height: 0; }
  843.  
  844. #settings div { padding: 6px; line-height: 1.4em; }
  845.  
  846. #deletekeypage { position: absolute; right: 16px; bottom: 26px; color: red; font-size: 10px; }
  847.  
  848. #deletebuttons { text-align: center; padding-top: 4px; }
  849.  
  850. #deletekeyconfirm { width: 280px; position: absolute; bottom: -10px; right: -40px; background: white; border-radius: 5px; padding: 6px; border: black solid 1px; z-index: 200; display: none; }
  851.  
  852. /* page content */
  853. .errormsg { display: none; position: relative; text-shadow: none; }
  854.  
  855. #temail { width: 200px; }
  856.  
  857. #quickiefix { padding-bottom: 19px; }
  858.  
  859. #leaderboardstep { display: none; }
  860.  
  861. /* order form */
  862. #needhelp { color: #999; text-decoration: none; font-style: italic; }
  863.  
  864. .placeholder { color: silver; line-height: 25px; padding-left: 5px; position: absolute; }
  865.  
  866. #tamount { width: 70px; }
  867.  
  868. #customAmountHolder { display: inline-block; }
  869.  
  870. #customAmount { height: 18px; width: 70px; }
  871.  
  872. #payment-amount { padding-left: 42px; margin-left: -42px; }
  873.  
  874. /* Icons */
  875. .icn { display: inline-block; position: relative; height: 70px; width: 70px; padding-right: 5px; float: left; }
  876.  
  877. .icn a img { border: none; }
  878.  
  879. /* Android instructions */
  880. div.custominstructions { padding: 0 20px 20px 20px; }
  881.  
  882. .instructionsteps h3 { font-size: 18px; }
  883.  
  884. .instructionsteps a, .instructionsteps a:visited { color: #5D801A; }
  885.  
  886. .instructionsteps img { float: right; display: block; margin-right: -15px; margin-top: -8px; }
  887.  
  888. .instructionsteps p { font-weight: normal; font-size: 14px; line-height: 24px; margin: 1em 0; }
  889.  
  890. .instructionsteps p.introsteps { margin-top: 0; }
  891.  
  892. .instructionsteps .stepholder p { width: 400px; }
  893.  
  894. .instructionsteps .stepholder { font-size: 14px; margin: 20px 0; }
  895.  
  896. .instructionsteps .stepholder:last-child { margin-bottom: 0; }
  897.  
  898. .instructionsteps .steptext { font-weight: bold; padding: 10px 0 10px 55px; }
  899.  
  900. #show_android_binaries .expandkeys { font-weight: bold; margin-top: 20px; }
  901.  
  902. .clearfix { clear: both; }
  903.  
  904. p.mobile-link { font-size: 18px; }
  905.  
  906. .mobile-link a { letter-spacing: 1px; text-decoration: none; font-weight: bold; }
  907.  
  908. .mobile-link a:hover { text-decoration: underline; }
  909.  
  910. #send-email-message { font-weight: normal; font-size: 12px; padding: 0 15px 0 20px; color: #888; }
  911.  
  912. #send-email-form label { padding-bottom: 10px; }
  913.  
  914. #email-truncated { width: 200px; }
  915.  
  916. .download-popup { display: none; background: #eee; border-radius: 3px; position: fixed; top: 30%; left: 50%; margin-left: -255px; width: 450px; z-index: 9999; padding: 20px 30px 30px 30px; font-weight: normal; }
  917.  
  918. .download-popup h2 { font-size: 25px; }
  919.  
  920. .download-popup p.warning-text { color: red; }
  921.  
  922. .download-popup p.warning-text a { color: #4a4c45; }
  923.  
  924. .buttonHolder { padding-top: 20px; float: right; }
  925.  
  926. .addAndroidPlatform { padding: 30px 0; }
  927.  
  928. .addAndroidPlatform h2 { padding-bottom: 20px; }
  929.  
  930. .custom-download-text { width: 400px; position: absolute; right: 10px; top: 10px; text-align: right; }
  931.  
  932. .custom-download-text a { color: #360; }
  933.  
  934. .loading { margin: auto; width: 200px; text-align: center; }
  935.  
  936. #download-page-outer-progress { background-color: #eee; border-radius: 12px; box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.2), inset 0 0 0 1px rgba(255, 255, 255, 0.2); margin: 0 auto; overflow: hidden; width: 50%; }
  937.  
  938. #download-page-inner-progress { background-image: linear-gradient(to bottom, #97b147 11%, #7e992e 100%); border-radius: 12px; box-shadow: inset 0 2px 0 rgba(255, 255, 255, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.2); height: 24px; width: 0%; /* Adjust with JavaScript */ }
  939.  
  940. #download-page-progress-text { text-align: center; }
  941.  
  942. .arc64 { display: none; }
  943.  
  944. .whitebox .loading { padding: 50px; width: 300px; }
  945.  
  946. .whitebox .downloads { padding-right: 30px; }
  947.  
  948. .whitebox .platform-chooser { padding-top: 30px; }
  949.  
  950. .whitebox .row { padding-left: 15px; }
  951.  
  952. .gameinfo { float: left; width: 200px; margin-top: 10px; }
  953.  
  954. h1 { margin-top: 30px; }
  955.  
  956. .row { overflow: hidden; transition: all 0.5s ease; }
  957.  
  958. .row.show { border-bottom: 1px solid #ddd; min-height: 80px; display: block; }
  959.  
  960. .row .download-buttons, .row .arc-toggle { margin-top: 10px; }
  961.  
  962. .row.show:last-child { border-bottom: none; }
  963.  
  964. /* Steam Key Table */
  965. table.unredeemed-keys-table { width: 100%; border: 1px solid #CCCCCC; }
  966.  
  967. table.unredeemed-keys-table th { background-image: linear-gradient(-179deg, #F4F4F4 0%, #E9E9E9 100%); border: 1px solid #CCCCCC; font-family: "HelveticaNeue-Medium", Helvetica, Arial, "Lucida Grande", sans-serif; font-size: 14px; color: #555555; line-height: 17px; padding: 20px; text-align: left; }
  968.  
  969. table.unredeemed-keys-table tr { font-family: "HelveticaNeue-Light", Helvetica, Arial, "Lucida Grande", sans-serif; font-size: 14px; color: #555555; line-height: 17px; background: #FFFFFF; }
  970.  
  971. table.unredeemed-keys-table td { border: 1px solid #E9E9E9; padding: 10px 20px; max-width: 400px; }
  972.  
  973. table.unredeemed-keys-table tr:nth-child(even) { background: #FAFAFA; border: 1px solid #E9E9E9; }
  974.  
  975. table.unredeemed-keys-table i { font-size: 120%; }
  976.  
  977. .whitebox-redux.credit button { margin-left: 1em; }
  978. #sms-form { width: 345px; padding: 10px; border: 1px solid #ddd; border-radius: 5px; background: #eee; }
  979. #sms-form::after { clear: both; content: ""; display: table; }
  980. #sms-form .country-code-field { width: 45px; float: left; }
  981. #sms-form .country-code-label { width: 40px; padding-left: 22px; }
  982. #sms-form .form-label { display: block; float: left; margin-bottom: 5px; color: #888; font-size: 12px; font-weight: normal; }
  983. #sms-form .phone-number-field { width: 140px; float: left; margin-left: 10px; }
  984. #sms-form .phone-number-label { width: 150px; padding-left: 15px; }
  985. #sms-form .plus-sign { clear: left; float: left; display: block; width: 10px; margin-right: 10px; padding-top: 7px; color: #888; }
  986. #sms-form .send-sms-button { float: left; }
  987. #sms-form .sms-disclaimer { clear: left; margin: 0 0 0 20px; padding-top: 5px; color: #aaa; font-size: 10px; font-weight: normal; }
  988. #sms-form .sms-message { display: none; margin: 10px 0 0; padding: 0 15px 0 20px; color: #888; font-weight: normal; font-size: 12px; }
  989. #sms-form .validate-code-link { cursor: pointer; margin: 0; padding: 0 15px 0 20px; color: #aaa; font-size: 10px; font-weight: normal; }
  990. .disabled.gray-button { background: #e4e4e4; cursor: default; }
  991.  
  992. .generic-popup { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; }
  993.  
  994. .generic-popup a { color: #535353; }
  995.  
  996. .generic-popup.outer-shadow { box-shadow: 0 -1px 25px rgba(0, 0, 0, 0.3); left: 50%; top: 50%; margin-left: -200px; margin-top: -200px; position: absolute; z-index: 9999; border-radius: 7px; display: none; }
  997.  
  998. .generic-popup.content { border-radius: 7px; color: #999999; padding: 20px; background: #f5f5f5; width: 360px; position: relative; text-align: center; }
  999. .generic-popup.content .description { padding: 4px 0 25px 0; }
  1000.  
  1001. .generic-popup .no-center { max-width: 360px; text-align: right; position: relative; }
  1002.  
  1003. .generic-popup.content h1 { font-size: 24px; text-shadow: 0 0 1px #eee; color: #666; }
  1004.  
  1005. .generic-popup.content h1.noimg { margin-right: 0; line-height: 32px; }
  1006.  
  1007. .generic-popup.content h1 img { position: relative; top: 5px; margin-right: 15px; }
  1008.  
  1009. .generic-popup.content h1 span { display: inline-block; height: 25px; width: 25px; margin-right: 15px; position: relative; top: 5px; }
  1010.  
  1011. .generic-popup.content h2 { font-size: 14px; font-weight: 300; text-shadow: 0 0 1px #eee; margin: 20px 0 0 0; color: #666; }
  1012.  
  1013. .generic-popup.content .split-left { color: #666; display: inline-block; text-align: left; width: 180px; }
  1014.  
  1015. .generic-popup.content .split-right { color: #666; display: inline-block; text-align: right; width: 180px; }
  1016.  
  1017. .generic-popup input[type='text'], .generic-popup input[type='password'] { background: none; border: 1px solid #ccc; border-top: 1px solid #999; border-radius: 3px; box-shadow: 0 1px 2px #bbb inset; padding: 9px; font-size: 16px; color: #333; display: block; width: 342px; margin: 0; }
  1018. .generic-popup input[type='text'].inline-input, .generic-popup input[type='password'].inline-input { width: 150px; display: inline; }
  1019.  
  1020. @-moz-document url-prefix() { .generic-popup input[type='text'], .generic-popup input[type='password'] { padding-top: 7px; } }
  1021. .generic-popup form p { text-align: left; position: relative; }
  1022.  
  1023. .account-infield { color: #999; font-size: 16px; font-weight: normal; position: absolute; top: 8px; left: 10px; z-index: 1; }
  1024.  
  1025. .account-input { position: relative; z-index: 2; }
  1026. .account-input.always-caps { text-transform: uppercase; }
  1027.  
  1028. .generic-popup .suggest-holder { color: #c66; display: block; font-size: 90%; margin-top: -28px; position: absolute; right: 0; width: 284px; }
  1029.  
  1030. .generic-popup .suggest-holder a { color: #c66; }
  1031.  
  1032. .green-button { background-image: linear-gradient(to bottom, #e0ffc2 0%, #b1e37f 100%); border: 1px solid #a7c28c; border-radius: 4px; box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.5), 0 1px 0 0 white; color: #42661e; cursor: pointer; display: inline-block; font-weight: bold; margin: 0 0 0 5px; min-width: 50px; padding: 5px 8px 5px 8px; text-align: center; text-shadow: 0 1px rgba(255, 255, 255, 0.6); }
  1033. .green-button:hover:not(disabled) { background: #b1e37f; }
  1034. .green-button:disabled, .green-button.disabled { cursor: default; opacity: 0.4; }
  1035.  
  1036. .gray-button { background-image: linear-gradient(to bottom, #f5f5f5 0%, #dedede 100%); border: 1px solid #bbb; border-radius: 4px; box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.5), 0 1px 0 0 white; color: #444; cursor: pointer; display: inline-block; font-weight: bold; margin: 0 0 0 5px; min-width: 50px; padding: 5px 8px 5px 8px; text-align: center; text-shadow: 0 1px rgba(255, 255, 255, 0.6); }
  1037.  
  1038. a:hover .gray-button { background: #e4e4e4; }
  1039.  
  1040. .button-link { cursor: pointer; text-decoration: none; }
  1041. .button-link:disabled, .button-link.disabled { pointer-events: none; }
  1042.  
  1043. input[type="number"].classy-input, input[type="password"].classy-input, input[type="tel"].classy-input, input[type="text"].classy-input { border: 1px solid #ccc; box-shadow: inset 0 1px 0 #eee,#fff 0 1px 0; margin: 0; padding: 7px; border-radius: 3px; background-color: white; color: #999; }
  1044.  
  1045. .classy-input[disabled='disabled'] { background: #ccc; color: #333; }
  1046.  
  1047. .info-tooltip > i { font-size: .8em; opacity: 0.7; transition: all 0.1s linear; }
  1048. .info-tooltip:hover > i, .info-tooltip:focus > i { opacity: 1; }
  1049.  
  1050. .small-link, .link-holder { font-size: 12px; font-weight: normal; line-height: 20px; }
  1051.  
  1052. .generic-popup .small-link { margin: .3em; text-decoration: underline; }
  1053.  
  1054. .link-holder { text-align: left; position: absolute; left: 2px; top: -2px; height: 20px; width: 200px; }
  1055.  
  1056. .link-holder a, .generic-popup .small-link { color: #888; }
  1057.  
  1058. .link-holder a { text-decoration: none; }
  1059.  
  1060. .generic-popup .clearfix { clear: both; }
  1061.  
  1062. .generic-popup .center { float: none; left: 0; }
  1063.  
  1064. .generic-popup.content h2.subtitle { padding-bottom: 12px; text-align: center; margin-top: -10px; }
  1065.  
  1066. .generic-popup .button-holder { margin-top: 20px; }
  1067.  
  1068. .subtitle.warning { font-weight: bold; }
  1069.  
  1070. .generic-popup .error-holder { color: #333; font-size: 14px; padding: 0 4px; position: absolute; left: -280px; text-align: right; z-index: 10; display: none; }
  1071.  
  1072. .error-holder .errorlist { margin: 0; padding: 0 0 0 30px; }
  1073.  
  1074. .arrow-holder { position: absolute; left: -525px; top: 0; width: 500px; height: 42px; }
  1075.  
  1076. .arrow-error { float: right; padding: 12px 0 16px 16px; background: url("//humblebundle-a.akamaihd.net/static/hashed/2d10ad27ca2af9ebcc54fd4322657696e5e50dec.png") no-repeat; margin-right: -5px; margin-top: -2px; font-size: 14px; color: white; font-weight: bold; text-align: right; display: none; position: absolute; right: 0; }
  1077.  
  1078. .arrow-error-right { background: url("//humblebundle-a.akamaihd.net/static/hashed/d00e64d9e0b5a925c42404a41014b85aecb2f0ea.png") no-repeat; width: 26px; height: 45px; position: absolute; right: -26px; top: 0; z-index: 100; }
  1079.  
  1080. .arrow-error a { color: #fff; }
  1081.  
  1082. #email-errors { top: 155px; }
  1083.  
  1084. .generic-popup .errorlist .error-item { color: #c66; text-decoration: none; }
  1085.  
  1086. .generic-popup .message-holder { margin-bottom: 20px; line-height: 22px; font-weight: normal; }
  1087.  
  1088. .generic-popup p { margin: 0 0 20px 0; padding: 0; }
  1089.  
  1090. .header-text { font-size: 18px; }
  1091.  
  1092. .account-switch { background: #ddd; border-top: 1px solid #ccc; border-bottom-right-radius: 7px; border-bottom-left-radius: 7px; margin: 20px -20px -22px; font-weight: normal; font-size: 14px; color: #333; }
  1093.  
  1094. .account-switch .create-account { color: #333; display: block; padding: 12px; text-decoration: none; }
  1095.  
  1096. .account-switch .create-account .create-inner { font-weight: bold; text-decoration: underline; }
  1097.  
  1098. .grayout, .generic-bbm-wrapper { background: url("//humblebundle-a.akamaihd.net/static/hashed/cb322c1cdfcdae03f826d02c39b7d998800d15c6.png"); }
  1099.  
  1100. .grayout { position: fixed; top: 0; left: 0; z-index: 998; right: 0; bottom: 0; background: rgba(40, 44, 52, 0.85); display: none; }
  1101.  
  1102. .grayout-inner { position: relative; width: 100%; height: 100%; }
  1103.  
  1104. .slide-down { display: none; }
  1105.  
  1106. .above-text-label { display: block; text-align: left; margin-bottom: 8px; }
  1107.  
  1108. /* Modal positioning */
  1109. .generic-bbm-wrapper { position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 998; background: rgba(0, 0, 0, 0.5); overflow-x: auto; overflow-y: auto; }
  1110.  
  1111. .generic-bbm-modal { position: relative; top: calc(50% - 250px); left: calc(50% - 200px); width: 276px; }
  1112.  
  1113. .generic-bbm-modal.eula-modal { top: calc(50% - 360px); left: calc(50% - 300px); width: 600px; }
  1114. .generic-bbm-modal.eula-modal .generic-popup.content { width: 100%; height: 100%; }
  1115. .generic-bbm-modal.eula-modal .generic-popup.content .message-holder { max-height: 500px; text-align: left; white-space: pre-line; overflow-x: hidden; overflow-y: scroll; }
  1116. .generic-bbm-modal.eula-modal .generic-popup.content .noimg { font-size: 22px; margin: 0.25em 0; }
  1117.  
  1118. .generic-bbm-views { width: 100%; }
  1119.  
  1120. /* Modal theme */
  1121. .generic-bbm-wrapper { -webkit-transition: background-color 0.3s; }
  1122.  
  1123. .generic-bbm-modal { border-radius: 3px; box-shadow: 0 -1px 25px rgba(0, 0, 0, 0.3); box-sizing: initial; }
  1124.  
  1125. .captcha-invisible { display: none; }
  1126.  
  1127. /* Animations */
  1128. /* Open modal */
  1129. @-webkit-keyframes generic-bbm-open { 0% { -webkit-transform: matrix(0.99126, 0, 0, 0.99126, 0, 43.8813); opacity: 0.1259; }
  1130. 4% { -webkit-transform: matrix(0.99295, 0, 0, 0.99295, 0, 45.06809); opacity: 0.29544; }
  1131. 8% { -webkit-transform: matrix(0.99467, 0, 0, 0.99467, 0, 46.26922); opacity: 0.46703; }
  1132. 12% { -webkit-transform: matrix(0.99619, 0, 0, 0.99619, 0, 47.33355); opacity: 0.61908; }
  1133. 16% { -webkit-transform: matrix(0.99743, 0, 0, 0.99743, 0, 48.19991); opacity: 0.74284; }
  1134. 20% { -webkit-transform: matrix(0.99837, 0, 0, 0.99837, 0, 48.86067); opacity: 0.83724; }
  1135. 24% { -webkit-transform: matrix(0.99905, 0, 0, 0.99905, 0, 49.33658); opacity: 0.90523; }
  1136. 28% { -webkit-transform: matrix(0.99952, 0, 0, 0.99952, 0, 49.66049); opacity: 0.9515; }
  1137. 32% { -webkit-transform: matrix(0.99981, 0, 0, 0.99981, 0, 49.8675); opacity: 0.98107; }
  1138. 36% { -webkit-transform: matrix(0.99999, 0, 0, 0.99999, 0, 49.98966); opacity: 0.99852; }
  1139. 40% { -webkit-transform: matrix(1.00008, 0, 0, 1.00008, 0, 50.05361); opacity: 1.00766; }
  1140. 44% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.08); opacity: 1.01143; }
  1141. 48% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08394); opacity: 1.01199; }
  1142. 52% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.07589); opacity: 1.01084; }
  1143. 56% { -webkit-transform: matrix(1.00009, 0, 0, 1.00009, 0, 50.06265); opacity: 1.00895; }
  1144. 60% { -webkit-transform: matrix(1.00007, 0, 0, 1.00007, 0, 50.04833); opacity: 1.0069; }
  1145. 64% { -webkit-transform: matrix(1.00005, 0, 0, 1.00005, 0, 50.03518); opacity: 1.00503; }
  1146. 68% { -webkit-transform: matrix(1.00004, 0, 0, 1.00004, 0, 50.02421); opacity: 1.00346; }
  1147. 72% { -webkit-transform: matrix(1.00002, 0, 0, 1.00002, 0, 50.01567); opacity: 1.00224; }
  1148. 76% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00941); opacity: 1.00134; }
  1149. 80% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00506); opacity: 1.00072; }
  1150. 84% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.00223); opacity: 1.00032; }
  1151. 88% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.0005); opacity: 1.00007; }
  1152. 92% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99956); opacity: 0.99994; }
  1153. 96% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99913); opacity: 0.99988; }
  1154. 100% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50); opacity: 1; } }
  1155. .generic-bbm-modal--open { -webkit-animation-duration: 0.3s; -webkit-animation-name: generic-bbm-open; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1156.  
  1157. /* Open a stacked modal */
  1158. @-webkit-keyframes generic-bbm-stacked { 0% { -webkit-transform: matrix(0.99874, 0, 0, 0.99874, 0, 49.1187); opacity: 0.93705; }
  1159. 4% { -webkit-transform: matrix(0.99705, 0, 0, 0.99705, 0, 47.93192); opacity: 0.85228; }
  1160. 8% { -webkit-transform: matrix(0.99533, 0, 0, 0.99533, 0, 46.73078); opacity: 0.76648; }
  1161. 12% { -webkit-transform: matrix(0.99381, 0, 0, 0.99381, 0, 45.66645); opacity: 0.69046; }
  1162. 16% { -webkit-transform: matrix(0.99257, 0, 0, 0.99257, 0, 44.80009); opacity: 0.62858; }
  1163. 20% { -webkit-transform: matrix(0.99163, 0, 0, 0.99163, 0, 44.13933); opacity: 0.58138; }
  1164. 24% { -webkit-transform: matrix(0.99095, 0, 0, 0.99095, 0, 43.66342); opacity: 0.54739; }
  1165. 28% { -webkit-transform: matrix(0.99049, 0, 0, 0.99049, 0, 43.33951); opacity: 0.52425; }
  1166. 32% { -webkit-transform: matrix(0.99019, 0, 0, 0.99019, 0, 43.1325); opacity: 0.50946; }
  1167. 36% { -webkit-transform: matrix(0.99002, 0, 0, 0.99002, 0, 43.01034); opacity: 0.50074; }
  1168. 40% { -webkit-transform: matrix(0.98992, 0, 0, 0.98992, 0, 42.94639); opacity: 0.49617; }
  1169. 44% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92001); opacity: 0.49429; }
  1170. 48% { -webkit-transform: matrix(0.98988, 0, 0, 0.98988, 0, 42.91606); opacity: 0.494; }
  1171. 52% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92411); opacity: 0.49458; }
  1172. 56% { -webkit-transform: matrix(0.98991, 0, 0, 0.98991, 0, 42.93736); opacity: 0.49553; }
  1173. 60% { -webkit-transform: matrix(0.98993, 0, 0, 0.98993, 0, 42.95167); opacity: 0.49655; }
  1174. 64% { -webkit-transform: matrix(0.98995, 0, 0, 0.98995, 0, 42.96482); opacity: 0.49749; }
  1175. 68% { -webkit-transform: matrix(0.98997, 0, 0, 0.98997, 0, 42.97579); opacity: 0.49827; }
  1176. 72% { -webkit-transform: matrix(0.98998, 0, 0, 0.98998, 0, 42.98433); opacity: 0.49888; }
  1177. 76% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99059); opacity: 0.49933; }
  1178. 80% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99494); opacity: 0.49964; }
  1179. 84% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.99777); opacity: 0.49984; }
  1180. 88% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.9995); opacity: 0.49996; }
  1181. 92% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00044); opacity: 0.50003; }
  1182. 96% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00088); opacity: 0.50006; }
  1183. 100% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43); opacity: 0.5; } }
  1184. .generic-bbm-modal--stacked { -webkit-animation-duration: 0.43333s; -webkit-animation-name: generic-bbm-stacked; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1185.  
  1186. /* Close a stacked modal */
  1187. @-webkit-keyframes generic-bbm-stacked-reverse { 0% { -webkit-transform: matrix(0.99123, 0, 0, 0.99123, 0, 43.86266); opacity: 0.56162; }
  1188. 4% { -webkit-transform: matrix(0.99293, 0, 0, 0.99293, 0, 45.05306); opacity: 0.64665; }
  1189. 8% { -webkit-transform: matrix(0.99465, 0, 0, 0.99465, 0, 46.25785); opacity: 0.7327; }
  1190. 12% { -webkit-transform: matrix(0.99618, 0, 0, 0.99618, 0, 47.32543); opacity: 0.80896; }
  1191. 16% { -webkit-transform: matrix(0.99742, 0, 0, 0.99742, 0, 48.19443); opacity: 0.87103; }
  1192. 20% { -webkit-transform: matrix(0.99837, 0, 0, 0.99837, 0, 48.8572); opacity: 0.91837; }
  1193. 24% { -webkit-transform: matrix(0.99905, 0, 0, 0.99905, 0, 49.33456); opacity: 0.95247; }
  1194. 28% { -webkit-transform: matrix(0.99951, 0, 0, 0.99951, 0, 49.65946); opacity: 0.97568; }
  1195. 32% { -webkit-transform: matrix(0.99981, 0, 0, 0.99981, 0, 49.8671); opacity: 0.99051; }
  1196. 36% { -webkit-transform: matrix(0.99999, 0, 0, 0.99999, 0, 49.98963); opacity: 0.99926; }
  1197. 40% { -webkit-transform: matrix(1.00008, 0, 0, 1.00008, 0, 50.05377); opacity: 1.00384; }
  1198. 44% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08024); opacity: 1.00573; }
  1199. 48% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08419); opacity: 1.00601; }
  1200. 52% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.07612); opacity: 1.00544; }
  1201. 56% { -webkit-transform: matrix(1.00009, 0, 0, 1.00009, 0, 50.06284); opacity: 1.00449; }
  1202. 60% { -webkit-transform: matrix(1.00007, 0, 0, 1.00007, 0, 50.04848); opacity: 1.00346; }
  1203. 64% { -webkit-transform: matrix(1.00005, 0, 0, 1.00005, 0, 50.03529); opacity: 1.00252; }
  1204. 68% { -webkit-transform: matrix(1.00004, 0, 0, 1.00004, 0, 50.02428); opacity: 1.00173; }
  1205. 72% { -webkit-transform: matrix(1.00002, 0, 0, 1.00002, 0, 50.01572); opacity: 1.00112; }
  1206. 76% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00944); opacity: 1.00067; }
  1207. 80% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00508); opacity: 1.00036; }
  1208. 84% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.00223); opacity: 1.00016; }
  1209. 88% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.0005); opacity: 1.00004; }
  1210. 92% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99956); opacity: 0.99997; }
  1211. 96% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99912); opacity: 0.99994; }
  1212. 100% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50); opacity: 1; } }
  1213. .generic-bbm-modal--stacked-reverse { -webkit-animation-duration: 0.43333s; -webkit-animation-name: generic-bbm-stacked-reverse; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1214.  
  1215. /* Close a modal */
  1216. @-webkit-keyframes generic-bbm-close { 0% { -webkit-transform: matrix(0.99874, 0, 0, 0.99874, 0, 49.1187); opacity: 0.8741; }
  1217. 4% { -webkit-transform: matrix(0.99705, 0, 0, 0.99705, 0, 47.93192); opacity: 0.70456; }
  1218. 8% { -webkit-transform: matrix(0.99533, 0, 0, 0.99533, 0, 46.73078); opacity: 0.53297; }
  1219. 12% { -webkit-transform: matrix(0.99381, 0, 0, 0.99381, 0, 45.66645); opacity: 0.38092; }
  1220. 16% { -webkit-transform: matrix(0.99257, 0, 0, 0.99257, 0, 44.80009); opacity: 0.25716; }
  1221. 20% { -webkit-transform: matrix(0.99163, 0, 0, 0.99163, 0, 44.13933); opacity: 0.16276; }
  1222. 24% { -webkit-transform: matrix(0.99095, 0, 0, 0.99095, 0, 43.66342); opacity: 0.09477; }
  1223. 28% { -webkit-transform: matrix(0.99049, 0, 0, 0.99049, 0, 43.33951); opacity: 0.0485; }
  1224. 32% { -webkit-transform: matrix(0.99019, 0, 0, 0.99019, 0, 43.1325); opacity: 0.01893; }
  1225. 36% { -webkit-transform: matrix(0.99002, 0, 0, 0.99002, 0, 43.01034); opacity: 0.00148; }
  1226. 40% { -webkit-transform: matrix(0.98992, 0, 0, 0.98992, 0, 42.94639); opacity: -0.00766; }
  1227. 44% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92001); opacity: -0.01143; }
  1228. 48% { -webkit-transform: matrix(0.98988, 0, 0, 0.98988, 0, 42.91606); opacity: -0.01199; }
  1229. 52% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92411); opacity: -0.01084; }
  1230. 56% { -webkit-transform: matrix(0.98991, 0, 0, 0.98991, 0, 42.93736); opacity: -0.00895; }
  1231. 60% { -webkit-transform: matrix(0.98993, 0, 0, 0.98993, 0, 42.95167); opacity: -0.0069; }
  1232. 64% { -webkit-transform: matrix(0.98995, 0, 0, 0.98995, 0, 42.96482); opacity: -0.00503; }
  1233. 68% { -webkit-transform: matrix(0.98997, 0, 0, 0.98997, 0, 42.97579); opacity: -0.00346; }
  1234. 72% { -webkit-transform: matrix(0.98998, 0, 0, 0.98998, 0, 42.98433); opacity: -0.00224; }
  1235. 76% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99059); opacity: -0.00134; }
  1236. 80% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99494); opacity: -0.00072; }
  1237. 84% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.99777); opacity: -0.00032; }
  1238. 88% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.9995); opacity: -7e -5; }
  1239. 92% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00044); opacity: 6.0e-05; }
  1240. 96% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00088); opacity: 0.00012; }
  1241. 100% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43); opacity: 0; } }
  1242. .generic-bbm-modal--close { -webkit-animation-duration: 0.43333s; -webkit-animation-name: generic-bbm-close; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1243.  
  1244. #account-login-authy-token-holder { display: none; }
  1245.  
  1246. @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { .generic-bbm-modal--open, .generic-bbm-modal--stacked, .generic-bbm-modal--stacked-reverse, .generic-bbm-modal--destroy { -webkit-animation: none !important; } }
  1247. #flash {
  1248. position:fixed;
  1249. right: 30px;
  1250. top:10px;
  1251. background: black;
  1252. opacity: .8;
  1253. border-radius: 10px;
  1254. color:#eee;
  1255. padding:20px;
  1256. min-width: 200px;
  1257. max-width: 400px;
  1258. text-align: center;
  1259. z-index: 99999;
  1260. box-shadow: 1px 1px 5px #000;
  1261. display:none;
  1262. }
  1263. html, body {
  1264. -webkit-font-smoothing: antialiased;
  1265. -moz-osx-font-smoothing: grayscale;
  1266. }
  1267.  
  1268. body {
  1269. font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  1270. font-size: 14px;
  1271. margin: 0;
  1272. padding: 0;
  1273. }
  1274.  
  1275. // Localize.js uses the <var> tag to indicate certain special things. However,
  1276. // some browsers apply special CSS to the <var> tag which we don't want. This
  1277. // effectively removes any special CSS that the browser might apply to <var>.
  1278. var {
  1279. margin: 0;
  1280. padding: 0;
  1281. border: 0;
  1282. font-size: 100%;
  1283. font: inherit;
  1284. vertical-align: baseline;
  1285. }
  1286. .humble-banner { box-sizing: content-box; background: radial-gradient(ellipse closest-side, #4b4b4b 0%, black 40%); height: 90px; padding: 10px 0; }
  1287. .humble-banner a, .humble-banner a:visited { display: block; width: 651px; height: 89px; text-align: center; margin: 0 auto; text-decoration: none; position: relative; }
  1288. .humble-banner p { font-size: 18px; line-height: 18px; color: #ccc; font-style: italic; margin: 0; padding: 0; position: absolute; top: 36px; left: -250px; width: 240px; text-align: right; }
  1289. .humble-banner img { margin: 12px 0 0 0; height: 45px; width: auto; }
  1290. .humble-banner h3 { margin: 0; padding: 0; display: inline-block; position: relative; }
  1291. .humble-banner h4 { font-size: 14px; line-height: 14px; color: #eee; margin: 0; font-weight: normal; padding: 4px 0 16px 0; }
  1292. .sharer {
  1293. display: inline-block;
  1294. vertical-align: middle;
  1295. }
  1296.  
  1297. .sharer.l {
  1298. float: none;
  1299. position: static;
  1300. }
  1301.  
  1302. .sharer + .sharer,
  1303. script + .sharer {
  1304. margin-left: 15px;
  1305. }
  1306.  
  1307. .social-media-shares {
  1308. text-align: center;
  1309. padding-bottom: 10px;
  1310. }
  1311. </style>
  1312.  
  1313. <style type="text/css">@font-face { font-family: 'hb-icons'; src: url("/static/hashed/17015ce97435ec01a0b93ed4cd7e0c07d8358d94.woff2") format("woff2"), url("/static/hashed/aa7c3e70c582fdfe2eaa1f7fa385de1fdf9ad5aa.woff") format("woff"), url("/static/hashed/a644e848801b42652db065692ad02c14597addc3.ttf") format("truetype"), url("/static/hashed/e0d86cf22c1a59129aaccbf71a27375ce4d8ab4a.otf") format("opentype"); font-weight: normal; font-style: normal; }
  1314. /* Sophia Pro */
  1315. @font-face { font-family: 'Sofia Pro'; src: url("/static/hashed/9e29ad97c24ce996ebe7aefbc55c0077ed0d8d2f.woff2") format("woff2"), url("/static/hashed/cbe7d774210bd1694c15df789ac02ccf3b2b4e92.woff") format("woff"), url("/static/hashed/c25e4297360ab6310322bcc95cf47b58fd6321bc.ttf") format("truetype"), url("/static/hashed/a294c7b2895267014ac902206c4bd4c75b586a04.otf") format("opentype"); font-weight: 900; font-style: normal; }
  1316. @font-face { font-family: 'Sofia Pro'; src: url("/static/hashed/86b0d4d2129d83657c3712791efc7e9754aa8a82.woff2") format("woff2"), url("/static/hashed/c0623e77d8862256a4360e1115d945053eb655ef.woff") format("woff"), url("/static/hashed/e01d35c833cf887534576322604e6e1ec2c95361.ttf") format("truetype"), url("/static/hashed/1b015efad5d8d477ac94c6c74de3a6d3d3ed16df.otf") format("opentype"); font-weight: 900; font-style: italic; }
  1317. @font-face { font-family: 'Sofia Pro'; src: url("/static/hashed/34c59909d0360e2d5e43bcb210176a753e1866b0.woff2") format("woff2"), url("/static/hashed/11d59a3ff5cdd3390fb93fbd9615dc0fb56a8c65.woff") format("woff"), url("/static/hashed/7e9bccdbfb3878e6a5453bf99993eed610d0e41d.ttf") format("truetype"), url("/static/hashed/18a648d337ad820b6dbf8145682d67d5259dcebd.otf") format("opentype"); font-weight: 300; font-style: normal; }
  1318. @font-face { font-family: 'Sofia Pro'; src: url("/static/hashed/5b6a9522d5ddf17bbc23ee59f994e6df291ed825.woff2") format("woff2"), url("/static/hashed/df30037a1c8ff81537368af51b9e3fe836ee2804.woff") format("woff"), url("/static/hashed/9746d94d32ced44188e055d15495eed7f8fd43b1.ttf") format("truetype"), url("/static/hashed/1ce1b93b6c5386c81aed0a4d365d51809545ec39.otf") format("opentype"); font-weight: 300; font-style: italic; }
  1319. @font-face { font-family: 'Sofia Pro'; src: url("/static/hashed/0052ab0bbfee0e88edc1e6c68494d9449016fd24.woff2") format("woff2"), url("/static/hashed/dcfc553e267fb5bb92a7510b6be35159fdadf57f.woff") format("woff"), url("/static/hashed/9370f719a25957b05ace466b39c2a2d4b33734c6.ttf") format("truetype"), url("/static/hashed/ab1f225985185b4ebb319b4c7f89b1d9b2b59848.otf") format("opentype"); font-weight: normal; font-style: normal; }
  1320. @font-face { font-family: 'Sofia Pro'; src: url("/static/hashed/c294b2a2521169835a44953e87e2cc8900cee5ec.woff2") format("woff2"), url("/static/hashed/9322caa9a8ca9c74d5f0af655d789d1d7d63a24a.woff") format("woff"), url("/static/hashed/034595580ccc31b93f69fe336eb28bd519f5dc95.ttf") format("truetype"), url("/static/hashed/f4e4f58e25e1a1ad121ed70b9c4832bb69c941b3.otf") format("opentype"); font-weight: normal; font-style: italic; }</style>
  1321. <link rel="stylesheet" href="https://humblebundle-a.akamaihd.net/static/hashed/149e1a4113c4b83734843264419d4e94a6094e3a.css" />
  1322. <link rel="stylesheet" href="https://humblebundle-a.akamaihd.net/static/hashed/d683df30c58a55cd5d46de4e620d4ef3f38ed244.css" />
  1323. <link rel="stylesheet" href="https://humblebundle-a.akamaihd.net/static/hashed/4357c6bf647048575c04f0cd82dac536a610dbbb.css" />
  1324. <style>
  1325. @charset "UTF-8";
  1326. .charity-selection .charity-results .charity-preview .select-charity, .charity-selection .charity-results .charity-preview .remove-charity, .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity, .charity-details .charity-title .select-charity { display: block; padding: 4px 0; border-radius: 3px; border: none; background: rgba(255, 255, 255, 0.3); border: 1px solid rgba(0, 0, 0, 0.2); text-align: center; font-size: 12px; font-weight: bold; text-decoration: none; color: #494f5c; }
  1327.  
  1328. .charity-selection .charity-results .charity-preview .select-charity.is-selected, .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity.is-selected, .charity-details .charity-title .select-charity.is-selected, .charity-details .charity-title .select-charity.is-featured { border: 1px solid rgba(0, 0, 0, 0.1); background: #17a1e5; color: #fff; }
  1329.  
  1330. .charity-selection h2 { font-size: 26px; color: #494f5c; font-weight: 200; margin: -6px 0 0 0; }
  1331. .charity-selection .charity-search { padding-bottom: 20px; position: relative; font-size: 14px; }
  1332. .charity-selection .charity-search input, .charity-selection .charity-search label, .charity-selection .charity-search button { display: inline-block; margin-right: 10px; }
  1333. .charity-selection .charity-search input, .charity-selection .charity-search select, .charity-selection .charity-search button { border-radius: 3px; height: 31px; padding: 4px; box-sizing: border-box; border: 1px solid #ddd; margin-top: 4px; font-size: 14px; }
  1334. .charity-selection .charity-search label { text-transform: uppercase; font-size: 10px; color: #a1a7b2; }
  1335. .charity-selection .charity-search label::first-letter { margin-left: 2px; }
  1336. .charity-selection .charity-search .query { position: relative; width: 350px; }
  1337. .charity-selection .charity-search .query input { width: 100%; padding-left: 26px; color: #494f5c; }
  1338. .charity-selection .charity-search .query i { position: absolute; bottom: 8px; left: 8px; font-size: 14px; color: #a1a7b2; }
  1339. .charity-selection .charity-search .category select, .charity-selection .charity-search .country select, .charity-selection .charity-search .state select { width: 100%; display: inline-block; color: #494f5c; }
  1340. .charity-selection .charity-search .category { width: 250px; }
  1341. .charity-selection .charity-search .country { width: 210px; }
  1342. .charity-selection .charity-search .state { display: none; }
  1343. .charity-selection .charity-search .state.is-united-states, .charity-selection .charity-search .country.is-united-states { width: 100px; display: inline-block; }
  1344. .charity-selection .charity-search button { width: 100px; margin-right: 0; border: 1px solid rgba(0, 0, 0, 0.2); box-shadow: 0px 1px 2px rgba(255, 255, 255, 0.2) inset; background-image: linear-gradient(top, #4DC4FF 0%, #17A1E6 100%); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); color: #fff; font-weight: 500; }
  1345. .charity-selection .charity-search:after { content: ''; display: block; clear: both; }
  1346. .charity-selection .results-heading { margin: 4px 0 0 0; font-size: 20px; font-weight: 200; }
  1347. .charity-selection .results-heading-disclaimer { margin: 4px 0 2px 0; font-size: 12px; color: #7b818c; font-weight: normal; display: none; }
  1348. .charity-selection .charity-img { height: 64px; width: 64px; background-color: white; background-size: contain; background-repeat: no-repeat; background-position: center center; border-radius: 3px; overflow: hidden; position: absolute; cursor: pointer; left: 0; top: 0; }
  1349. .charity-selection .partnership-line { position: absolute; right: 0; bottom: 0; color: #7B818C; font-size: 12px; font-style: italic; }
  1350. .charity-selection .partnership-line a { color: #7B818C; }
  1351. .charity-selection .charity-results { padding-top: 5px; margin-bottom: 20px; margin-right: -20px; }
  1352. .charity-selection .charity-results .charity-selection-message { text-align: center; color: #7b818c; margin: 65px; }
  1353. .charity-selection .charity-results .charity-selection-message h1 { font-size: 24px; font-weight: normal; }
  1354. .charity-selection .charity-results .charity-selection-message img { vertical-align: middle; margin-right: 5px; }
  1355. .charity-selection .charity-results .charity-preview { width: 300px; margin: 20px 20px 20px 0; display: inline-block; text-align: left; vertical-align: top; position: relative; padding-left: 76px; box-sizing: border-box; }
  1356. .charity-selection .charity-results .charity-preview.is-disallowed { opacity: 0.5; }
  1357. .charity-selection .charity-results .charity-preview.is-disallowed button { outline: none; }
  1358. .charity-selection .charity-results .charity-preview a { text-decoration: none; }
  1359. .charity-selection .charity-results .charity-preview .select-charity { display: inline-block; font-size: 10px; height: 18px; padding: 1px 8px; text-transform: uppercase; }
  1360. .charity-selection .charity-results .charity-preview .select-charity .unselected-text { display: inline; }
  1361. .charity-selection .charity-results .charity-preview .select-charity .disallowed-text, .charity-selection .charity-results .charity-preview .select-charity .selected-text, .charity-selection .charity-results .charity-preview .select-charity .featured-text { display: none; }
  1362. .charity-selection .charity-results .charity-preview .select-charity.is-unselected-featured .featured-text { display: inline; }
  1363. .charity-selection .charity-results .charity-preview .select-charity.is-unselected-featured .selected-text, .charity-selection .charity-results .charity-preview .select-charity.is-unselected-featured .unselected-text, .charity-selection .charity-results .charity-preview .select-charity.is-unselected-featured .disallowed-text { display: none; }
  1364. .charity-selection .charity-results .charity-preview .select-charity.is-selected .selected-text { display: inline; }
  1365. .charity-selection .charity-results .charity-preview .select-charity.is-selected .disallowed-text, .charity-selection .charity-results .charity-preview .select-charity.is-selected .unselected-text, .charity-selection .charity-results .charity-preview .select-charity.is-selected .featured-text { display: none; }
  1366. .charity-selection .charity-results .charity-preview .select-charity.is-disallowed { cursor: default; background: #333; }
  1367. .charity-selection .charity-results .charity-preview .select-charity.is-disallowed .disallowed-text { display: inline; color: #787878; }
  1368. .charity-selection .charity-results .charity-preview .select-charity.is-disallowed .selected-text, .charity-selection .charity-results .charity-preview .select-charity.is-disallowed .unselected-text, .charity-selection .charity-results .charity-preview .select-charity.is-disallowed .featured-text { display: none; }
  1369. .charity-selection .charity-results .charity-preview .select-charity.is-featured { cursor: default; background: #17A1E5; }
  1370. .charity-selection .charity-results .charity-preview .select-charity.is-featured .featured-text { color: #fff; display: inline; }
  1371. .charity-selection .charity-results .charity-preview .select-charity.is-featured .selected-text, .charity-selection .charity-results .charity-preview .select-charity.is-featured .unselected-text, .charity-selection .charity-results .charity-preview .select-charity.is-featured .disallowed-text { display: none; }
  1372. .charity-selection .charity-results .charity-preview .remove-charity { background-color: #cb272c; color: white; display: inline-block; font-size: 10px; height: 18px; margin-left: 5px; padding: 1px 8px; text-transform: uppercase; }
  1373. .charity-selection .charity-results .charity-preview .charity-name { margin: 0 0 0 auto; }
  1374. .charity-selection .charity-results .charity-preview .charity-name h4 { margin: -1px 0 0 0; padding: 0 0 7px 0; height: 18px; font-size: 16px; font-weight: 400; white-space: nowrap; overflow-x: hidden; text-overflow: ellipsis; width: 204px; }
  1375. .charity-selection .charity-results .charity-preview .charity-name h5.location { margin: 0 0 9px 0; font-size: 12px; font-weight: normal; color: #7b818c; height: 14px; }
  1376. .charity-selection .featured-charities { border-bottom: 1px solid #ddd; margin-bottom: 20px; padding-bottom: 20px; min-height: 116px; }
  1377. .charity-selection .featured-charities::after { clear: both; content: ""; display: table; }
  1378. .charity-selection .featured-charities .featured-description-wrapper { float: left; }
  1379. .charity-selection .featured-charities .featured-heading { font-size: 20px; font-weight: 200; margin: 20px 0 18px 0; }
  1380. .charity-selection .featured-charities .featured-charities-description { width: 245px; margin: 0; line-height: 16px; }
  1381. .charity-selection .featured-charities .featured-charities-list { padding-top: 20px; float: right; }
  1382. .charity-selection .featured-charities .featured-charities-list .charity-list { text-align: right; }
  1383. .charity-selection .featured-charities .featured-charities-list .charity-preview { width: 64px; margin: 0 -10px 0 65px; display: inline-block; text-align: center; vertical-align: top; position: relative; box-sizing: border-box; }
  1384. .charity-selection .featured-charities .featured-charities-list .charity-preview:first-of-type { margin-left: 0; }
  1385. .charity-selection .featured-charities .featured-charities-list .charity-preview a { text-decoration: none; }
  1386. .charity-selection .featured-charities .featured-charities-list .charity-preview .charity-img { position: static; display: block; margin: 0 auto; }
  1387. .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity { padding: 1px 8px; font-size: 10px; text-transform: uppercase; height: 18px; margin: 0 auto; }
  1388. .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity .selected-text, .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity .unselected-text, .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity .featured-text { display: none; }
  1389. .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity.is-selected .selected-text { display: inline; }
  1390. .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity.is-featured .featured-text { display: inline; }
  1391. .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity.is-unselected-featured .featured-text { display: inline; }
  1392. .charity-selection .featured-charities .featured-charities-list .charity-preview .select-charity:not(.is-selected):not(.is-featured):not(.is-unselected-featured) .unselected-text { display: inline; }
  1393. .charity-selection .featured-charities .featured-charities-list .charity-preview .charity-name { margin: 0 0 0 auto; }
  1394. .charity-selection .featured-charities .featured-charities-list .charity-preview .charity-name h4 { margin: 12px -40% 12px -40%; height: 18px; font-size: 12px; font-weight: normal; }
  1395. .charity-selection .featured-charities .featured-charities-list .charity-preview .charity-name h5.location { display: none; }
  1396.  
  1397. .charity-details { margin-bottom: 40px; }
  1398. .charity-details:after { content: ''; display: block; clear: both; }
  1399. .charity-details .charity-title { display: block; position: relative; padding-bottom: 16px; border-bottom: 1px solid #ddd; margin-bottom: 20px; }
  1400. .charity-details .charity-title h2 { font-size: 26px; font-weight: 200; margin: 0; }
  1401. .charity-details .charity-title .select-charity { padding: 7px 14px; font-size: 14px; position: absolute; top: 0; right: 0; }
  1402. .charity-details .charity-title .select-charity .selected-text, .charity-details .charity-title .select-charity .unselected-text, .charity-details .charity-title .select-charity .featured-text { display: none; }
  1403. .charity-details .charity-title .select-charity.is-selected .selected-text { display: inline; }
  1404. .charity-details .charity-title .select-charity.is-featured .featured-text { display: inline; }
  1405. .charity-details .charity-title .select-charity.is-unselected-featured .featured-text { display: inline; }
  1406. .charity-details .charity-title .select-charity:not(.is-selected):not(.is-featured):not(.is-unselected-featured) .unselected-text { display: inline; }
  1407. .charity-details .charity-img { width: 190px; height: 190px; float: left; border: 1px solid #ddd; border-radius: 3px; background-color: white; background-size: contain; background-repeat: no-repeat; background-position: center center; position: relative; }
  1408. .charity-details .charity-sidebar { margin-left: 210px; }
  1409. .charity-details .charity-sidebar .charity-info { font-style: italic; }
  1410. .charity-details .charity-sidebar .charity-info strong { font-style: normal; }
  1411. .charity-details .charity-sidebar .charity-link { display: block; font-weight: bold; font-style: normal; color: #17a1e5; margin: 1em 0; }
  1412. .charity-details .charity-description { font-size: 14px; line-height: 21px; }
  1413.  
  1414. .charity-account-cta { position: fixed; bottom: -56px; left: 0; right: 0; height: 48px; text-align: center; z-index: 1000; }
  1415. .charity-account-cta .charity-account-cta-message { display: inline-block; height: 48px; padding: 18px 40px; box-sizing: border-box; border-radius: 3px 3px 0 0; background: #d5d9e1; border: 1px solid rgba(161, 167, 178, 0.5); box-shadow: 0 -1px 8px rgba(0, 0, 0, 0.3); }
  1416. .charity-account-cta .charity-account-cta-message p { margin: 0; }
  1417.  
  1418. .unstyled-link { text-decoration: none; }
  1419.  
  1420. .genericbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/aafd697db4950b99bc95a0ef740f10d7301eb437.png") no-repeat; }
  1421.  
  1422. .activated .genericbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/7f9102778b07eec38f1ba5911c95c24d3aa98318.png") no-repeat; }
  1423.  
  1424. .steambutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/4679a3c4d14fbda0fe37478d446d001fad44e3c1.png") no-repeat; }
  1425.  
  1426. .activated .steambutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/7d32b8cb2ed51ab18ec0e5a40208afd4a41c988c.png") no-repeat; }
  1427.  
  1428. .uplaybutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/4b3fd1c208843f91a063bec2349b526202a4fe6e.png") no-repeat; }
  1429.  
  1430. .activated .uplaybutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/4ca5ac1bf3373babd5a508d6556f5f7fd6ad4b38.png") no-repeat; }
  1431.  
  1432. .originbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/e76fbc1ccb8733279587f6038056cd3fdc0271a9.png") no-repeat; }
  1433.  
  1434. .activated .originbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/3ff62f831583f243b65f8954c08f40702eed5912.png") no-repeat; }
  1435.  
  1436. .ouyabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/e8916956991bdd418ccdb45e6dead81cae599a34.png") no-repeat; }
  1437.  
  1438. .activated .ouyabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/cb5ea8b036c49c5f6466d97c37703016668df034.png") no-repeat; }
  1439.  
  1440. .desurabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/97b4d580682444ec310e39480957a39d84a50106.png") no-repeat; }
  1441.  
  1442. .activated .desurabutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/72c7a91a612ceee5ceda77133c9d79bf66b8dec3.png") no-repeat; }
  1443.  
  1444. .onlivebutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/e7426f51dea62e220deeb988794cb32e15c265ae.png") no-repeat; }
  1445.  
  1446. .activated .onlivebutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/8c812b14676720a1c5541e5ff0084336f8ca952b.png") no-repeat; }
  1447.  
  1448. .multiplayerbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/6f98857f10330e006847a2571bd2fcdd972da502.png") no-repeat; }
  1449.  
  1450. .activated .multiplayerbutton { background: url("//humblebundle-a.akamaihd.net/static/hashed/20048fabc7a0a68316b0315f584c58ad95b17055.png") no-repeat; }
  1451.  
  1452. .squareenix_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/ac97edf1d373f749576bab85be377698494478d9.png") no-repeat; }
  1453.  
  1454. .activated .squareenix_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/3af19fcba4ca44990c78e1aebee17bbadd21afe7.png") no-repeat; }
  1455.  
  1456. .bethesda_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/61a2c4c13f0b95b11aec7784356d325f1ad76223.png") no-repeat; }
  1457.  
  1458. .activated .bethesda_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/80a34f59a907904dcb29c5e434affb9f88ee6fc6.png") no-repeat; }
  1459.  
  1460. .telltalegames_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/c3c956701f7cbf7842d1fef8d713f829042dbfb4.png") no-repeat; }
  1461.  
  1462. .activated .telltalegames_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/cfe22581a0a30154a85744ae2f58671af6b731b6.png") no-repeat; }
  1463.  
  1464. .nintendo_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/32be74acd8de11c5a9a240c5ce3c00d0287b83a3.png") no-repeat; }
  1465.  
  1466. .activated .nintendo_button { background: url("//humblebundle-a.akamaihd.net/static/hashed/2a16694e165dc6e39f3e89f6eba6d1451d278f6a.png") no-repeat; }
  1467.  
  1468. .soldout { visibility: hidden; }
  1469.  
  1470. .bbm-modal .whitebox .loading { padding: 50px; width: 300px; }
  1471. .bbm-modal .whitebox .downloads { padding-right: 30px; }
  1472. .bbm-modal .whitebox .platform-chooser { padding-top: 30px; }
  1473. .bbm-modal .whitebox .row { padding-left: 15px; }
  1474. .bbm-modal .whitebox .keyfield { width: 350px; height: 28px; color: #808080; text-align: center; line-height: 28px; font-size: 12px; -webkit-font-smoothing: antialiased; float: left; background: url("//humblebundle-a.akamaihd.net/static/hashed/9e9017643ddecc7f2d3cd0032c577b88d96ce5e0.png") no-repeat; }
  1475. .bbm-modal .whitebox .clear { clear: both; height: 0; }
  1476.  
  1477. .bbm-modal { background: #fff; color: #333; font-size: 14px; font-weight: normal; box-shadow: 0 0 6px rgba(0, 0, 0, 0.6), 0 1px 2px rgba(0, 0, 0, 0.9); }
  1478.  
  1479. /* Modal positioning */
  1480. .bbm-wrapper { background: rgba(0, 0, 0, 0.4); position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 100; padding: 0 10px 0 10px; text-align: left; overflow: auto; }
  1481.  
  1482. .bbm-modal { border-radius: 3px; min-width: 761px; margin: auto; margin-bottom: 40px; width: auto; max-width: 550px; }
  1483.  
  1484. .bbm-views { width: 100%; }
  1485.  
  1486. .generic-bbm-views { width: 100%; }
  1487.  
  1488. /* BLOCKS */
  1489. .bbm-modal__topbar, .bbm-modal__bottombar { padding: 0 30px; }
  1490.  
  1491. .bbm-modal__topbar { border-bottom: 1px solid rgba(0, 0, 0, 0.1); border-radius: 3px 3px 0 0; padding: 10px 30px; background: #bbb; font-weight: bold; font-size: 16px; margin-bottom: 30px; }
  1492. .bbm-modal__topbar i { margin-right: 10px; }
  1493. .bbm-modal__topbar > ul { list-style: none; text-align: center; padding: 0; margin: 0; }
  1494.  
  1495. .bbm-modal__tab { display: inline-block; padding: 15px 10px; }
  1496. .bbm-modal__tab a { font-size: 16px; font-weight: bold; color: #999999; }
  1497. .bbm-modal__tab a:hover, .bbm-modal__tab a.active { color: #222222; }
  1498.  
  1499. .bbm-modal__title { padding: 20px 30px; margin: 0; line-height: 1em; color: #312d3a; }
  1500.  
  1501. .bbm-modal__section { padding: 60px 30px 0px 30px; font-size: 14px; font-weight: normal; line-height: 26px; color: #333; }
  1502. .bbm-modal__section p:last-child { padding: 0; margin-bottom: 0; }
  1503. .bbm-modal__section a { color: #333; }
  1504. .bbm-modal__section h3 { margin: 0; font-size: 20px; line-height: 1em; }
  1505.  
  1506. .bbm-modal__bottombar { border-top: 1px solid rgba(0, 0, 0, 0.1); padding: 18px; text-align: right; margin-top: 30px; }
  1507.  
  1508. /* MODULES */
  1509. .bbm-group { content: ""; display: table; clear: both; }
  1510.  
  1511. .bbm-button { display: inline-block; color: rgba(49, 45, 58, 0.8); text-decoration: none; font-size: 14px; font-weight: 500; position: relative; line-height: 1em; padding: 10px 14px; border-radius: 3px; background: #fcfcfc; background-image: -o-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: -moz-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: -webkit-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: -ms-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); background-image: linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.15) 100%); -moz-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.2); box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.2); }
  1512. .bbm-button.inactive { opacity: 0.5; pointer-events: none; }
  1513. .bbm-button:active { background-image: -o-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: -moz-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: -webkit-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: -ms-linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); background-image: linear-gradient(rgba(70, 30, 170, 0) 0%, rgba(65, 61, 75, 0.25) 100%); -moz-box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.2); box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.2); }
  1514.  
  1515. /* ANIMATIONS */
  1516. /* Open modal */
  1517. @-webkit-keyframes bbm-open { 0% { -webkit-transform: matrix(0.99126, 0, 0, 0.99126, 0, 43.8813); opacity: 0.1259; }
  1518. 4% { -webkit-transform: matrix(0.99295, 0, 0, 0.99295, 0, 45.06809); opacity: 0.29544; }
  1519. 8% { -webkit-transform: matrix(0.99467, 0, 0, 0.99467, 0, 46.26922); opacity: 0.46703; }
  1520. 12% { -webkit-transform: matrix(0.99619, 0, 0, 0.99619, 0, 47.33355); opacity: 0.61908; }
  1521. 16% { -webkit-transform: matrix(0.99743, 0, 0, 0.99743, 0, 48.19991); opacity: 0.74284; }
  1522. 20% { -webkit-transform: matrix(0.99837, 0, 0, 0.99837, 0, 48.86067); opacity: 0.83724; }
  1523. 24% { -webkit-transform: matrix(0.99905, 0, 0, 0.99905, 0, 49.33658); opacity: 0.90523; }
  1524. 28% { -webkit-transform: matrix(0.99952, 0, 0, 0.99952, 0, 49.66049); opacity: 0.9515; }
  1525. 32% { -webkit-transform: matrix(0.99981, 0, 0, 0.99981, 0, 49.8675); opacity: 0.98107; }
  1526. 36% { -webkit-transform: matrix(0.99999, 0, 0, 0.99999, 0, 49.98966); opacity: 0.99852; }
  1527. 40% { -webkit-transform: matrix(1.00008, 0, 0, 1.00008, 0, 50.05361); opacity: 1.00766; }
  1528. 44% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.08); opacity: 1.01143; }
  1529. 48% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08394); opacity: 1.01199; }
  1530. 52% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.07589); opacity: 1.01084; }
  1531. 56% { -webkit-transform: matrix(1.00009, 0, 0, 1.00009, 0, 50.06265); opacity: 1.00895; }
  1532. 60% { -webkit-transform: matrix(1.00007, 0, 0, 1.00007, 0, 50.04833); opacity: 1.0069; }
  1533. 64% { -webkit-transform: matrix(1.00005, 0, 0, 1.00005, 0, 50.03518); opacity: 1.00503; }
  1534. 68% { -webkit-transform: matrix(1.00004, 0, 0, 1.00004, 0, 50.02421); opacity: 1.00346; }
  1535. 72% { -webkit-transform: matrix(1.00002, 0, 0, 1.00002, 0, 50.01567); opacity: 1.00224; }
  1536. 76% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00941); opacity: 1.00134; }
  1537. 80% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00506); opacity: 1.00072; }
  1538. 84% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.00223); opacity: 1.00032; }
  1539. 88% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.0005); opacity: 1.00007; }
  1540. 92% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99956); opacity: 0.99994; }
  1541. 96% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99913); opacity: 0.99988; }
  1542. 100% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50); opacity: 1; } }
  1543. .bbm-modal--open { -webkit-animation-duration: 0.3s; -webkit-animation-name: bbm-open; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1544.  
  1545. /* Open a stacked modal */
  1546. @-webkit-keyframes bbm-stacked { 0% { -webkit-transform: matrix(0.99874, 0, 0, 0.99874, 0, 49.1187); opacity: 0.93705; }
  1547. 4% { -webkit-transform: matrix(0.99705, 0, 0, 0.99705, 0, 47.93192); opacity: 0.85228; }
  1548. 8% { -webkit-transform: matrix(0.99533, 0, 0, 0.99533, 0, 46.73078); opacity: 0.76648; }
  1549. 12% { -webkit-transform: matrix(0.99381, 0, 0, 0.99381, 0, 45.66645); opacity: 0.69046; }
  1550. 16% { -webkit-transform: matrix(0.99257, 0, 0, 0.99257, 0, 44.80009); opacity: 0.62858; }
  1551. 20% { -webkit-transform: matrix(0.99163, 0, 0, 0.99163, 0, 44.13933); opacity: 0.58138; }
  1552. 24% { -webkit-transform: matrix(0.99095, 0, 0, 0.99095, 0, 43.66342); opacity: 0.54739; }
  1553. 28% { -webkit-transform: matrix(0.99049, 0, 0, 0.99049, 0, 43.33951); opacity: 0.52425; }
  1554. 32% { -webkit-transform: matrix(0.99019, 0, 0, 0.99019, 0, 43.1325); opacity: 0.50946; }
  1555. 36% { -webkit-transform: matrix(0.99002, 0, 0, 0.99002, 0, 43.01034); opacity: 0.50074; }
  1556. 40% { -webkit-transform: matrix(0.98992, 0, 0, 0.98992, 0, 42.94639); opacity: 0.49617; }
  1557. 44% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92001); opacity: 0.49429; }
  1558. 48% { -webkit-transform: matrix(0.98988, 0, 0, 0.98988, 0, 42.91606); opacity: 0.494; }
  1559. 52% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92411); opacity: 0.49458; }
  1560. 56% { -webkit-transform: matrix(0.98991, 0, 0, 0.98991, 0, 42.93736); opacity: 0.49553; }
  1561. 60% { -webkit-transform: matrix(0.98993, 0, 0, 0.98993, 0, 42.95167); opacity: 0.49655; }
  1562. 64% { -webkit-transform: matrix(0.98995, 0, 0, 0.98995, 0, 42.96482); opacity: 0.49749; }
  1563. 68% { -webkit-transform: matrix(0.98997, 0, 0, 0.98997, 0, 42.97579); opacity: 0.49827; }
  1564. 72% { -webkit-transform: matrix(0.98998, 0, 0, 0.98998, 0, 42.98433); opacity: 0.49888; }
  1565. 76% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99059); opacity: 0.49933; }
  1566. 80% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99494); opacity: 0.49964; }
  1567. 84% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.99777); opacity: 0.49984; }
  1568. 88% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.9995); opacity: 0.49996; }
  1569. 92% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00044); opacity: 0.50003; }
  1570. 96% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00088); opacity: 0.50006; }
  1571. 100% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43); opacity: 0.5; } }
  1572. .bbm-modal--stacked { -webkit-animation-duration: 0.43333s; -webkit-animation-name: bbm-stacked; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1573.  
  1574. /* destroy a stacked modal */
  1575. @-webkit-keyframes bbm-stacked-reverse { 0% { -webkit-transform: matrix(0.99123, 0, 0, 0.99123, 0, 43.86266); opacity: 0.56162; }
  1576. 4% { -webkit-transform: matrix(0.99293, 0, 0, 0.99293, 0, 45.05306); opacity: 0.64665; }
  1577. 8% { -webkit-transform: matrix(0.99465, 0, 0, 0.99465, 0, 46.25785); opacity: 0.7327; }
  1578. 12% { -webkit-transform: matrix(0.99618, 0, 0, 0.99618, 0, 47.32543); opacity: 0.80896; }
  1579. 16% { -webkit-transform: matrix(0.99742, 0, 0, 0.99742, 0, 48.19443); opacity: 0.87103; }
  1580. 20% { -webkit-transform: matrix(0.99837, 0, 0, 0.99837, 0, 48.8572); opacity: 0.91837; }
  1581. 24% { -webkit-transform: matrix(0.99905, 0, 0, 0.99905, 0, 49.33456); opacity: 0.95247; }
  1582. 28% { -webkit-transform: matrix(0.99951, 0, 0, 0.99951, 0, 49.65946); opacity: 0.97568; }
  1583. 32% { -webkit-transform: matrix(0.99981, 0, 0, 0.99981, 0, 49.8671); opacity: 0.99051; }
  1584. 36% { -webkit-transform: matrix(0.99999, 0, 0, 0.99999, 0, 49.98963); opacity: 0.99926; }
  1585. 40% { -webkit-transform: matrix(1.00008, 0, 0, 1.00008, 0, 50.05377); opacity: 1.00384; }
  1586. 44% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08024); opacity: 1.00573; }
  1587. 48% { -webkit-transform: matrix(1.00012, 0, 0, 1.00012, 0, 50.08419); opacity: 1.00601; }
  1588. 52% { -webkit-transform: matrix(1.00011, 0, 0, 1.00011, 0, 50.07612); opacity: 1.00544; }
  1589. 56% { -webkit-transform: matrix(1.00009, 0, 0, 1.00009, 0, 50.06284); opacity: 1.00449; }
  1590. 60% { -webkit-transform: matrix(1.00007, 0, 0, 1.00007, 0, 50.04848); opacity: 1.00346; }
  1591. 64% { -webkit-transform: matrix(1.00005, 0, 0, 1.00005, 0, 50.03529); opacity: 1.00252; }
  1592. 68% { -webkit-transform: matrix(1.00004, 0, 0, 1.00004, 0, 50.02428); opacity: 1.00173; }
  1593. 72% { -webkit-transform: matrix(1.00002, 0, 0, 1.00002, 0, 50.01572); opacity: 1.00112; }
  1594. 76% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00944); opacity: 1.00067; }
  1595. 80% { -webkit-transform: matrix(1.00001, 0, 0, 1.00001, 0, 50.00508); opacity: 1.00036; }
  1596. 84% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.00223); opacity: 1.00016; }
  1597. 88% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50.0005); opacity: 1.00004; }
  1598. 92% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99956); opacity: 0.99997; }
  1599. 96% { -webkit-transform: matrix(1, 0, 0, 1, 0, 49.99912); opacity: 0.99994; }
  1600. 100% { -webkit-transform: matrix(1, 0, 0, 1, 0, 50); opacity: 1; } }
  1601. .bbm-modal--stacked-reverse { -webkit-animation-duration: 0.43333s; -webkit-animation-name: bbm-stacked-reverse; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1602.  
  1603. /* destroy a modal */
  1604. @-webkit-keyframes bbm-destroy { 0% { -webkit-transform: matrix(0.99874, 0, 0, 0.99874, 0, 49.1187); opacity: 0.8741; }
  1605. 4% { -webkit-transform: matrix(0.99705, 0, 0, 0.99705, 0, 47.93192); opacity: 0.70456; }
  1606. 8% { -webkit-transform: matrix(0.99533, 0, 0, 0.99533, 0, 46.73078); opacity: 0.53297; }
  1607. 12% { -webkit-transform: matrix(0.99381, 0, 0, 0.99381, 0, 45.66645); opacity: 0.38092; }
  1608. 16% { -webkit-transform: matrix(0.99257, 0, 0, 0.99257, 0, 44.80009); opacity: 0.25716; }
  1609. 20% { -webkit-transform: matrix(0.99163, 0, 0, 0.99163, 0, 44.13933); opacity: 0.16276; }
  1610. 24% { -webkit-transform: matrix(0.99095, 0, 0, 0.99095, 0, 43.66342); opacity: 0.09477; }
  1611. 28% { -webkit-transform: matrix(0.99049, 0, 0, 0.99049, 0, 43.33951); opacity: 0.0485; }
  1612. 32% { -webkit-transform: matrix(0.99019, 0, 0, 0.99019, 0, 43.1325); opacity: 0.01893; }
  1613. 36% { -webkit-transform: matrix(0.99002, 0, 0, 0.99002, 0, 43.01034); opacity: 0.00148; }
  1614. 40% { -webkit-transform: matrix(0.98992, 0, 0, 0.98992, 0, 42.94639); opacity: -0.00766; }
  1615. 44% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92001); opacity: -0.01143; }
  1616. 48% { -webkit-transform: matrix(0.98988, 0, 0, 0.98988, 0, 42.91606); opacity: -0.01199; }
  1617. 52% { -webkit-transform: matrix(0.98989, 0, 0, 0.98989, 0, 42.92411); opacity: -0.01084; }
  1618. 56% { -webkit-transform: matrix(0.98991, 0, 0, 0.98991, 0, 42.93736); opacity: -0.00895; }
  1619. 60% { -webkit-transform: matrix(0.98993, 0, 0, 0.98993, 0, 42.95167); opacity: -0.0069; }
  1620. 64% { -webkit-transform: matrix(0.98995, 0, 0, 0.98995, 0, 42.96482); opacity: -0.00503; }
  1621. 68% { -webkit-transform: matrix(0.98997, 0, 0, 0.98997, 0, 42.97579); opacity: -0.00346; }
  1622. 72% { -webkit-transform: matrix(0.98998, 0, 0, 0.98998, 0, 42.98433); opacity: -0.00224; }
  1623. 76% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99059); opacity: -0.00134; }
  1624. 80% { -webkit-transform: matrix(0.98999, 0, 0, 0.98999, 0, 42.99494); opacity: -0.00072; }
  1625. 84% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.99777); opacity: -0.00032; }
  1626. 88% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 42.9995); opacity: -7e -5; }
  1627. 92% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00044); opacity: 6.0 e-05; }
  1628. 96% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43.00088); opacity: 0.00012; }
  1629. 100% { -webkit-transform: matrix(0.99, 0, 0, 0.99, 0, 43); opacity: 0; } }
  1630. .bbm-modal--destroy { -webkit-animation-duration: 0.43333s; -webkit-animation-name: bbm-destroy; -webkit-animation-timing-function: linear; -webkit-animation-fill-mode: both; -webkit-transform-origin: 50% 50%; -webkit-backface-visibility: hidden; }
  1631.  
  1632. .admin-quicklinks { list-style: none; z-index: 150; position: fixed; bottom: 10px; right: 10px; height: 45px; width: 47px; margin: 0; padding: 5px; border: 2px solid #cb272c; border-radius: 5px; background: #fff; font-size: 12px; text-align: right; box-sizing: content-box; transition: height 200ms ease-out, width 200ms ease-out, padding 200ms ease-out; }
  1633. .admin-quicklinks .hb-bundle { position: fixed; color: #cb272c; right: 16px; font-size: 45px; }
  1634. .admin-quicklinks:hover { height: auto; width: auto; padding: 10px; }
  1635. .admin-quicklinks:hover .hb-bundle { display: none; }
  1636. .admin-quicklinks:hover .menu-item { display: block; width: auto; }
  1637. .admin-quicklinks .menu-item { display: none; width: 0; padding: 5px 0; }
  1638. .admin-quicklinks .quicklink { color: #000; text-decoration: none; }
  1639.  
  1640. .admin-tiny-link { position: relative; overflow: visible; font-size: 12px; color: white !important; z-index: 100; text-decoration: none; }
  1641. .admin-tiny-link i { position: absolute; left: -10px; top: -10px; text-shadow: 0 2px 3px rgba(0, 0, 0, 0.6); transform: scale(1); transform-origin: center; transition: text-shadow .3s ease, transform .3s ease; }
  1642. .admin-tiny-link i:hover { text-shadow: 0 3px 5px rgba(0, 0, 0, 0.4); transform: scale(2); }
  1643. .admin-tiny-link.disabled { display: none; }
  1644.  
  1645. .early-unlocks-box-art-display { display: flex; justify-content: center; background-image: url("//humblebundle-a.akamaihd.net/static/hashed/c4e776a095b10a28a80f4130cf67f34df6987047.png"); background-size: contain; background-position: center center; background-repeat: no-repeat; height: 346px; }
  1646. .early-unlocks-box-art-display.nocrates { background-image: none; }
  1647. .early-unlocks-box-art-display.multiple { background-image: url("//humblebundle-a.akamaihd.net/static/hashed/14be0a5788d217ac41af9afa55c3ffdff9c23de3.png"); }
  1648. .early-unlocks-box-art-display.margin-bottom { margin-bottom: 50px; }
  1649.  
  1650. .early-unlock-box-art { padding-top: 80px; }
  1651.  
  1652. .early-unlock-showcase { background-color: #3B3E48; background-position: center; background-repeat: no-repeat; background-size: 100% 100%; margin-top: -56px; padding: 56px 0 50px; }
  1653.  
  1654. .early-unlock-info { width: 800px; text-align: center; margin: auto; }
  1655. .early-unlock-info .humble-monthly-10-note span { font-size: 16pt; font-weight: bold; position: relative; top: -16px; margin-left: 16px; }
  1656. .early-unlock-info .humble-monthly-10-note span a { color: white; text-decoration: none; }
  1657.  
  1658. .early-unlock-game-text { font-size: 12pt; line-height: 18pt; width: 580px; margin: auto; margin-bottom: 30px; }
  1659.  
  1660. .early-unlocks-box-art-display .early-unlock-box-art-wrapper { margin: 0 2em; position: relative; /** Modified from https://jsfiddle.net/josedvq/3HG6d/ **/ }
  1661. .early-unlocks-box-art-display .early-unlock-box-art-wrapper .early-unlock-box-art-msrp-wrapper { position: absolute; bottom: 180px; left: -9px; }
  1662. .early-unlocks-box-art-display .early-unlock-box-art-wrapper .early-unlock-box-art-msrp-wrapper .early-unlock-box-art-msrp-display { background-color: #00a0e8; padding: 10px; font-size: 16px; font-weight: bold; color: white; text-align: center; }
  1663. .early-unlocks-box-art-display .early-unlock-box-art-wrapper .box-art-msrp-triangle { width: 0; height: 0; border-top: 10px solid #1d508b; border-left: 20px solid transparent; }
  1664.  
  1665. .humble-monthly .header-timer { margin-bottom: 25px; }
  1666. .humble-monthly article section.header-box-art-display { margin-top: 50px; }
  1667. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper { display: flex; height: 100%; margin: 0 auto; position: relative; max-width: 800px; width: 100%; }
  1668. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .box-art-wrapper { display: flex; justify-content: center; height: inherit; margin: 0 auto; }
  1669. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .box-art-wrapper .box-art { height: 100%; max-height: 470px; margin-left: 1em; }
  1670. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .box-art-wrapper .box-art:first-of-type { margin-left: 0; }
  1671. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .timer-wrapper .subscribe { display: inline-block; position: relative; text-align: center; top: -160px; }
  1672. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .timer-wrapper .subscribe .button.subscribed { margin-top: 25%; }
  1673. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .box-art-msrp-text { background-color: #FF8F59; bottom: 4em; box-shadow: 0 15px 35px rgba(0, 0, 0, 0.5); left: 50%; padding: .5em 1em; position: absolute; text-align: center; transform: translateX(-50%); z-index: 10; }
  1674. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .box-art-msrp-text .base-price { display: block; font-size: 1.3em; font-weight: bold; }
  1675. .humble-monthly article section.header-box-art-display .inner-early-unlock-wrapper .box-art-msrp-text .msrp-text { opacity: .8; text-decoration: line-through; }
  1676. .humble-monthly.mobile .header-timer { margin-bottom: 25px; text-align: center; }
  1677. .humble-monthly.mobile article section.header-box-art-display .inner-early-unlock-wrapper { flex-direction: column; height: 205px; }
  1678. .humble-monthly.mobile article section.header-box-art-display .inner-early-unlock-wrapper .box-art-wrapper { height: 100%; order: 2; position: static; width: 100%; }
  1679. .humble-monthly.mobile article section.header-box-art-display .inner-early-unlock-wrapper .box-art-wrapper .box-art { display: block; height: auto; left: auto; max-height: 100%; top: 3.5em; z-index: 3; }
  1680.  
  1681. .pagination { margin: 10px 0; white-space: nowrap; text-align: left; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }
  1682. .pagination .jump-to-page { cursor: pointer; display: inline-block; padding: 5px 10px; border-radius: 3px; background: #484f5c; }
  1683.  
  1684. .charity-selection { height: 523px; }
  1685. .charity-selection .cyoc-spinner-dark { display: inline-block; }
  1686. .charity-selection .cyoc-spinner-light { display: none; }
  1687. .charity-selection h1, .charity-selection h2, .charity-selection h3, .charity-selection p, .charity-selection a { color: #eeeeee; }
  1688. .charity-selection h2 { font-size: 18px; font-weight: bold; }
  1689. .charity-selection .charity-results .charity-preview { padding-left: 0; width: 117px; text-align: center; }
  1690. .charity-selection .charity-results .charity-preview .charity-img { width: 64px; height: 64px; position: relative; margin: auto; }
  1691. .charity-selection .charity-results .charity-preview .charity-name { position: relative; width: 124px; text-align: center; padding-bottom: 0; margin-top: 4px; }
  1692. .charity-selection .charity-results .charity-preview .charity-name .see-details { cursor: pointer; }
  1693. .charity-selection .charity-results .charity-preview .charity-name h4 { width: 124px; font-size: 14px; margin-top: 10px; }
  1694. .charity-selection .charity-results .charity-preview .select-charity { background: #A1A7B2; color: white; margin: auto; position: relative; left: -4px; }
  1695. .charity-selection .pagination .jump-to-page { background: #393D49; }
  1696. .charity-selection .pagination .jump-to-page:hover, .charity-selection .pagination .jump-to-page.current { background: #1E2127; }
  1697.  
  1698. .order-form .show-charity-selector { text-decoration: underline; cursor: pointer; }
  1699. .order-form .custom-values-inner { overflow: visible; }
  1700. .order-form .custom-values-inner .subsplit-wrapper { overflow: visible; }
  1701. .order-form .partnership-line { display: none; }
  1702. .order-form .subsplit-wrapper .cyoc-wrapper { left: 0px; }
  1703. .order-form .subsplit-wrapper .cyoc-wrapper .top-arrow { left: 250px; }
  1704. .order-form .cyoc-wrapper { float: left; background: #E4E7ED; height: 354px; display: none; position: relative; width: 897px; left: -114px; padding: 20px; border-top: 1px solid #A6A9B2; border-bottom: 1px solid #A6A9B2; margin-bottom: 10px; }
  1705. .order-form .cyoc-wrapper .top-arrow { position: relative; top: -31px; left: 180px; margin-left: -12px; -webkit-backface-visibility: hidden; background-position: center; width: 23px; height: 11px; background-image: url("//humblebundle-a.akamaihd.net/static/hashed/189096a19ea989ec5b84f8edd0e9efa61bb4c476.png"); background-image: -webkit-image-set(url("//humblebundle-a.akamaihd.net/static/hashed/189096a19ea989ec5b84f8edd0e9efa61bb4c476.png") 1x, url("//humblebundle-a.akamaihd.net/static/hashed/bbe05e5bac2f08dabc6100b32ca67f32c34e044d.png") 2x); }
  1706. .order-form .cyoc-wrapper h1, .order-form .cyoc-wrapper h2, .order-form .cyoc-wrapper h3, .order-form .cyoc-wrapper p, .order-form .cyoc-wrapper a { color: #494f5c; }
  1707. .order-form .cyoc-wrapper .charity-search label.query { width: 280px; }
  1708. .order-form .cyoc-wrapper .cyoc-spinner-dark { display: none; }
  1709. .order-form .cyoc-wrapper .cyoc-spinner-light { display: inline-block; }
  1710. .order-form .cyoc-wrapper .pagination { color: black; }
  1711. .order-form .cyoc-wrapper .pagination .jump-to-page { background: #CBD0DA; }
  1712. .order-form .cyoc-wrapper .pagination .jump-to-page:hover, .order-form .cyoc-wrapper .pagination .jump-to-page.current { background: #a1a5ad; }
  1713. .order-form .splits-holder > .cyoc-wrapper { left: -64px; }
  1714.  
  1715. .cyoc-selector-slide { display: none; }
  1716.  
  1717. .slideout-expandable { background: #33373e; color: #eeeeee; border-top: 1px solid #24282f; border-bottom: 1px solid #24282f; position: relative; padding: 30px 0; -webkit-backface-visibility: hidden; }
  1718. .slideout-expandable .selected-game-arrow.top-arrow { top: -35px; left: 50%; opacity: 1; }
  1719.  
  1720. .slideout-expandable .overflow-wrapper { overflow: hidden; }
  1721.  
  1722. .charity-img { flex-shrink: 0; }
  1723.  
  1724. .charity-img { width: 100px; height: 100px; display: inline-block; background-repeat: no-repeat; background-size: contain; background-position: center center; border-radius: 3px; overflow: hidden; }
  1725.  
  1726. .charity-popup { position: fixed; max-width: 750px; width: 100%; background-color: white; border-radius: 3px; padding: 20px; padding-bottom: 30px; z-index: 1000; top: 50%; left: 50%; transform: translate(-50%, -50%); max-height: 100%; overflow-y: scroll; }
  1727. .charity-popup .charity-info-wrapper { padding: 20px; }
  1728. .charity-popup a { color: #17a1e5; font-weight: bold; }
  1729. .charity-popup .charity-logo { max-width: 100%; max-height: 150px; }
  1730. .charity-popup h2 { font-weight: normal; }
  1731. .charity-popup p { margin: 10px 0; font-size: 15px; line-height: 1.5; }
  1732. .charity-popup .charity-title { font-size: 16px; }
  1733. .charity-popup .charity-description { margin-top: 10px; font-size: 15px; line-height: 1.5; padding-bottom: 15px; }
  1734. .charity-popup .close-button-holder { height: 0; position: relative; overflow: visible; }
  1735. .charity-popup .close-button-holder .close-button { position: absolute; right: -10px; top: -10px; cursor: pointer; }
  1736.  
  1737. .charity-account-cta-message { display: inline-block; position: fixed; left: 0; right: 0; bottom: -100px; max-width: 700px; width: 100%; padding: 18px 40px; margin: 0 auto; box-sizing: border-box; border-radius: 3px 3px 0 0; background: #d5d9e1; border: 1px solid rgba(161, 167, 178, 0.5); box-shadow: 0 -1px 8px rgba(0, 0, 0, 0.3); text-align: center; z-index: 10; }
  1738. .charity-account-cta-message p { margin: 0; }
  1739.  
  1740. #site-xpromo-banner .headline, #site-xpromo-banner .body { width: 500px; font-family: 'Sofia Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; text-shadow: 0.05em 0.05em 0.05em rgba(0, 0, 0, 0.65); }
  1741. #site-xpromo-banner .headline { font-size: 24px; font-weight: 900; line-height: 1.25em; margin: 0 0 0.75em 0; }
  1742. #site-xpromo-banner .body { font-weight: 400; margin: 0 0 1em 0; }
  1743. #site-xpromo-banner .logo, #site-xpromo-banner .cta { max-width: 500px; }
  1744. #site-xpromo-banner .logo { max-height: 150px; margin: 0 0 0.75em 0; }
  1745. #site-xpromo-banner .cta { white-space: nowrap; }
  1746. #site-xpromo-banner .banner { overflow: hidden; transition: height 500ms ease-in-out; }
  1747. #site-xpromo-banner .banner.fadeout { height: 0 !important; }
  1748. #site-xpromo-banner .banner .banner-content:last-child { margin-bottom: 0; }
  1749. @media (max-width: 500px) { #site-xpromo-banner .banner .headline, #site-xpromo-banner .banner .body { width: 320px; }
  1750. #site-xpromo-banner .banner .logo, #site-xpromo-banner .banner .cta { max-width: 320px; } }
  1751. #site-xpromo-banner.is-stuck .banner { position: fixed !important; z-index: 100000; }
  1752. #site-xpromo-banner.is-stuck.top .banner { top: 0; }
  1753. #site-xpromo-banner.is-stuck.bottom .banner { bottom: 0; }
  1754. #site-xpromo-banner.alert-banner .banner { height: 45px; }
  1755. #site-xpromo-banner.alert-banner .banner .body { font-size: 18px; }
  1756. #site-xpromo-banner.small-banner .banner { height: 125px; }
  1757. #site-xpromo-banner.small-banner .banner .logo { max-height: 50px; }
  1758. #site-xpromo-banner.small-banner .banner .body { font-size: 18px; line-height: 1.2em; }
  1759. #site-xpromo-banner.medium-banner .banner { height: 310px; }
  1760. #site-xpromo-banner.medium-banner .banner .body { font-size: 20px; line-height: 1.75em; }
  1761. #site-xpromo-banner.large-banner .banner { height: 450px; }
  1762. #site-xpromo-banner.large-banner .banner .body { font-size: 18px; line-height: 1.5em; }
  1763. #site-xpromo-banner .banner { background-position: center; background-repeat: no-repeat; background-size: cover; position: relative; width: 100%; }
  1764. #site-xpromo-banner .banner .dismiss-button { color: white; cursor: pointer; position: absolute; right: 0; top: 0; padding: 1em; text-shadow: 0 0 0.2em black; }
  1765. #site-xpromo-banner .banner .dismiss-button:after { content: '✕'; font-size: 1.2em; line-height: 1; }
  1766. #site-xpromo-banner .banner a.page-banner-link { align-items: center; color: white; display: flex; flex-direction: column; height: 100%; justify-content: center; position: relative; text-align: center; text-decoration: none; width: 100%; }
  1767.  
  1768. html { box-sizing: border-box; }
  1769.  
  1770. *, *::after, *::before { box-sizing: inherit; }
  1771.  
  1772. body { background: #333; min-width: 880px; -webkit-font-smoothing: antialiased; }
  1773.  
  1774. #dlheader { position: relative; margin: 0 auto 20px auto; min-width: 880px; }
  1775.  
  1776. #logo { margin: 30px auto 0 auto; position: static; }
  1777.  
  1778. #logo img { display: block; margin: 20px auto; max-width: 640px; }
  1779.  
  1780. /* page content */
  1781. .unlock-time { color: #7B818C; font-size: 16px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 500; margin: 0 auto 8px; text-align: center; }
  1782.  
  1783. #papers-top, #papers-bottom { background: url("//humblebundle-a.akamaihd.net/static/hashed/4396bdf4831e7f1368dcdb5a8ec237f1b42bdbc2.png") no-repeat; }
  1784.  
  1785. #papers-top { position: absolute; top: 0; left: 0; height: 280px; width: 831px; }
  1786.  
  1787. #papers-bottom { position: absolute; bottom: 0; left: 0; height: 22px; width: 831px; background-position: 0 bottom; }
  1788.  
  1789. #papers-mid { position: absolute; top: 280px; bottom: 22px; left: 0; width: 831px; background: url("//humblebundle-a.akamaihd.net/static/hashed/277729198acf769d0141fb22563b3b2b3709c9fb.png") repeat-y; }
  1790.  
  1791. #papers-content { position: relative; width: 762px; margin: 0 auto; padding: 30px 0; min-height: 290px; }
  1792.  
  1793. #download-page-wrapper { width: 831px; margin: 0 auto 24px auto; }
  1794.  
  1795. #main { position: relative; color: #4c4c4c; box-sizing: content-box; }
  1796.  
  1797. .order-adder-whitebox { font-weight: normal; }
  1798.  
  1799. /* spiel */
  1800. #spiel { /* Workaround for Android browser's bizarre "auto-fit pages" default setting https://code.google.com/p/android/issues/detail?id=40186 */ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==) no-repeat; }
  1801.  
  1802. .download-social-alignment { display: flex; flex-direction: center; align-items: center; width: 100%; }
  1803.  
  1804. #videopaperclip { left: -57px !important; }
  1805.  
  1806. #payment-amount img { margin-bottom: -5px; }
  1807.  
  1808. .instruction-expand { color: #5D801A !important; text-align: center; display: block; }
  1809.  
  1810. .instructions { display: none; }
  1811.  
  1812. .steaminfo { font-size: 16px; cursor: pointer; }
  1813.  
  1814. .key-expander .nosteam { font-weight: normal; width: 70%; margin: 0 auto; padding: 1em 0; }
  1815.  
  1816. .descitem a.steaminfo { text-decoration: none; }
  1817.  
  1818. .youtubeCentered { margin: auto; width: 580px; }
  1819.  
  1820. .shrinksizer.instructionsteps { padding: 16px 20px; }
  1821.  
  1822. .magic-or { padding-left: 230px; }
  1823.  
  1824. #ubuntuinstructions { padding-top: 20px; text-align: center; }
  1825.  
  1826. #ubuntuinstructions h2 { padding-bottom: 10px; }
  1827.  
  1828. #share-box { text-align: center; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75); line-height: 21px; font-size: 14px; }
  1829.  
  1830. .ebookinstructions { display: block; font-weight: normal; }
  1831.  
  1832. .ebookinstructions .open-in-external-window { color: #5d801a; display: block; font-size: 16px; font-weight: bold; text-align: center; }
  1833.  
  1834. .ebookinstructions .slide-down-trigger { font-weight: bold; }
  1835.  
  1836. .ebookinstructions .slide-down { font-size: 13px; line-height: 170%; }
  1837.  
  1838. .ebookinstructions .steptext { padding-top: 6px; }
  1839.  
  1840. .ebookinstructions h2 { font-size: 20px; font-weight: bold; margin-bottom: 1em; }
  1841.  
  1842. .ebookinstructions h3 { font-size: 120%; font-weight: bold; margin-top: 0; padding-top: 0; }
  1843.  
  1844. .ebookinstructions .pre-box { font-size: 130%; text-align: center; }
  1845.  
  1846. .ebookinstructions .sms-form { width: 400px; }
  1847.  
  1848. #send-email-message { color: #468847; padding-left: 2px; }
  1849.  
  1850. #send-email-message.error { color: #b94a48; }
  1851.  
  1852. #ebook-email-form { position: relative; }
  1853.  
  1854. #email-kindle { width: 128px; }
  1855.  
  1856. #send-email { top: 10px; right: 10px; }
  1857.  
  1858. #ebook-email-form .email-details { font-size: 10px; margin-bottom: 0; line-height: 14px; }
  1859.  
  1860. #download-page-wrapper a, #download-page-wrapper a:visited { color: #5d801a; }
  1861.  
  1862. .whitecontent a { font-weight: bold; }
  1863.  
  1864. .small .flexbtn { min-width: 50px; }
  1865.  
  1866. .small .dldetails { width: 60px; }
  1867.  
  1868. #download-page-wrapper .order-form { border: 1px solid #b5b8bf; }
  1869. #download-page-wrapper .order-form a { color: inherit; }
  1870.  
  1871. .media-object { display: block; }
  1872. .media-object::after { clear: both; content: ""; display: table; }
  1873. .media-object .avatar { float: left; margin-right: 10px; }
  1874. .media-object .details { float: left; }
  1875.  
  1876. .credit { padding: 30px; }
  1877. .credit p { margin: 0; }
  1878. .credit p + p { margin-top: 1.2em; }
  1879. .credit .credit-expiry { font-style: italic; }
  1880.  
  1881. .coupon .column { box-sizing: border-box; }
  1882. .coupon .coupon-info, .coupon .redeem-product { padding: 0 90px; }
  1883. .coupon .coupon-info { display: flex; justify-content: space-between; align-items: center; line-height: 1.35; }
  1884. .coupon .coupon-info .coupon-name { font-size: 16px; font-weight: bold; max-width: 438px; }
  1885. .coupon .coupon-info .coupon-name .admin-tiny-link i { position: relative; }
  1886. .coupon .coupon-info .coupon-icon { max-width: 32px; max-height: 32px; margin-top: 5px; }
  1887. .coupon .coupon-info .coupon-terms { color: inherit !important; }
  1888. .coupon .coupon-info .expired { color: #d0021b; }
  1889. .coupon .coupon-info .discount-price { box-sizing: border-box; border-radius: 3px; padding: 5px 10px; display: inline-block; border: 1px solid #d0021b; font-weight: bold; font-size: 12px; color: #d0021b; margin-left: 10px; }
  1890. .coupon .coupon-info .discount-amount { color: #d0021b; }
  1891. .coupon .redeem-product { margin-top: 20px; padding-top: 10px; margin-bottom: -10px; border-top: 1px solid #e4e7ed; text-align: right; font-weight: bold; }
  1892. .coupon .platforms { margin: 0 20px 0 0; text-align: left; display: inline-block; }
  1893. .coupon .platforms li > i { color: inherit; display: inline-block; margin-left: 5px; }
  1894. .coupon .platforms .platform-info { top: 35px; border: 1px solid #e4e7ed; box-shadow: 0 1px 1px #e4e7ed; }
  1895.  
  1896. #monthly-coupon h3, #trove-promo h3 { font-size: 1.3em; margin: 0; }
  1897. #monthly-coupon p, #trove-promo p { font-size: 1.1em; font-weight: 300; margin: .3em 0 0; }
  1898. #monthly-coupon .button-container, #trove-promo .button-container { padding-top: 20px; }
  1899. #monthly-coupon .button-container a, #trove-promo .button-container a { white-space: nowrap; }
  1900. #monthly-coupon .image-wrapper, #trove-promo .image-wrapper { flex-basis: 70px; flex-shrink: 0; padding-right: 20px; text-align: right; }
  1901. #monthly-coupon .coupon-details, #monthly-coupon .trove-details, #trove-promo .coupon-details, #trove-promo .trove-details { flex-basis: 100%; flex-shrink: 1; }
  1902.  
  1903. #monthly-coupon.wrapper { display: flex; flex-direction: row; justify-content: space-around; }
  1904. #monthly-coupon .hb-bundle { color: #cb272c; font-size: 60px; }
  1905. #monthly-coupon .coupon-details .coupon-info-link { color: #757b86; display: inline-block; margin: 5px 0; }
  1906. #monthly-coupon .coupon-details .tooltip-right { color: #3b3e48 !important; }
  1907. #monthly-coupon .coupon-details .tooltip-right:before { border-right-color: #333; top: 5px; }
  1908. #monthly-coupon .coupon-details .tooltip-right:after { background-color: #333; color: #fff; }
  1909. #monthly-coupon .centered { text-align: center; }
  1910. #monthly-coupon .store-logo { margin-bottom: .2em; width: 200px; }
  1911. #monthly-coupon .button { color: white !important; }
  1912.  
  1913. #trove-promo.wrapper { display: flex; justify-content: space-around; }
  1914. #trove-promo .trove-logo { height: 60px; }
  1915. #trove-promo .trove-details { padding-top: 10px; }
  1916.  
  1917. /* Additional order adder styling */
  1918. .order-form .splits-holder > .cyoc-wrapper { left: -72px; width: 680px; overflow-y: scroll; }
  1919.  
  1920. .order-form .subsplit-wrapper .cyoc-wrapper { left: -62px; width: 680px; overflow-y: scroll; }
  1921.  
  1922. .charity-selection .charity-results .charity-name h4 { overflow-y: hidden; }
  1923.  
  1924. /* We don't want this functionality on the order adder */
  1925. .js-remove-charity { display: none; }
  1926.  
  1927. #heading-time-remaining { display: none; }
  1928.  
  1929. #signup-email { width: 334px; height: 42px; line-height: 42px; background: none; border: none; color: white; font-size: 18px; font-weight: bold; z-index: 15; }
  1930.  
  1931.  
  1932. .green-button { background-image: linear-gradient(to bottom, #e0ffc2 0%, #b1e37f 100%); border: 1px solid #a7c28c; border-radius: 4px; box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.5), 0 1px 0 0 white; color: #42661e; cursor: pointer; display: inline-block; font-weight: bold; margin: 0 0 0 5px; min-width: 50px; padding: 5px 8px 5px 8px; text-align: center; text-shadow: 0 1px rgba(255, 255, 255, 0.6); }
  1933. .green-button:hover:not(disabled) { background: #b1e37f; }
  1934. .green-button:disabled, .green-button.disabled { cursor: default; opacity: 0.4; }
  1935.  
  1936. .gray-button { background-image: linear-gradient(to bottom, #f5f5f5 0%, #dedede 100%); border: 1px solid #bbb; border-radius: 4px; box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.5), 0 1px 0 0 white; color: #444; cursor: pointer; display: inline-block; font-weight: bold; margin: 0 0 0 5px; min-width: 50px; padding: 5px 8px 5px 8px; text-align: center; text-shadow: 0 1px rgba(255, 255, 255, 0.6); }
  1937.  
  1938. a:hover .gray-button { background: #e4e4e4; }
  1939.  
  1940. .button-link { cursor: pointer; text-decoration: none; }
  1941. .button-link:disabled, .button-link.disabled { pointer-events: none; }
  1942.  
  1943. input[type="number"].classy-input, input[type="password"].classy-input, input[type="tel"].classy-input, input[type="text"].classy-input { border: 1px solid #ccc; box-shadow: inset 0 1px 0 #eee,#fff 0 1px 0; margin: 0; padding: 7px; border-radius: 3px; background-color: white; color: #999; }
  1944.  
  1945. .classy-input[disabled='disabled'] { background: #ccc; color: #333; }
  1946.  
  1947. .info-tooltip > i { font-size: .8em; opacity: 0.7; transition: all 0.1s linear; }
  1948. .info-tooltip:hover > i, .info-tooltip:focus > i { opacity: 1; }
  1949. #settings .indicator {
  1950. background: url(https://humblebundle-a.akamaihd.net/static/hashed/e73d51c16b07d083026843ceda9c22056b9d04a2.gif) no-repeat;
  1951. display: none;
  1952. padding: 0 0 0 0;
  1953. margin-left: 10px;
  1954. top: 3px;
  1955. }
  1956.  
  1957. #settings .indicator.on {
  1958. display: inline-block;
  1959. }
  1960. #settings input[type=submit] {
  1961. margin-top: 5px;
  1962. }
  1963. #settings .submitholder {
  1964. height: 30px;
  1965. margin-left: 330px;
  1966. position: relative;
  1967. }
  1968. #settings .account-claimbutton,
  1969. #settings .account-claimbutton-signedout {
  1970. padding: 0 0 0 33px;
  1971. line-height: 28px;
  1972. }
  1973. #settings .account-claimbutton div,
  1974. #settings .account-claimbutton-signedout div {
  1975. padding: 0;
  1976. }
  1977.  
  1978. #change-email {
  1979. position: absolute;
  1980. left: 16px;
  1981. bottom: 26px;
  1982. color: #666;
  1983. font-size: 10px;
  1984. }
  1985. #change-email-form{
  1986. width:280px;
  1987. position:absolute;
  1988. bottom:-10px;
  1989. left:-40px;
  1990. background:white;
  1991. border-radius:5px;
  1992. padding:6px 6px 6px 16px;
  1993. border:black solid 1px;
  1994. z-index:200;
  1995. box-shadow: 2px 2px 5px 1px rgba(0,0,0,0.5);
  1996. display:none;
  1997. }
  1998. #change-email-form .alignlabel{
  1999. text-align: right;
  2000. width:132px;
  2001. float:left;
  2002. padding-top:3px;
  2003. }
  2004. #change-email-form .cebuttons {
  2005. text-align:center;
  2006. padding-top:4px;
  2007. }
  2008. /* tabbed-key-redeem.css */
  2009. .expandkeys-new {
  2010. display:block;
  2011. overflow:hidden;
  2012. text-align:center;
  2013. margin-bottom:8px;
  2014. color:#5d801a !important;
  2015. font-size:16px;
  2016. }
  2017. .keytab {
  2018. display: none;
  2019. }
  2020.  
  2021. .keytabs {
  2022. padding: 8px 0 7px 0;
  2023. margin: -48px 0 28px -10px;
  2024. text-align: left;
  2025. width: 720px;
  2026. line-height: 15px;
  2027. }
  2028.  
  2029. .keytabs a {
  2030. text-decoration: none;
  2031. color: #666;
  2032. margin: 0;
  2033. }
  2034.  
  2035. .keytabs li.activekeytab a {
  2036. color: #333;
  2037. }
  2038.  
  2039. .keytabs li {
  2040. display: inline;
  2041. list-decoration: none;
  2042. margin: 0 -1px 0 0;
  2043. padding: 9px 20px 5px 20px;
  2044. border: 1px solid #aaa;
  2045. border-radius: 5px 5px 0 0;
  2046. -moz-border-radius: 5px 5px 0 0;
  2047. -webkit-border-radius: 5px 5px 0 0;
  2048. -ms-border-radius: 5px 5px 0 0;
  2049. -o-border-radius: 5px 5px 0 0;
  2050. background: #eee;
  2051. font-weight: bold;
  2052. }
  2053.  
  2054. .keytabs li.activekeytab {
  2055. background: white;
  2056. border-bottom: 1px solid white;
  2057. }
  2058.  
  2059. #keystation {
  2060. margin-top: 40px;
  2061. }
  2062.  
  2063. .shrinksizer-new {
  2064. display:none;
  2065. overflow: hidden;
  2066. }
  2067.  
  2068. .redeeminstructions {
  2069. margin-bottom: 1em;
  2070. }
  2071.  
  2072. .instructions_html, .instructions_html a{
  2073. color: #5D801A;
  2074. }
  2075. .urlredeemlink {
  2076. text-align: center;
  2077. margin: auto;
  2078. width:200px;
  2079. }
  2080.  
  2081. /* Custom styling for store keys */
  2082. .overgrowthspf_link {
  2083. color: #5D801A;
  2084. font-size: 15px;
  2085. }
  2086. .overgrowthspf_instruct {
  2087. padding-top: 10px;
  2088. }
  2089. /* stats.css */
  2090. .stats-box {
  2091. line-height: 24px;
  2092. position: relative;
  2093. font-weight: normal;
  2094. font-size: 12px;
  2095. }
  2096.  
  2097. .stats-box h4 {
  2098. font-size: 18px;
  2099. font-weight: normal;
  2100. margin: 0 0 14px 0;
  2101. }
  2102.  
  2103. .stats-box dd {
  2104. margin-top: -23px;
  2105. text-align: right;
  2106. height: 23px;
  2107. }
  2108.  
  2109. .stats-pre-columns {
  2110. width: 33.33333%;
  2111. margin-bottom: 2em;
  2112. }
  2113.  
  2114. .stats-group-pre-columns {
  2115. display: inline-block;
  2116. width: 100%;
  2117. }
  2118.  
  2119. .stats-col-1-of-3,
  2120. .stats-col-2-of-3,
  2121. .stats-col-3-of-3 {
  2122. box-sizing: border-box;
  2123. -moz-box-sizing: border-box;
  2124. -webkit-box-sizing: border-box;
  2125. width: 33.33333%;
  2126. float: left;
  2127. position: relative;
  2128. }
  2129.  
  2130. .stats-col-1-of-3 {
  2131. padding-right: 20px;
  2132. }
  2133.  
  2134. .stats-col-2-of-3 {
  2135. padding-right: 10px;
  2136. padding-left: 10px;
  2137. }
  2138.  
  2139. .stats-col-3-of-3 {
  2140. padding-left: 20px;
  2141. }
  2142.  
  2143. .stats-box:after {
  2144. content: '';
  2145. display: block;
  2146. clear: both;
  2147. }
  2148.  
  2149. .stats-info, .pubnub-promo {
  2150. color: #ccc;
  2151. font-style: italic;
  2152. font-size: 10px;
  2153. line-height: 12px;
  2154. margin: 0;
  2155. }
  2156.  
  2157. .stats-info {
  2158. margin-top: 14px;
  2159. cursor: help;
  2160. }
  2161.  
  2162. .pubnub-promo {
  2163. margin-top: -12px;
  2164. text-align: right;
  2165. }
  2166.  
  2167. .piechart {
  2168. margin: -4px -11px;
  2169. }
  2170.  
  2171. .chartcolor {
  2172. display: inline-block;
  2173. height: 12px;
  2174. margin-right: 4px;
  2175. width: 12px;
  2176. }
  2177.  
  2178. .chartlegend {
  2179. position: absolute;
  2180. top: 78px;
  2181. left: 180px;
  2182. margin: 0;
  2183. padding: 0;
  2184. list-style: none;
  2185. white-space: nowrap;
  2186. }
  2187.  
  2188. .stats-box .contributor-list {
  2189. line-height: 19px;
  2190. margin: 0 0 0 -8px;
  2191. }
  2192. .stats-box .contributor-list dd {
  2193. margin-top: -19px;
  2194. height: 19px;
  2195. }
  2196.  
  2197. .stats-box .contributor-list dt {
  2198. position: relative;
  2199. }
  2200.  
  2201. .contributor-list .number {
  2202. width: 20px;
  2203. text-align: right;
  2204. display: block;
  2205. }
  2206.  
  2207. .contributor-list .contributor-name {
  2208. overflow: hidden;
  2209. text-overflow: ellipsis;
  2210. white-space: nowrap;
  2211. position: absolute;
  2212. top: 0;
  2213. bottom: 0;
  2214. left: 28px;
  2215. right: 70px;
  2216. display: block;
  2217. }
  2218.  
  2219. .contributor-list a,
  2220. .contributor-list a:visited {
  2221. color: #0072e6;
  2222. font-weight: bold;
  2223. text-decoration: none;
  2224. }
  2225.  
  2226. /* single platform version with no pie chart */
  2227. .stats-box .contributor-list.short {
  2228. line-height: 24px;
  2229. margin-left: -8px;
  2230. }
  2231. .stats-box .contributor-list.short dd {
  2232. margin-top: -24px;
  2233. }
  2234. .stats-box .contributor-list.noheading {
  2235. margin-top: 38px;
  2236. }
  2237. /** Styles for the SteamRedeemer module, used to display a user's Steam keys on an order's associated download page. */
  2238. .sr-widget .sr-widget-header { margin-bottom: 13px; }
  2239. .sr-widget .sr-widget-content { width: 70%; margin: auto; }
  2240.  
  2241. .sr-user .sr-user-button { display: flex; align-items: center; float: right; padding: 2px 14px; border-radius: 3px; background-color: #ededed; background: linear-gradient(to top, #e6e6e6, #f4f4f4); border: 1px solid #d8d8d8; cursor: pointer; }
  2242. .sr-user .sr-user-button.sr-linked { cursor: default; }
  2243. .sr-user .sr-user-button .sr-user-button-icon { margin: 0 5px; }
  2244. .sr-user .sr-user-button .sr-user-button-text { font-weight: normal; }
  2245.  
  2246. .sr-key .custom-instruction { margin-top: 10px; }
  2247. .sr-key .sr-key-heading { font-size: 17px; }
  2248. .sr-key .sr-key-heading .sr-key-heading-alert { position: relative; display: inline-block; color: #17A1E5; }
  2249. .sr-key .sr-key-heading .sr-key-heading-alert .sr-key-heading-alert-help-text { width: 150px; font-size: 13px; position: absolute; top: 3px; left: 20px; }
  2250. .sr-key .sr-key-heading .admin-tiny-link i { position: relative; }
  2251. .sr-key .sr-key-content-region { margin: 8px 0 23px; }
  2252.  
  2253. .sr-unredeemed { display: flex; justify-content: space-between; }
  2254. .sr-unredeemed .sr-unredeemed-button { display: flex; align-items: center; justify-content: center; margin: 0 5px; width: 100%; cursor: pointer; text-align: center; line-height: 1.6em; border: 1px solid #C9CCD3; background-color: #C5C5C5; background: linear-gradient(to top, #cacaca, #e7e7e7); overflow-x: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 10px; border-radius: 3px; }
  2255. .sr-unredeemed .sr-unredeemed-button:hover { border: 1px solid #b7bac0; background-color: #fafcff; color: #555961; }
  2256. .sr-unredeemed .sr-unredeemed-button .sr-unredeemed-button-steam-icon { margin-right: 8px; font-size: 19px; }
  2257. .sr-unredeemed .sr-unredeemed-button .sr-unredeemed-button-gift-icon { font-size: 19px; margin-right: 7px; margin-top: 2px; }
  2258. .sr-unredeemed .sr-unredeemed-button .sr-unredeemed-button-gift-text { margin-top: 3px; }
  2259. .sr-unredeemed .sr-unredeemed-button.sr-inactive { background-color: #F3F3F3; background: linear-gradient(to top, #E8E8E8, #F6F6F6); }
  2260. .sr-unredeemed .sr-unredeemed-button.sr-inactive > * { opacity: .37; }
  2261.  
  2262. .sr-redeemed { width: 100%; }
  2263. .sr-redeemed .sr-redeemed-bubble { position: relative; cursor: pointer; margin: 5px 0; text-align: center; line-height: 1.6em; font-weight: bold; background: #E9EEE4; color: #7A981C; border: 1px solid #7A981C; text-overflow: ellipsis; white-space: nowrap; padding: 10px; border-radius: 3px; }
  2264. .sr-redeemed .sr-redeemed-bubble .keyfield-text { display: inline-block; }
  2265. .sr-redeemed .sr-redeemed-bubble:hover { background: #eef3e9; color: #7A981C; border-color: #8fae1d; }
  2266. .sr-redeemed .sr-redeemed-bubble .steam-redeem-button { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; text-decoration: none; position: absolute; margin: auto; border-radius: 3px; right: 3%; top: 0; bottom: 0; height: 30px; width: 60px; background: #97B147; }
  2267. .sr-redeemed .sr-redeemed-bubble .steam-redeem-button:hover { background: #adcc52; }
  2268. .sr-redeemed .sr-redeemed-bubble .steam-redeem-button:hover .tooltiptext { visibility: visible; }
  2269. .sr-redeemed .sr-redeemed-bubble .steam-redeem-button .tooltiptext { visibility: hidden; width: 120px; font-size: 1em; background-color: black; color: #fff; text-align: center; border-radius: 6px; padding: 5px 0; position: absolute; z-index: 1; bottom: 150%; left: 50%; margin-left: -60px; text-shadow: none; }
  2270. .sr-redeemed .sr-redeemed-bubble .steam-redeem-button .tooltiptext::after { content: ""; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: black transparent transparent transparent; }
  2271. .sr-redeemed .sr-redeemed-bubble .steam-redeem-button .steam-redeem-text { color: white; font-size: 12px; width: 100%; border-radius: 3px; text-shadow: none; }
  2272. .sr-redeemed .sr-gift-redeemed-bubble { font-weight: bold; background: #e5f5fc; color: #1280b7; border-color: #1280b7; }
  2273. .sr-redeemed .sr-gift-redeemed-bubble:hover { color: #1280b7; background: #eaf7fd; border-color: #17a1e5; }
  2274.  
  2275. .sr-gift-instructions { display: flex; justify-content: center; margin: 0 auto; font-size: 1.2em; }
  2276.  
  2277. a#sr-gift-instruction-link { margin-left: 2px; color: #1280b7; }
  2278.  
  2279. .redeem-instructions { font-size: 14px; font-weight: normal; text-align: center; }
  2280.  
  2281. .recommend-this-game { font-size: 14px; font-weight: normal; padding: 6px 0 10px; text-align: center; }
  2282. .recommend-this-game .sr-redeem-button { border: 1px solid transparent; border-radius: 15px; color: white !important; cursor: pointer; display: inline-block; font-size: 12px; padding: 4px 10px; text-decoration: none; }
  2283. .recommend-this-game .sr-redeem-button.yes-button { background-color: darkgreen; }
  2284. .recommend-this-game .sr-redeem-button.no-button { background-color: red; }
  2285. .recommend-this-game .tooltip-right:after { border: 1px solid rgba(40, 44, 52, 0.25); box-shadow: none; }
  2286.  
  2287. .game-recommended { display: none; font-size: 14px; font-weight: normal; padding-top: 6px; text-align: center; }
  2288.  
  2289. .sr-footer { text-align: center; font-weight: normal; border-top: 1px solid #D3D3D3; padding-top: 7px; }
  2290. .sr-footer > * { margin: 10px 0; }
  2291. .sr-footer .sr-footer-button { color: white !important; }
  2292. .sr-footer .sr-footer-partial-gift-cta { margin-bottom: 28px; }
  2293. .sr-footer .sr-footer-partial-gift-cta p { margin: 10px 0; }
  2294.  
  2295. .sr-warning-modal { box-shadow: none; border-radius: 3px; text-decoration: none; background: #f5f5f5; width: 360px; }
  2296. .sr-warning-modal .sr-warning-modal-content { margin: 4px 0 5px 0; font-family: 'Helvetica Nueue', Helvetica, Arial, sans-serif; }
  2297. .sr-warning-modal .sr-warning-modal-content .sr-warning-modal-title { margin-bottom: 30px; }
  2298. .sr-warning-modal .sr-warning-modal-content .sr-warning-modal-content-text { color: #666; padding-bottom: 12px; margin: 0; font-size: 14px; font-weight: 300; }
  2299. .sr-warning-modal .sr-warning-modal-region-list { color: black; text-align: center; margin: auto 15%; padding: 10px 0px; list-style: none; max-height: 300px; column-count: 3; column-gap: 10px; overflow-y: auto; }
  2300. .sr-warning-modal .sr-warning-modal-region-list li { max-width: 100px; }
  2301. .sr-warning-modal .sr-warning-modal-buttons { margin-bottom: 3px; }
  2302.  
  2303. .sr-warning-modal-buttons { text-align: end; font-weight: bold; }
  2304. .sr-warning-modal-buttons .sr-warning-modal-button { text-shadow: none; border-radius: 3px; background: #D5D9E1; border: 1px solid #BBC0C9; cursor: pointer; padding: 10px 10px; margin-top: 10px; background: none; box-shadow: none; }
  2305. .sr-warning-modal-buttons .sr-warning-modal-button:hover { background: #dfe4ec; }
  2306. .sr-warning-modal-buttons .sr-warning-modal-confirm-button { background: #ceecfa; color: #1280b7; border-color: #1280b7; }
  2307. .sr-warning-modal-buttons .sr-warning-modal-confirm-button:hover { background: #a0d9f5; }
  2308. </style>
  2309.  
  2310. <script>
  2311.  
  2312. window.app = window.app || {};
  2313. window.pageData = {atTime: 1506712580 };
  2314. window.models = window.models || {};
  2315.  
  2316. window.models.product_json = {"disclaimer_text": null, "machine_name": "wiley_bookbundle", "monetary_content_event_data": [{"amount": 0.01, "type": "price"}, {"amount": 1.0, "warning_locked": "Warning: You must pay at least $1.00 for content!", "type": "price"}, {"amount": 8.0, "warning_locked": "Warning: You will not receive the $8 content! Add just \u003c%\u003d money_difference %\u003e more to unlock!", "type": "price"}, {"amount": 15.0, "warning_locked": "Warning: You will not receive the $15 content! Add just \u003c%\u003d money_difference %\u003e more to unlock!", "type": "price"}], "expand_default_split": false, "tpkd_cutoff_amount": 1.0, "bundle_display_vars": {"active_content_events": ["lessthan1", "initial", "bt8", "bt15"], "over": true, "cleanavg": "14.62", "pricing_tiers": {"initial": 1.0, "bt15": 15.0, "bt8": 8.0, "lessthan1": 0.01}}, "split_disclaimer": null, "expand_subsplits": false, "giving_fund": "ppgf", "stats_template": "Default", "order_form_vars": {"country_code": "DE", "splitsjson": "[{\"class\": \"wiley\", \"partner_split\": 0.59999999999999998, \"sibling_split\": 0.65000000000000002, \"name\": \"Wiley\"}, {\"name\": \"Charity\", \"partner_split\": 0.10000000000000001, \"sibling_split\": 0.14999999999999999, \"subsplit\": [{\"class\": \"paypalgivingfund\", \"secondary_id\": \"8443\", \"sibling_split\": 1.0, \"name\": \"Electronic Frontier Foundation\"}, {\"class\": \"paypalgivingfund\", \"secondary_id\": \"cyoc\", \"sibling_split\": 0.0, \"name\": \"Choose your own charity\"}], \"class\": \"charity\"}, {\"class\": \"humblebundle\", \"partner_split\": 0.14999999999999999, \"sibling_split\": 0.20000000000000001, \"name\": \"Humble Tip\"}]", "avguuid": "sIW3Jqtr1cyalYNO", "stripe_pubkey": "pk_live_Z77z5cJvv0rUOE1ayBDe1xHq", "is_order_adder": false, "min_leaderboard": 150.0, "avg": "14.62383152612060625604643663", "avghash": "1kacdfRuuLSnGywPTrJbdYBGCPFAvo4mmAlaPLMS8WI\u003d"}, "default_dollar_price": 25, "human_name": "Humble Book Bundle: Cybersecurity presented by Wiley", "disallowed_payment_processors": ["coinbase"], "has_nonsteam_keys": false, "splits": [{"class": "wiley", "partner_split": 0.59999999999999998, "sibling_split": 0.65000000000000002, "name": "Wiley"}, {"name": "Charity", "partner_split": 0.10000000000000001, "sibling_split": 0.14999999999999999, "subsplit": [{"class": "paypalgivingfund", "secondary_id": "8443", "sibling_split": 1.0, "name": "Electronic Frontier Foundation"}, {"class": "paypalgivingfund", "secondary_id": "cyoc", "sibling_split": 0.0, "name": "Choose your own charity"}], "class": "charity"}, {"class": "humblebundle", "partner_split": 0.14999999999999999, "sibling_split": 0.20000000000000001, "name": "Humble Tip"}], "has_steam_keys": false, "product_title": "the Humble Book Bundle: Cybersecurity presented by Wiley", "category": "bundle", "pretty_path": "/books/cybersecurity-wiley", "has_any_keys": false, "end": "2017-07-31T18:00:00", "auth_required_for_purchase_if_free": false, "slider_replacement_text": "All for one and one for all!", "start": "2017-07-17T18:00:00", "has_free_content": false, "eula": null, "has_free_keys": false, "media_type": "ebook", "cutoff_warning_override": null};
  2317. window.models.keyentity_json = {"avghash": "8c8LjokekjmElEWsW9fKJAM+xeJ17XBUJ3hS6PsB9ro\u003d", "gamekey": "wWuG2hMxeynmcRrC", "forced_content_events": [], "avg": "15.08300903735141792927419235", "avguuid": "3RgOIIZiFquPvoUt", "cleanfamilytotal": "15.00"};
  2318.  
  2319. window.models.user_json = {
  2320. email: "jonasmarioschaefer@gmail.com",
  2321. payment_credentials: [],
  2322. has_monthly_perks: false,
  2323. has_steam_link: true
  2324. };
  2325.  
  2326. window.models.request = {
  2327. country_code: "DE",
  2328. humble_guard_enabled: true,
  2329. };
  2330. </script>
  2331. <script id="main-js" data-dist_version="4940bbeb11c91fc1421e1df41f1de2c10e9f7b06" src='https://humblebundle-a.akamaihd.net/4940bbeb11c91fc1421e1df41f1de2c10e9f7b06/dist/main.min.js'></script>
  2332. <script>
  2333. (function ($, Backbone) {
  2334. 'use strict';
  2335.  
  2336. var Stats = Backbone.Model.extend({
  2337. defaults: {
  2338. 'stats_data': {},
  2339. 'total_contributions': '0',
  2340. 'total_contributed': '$0.00',
  2341. 'average_contribution': '$0.00',
  2342. 'average_mac': '$0.00',
  2343. 'average_windows': '$0.00',
  2344. 'average_linux': '$0.00',
  2345. 'average_android': '$0.00',
  2346. 'percent_mac': '',
  2347. 'percent_windows': '',
  2348. 'percent_linux': '',
  2349. },
  2350. initialize: function() {
  2351. _.bindAll(this, 'recalculate');
  2352. this.bind('change', this.recalculate, this);
  2353. this.recalculate();
  2354. },
  2355. recalculate: function() {
  2356. var calculated_values = {};
  2357. var stats_data = this.get('stats_data');
  2358.  
  2359. if (!stats_data || !stats_data.rawplatformtotals || !stats_data.numberofcontributions) {
  2360. return;
  2361. }
  2362.  
  2363. var total = new Big(stats_data['rawtotal']);
  2364. var macRawTotal = new Big(stats_data.rawplatformtotals.mac);
  2365. var windowsRawTotal = new Big(stats_data.rawplatformtotals.windows);
  2366. var linuxRawTotal = new Big(stats_data.rawplatformtotals.linux);
  2367. var androidRawTotal = new Big(stats_data.rawplatformtotals.android);
  2368.  
  2369. var totalContribution = parseInt(stats_data.numberofcontributions.total);
  2370. var macTotalContribution = parseInt(stats_data.numberofcontributions.mac);
  2371. var windowsTotalContribution = parseInt(stats_data.numberofcontributions.windows);
  2372. var linuxTotalContribution = parseInt(stats_data.numberofcontributions.linux);
  2373. var androidTotalContribution = parseInt(stats_data.numberofcontributions.android);
  2374.  
  2375. var platform_total = macRawTotal.add(windowsRawTotal).add(linuxRawTotal);
  2376.  
  2377. // Totals
  2378. calculated_values['total_contributions'] = numberWithCommas(totalContribution);
  2379. calculated_values['total_contributed'] = moneyfmt(total);
  2380.  
  2381. // Averages
  2382. calculated_values['average_contribution'] = moneyfmt(total.div(totalContribution || 1));
  2383. calculated_values['average_mac'] = moneyfmt(macRawTotal.div(macTotalContribution || 1));
  2384. calculated_values['average_windows'] = moneyfmt(windowsRawTotal.div(windowsTotalContribution || 1));
  2385. calculated_values['average_linux'] = moneyfmt(linuxRawTotal.div(linuxTotalContribution || 1));
  2386. calculated_values['average_android'] = moneyfmt(androidRawTotal.div(androidTotalContribution || 1));
  2387.  
  2388. // Percentages
  2389. calculated_values['percent_mac'] = parseFloat(macRawTotal.div(platform_total).toFixed(2));
  2390. calculated_values['percent_windows'] = parseFloat(windowsRawTotal.div(platform_total).toFixed(2));
  2391. calculated_values['percent_linux'] = parseFloat(linuxRawTotal.div(platform_total).toFixed(2));
  2392.  
  2393. this.set(calculated_values, { silent: true });
  2394. }
  2395. });
  2396.  
  2397. window.StatsView = Backbone.View.extend({
  2398. events: {
  2399. 'mouseenter .piechart': 'show_grayscale_chart',
  2400. 'mouseleave .piechart': 'show_color_chart'
  2401. },
  2402. initialize: function (options) {
  2403. this.options = options;
  2404. this.model = new Stats({
  2405. 'stats_data': this.options['initial_stats_data'],
  2406. 'leaderboard_data': this.options['leaderboard_data']
  2407. });
  2408.  
  2409. _.bindAll(this,
  2410. 'render',
  2411. 'show_grayscale_chart',
  2412. 'show_color_chart'
  2413. );
  2414.  
  2415. if (!this.$el.length) {
  2416. throw new Error('$el is required');
  2417. }
  2418.  
  2419. // render the html
  2420. var raw_template = this.options['template'];
  2421. var tmpl = _.template(raw_template);
  2422. var template_json = this.model.toJSON();
  2423. this.$el.html(tmpl(template_json));
  2424.  
  2425. // populate values for the first column
  2426. this.render();
  2427.  
  2428. // initialize pie chart
  2429. this.show_color_chart();
  2430.  
  2431. // linkify leaderboard
  2432. this.$('.contributor-name').each(function() { twitter_linkify($(this)); });
  2433.  
  2434. // automatically re-render when the model changes
  2435. this.model.on('change', this.render);
  2436. },
  2437. render: function() {
  2438. /*
  2439. * Update the values in the first column (totals / averages). The pie
  2440. * chart and leaderboard do not live update.
  2441. *
  2442. * Note: The HTML elements where they are displayed have classes matching
  2443. * the corresponding fields on the model. This code relys on that.
  2444. */
  2445. var model_json = this.model.toJSON();
  2446. for (var key in model_json) {
  2447. var $field = this.$('.' + key);
  2448. if ($field.length == 1) {
  2449. if ((key != 'average_contribution') || this.options['live_update_average'] || ($field.text() === '')) {
  2450. $field.text(model_json[key]);
  2451. }
  2452. }
  2453. }
  2454. },
  2455. show_grayscale_chart: function () {
  2456. var $piechart = this.$('.piechart');
  2457. $piechart.attr('src', $piechart.data('grayscaleSrc'));
  2458. this.$('.chartlegend .chartcolor').each(function() {
  2459. $(this).css('background-color', $(this).data('grayscaleColor'));
  2460. });
  2461. },
  2462. show_color_chart: function () {
  2463. var $piechart = this.$('.piechart');
  2464. $piechart.attr('src', $piechart.data('colorSrc'));
  2465. this.$('.chartlegend .chartcolor').each(function() {
  2466. $(this).css('background-color', $(this).data('color'));
  2467. });
  2468. }
  2469. });
  2470. })(jQuery, Backbone); // END CLOSURE
  2471.  
  2472. (function () {
  2473. $(function() {
  2474.  
  2475. var sales_counter = function(machine_name, products_sold, statsView, element_query) {
  2476. // set up the animated counter
  2477. var animatedCounter = null;
  2478. var $counterElement = $(element_query);
  2479. if ($counterElement.length) {
  2480.  
  2481. var numDigits = 6;
  2482.  
  2483. animatedCounter = $counterElement.animatedCounter({'numDigits': numDigits}).data('animatedCounter');
  2484. }
  2485.  
  2486. var lastStatsTimestamp = 0;
  2487.  
  2488. // subscribe to pubnub notifications which will be used to update the stats and counter if we are not on a receipt page
  2489. pubnub_client.subscribe({
  2490. 'channel': 'humble'+machine_name,
  2491. 'callback': function(message) {
  2492. if (!message.stats) {
  2493. return;
  2494. }
  2495. var counterValue = parseInt(message.stats.numberofcontributions.total);
  2496. // ignore outdated messages
  2497. if (message.timestamp <= lastStatsTimestamp) {
  2498. return;
  2499. }
  2500. lastStatsTimestamp = message.timestamp;
  2501. // update the animated counter with the new data
  2502. if (animatedCounter) {
  2503. animatedCounter.setValue(counterValue);
  2504. }
  2505. // update the stats box with the new data
  2506. if (statsView) {
  2507. statsView.model.set({'stats_data': message.stats});
  2508. }
  2509. }
  2510. });
  2511. }
  2512.  
  2513. 'use strict';
  2514. // set up the backbone stats controller
  2515. var statsView = null;
  2516. var $stats_holder = $('#stats-holder');
  2517. var $stats_template = $('#stats-template');
  2518.  
  2519. var $leaderboard = $('#leaderboard-data');
  2520. var leaderboard_html = $leaderboard.length ? $leaderboard.html().trim() : '';
  2521. var leaderboard_data = leaderboard_html ? JSON.parse(leaderboard_html) : [];
  2522.  
  2523. if (typeof StatsView != 'undefined' && $stats_holder.length && $stats_template.length) {
  2524. statsView = new StatsView({
  2525. 'initial_stats_data': {"rawtotal": 1451152.05, "sales_bt8": 89598, "numberofcontributions": {"windows": 55151, "ios": 5933, "mac": 16050, "linux": 12622, "android": 9476, "total": 99232.0}, "sales_btX": 1, "sales_lessthan1": 47, "sales_bt15": 83373, "sales_initial": 99185, "rawplatformtotals": {"windows": 788500.16000000003, "mac": 252149.51000000001, "ios": 86498.960000000006, "android": 126372.23, "linux": 197631.19}},
  2526. 'leaderboard_data': leaderboard_data,
  2527. 'live_update_average': true,
  2528. 'el': $stats_holder,
  2529. 'template': $stats_template.html()
  2530. });
  2531. }
  2532.  
  2533. // Set up the sales counter
  2534. sales_counter('wiley_bookbundle', 0, statsView, '#heading-bundles-sold .digit-holder, #heading-bundles-sold .mini-digit-holder');
  2535. })
  2536. })();
  2537.  
  2538. // keypage.js
  2539.  
  2540.  
  2541. images = [];
  2542. var uplay_link = '';
  2543. var get_uplay_ticket = null;
  2544.  
  2545. function npreload(items) {
  2546. for (var i=0; i<items.length; i++) {
  2547. var nimg = new Image();
  2548. nimg.src = items[i];
  2549. images.push(nimg);
  2550. }
  2551. }
  2552.  
  2553.  
  2554.  
  2555. /*
  2556. * Format 5 as 05 (e.g.)
  2557. */
  2558. function zeropad(num) {
  2559. num += '';
  2560. if (num.length == 1) {
  2561. num = '0' + num;
  2562. }
  2563. return num;
  2564. }
  2565.  
  2566. /*
  2567. * Get steam profile data for a given user and call the provided callbacks. On sucess it will cache the steam profile data.
  2568. * steam_id: the steam id of the profile to retrieve, null for currently logged in user
  2569. * options['success']
  2570. * options['error']
  2571. * options['complete']: functions to call for the respective callbacks, will be a no-op if not provided
  2572. * options['context']: the context to call the callbacks with, window by default
  2573. * returns an object containing steam_name and avatar_url
  2574. */
  2575. window.steam_profiles = {};
  2576. function get_steam_profile(steam_id, options) {
  2577. options = options || {};
  2578. options['context'] = options['context'] || window;
  2579. $.each(['success', 'error', 'complete'], function(index, callback_name) {
  2580. options[callback_name] = options[callback_name] || $.noop;
  2581. });
  2582.  
  2583. if (window.steam_profiles[steam_id]) {
  2584. options['success'].call(options['context'], window.steam_profiles[steam_id]);
  2585. return;
  2586. }
  2587.  
  2588. $.ajax({
  2589. url: '/user/steam_profile',
  2590. dataType: 'json',
  2591. data: {steam_id: steam_id},
  2592. success: function(profile_data) {
  2593. window.steam_profiles[steam_id] = profile_data;
  2594. options['success'].apply(options['context'], arguments);
  2595. },
  2596. error: function() {
  2597. options['error'].apply(options['context'], arguments);
  2598. },
  2599. complete: function() {
  2600. options['complete'].apply(options['context'], arguments);
  2601. },
  2602. });
  2603. }
  2604.  
  2605. /*
  2606. * Format and display the dates that new builds were posted, in the user's local
  2607. * timezone. Detect if there are new builds since the user visited the download
  2608. * page, and highlight them.
  2609. */
  2610. require(['account/accountModals'], function (AccountModals) {
  2611. $(function() {
  2612. var HumbleGuardModal = AccountModals.AccountHumbleGuardModal;
  2613.  
  2614.  
  2615. var newbuilds = {'Mac': 0, 'Windows': 0, 'Linux': 0};
  2616.  
  2617. // Display a string at the top of the download list for each platform informing
  2618. // the user of how many new builds there are since their last visit.
  2619. for (pretty_platform in newbuilds) {
  2620. if (!newbuilds.hasOwnProperty(pretty_platform) || newbuilds[pretty_platform] == 0) continue;
  2621. var platform = pretty_platform.toLowerCase();
  2622. var plural = '';
  2623. if (newbuilds[pretty_platform] > 1) {
  2624. plural = 's';
  2625. }
  2626. var builds_string = newbuilds[pretty_platform] + ' updated ' + pretty_platform + ' build' + plural + ' posted since your last visit!';
  2627. $('.newbuilds.' + platform).html('<div>' + builds_string + '</div>');
  2628. }
  2629.  
  2630. $('#keystation,.key-expander').click(function(e) {
  2631. var t = $(this);
  2632. if (t.hasClass('kexpanded')) return;
  2633. t.addClass('kexpanded');
  2634. e.preventDefault();
  2635. t.find('.expandkeys').animate({height:0,opacity:0});
  2636. t.find('.shrinkwrapper').animate({height:t.find('.shrinksizer').height() + 6}, function() {$(this).height('auto');});
  2637. });
  2638.  
  2639.  
  2640.  
  2641. $(document).ready(function() {
  2642. $('.auto-expand-redeemer').trigger('click');
  2643. });
  2644.  
  2645. $('.keystation-new').click(function(e){
  2646. var parentbox = $(this).closest('.whitebox');
  2647. e.preventDefault();
  2648. parentbox.find('.keystation-new').animate({height:0,opacity:0});
  2649. if (parentbox.find('.keytabs').length > 0) {
  2650. parentbox.closest('.whitebox').animate({'margin-top':'40px'});
  2651. }
  2652. parentbox.find('.shrinksizer-new').css({'overflow':'visible'});
  2653. parentbox.find('.keytabs').css({'opacity':0});
  2654. parentbox.find('.keytabs').animate({'opacity':1.0},1000);
  2655. parentbox.find('.shrinksizer-new').animate({height:'toggle'});
  2656. parentbox.find('.keystation-new').remove();
  2657. });
  2658.  
  2659.  
  2660.  
  2661.  
  2662.  
  2663. $('.keyfield').click(function(e) {
  2664. // When clicking an already redeemed key, select the entire string.
  2665. var $holder = $(this).parent();
  2666. if ($holder.hasClass('activated')) {
  2667. e.preventDefault();
  2668. selectText(this);
  2669. }
  2670. });
  2671.  
  2672. $('.keyredeemer, .giftbutton').click(function(e) {
  2673. e.preventDefault();
  2674. var $that = $(this);
  2675. var $holder = $that.parent();
  2676. if ($that.data('enabled') === true) {
  2677. return;
  2678. }
  2679. $that.data('enabled', true);
  2680.  
  2681. function fetchkey() {
  2682. var keytype = $holder.data('keytype');
  2683. var keyindex = $holder.data('keyindex');
  2684. var helpertext = $holder.data('helpertext') || '';
  2685. var uplay_user_ticket = '';
  2686. if (get_uplay_ticket) {
  2687. uplay_user_ticket = get_uplay_ticket();
  2688. }
  2689.  
  2690.  
  2691. $holder.addClass('pending').find('.keyfield-content').html('<img class="indicator" src="https://humblebundle-a.akamaihd.net/static/hashed/e73d51c16b07d083026843ceda9c22056b9d04a2.gif" /> Retrieving key...');
  2692. var retry = 5;
  2693.  
  2694. function redeemerror(data) {
  2695. if (!data) {
  2696. data = {};
  2697. }
  2698.  
  2699. retry--;
  2700. if (retry <= 0 || data.fatal_error) {
  2701. var error_msg = data.error == 'Already Purchased' ? 'Your Steam account already owns this game' :
  2702. data.error == 'Duplicate activation code' ? 'This key has been activated already' :
  2703. data.error == 'Does not own required app' ? 'You need to purchase the base product first' :
  2704. data.error == 'Restricted country' ? 'This product not available in your country' :
  2705. data.error == 'Bad activation code' ? 'Steam errored, please refresh page and try again' :
  2706. data.error == 'Humble Guard Required' ? 'Humble Account Security check required.' :
  2707. data.error == 'Too many bad activation code attempts in period' ? 'Too many Steam keys redeemed. Try again later.' :
  2708. data.error_msg ? data.error_msg : 'Please try redeeming again later';
  2709.  
  2710. $holder.find('.keyfield-content').text(error_msg);
  2711. if (data.error_msg && (data.error_msg.toLowerCase().indexOf('sold out') != -1)) {
  2712. $holder.find('.keyredeemer').addClass('soldout');
  2713. $holder.find('.giftbutton').hide();
  2714. }
  2715.  
  2716. } else {
  2717. setTimeout(grabKey, 3500);
  2718. }
  2719. }
  2720.  
  2721. function humbleGuardHandler(jqXHR) {
  2722. var data;
  2723. try {
  2724. data = $.parseJSON(jqXHR.responseText);
  2725. } catch (e) {
  2726. // probably a 500, let the standard error handler take it instead
  2727. return;
  2728. }
  2729. if (data.humble_guard_required) {
  2730. jqXHR.fatal_error = true;
  2731. jqXHR.error = "Humble Guard Required";
  2732. $holder.removeClass('activated');
  2733. var modal = new HumbleGuardModal({
  2734. onSuccess: function (view) {
  2735. fetchkey();
  2736. view.close();
  2737. }
  2738. });
  2739. $('#site-modal').html(modal.render().el);
  2740. }
  2741. }
  2742.  
  2743. function grabKey() {
  2744. $.post(
  2745. '/humbler/redeemkey',
  2746. {
  2747. keytype: keytype,
  2748. key: 'wWuG2hMxeynmcRrC',
  2749. keyindex: keyindex,
  2750. uplay_ticket: uplay_user_ticket,
  2751. gift: $that.hasClass('giftbutton')
  2752. },
  2753. function (data) {
  2754. if (data && data.success) {
  2755. $holder.removeClass('pending');
  2756. $holder.addClass('activated');
  2757. if (data.steam_id) {
  2758. var link_text = 'this account';
  2759. if (data.steam_name) {
  2760. link_text = _.escape(data.steam_name);
  2761. }
  2762.  
  2763. $holder.find('.keyfield-content').html('redeemed to <a href="http://steamcommunity.com/profiles/' + data.steam_id + '" target="_blank">' + link_text + '</a>');
  2764. $holder.find('.giftbutton').hide();
  2765.  
  2766. _gaTrackEvent('Download page', 'Redeemed Steam key', keytype);
  2767.  
  2768. } else if (data.giftkey) {
  2769. $holder.addClass('is-gift');
  2770. $holder.find('.keyfield-content').html('https://humblebundle.com/gift?key=' + data.giftkey);
  2771. $holder.find('.giftbutton').hide();
  2772. } else {
  2773. var $keyfield = $holder.find('.keyfield-content');
  2774. $keyfield.html(helpertext + data.key); // data.key has already been escaped by the backend
  2775. selectText($keyfield[0]); // Highlight text so it can easily be copied to clipboard
  2776. }
  2777.  
  2778. } else if (data.access_token_missing) {
  2779. $holder.find('.keyfield-content').html('<a href="/steam/link" target="_blank">Connect to Steam</a> to redeem!');
  2780.  
  2781. } else if (data.bad_access_token) {
  2782. $holder.find('.keyfield-content').html('Steam access expired. <a href="/steam/link" target="_blank">Reconnect to Steam</a> to redeem!');
  2783.  
  2784. } else if (data.uplay_ticket_missing) {
  2785. $holder.find('.keyfield-content').html('<a href="'+ uplay_link + '" target="_blank">Connect to uPlay</a> to redeem!');
  2786.  
  2787. } else {
  2788. redeemerror(data);
  2789. }
  2790. },
  2791. 'json'
  2792. ).fail(humbleGuardHandler)
  2793. .fail(redeemerror)
  2794. .always(function() {
  2795. $that.data('enabled', false);
  2796. });
  2797. }
  2798. grabKey();
  2799. }
  2800.  
  2801. fetchkey();
  2802. });
  2803.  
  2804. // redeem all button (origin_bundle only)
  2805. $('.origin_bundle_redeem_all_button').click(function(e) {
  2806. e.preventDefault();
  2807. var keytype = $(this).data('keytype');
  2808. // click all unactivated redeem key buttons that match the provided selector
  2809. $(".redeemholder").each(
  2810. function (index, elem) {
  2811. if ($(elem).hasClass("activated")) {
  2812. return;
  2813. }
  2814. // check for the type of button we are looking for
  2815. var button = $(elem).find("." + keytype + "button").get(0);
  2816. if (button) {
  2817. $(button).click();
  2818. }
  2819. }
  2820. );
  2821. });
  2822.  
  2823. });
  2824. });
  2825.  
  2826. // preload the images for the redeemed state of the 3rd party key redeemers
  2827. npreload([
  2828. 'https://humblebundle-a.akamaihd.net/static/hashed/8c812b14676720a1c5541e5ff0084336f8ca952b.png',
  2829. 'https://humblebundle-a.akamaihd.net/static/hashed/72c7a91a612ceee5ceda77133c9d79bf66b8dec3.png',
  2830. 'https://humblebundle-a.akamaihd.net/static/hashed/7d32b8cb2ed51ab18ec0e5a40208afd4a41c988c.png',
  2831. 'https://humblebundle-a.akamaihd.net/static/hashed/7f9102778b07eec38f1ba5911c95c24d3aa98318.png',
  2832. 'https://humblebundle-a.akamaihd.net/static/hashed/20048fabc7a0a68316b0315f584c58ad95b17055.png',
  2833. 'https://humblebundle-a.akamaihd.net/static/hashed/e73d51c16b07d083026843ceda9c22056b9d04a2.gif'
  2834. ]);
  2835.  
  2836. $(document).ready(function() {
  2837. $('.keytabs li').click(function(e) {
  2838. var parentbox = $(this).closest('.whitebox');
  2839. e.preventDefault();
  2840.  
  2841. parentbox.find('.keytab').css({'visibility':'hidden'}).hide(200);
  2842. parentbox.find('.keytabs li.activekeytab').removeClass('activekeytab');
  2843. $(this).addClass('activekeytab');
  2844. var tgtSelector = $(this).find('a').attr('href');
  2845. parentbox.find(tgtSelector).show(200,function(){ $(this).css({'visibility':'visible'});})
  2846. });
  2847. });
  2848.  
  2849.  
  2850. $(document).ready(function() {
  2851. $('#deletekeypage').click(function(e) {
  2852. e.preventDefault();
  2853. $('#deletekeyconfirm').fadeIn();
  2854. });
  2855. $('#dkcancel').click(function(e) {
  2856. e.preventDefault();
  2857. $('#deletekeyconfirm').fadeOut();
  2858. });
  2859.  
  2860.  
  2861. $('#dkconfirm').click(function(e) {
  2862. e.preventDefault();
  2863. var url = '/delete-key';
  2864. $.post(url, {'key': 'wWuG2hMxeynmcRrC'}, function(data) {
  2865. var dict = JSON.parse(strip_json_prefix(data));
  2866. var result = '';
  2867. if (dict.hasOwnProperty('result')) {
  2868. result = dict['result'];
  2869. } else {
  2870. result = 'Sorry, a problem occurred.';
  2871. }
  2872. $('#deletekeyconfirm').html('<p class=\'centered-text\'>' + result + '</p>');
  2873. }, 'text');
  2874. });
  2875.  
  2876. require(['downloadPages/uplay'], function(uplay) {
  2877. uplay_link = uplay.getConnectLink();
  2878. uplay.init($('.uplay-login-status'));
  2879. get_uplay_ticket = uplay.getTicket;
  2880. });
  2881.  
  2882. });
  2883.  
  2884.  
  2885.  
  2886. $(document).ready(function() {
  2887. $('.steam-profile .js-unlink-submit').on('click', function(e) {
  2888. e.preventDefault();
  2889. e.stopPropagation();
  2890. $(e.currentTarget).closest('form').submit();
  2891. });
  2892.  
  2893. // fetch and update steam info for the currently logged in user
  2894. var $steam_profile = $('.steam-profile');
  2895. if ($steam_profile.length) {
  2896. var $spinner = $('<div class=\'indicator\'></div>');
  2897. $steam_profile.children().hide();
  2898. $steam_profile.append($spinner);
  2899.  
  2900. // get steam profile for current user
  2901. get_steam_profile(null, {
  2902. context: this,
  2903. success: function(profile_data) {
  2904. $steam_profile.children().show();
  2905. if (profile_data['steam_name'] && profile_data['avatar_url']) {
  2906. $steam_profile.find('.account-text a:first').text(profile_data['steam_name']);
  2907. $steam_profile.find('.profile-pic').css('background-image', 'url(' + profile_data['avatar_url'] + ')');
  2908. } else {
  2909. $steam_profile.find('.profile-pic').hide();
  2910. }
  2911. },
  2912. error: function(profile_data) {
  2913. $steam_profile.children().show();
  2914. $steam_profile.find('.profile-pic').hide();
  2915. },
  2916. complete: function(profile_data) {
  2917. $spinner.remove();
  2918. },
  2919. });
  2920. }
  2921.  
  2922. // fetch steam profile data for already redeemed keys
  2923. // get unique steam ids
  2924. var steam_ids = {};
  2925. $('.keyfield-content a[data-steam-id]').each(function(index, el) {
  2926. steam_ids[$(el).data('steamId')] = true;
  2927. });
  2928.  
  2929. // fetch unique keys and update the redeem text
  2930. var self = this;
  2931. $.each(steam_ids, function(key, value) {
  2932.  
  2933. var $spinner = $('<img class="indicator" src="https://humblebundle-a.akamaihd.net/static/hashed/e73d51c16b07d083026843ceda9c22056b9d04a2.gif" />');
  2934. var $steam_profile_links = $('.keyfield-content a[data-steam-id=' + key + ']');
  2935. var original_text = $steam_profile_links.first().text();
  2936. $steam_profile_links.html($spinner);
  2937.  
  2938. get_steam_profile(key, {
  2939. context: self,
  2940. success: function(profile_data) {
  2941. var link_text = profile_data['steam_name'] || original_text;
  2942. $steam_profile_links.text(link_text);
  2943. },
  2944. error: function(profile_data) {
  2945. $steam_profile_links.text(original_text);
  2946. },
  2947. });
  2948. });
  2949. });
  2950.  
  2951. // arch_toggle.js
  2952. $(document).ready(function() {
  2953. $('.arc-toggle input').change(function() {
  2954. var arc = $(this).val() == '64';
  2955. $(this).closest('.row').toggleClass('arc64',arc);
  2956. });
  2957. });
  2958. </script>
  2959. <script type="application/ld+json">
  2960. {
  2961. "@context": "http://schema.org",
  2962. "@type": "WebSite",
  2963. "url": "https://www.humblebundle.com/",
  2964. "potentialAction": {
  2965. "@type": "SearchAction",
  2966. "target": "https://www.humblebundle.com/store/search?search={search_term}",
  2967. "query-input": "required name=search_term"
  2968. }
  2969. }
  2970. </script>
  2971.  
  2972. </head>
  2973.  
  2974. <body>
  2975. <div class="page-wrap">
  2976.  
  2977.  
  2978.  
  2979.  
  2980.  
  2981.  
  2982.  
  2983. <div class="navigation-container">
  2984.  
  2985.  
  2986. <nav class="navbar">
  2987. <ul class="navbar-items-left">
  2988.  
  2989. <li class="navbar-item-header">
  2990. <a href="/">
  2991. <i class="navbar-item-header-icon hb hb-bundle"></i>
  2992. </a>
  2993. </li>
  2994. <script type='text/template' id='site-search-list-product'>
  2995. <div data-product='<%- machine_name %>' class='site-search-list-product product-<%- machine_name %>'>
  2996. <% var classes = 'product-details-link'; %>
  2997. <% if (on_sale) { %>
  2998. <% classes += ' product-' + sale_type + '-sale'; %>
  2999. <% } %>
  3000. <% if (type === 'bundle' || type === 'monthly') { %>
  3001. <a href='<%- bundle_path %>?hmb_source=search_bar' class='<%- classes %>'>
  3002. <% } else { %>
  3003. <a href='/store<%- link %>?hmb_source=search_bar' class='<%- classes %>'>
  3004. <% } %>
  3005. <div class='scrollable-wrapper' title='<%- human_name %>'>
  3006. <img class='product-image' src='<%- storefront_icon %>' alt=''/>
  3007. <div class='product-list-wrapper'>
  3008. <div class='wishlist-holder'></div>
  3009. <div class='buy-button'>
  3010. <div class='action-button'>
  3011. <% var button_classes = ''; %>
  3012. <% var button_text = ''; %>
  3013. <% if (on_sale) { %>
  3014. <% var percent_off = Math.round(100.0 * ((full_price[0] - current_price[0]) / full_price[0])); %>
  3015. <% } %>
  3016.  
  3017. <% var text_class = 'text'; %>
  3018. <% if (!can_be_purchased || type === 'bundle') { %>
  3019. <% button_text = 'View'; %>
  3020. <% } else { %>
  3021.  
  3022. <% if (type != 'bundle' && display_as_free) { %>
  3023. <% button_text = 'Free'; %>
  3024. <% button_classes += ' on-sale'; %>
  3025. <% } else { %>
  3026. <% button_text = button_text || moneyfmt(current_price[0], current_price[1], false, current_country !== 'US') %>
  3027. <% text_class += ' store-price'; %>
  3028. <% } %>
  3029. <% if (on_sale && !display_as_free) { %>
  3030. <span class='discount'>-<%= percent_off %>%</span>
  3031. <% button_classes += ' on-sale'; %>
  3032. <% } %>
  3033. <% button_classes += ' js-show-product-details'; %>
  3034. <% } %>
  3035. <button class='store-item-button js-action-button <%= button_classes %>'>
  3036. <i class='hb hb-shopping-cart'></i>
  3037. <span class='<%- text_class %>'>
  3038. <%= button_text %>
  3039. </span>
  3040. <span class='view-text'>View</span>
  3041. </button>
  3042. </div>
  3043. </div>
  3044. <div class='product-title-and-description'>
  3045. <h2 class='product-title'><%- human_name %></h2>
  3046. <% if (type === 'monthly') { %>
  3047. <h3 class="product-description"><%- description %></h3>
  3048. <% } %>
  3049. </div>
  3050. <div class='platforms-wrapper'>
  3051.  
  3052. <% if (cta_badge && cta_badge != 'n/a') { %>
  3053. <%= render_platform_icons(icon_dict).trim() %><span class='cta-text <%= cta_badge %>'><%= cta_text %></span>
  3054. <% } else { %>
  3055. <%= render_platform_icons(icon_dict) %>
  3056. <% } %>
  3057. </div>
  3058. </div>
  3059. </div>
  3060. </a>
  3061. </div>
  3062. </script>
  3063.  
  3064. <script type='text/template' id='site-search-empty-product'>
  3065. <div class='site-search-list-product'>
  3066. <div class='scrollable-wrapper empty-product'>
  3067. <div class='product-list-wrapper'>
  3068. <div class='product-title-and-description'>
  3069. <span class="product-title">Sorry, we could not find what you were looking for!</span>
  3070. </div>
  3071. </div>
  3072. </div>
  3073. </div>
  3074. </script>
  3075.  
  3076.  
  3077. <li class="navbar-item site-search">
  3078. <span class="js-site-minisearch site-minisearch-view">
  3079. <span class="js-site-searchbar-holder site-searchbar-holder">
  3080. <div class="searchbar">
  3081. <input class="js-site-search site-search" placeholder="Search Humble Bundle"/>
  3082. <i class="js-clear-site-search hb hb-search clear-search-button"></i>
  3083. </div>
  3084. </span>
  3085. <div class="js-site-search-results-holder site-search-results-holder">
  3086. <div class="js-site-search-results site-search-results"></div>
  3087. </div>
  3088. </span>
  3089. </li>
  3090.  
  3091.  
  3092.  
  3093. </ul>
  3094. <ul class="navbar-items-right">
  3095.  
  3096.  
  3097. <li class="navbar-item">
  3098. <a href='https://support.humblebundle.com' target="_blank">
  3099. <i class="navbar-item-icon hb hb-support"></i>
  3100. <span class="navbar-item-text">Support</span>
  3101. </a>
  3102. </li>
  3103. <li class="navbar-item">
  3104. <a href='http://blog.humblebundle.com/' target="_blank">
  3105. <i class="navbar-item-icon hb hb-file"></i>
  3106. <span class="navbar-item-text">Blog</span>
  3107. </a>
  3108. </li>
  3109.  
  3110. <li class="navbar-item-dropdown navbar-user-item">
  3111.  
  3112. <a class="navbar-item-dropdown-toggle" href="#">
  3113. <i class="navbar-item-icon hb hb-user"></i>
  3114. <span class="display-name">
  3115. <div class="display-name-container" title="jonasmarioschaefer@gmail.com">jonasmarioschaefer@gmail.com</div>
  3116. </span>
  3117. <i class="hb hb-caret-down"></i>
  3118. </a>
  3119.  
  3120.  
  3121. <div class="navbar-item-dropdown-container is-hidden">
  3122. <div class="navbar-item-dropdown-items">
  3123. <div class="navbar-item-dropdown-arrow"></div>
  3124. <ul>
  3125.  
  3126. <li class="navbar-item-dropdown-item">
  3127. <a href='/home/library'>
  3128. <i class="navbar-item-dropdown-icon hb hb-library"></i>
  3129. <span class="navbar-item-dropdown-text">Library</span>
  3130. </a>
  3131. </li>
  3132. <li class="navbar-item-dropdown-item">
  3133. <a href='/home/purchases'>
  3134. <i class="navbar-item-dropdown-icon hb hb-tier"></i>
  3135. <span class="navbar-item-dropdown-text">Purchases</span>
  3136. </a>
  3137. </li>
  3138. <li class="navbar-item-dropdown-item">
  3139. <a href='/home/keys'>
  3140. <i class="navbar-item-dropdown-icon hb hb-key"></i>
  3141. <span class="navbar-item-dropdown-text">Keys</span>
  3142. </a>
  3143. </li>
  3144. <li class="navbar-item-dropdown-item">
  3145. <a href='/home/coupons'>
  3146. <i class="navbar-item-dropdown-icon hb hb-scissors"></i>
  3147. <span class="navbar-item-dropdown-text">Coupons</span>
  3148. </a>
  3149. </li>
  3150. <li class="navbar-item-dropdown-item">
  3151. <a href='/store/wishlist'>
  3152. <i class="navbar-item-dropdown-icon hb hb-star"></i>
  3153. <span class="navbar-item-dropdown-text">Wish List</span>
  3154. </a>
  3155. </li>
  3156.  
  3157. <li class="navbar-item-dropdown-item">
  3158. <a href='/user/wallet'>
  3159. <i class="navbar-item-dropdown-icon hb hb-money"></i>
  3160. <span class="navbar-item-dropdown-text">Wallet</span>
  3161. </a>
  3162. </li>
  3163.  
  3164. <li class="navbar-item-dropdown-item">
  3165. <a href='/user/settings'>
  3166. <i class="navbar-item-dropdown-icon hb hb-cog"></i>
  3167. <span class="navbar-item-dropdown-text">Settings</span>
  3168. </a>
  3169. </li>
  3170.  
  3171.  
  3172. <li class="navbar-item-dropdown-item">
  3173. <form id="navbar-logout-form" action="/logout?goto=/downloads&amp;qs=key%3DwWuG2hMxeynmcRrC" method="POST">
  3174. <input type='hidden' class='csrftoken' name='_le_csrf_token' value='wpOLiPSCcKd_Z-T--1-1506712425' />
  3175. <a href="#" onclick="document.getElementById('navbar-logout-form').submit(); return false;">
  3176. <i class="navbar-item-dropdown-icon hb hb-sign-out"></i>
  3177. <span class="navbar-item-dropdown-text">Logout</span>
  3178. </a>
  3179. </form>
  3180. </li>
  3181. </ul>
  3182. </div>
  3183. </div>
  3184.  
  3185. </li>
  3186.  
  3187.  
  3188.  
  3189. </ul>
  3190. </nav>
  3191. </div>
  3192. <div class="base-main-wrapper">
  3193.  
  3194.  
  3195. <nav class="tabbar ">
  3196. <a class="tabbar-tab
  3197.  
  3198. "
  3199. href="/">Game Bundles
  3200. </a><a class="tabbar-tab
  3201.  
  3202. "
  3203. href="/books">Book Bundles
  3204. </a><a class="tabbar-tab
  3205.  
  3206. "
  3207. href="/monthly">Monthly
  3208. </a><a class="tabbar-tab
  3209.  
  3210. "
  3211. href="/store">Store
  3212. </a>
  3213. </nav>
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220. <div id="page-top-messages"></div><div class="page_title"></div>
  3221. <div class="inner-main-wrapper">
  3222.  
  3223.  
  3224.  
  3225.  
  3226. <div class="js-admin-edit"
  3227. data-entity-kind="product"
  3228.  
  3229. data-machine-name="haikasoru_bookbundle"
  3230. >
  3231. </div>
  3232.  
  3233.  
  3234.  
  3235. <div class='humble-banner'>
  3236. <a href='/books/haikasoru-books?utm_source=download_page'>
  3237. <h3>
  3238. <img class='banner-logo' src='https://humblebundle.imgix.net/misc/files/hashed/0b024b0ee064abd7c2351cc4b1a5019be4d52a3e.png?auto=format&lossless=1&ixlib=python-0.2.0&s=fd18927645653a22ffd6f0c680ad8039' alt='Humble Book Bundle: Haikasoru presented by VIZ Media' />
  3239. <p>Also happening now:</p>
  3240. </h3>
  3241. <h4>Pay what you want for awesome Japanese science fiction books and support charity!</h4>
  3242. </a>
  3243. </div>
  3244.  
  3245.  
  3246.  
  3247. <div class="js-admin-edit"
  3248. data-entity-kind="product"
  3249.  
  3250. data-machine-name="wiley_bookbundle"
  3251. >
  3252. </div>
  3253.  
  3254.  
  3255. <div id='dlheader'>
  3256.  
  3257.  
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264.  
  3265. <a id='logo' href='/books/cybersecurity-wiley'><img src='https://humblebundle.imgix.net/misc/files/hashed/80b534eb691f234833835f47339eb3ddcfeee67b.png?auto=format&lossless=1&ixlib=python-0.2.0&s=99d591567fbb9ee9e84af1f371aa824d' /></a>
  3266.  
  3267. </div>
  3268.  
  3269.  
  3270. <div id='download-page-wrapper'>
  3271. <div id='main'>
  3272. <div id='papers-top'></div>
  3273. <div id='papers-mid'></div>
  3274. <div id='papers-bottom'></div>
  3275. <div id='papers-content'>
  3276.  
  3277.  
  3278.  
  3279. <div class='already-claimed' style="float:right;">This page is claimed by <strong>you</strong>.</div>
  3280.  
  3281. <div id='headertext'>
  3282. <div id='hibtext'>
  3283.  
  3284. Thanks for purchasing the Humble Book Bundle: Cybersecurity presented by Wiley!<div class="js-admin-edit"
  3285. data-entity-kind="product"
  3286.  
  3287. data-machine-name="wiley_bookbundle"
  3288. >
  3289. </div>
  3290.  
  3291. </div>
  3292. <div id='spiel'>
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299. <p>
  3300. Follow <a href='http://www.twitter.com/humble'>@humble</a> on Twitter, Google+, and Facebook for the latest Humble Bundle status reports:
  3301. </p>
  3302. <div class="download-social-alignment">
  3303. <a href="https://twitter.com/humble" class="twitter-follow-button" data-show-count="true" data-size="large">Follow @humble</a>
  3304. <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
  3305. <!-- Place this tag where you want the widget to render. -->
  3306. &nbsp;&nbsp;&nbsp;&nbsp;
  3307. <div class="g-follow" data-annotation="bubble" data-height="24" data-href="//plus.google.com/103555773917939181320" data-rel="publisher"></div>
  3308. &nbsp;&nbsp;&nbsp;&nbsp;
  3309. <div class="fb-like" data-href="https://www.facebook.com/humblebundle" data-width="250px" data-colorscheme="light" data-layout="standard" data-action="like" data-show-faces="false" data-send="false"></div>
  3310. </div>
  3311.  
  3312. </div>
  3313. </div>
  3314.  
  3315. <div class="js-coupon-whitebox-holder"></div>
  3316. <div class="js-credit-whitebox-holder"></div>
  3317.  
  3318.  
  3319.  
  3320.  
  3321.  
  3322.  
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331. <div class='generic-popup outer-shadow' id='confirm-content-event-choice-dialog'>
  3332. <div class='generic-popup content'>
  3333. <h1><span class='main-base-arrow'></span>Confirm Choice</h1>
  3334. <form action='/humbler/choosecontent' method='post' data-input-prefix='confirm-content-event-choice-'>
  3335. <input type='hidden' name='gamekey' value='wWuG2hMxeynmcRrC'>
  3336. <input type='hidden' name='parent_identifier' value=''>
  3337. <input type='hidden' name='chosen_identifier' value=''>
  3338.  
  3339. <div class='message-holder'>Once you make your choice, you will not be able to change it. Are you sure you want to choose this option?</div>
  3340. <div class='no-center'>
  3341. <span class='input-holder'><span id='confirm-content-event-choice-dummy'></span></span>
  3342. <div class='button-holder'>
  3343. <a class='button-link cancel' href='#' data-goto=''><span class='gray-button'>Cancel</span></a>
  3344. <a class='button-link green-button submit js-submit' href='#'>Confirm</a>
  3345. </div>
  3346. <div class='clearfix'></div>
  3347. </div>
  3348. </form>
  3349. </div>
  3350. </div>
  3351. <script type='text/javascript'>
  3352. require(['account/accountModals'], function(AccountModals) {
  3353. $(function(){
  3354.  
  3355. $('.js-choose-content-form').submit(function(e) {
  3356. e.preventDefault();
  3357.  
  3358. var $form = $(this);
  3359. var $dialog = $('#confirm-content-event-choice-dialog');
  3360. if ($dialog.closest('.grayout').length == 0) {
  3361. var marginTop = '-' + ($dialog.height() / 2) + 'px';
  3362. $dialog.css('margin-top', marginTop).fadeIn();
  3363. $dialog.appendTo($('.grayout'));
  3364. } else {
  3365. $dialog.show();
  3366. }
  3367. $('.grayout').fadeIn();
  3368.  
  3369. $dialog.find('input[name=parent_identifier]').val($form.find('input[name=parent_identifier]').val());
  3370. $dialog.find('input[name=chosen_identifier]').val($form.find('input[name=chosen_identifier]:checked').val());
  3371. });
  3372.  
  3373. $('#confirm-content-event-choice-dialog form .js-submit').click(function (event) {
  3374. event.preventDefault();
  3375. var $form = $(event.target).closest('form'),
  3376. url = $form.attr('action'),
  3377. data = $form.serialize();
  3378.  
  3379. $.ajax({
  3380. type: 'POST',
  3381. url: url,
  3382. data: data,
  3383. dataType: 'json',
  3384.  
  3385. success: function(data) {
  3386. if (data.success) {
  3387. if (data.force_refresh) {
  3388. window.location.reload();
  3389. }
  3390. } else {
  3391. if (data.errors) {
  3392. var errorStr = '';
  3393. for (var fieldName in data.errors) {
  3394. errorStr = data.errors[fieldName][0];
  3395. }
  3396. if (errorStr) {
  3397. AccountModals.displayDialog('Error', errorStr, data.goto);
  3398. }
  3399. }
  3400. }
  3401. }
  3402. });
  3403. });
  3404. });
  3405. });
  3406. </script>
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412. <div class="js-asm-switcher-holder asm-download-page"></div>
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419. <div class="js-subproduct-whitebox-holder"></div>
  3420.  
  3421.  
  3422.  
  3423.  
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.  
  3430.  
  3431.  
  3432.  
  3433.  
  3434. <script id='gift-confirm-dialog-template' type='text/template'>
  3435. <div class='generic-popup outer-shadow' id='gift-confirm-dialog'>
  3436. <div class='generic-popup content'>
  3437. <h1 class='noimg'>Gift this item?</h1>
  3438. <h2 class='subtitle'>Gifting this item removes it from your order and turns it into a giftable link. You can't undo this action.</h2>
  3439. <div class='no-center'>
  3440. <div class='button-holder'>
  3441. <a class='button-link cancel' href='#' data-goto=''><span class='gray-button'>Cancel</span></a>
  3442. <a class='button-link submit' href='#'><span class='green-button'>Create Gift Link</span></a>
  3443. </div>
  3444. <div class='clearfix'></div>
  3445. </div>
  3446. </div>
  3447. </div>
  3448. </script>
  3449.  
  3450.  
  3451.  
  3452.  
  3453.  
  3454.  
  3455.  
  3456.  
  3457. <div class='whitebox small'>
  3458. <div class='whitetop'></div>
  3459. <div class='whitemid'></div>
  3460. <div class='whitebottom'></div>
  3461. <div class='whitecontent'>
  3462. <div class='ebookinstructions' id='kindleinstructions'>
  3463. <a href="#" class='js-slide-down-trigger slide-down-trigger'>Send the eBooks to my Kindle or Kindle reader</a>
  3464. <div class="slide-down">
  3465. <h2>Via USB</h2>
  3466. <div class='stepholder'>
  3467. <div class='step num1'></div>
  3468. <div class='steptext'>
  3469. <h3>Download your desired eBooks below as MOBI</h3>
  3470. </div>
  3471. </div>
  3472. <div class='stepholder'>
  3473. <div class='step num2'></div>
  3474. <div class='steptext'>
  3475. <h3>Follow <a href='http://www.amazon.com/gp/help/customer/display.html?nodeId=200798780' target='_blank'>Amazon's official instructions on transferring your eBooks via USB</a></h3>
  3476. </div>
  3477. </div>
  3478.  
  3479. <h2>Via Email</h2>
  3480. <div class='stepholder'>
  3481. <div class='step'></div>
  3482. <div class='steptext'>
  3483. <h3>Warning: Graphic novels must be transferred via USB due to their large file size of 10MB or more.</h3>
  3484. </div>
  3485. </div>
  3486. <div class='stepholder'>
  3487. <div class='step num1'></div>
  3488. <div class='steptext'>
  3489. <h3>Ensure your device is connected to the internet</h3>
  3490. <p>To avoid mobile data charges, we recommend using Wi-Fi to transfer the eBooks to your device.</p>
  3491. </div>
  3492. </div>
  3493. <div class='stepholder'>
  3494. <div class='step num2'></div>
  3495. <div class='steptext'>
  3496. <h3>Allow Humble Bundle to email your Kindle account</h3>
  3497. <p>
  3498. Visit Amazon's <a href='https://www.amazon.com/gp/digital/fiona/manage?ie=UTF8' target='_blank'>Manage Your Kindle</a> page and select the Settings tab.
  3499. Locate the section titled <em><strong>Approved Personal Document E-mail List</strong></em>, click <em><strong>Add a new approved e-mail address</strong></em>, and type:
  3500. <pre class='pre-box'>kindle@humblebundle.com</pre>
  3501. </p>
  3502. </div>
  3503. </div>
  3504. <div class='stepholder'>
  3505. <div class='step num3'></div>
  3506. <div class='steptext'>
  3507. <h3>Select which eBooks to Email</h3>
  3508. <p>
  3509. From the <a href='https://www.amazon.com/mn/dcw/myx.html#/home/settings/payment' target='_blank'>Settings</a> page above, locate your Kindle email ending in @kindle.com from the <em><strong>Send-to-Kindle E-Mail Settings</strong></em> section and enter it into the input box below.
  3510. </p>
  3511. <p>
  3512. Please note that you can now send individual titles to your Kindle!
  3513. Simply select which book(s) you would like to send below before hitting the "Send Email" button.
  3514. If you experience issues receiving your eBooks (sometimes caused by certain types of eReaders and the size of the eBooks), you may want to use this option.
  3515. </p>
  3516. <p>
  3517. Please be aware that only certain titles are listed and available to send using this feature due to a 10MB size restriction.
  3518. </p>
  3519. <form method='POST' action='/util/kindle' class='sms-form' id='ebook-email-form'>
  3520. <input type='hidden' name='key' value='wWuG2hMxeynmcRrC'>
  3521. <div class='clearfix'></div>
  3522. <input id='email-kindle' class='classy-input' type='text' name='email_prefix' value='' placeholder='Your kindle address'> <strong>@free.kindle.com</strong>
  3523. <input type='submit' id='send-ebook-email' class='button-link green-button' value='Send Email'>
  3524. <div class='clearfix'></div>
  3525. <div id='send-email-message'></div>
  3526. <div class='clearfix'></div>
  3527. <p class='email-details'>
  3528. We use the <em>@free.kindle.com</em> email domain <a href='http://www.amazon.com/gp/help/customer/display.html/?nodeId=200767340#fees' target='_blank'>to avoid charging you</a>.
  3529. </p>
  3530. <br>
  3531. </form>
  3532. <p>Try syncing your device with the Kindle server if eBooks are not appearing.</p>
  3533. </div>
  3534. </div>
  3535. </div>
  3536. </div>
  3537. </div>
  3538. </div>
  3539.  
  3540.  
  3541. <div class='whitebox small'>
  3542. <div class='whitetop'></div>
  3543. <div class='whitemid'></div>
  3544. <div class='whitebottom'></div>
  3545. <div class='whitecontent'>
  3546. <div class='ebookinstructions' id='otherebookinstructions'>
  3547.  
  3548.  
  3549. <a href='https://support.humblebundle.com/hc/en-us/articles/202712300' target='_blank' class='open-in-external-window'>
  3550.  
  3551. Instructions for Android, Nook, Kindle, and iOS devices</a>
  3552. </div>
  3553. </div>
  3554. </div>
  3555.  
  3556.  
  3557.  
  3558.  
  3559.  
  3560. <div class="js-gamelist-holder"></div>
  3561.  
  3562.  
  3563.  
  3564.  
  3565. <div id='share-box'>
  3566. <p>
  3567. While you are waiting for your downloads to complete, please consider spreading the word!
  3568. </p>
  3569. <div id='normal'>
  3570.  
  3571.  
  3572.  
  3573.  
  3574.  
  3575. <div class='social-media-shares'>
  3576.  
  3577.  
  3578. <div class='sharer l twittershare'>
  3579. <a href='http://twitter.com/share?url=https%3A//www.humblebundle.com/books/cybersecurity-wiley&amp;via=humble&amp;text=Pay%20what%20you%20want%20for%20cybersecurity%20ebooks%20and%20support%20charity%21'
  3580. class='twitter-share-button' data-url='https://www.humblebundle.com/books/cybersecurity-wiley'
  3581. data-text='Pay%20what%20you%20want%20for%20cybersecurity%20ebooks%20and%20support%20charity%21'
  3582. data-count='horizontal' data-via='humble'></a>
  3583. </div>
  3584.  
  3585.  
  3586.  
  3587.  
  3588. <div class='sharer l fb'>
  3589. <fb:like href='https://www.humblebundle.com/books/cybersecurity-wiley' send='false' layout='button_count' width='90' show_faces='false' font='arial'></fb:like>
  3590. </div>
  3591.  
  3592.  
  3593.  
  3594.  
  3595. <div class='sharer l plus'>
  3596. <g:plusone size='medium' href='https://www.humblebundle.com/books/cybersecurity-wiley'></g:plusone>
  3597. </div>
  3598.  
  3599.  
  3600.  
  3601.  
  3602. <script>
  3603. reddit_url = 'https://www.humblebundle.com/books/cybersecurity-wiley';
  3604. reddit_target = 'books';
  3605. </script>
  3606. <div class='sharer l reddit'></div>
  3607. <script>
  3608.  
  3609.  
  3610. function run_once(name, f) {
  3611. if (window["run_once_" + name]) {
  3612. return;
  3613. } else {
  3614. f();
  3615. window["run_once_" + name] = true;
  3616. }
  3617. }
  3618.  
  3619. $(window).load(function() {
  3620. var f = (function() {
  3621. if ('https:' == document.location.protocol) {
  3622. var base_url = 'https://redditstatic.s3.amazonaws.com'
  3623. } else {
  3624. var base_url = 'http://www.reddit.com/static'
  3625. }
  3626.  
  3627. var write_string="<iframe src=\"" + base_url + "/button/button1.html?width=120&url=";
  3628.  
  3629. if (window.reddit_url) {
  3630. write_string += encodeURIComponent(reddit_url);
  3631. }
  3632. else {
  3633. write_string += encodeURIComponent(window.location.href);
  3634. }
  3635. if (window.reddit_title) {
  3636. write_string += '&title=' + encodeURIComponent(window.reddit_title);
  3637. }
  3638. if (window.reddit_target) {
  3639. write_string += '&sr=' + encodeURIComponent(window.reddit_target);
  3640. }
  3641. if (window.reddit_css) {
  3642. write_string += '&css=' + encodeURIComponent(window.reddit_css);
  3643. }
  3644. if (window.reddit_bgcolor) {
  3645. write_string += '&bgcolor=' + encodeURIComponent(window.reddit_bgcolor);
  3646. }
  3647. if (window.reddit_bordercolor) {
  3648. write_string += '&bordercolor=' + encodeURIComponent(window.reddit_bordercolor);
  3649. }
  3650. if (window.reddit_newwindow) {
  3651. write_string += '&newwindow=' + encodeURIComponent(window.reddit_newwindow);}
  3652. write_string += "\" height=\"22\" width=\"120\" scrolling='no' frameborder='0'></iframe>";
  3653. $("div.reddit.sharer").append($(write_string));
  3654. });
  3655.  
  3656. run_once("reddit", f);
  3657. });
  3658. </script>
  3659.  
  3660. </div></div>
  3661. <div style='clear:both;'></div>
  3662. </div>
  3663.  
  3664.  
  3665.  
  3666.  
  3667.  
  3668.  
  3669. <script type='text/template' id='stats-template'>
  3670. <div class='stats-box'>
  3671. <div class='stats-col-1-of-3'>
  3672. <h4>Numbers</h4>
  3673. <dl>
  3674.  
  3675. <dt>Total payments:</dt>
  3676. <dd class='total_contributed'></dd>
  3677. <dt>Number of purchases:</dt>
  3678. <dd class='total_contributions'></dd>
  3679. <dt>Average purchase:</dt>
  3680. <dd class='average_contribution'></dd>
  3681.  
  3682. <dt>Average Windows:</dt>
  3683. <dd class='average_windows'></dd>
  3684. <dt>Average Mac:</dt>
  3685. <dd class='average_mac'></dd>
  3686. <dt>Average Linux:</dt>
  3687. <dd class='average_linux'></dd>
  3688.  
  3689.  
  3690. </dl>
  3691. <p class='pubnub-promo'><i class="hb hb-info"></i> Real-time updating by <a href='http://www.pubnub.com/' target='_blank' title="This is our humble estimate for payments that are coming in. It does not account for merchant fees, canceled payments, or other merchant related issues.">PubNub</a></p>
  3692. </div>
  3693. <div class='stats-col-2-of-3'>
  3694. <h4>Total Paid by Platform</h4>
  3695.  
  3696.  
  3697.  
  3698. <img class='piechart'
  3699. data-color-src='//chart.googleapis.com/chart?cht=p&amp;chs=150x150&amp;chco=ff8800|b90f00|001fba&amp;chd=t:<%= percent_mac %>,<%= percent_windows %>,<%= percent_linux %>&amp;chf=bg,s,00000000&amp;chdlp=r'
  3700. data-grayscale-src='//chart.googleapis.com/chart?cht=p&amp;chs=150x150&amp;chco=999999|666666|333333&amp;chd=t:<%= percent_mac %>,<%= percent_windows %>,<%= percent_linux %>&amp;chf=bg,s,00000000&amp;chdlp=r'
  3701. alt='Mac, Windows, and Linux total revenue breakdown' />
  3702. <ul class='chartlegend'>
  3703. <li><span class='chartcolor' data-color='#ff8800' data-grayscale-color='#999999'></span><span>Mac</span></li>
  3704. <li><span class='chartcolor' data-color='#b90f00' data-grayscale-color='#666666'></span><span>Windows</span></li>
  3705. <li><span class='chartcolor' data-color='#001fba' data-grayscale-color='#333333'></span><span>Linux</span></li>
  3706. </ul>
  3707. </div>
  3708. <div class='stats-col-3-of-3'>
  3709. <h4>Top Contributors</h4>
  3710. <dl class='contributor-list'>
  3711. <% for (var ii = 0; ii < leaderboard_data.length; ii++ ) { %>
  3712. <dt title='<%= leaderboard_data[ii].name %>'>
  3713. <span class='number'><%- ii + 1 %>.</span>
  3714. <span class='contributor-name'><%= leaderboard_data[ii].name %></span>
  3715. </dt>
  3716. <dd><%- leaderboard_data[ii].amount %></dd>
  3717. <% } %>
  3718. </dl>
  3719. </div>
  3720. </div>
  3721. </script>
  3722. <script type='application/json' id='leaderboard-data'>
  3723. [{"amount": "$555.00", "name": "Anonymous"}, {"amount": "$325.00", "name": "Anonymous"}, {"amount": "$313.37", "name": "Premonition.io"}, {"amount": "$300.00", "name": "Anonymous"}, {"amount": "$250.00", "name": "@seanmcelroy"}, {"amount": "$223.00", "name": "Nobody"}, {"amount": "$213.37", "name": "Anonymous"}, {"amount": "$200.00", "name": "Anonymous"}, {"amount": "$170.00", "name": "Anonymous"}, {"amount": "$150.00", "name": "@kingbytewolf"}]
  3724. </script>
  3725. <div class='whitebox'>
  3726. <div class='whitetop'></div>
  3727. <div class='whitemid'></div>
  3728. <div class='whitebottom'></div>
  3729. <div class='whitecontent'>
  3730. <a name='stats'></a>
  3731. <div id='stats-holder'></div>
  3732. </div>
  3733. </div>
  3734.  
  3735.  
  3736.  
  3737.  
  3738. <div class='whitebox'>
  3739. <div class='whitetop'></div>
  3740. <div class='whitemid'></div>
  3741. <div class='whitebottom'></div>
  3742. <div class='whitecontent'>
  3743. <form id='settings' action='/humbler/update/wWuG2hMxeynmcRrC' method='post'>
  3744. <div style='text-align:center;'>Your Humble Bundle settings:</div>
  3745.  
  3746. <div class='already-claimed' style="float:right;">This page is claimed by <strong>you</strong>.</div>
  3747.  
  3748.  
  3749.  
  3750. <div>
  3751. <label><input type='checkbox' name='leaderboard' value='false' /> <span>Please remove me from the leaderboard</span></label>
  3752. <br />
  3753. <a href='https://support.humblebundle.com/hc/en-us/articles/202421394-top-contributor-faq' target='_blank'>Top Contributor FAQ</a>
  3754. </div>
  3755.  
  3756. <div class='submitholder'>
  3757. <input type='submit' value='Update' />
  3758. <div class='settings indicator'></div>
  3759. </div>
  3760. </form>
  3761.  
  3762. </div>
  3763. <script type="text/javascript">
  3764. // form submit
  3765. $(document).ready(function(){
  3766. var $form = $('#settings');
  3767. var $indicator = $form.find('.indicator');
  3768. $form.css({'visibility':'visible'});
  3769. $form.submit(function(e){
  3770. e.preventDefault();
  3771. $indicator.addClass('on');
  3772. var serialized = $form.serialize();
  3773. var url = $form.attr('action');
  3774. $.ajax({
  3775. type: 'POST',
  3776. url: url,
  3777. data: serialized,
  3778. success: function() {
  3779. $indicator.removeClass('on');
  3780. show_flash('Settings updated!');
  3781. },
  3782. error: function() {
  3783. $indicator.removeClass('on');
  3784. show_flash('Error updating settings!');
  3785. }
  3786. });
  3787. });
  3788. });
  3789. </script>
  3790. </div>
  3791.  
  3792.  
  3793.  
  3794. </div>
  3795. </div>
  3796. <div class='clear'></div>
  3797. </div>
  3798.  
  3799. <script type="text/javascript">
  3800. $(function () { ga('send', 'pageview', '/downloadpage'); })
  3801. </script>
  3802. </div>
  3803.  
  3804. </div><script id='asm-switcher-template' type="text/template">
  3805. <h1 class="heading">Humble asm.js Games</h1>
  3806. <img src="https://humblebundle-a.akamaihd.net/static/hashed/47c1990235eb2e1f62be175ae3d6cf187f8ad457.png" alt="expand" class="js-toggle-collapsable toggle-collapsable visible"/>
  3807. <img src="https://humblebundle-a.akamaihd.net/static/hashed/6681e6d3b3e00fbf9d3142767002d6420f1af623.png" alt="collapse" class="js-toggle-collapsable toggle-collapsable "/>
  3808.  
  3809.  
  3810. <i class="js-do-confirm-close do-confirm-close hb hb-times"></i>
  3811. <div class="collapsable">
  3812. <div class="player-panel">
  3813. <%= playerPanel %>
  3814. </div>
  3815. <% if (recFirefoxUpdate) { %>
  3816. <div class="rec-firefox-update">
  3817. <a href="https://www.getfirefox.com/">Get the latest version of Mozilla Firefox to get the best browser gaming experience possible.</a>
  3818. </div>
  3819. <% } %>
  3820. <div class="game-button-panel"></div>
  3821. </div>
  3822. </script>
  3823.  
  3824.  
  3825. <script id='asm-switcher-player-panel' type="text/template">
  3826. <div class="modal-holder"></div>
  3827. <div class="curtain"></div>
  3828. <div class="dialogs">
  3829. <img class='dialog spinner' src="https://humblebundle-a.akamaihd.net/static/hashed/2de55388a5f1201232a4c2b6a8d4f83b5006f418.gif" alt=""/>
  3830. </div>
  3831. <div class="iframe-holder" style="background: #000"></div>
  3832. </script>
  3833.  
  3834. <script id='asm-switcher-game-list' type="text/template">
  3835. <div class="game-list">
  3836. <% for(var game_machine_name in games) { %>
  3837. <% var gameDict = games[game_machine_name]; %>
  3838. <div class="game-button asm-switch <% if (machineName === game_machine_name) { %>selected<% } %>" data-machine-name="<%- game_machine_name %>">
  3839. <p title="<%- gameDict.human_name %>"><%- gameDict.human_name %></p>
  3840. <div class='progress-bar'>
  3841. <div class='progress-done'></div>
  3842. </div>
  3843. </div>
  3844. <% } %>
  3845. </div>
  3846. </script>
  3847.  
  3848.  
  3849. <script id="js-download-list-template" type="text/template">
  3850. <div class="js-platform-chooser-holder"></div>
  3851. <div class="js-pre-downloads-holder"></div>
  3852. <div class="js-progress-bar-holder"></div>
  3853. <div class="js-all-downloads-holder"></div>
  3854. <div class="error-holder js-error-holder"></div>
  3855. </script>
  3856.  
  3857. <script id="js-gamelist-message-template" type="text/template">
  3858. <div class="custom-download-text">
  3859. <%= download_struct.message %>
  3860. </div>
  3861. </script>
  3862.  
  3863. <script id='js-platform-chooser-template' type="text/template">
  3864. <div class="js-platform-chooser platform-chooser">
  3865. <div class="dlplatform">
  3866. <div class='textlabel'>Choose platform:</div>
  3867. <div class='dlplatform-list'>
  3868. <% for (var i in platforms) { %>
  3869. <% var platform = platforms[i] %>
  3870. <% var platform_obj = allPlatforms[platform] %>
  3871. <div data-platform='<%= platform %>' class='flexbtn<% if (platform == activePlatform) { %> active<% } %> <%= platform %>'>
  3872. <div class='icon'></div>
  3873. <div class='right'></div>
  3874. <span class='label'><%= platform_obj.human_name %></span><a class='a' href='#'><%= platform_obj.human_name %></a>
  3875. </div>
  3876. <% } %>
  3877. </div>
  3878. </div>
  3879. <div style='clear:both;padding:4px;'></div>
  3880. <% if (hasBittorrent) { %>
  3881. <div class='dltype'>
  3882. <div class='textlabel'>Choose download type:
  3883. </div>
  3884. <div data-type='direct' class='flexbtn direct active'>
  3885. <div class='icon'></div>
  3886. <div class='right'></div>
  3887. <span class='label'>Direct link</span><a class='a' href='#'>Direct link</a>
  3888. </div>
  3889. <div data-type='bittorrent'
  3890. class='flexbtn bittorrent'>
  3891. <div class='icon'></div>
  3892. <div class='right'></div>
  3893. <span class='label'>BitTorrent</span><a class='a' href='#'>BitTorrent</a>
  3894. </div>
  3895. </div>
  3896. <div style='clear:both;padding:4px;'></div>
  3897. <% } %>
  3898. </div>
  3899. <div class="clear-fix"></div>
  3900. </script>
  3901.  
  3902. <script id='js-gamelist-loading-template' type="text/template">
  3903. <div class="loading">
  3904. <h1>Loading...</h1>
  3905. <img src="https://humblebundle-a.akamaihd.net/static/hashed/26faf55c6e36ba3b1a57f9001942059fe05050f2.gif" alt=""/>
  3906. </div>
  3907. </script>
  3908.  
  3909. <script id='js-progress-bar-template' type="text/template">
  3910. <div id="download-page-progress-bar">
  3911. <div id="download-page-outer-progress">
  3912. <div id="download-page-inner-progress"></div>
  3913. </div>
  3914. <div id="download-page-progress-text"></div>
  3915. </div>
  3916. </script>
  3917.  
  3918. <script id='js-android-instructions-template' type="text/template">
  3919. <div class='custominstructions instructionsteps android hide_downloads'>
  3920.  
  3921.  
  3922.  
  3923. <h3>Android Installation Instructions</h3>
  3924.  
  3925. <p>Follow these instructions to <a href="/app" target="_blank">install the Humble Bundle app.</a></p>
  3926.  
  3927. <p>You can also access your downloads by opening your order page on your mobile device.</p>
  3928.  
  3929. <p>Enter your phone number below and we will send you the link via SMS:</p>
  3930.  
  3931.  
  3932.  
  3933.  
  3934. <form id="sms-form" class="sms-form" method="POST" action="/util/sms" >
  3935. <input type="hidden" name="channel" value="BUm1h9svg4KLn3Ff">
  3936.  
  3937.  
  3938. <input type="hidden" name="key" value="wWuG2hMxeynmcRrC">
  3939.  
  3940.  
  3941. <label class="form-label country-code-label" for="country-code">country code</label>
  3942. <label class="form-label phone-number-label" for="phone-number">phone number <span class="area-code">(including area code)</span></label>
  3943. <span class="plus-sign">+</span>
  3944. <input id="country-code" class="country-code-field classy-input" type="number" name="countrycode" value="1">
  3945. <input id="phone-number" class="phone-number-field classy-input" type="tel" name="number" value="">
  3946. <input id="send-sms" class="send-sms-button green-button" type="submit" value="Send SMS">
  3947.  
  3948. <p class="sms-disclaimer">Standard SMS rates may apply.</p>
  3949.  
  3950. <p id="sms-message" class="sms-message"></p>
  3951. </form>
  3952. <div class='clear'></div>
  3953. <p>Or, use the widget below to re-send the link to your email address:</p>
  3954. <form id='send-email-form' method='POST' action='/util/sendemail' class='sms-form'>
  3955. <input type='hidden' name='key' value='wWuG2hMxeynmcRrC'>
  3956. <label for='email-truncated'>The email will be sent to the address you entered when you purchased the bundle.</label>
  3957. <div class='clearfix'></div>
  3958.  
  3959. <input class='classy-input' id='email-truncated' disabled='disabled' type='text' name='number' value='jo...@...il.com'>
  3960. <input type='submit' id='send-email' class='button-link green-button' value='Send Email'>
  3961. <div class='clearfix'></div>
  3962. <div id='send-email-message'></div>
  3963. <div class='clearfix'></div>
  3964. </form>
  3965.  
  3966. <p>If you would like to install the games using another method, you
  3967. can use the links below to download the APK files to your computer:</p>
  3968.  
  3969. <div id='show_android_binaries'>
  3970. <a href='#' class='expandkeys'>Show Android Binaries</a>
  3971. <div class='clear'></div>
  3972. </div>
  3973.  
  3974. <script type='text/javascript'>
  3975. $(document).ready(function () {
  3976. function isValidPhoneNumber(numberStr) {
  3977. var rePattern = /[^\d]/;
  3978. return numberStr && (numberStr.length > 3) && !numberStr.match(rePattern);
  3979. }
  3980.  
  3981. function getFullNumber() {
  3982. var localnumber = $('#phone-number').val().toString().replace(/[\-\s\(\)]/g, '');
  3983. var countrycode = $('#country-code').val().toString().replace(/[\-\s\(\)]/g, '');
  3984. return countrycode + localnumber;
  3985. }
  3986.  
  3987. var $smsForm = $('#sms-form');
  3988. var INVALID_PHONE = 'Please enter your phone number using only the digits 0 through 9.';
  3989.  
  3990. $smsForm.submit(function(e) {
  3991. e.preventDefault();
  3992.  
  3993. $('#sms-message').text('').hide();
  3994. var assembled = getFullNumber();
  3995. if (isValidPhoneNumber(assembled)) {
  3996. $('#sms-message').text('Sending...').show();
  3997.  
  3998. $.ajax({
  3999. url: $smsForm.attr('action'),
  4000. dataType: 'json',
  4001. type: 'POST',
  4002. data: $smsForm.serialize(),
  4003. success: function(data) {
  4004. if (data && !data.success) {
  4005. var message = '';
  4006. if (data.error === 'noorder') {
  4007. message = 'Your key(s) are invalid.';
  4008. } else if (data.error === 'nonumber') {
  4009. message = INVALID_PHONE;
  4010. } else if (data.error === 'ratelimited') {
  4011. message = 'You are sending too many SMS messages. Please try again in 24 hours.';
  4012. } else {
  4013. message = 'Unknown error';
  4014. }
  4015. $('#sms-message').text('Error: ' + message).show();
  4016. } else {
  4017. $('#sms-message').text('').hide();
  4018. }
  4019. },
  4020. error: function(data) {
  4021. $('#sms-message').text('There was an unknown error while sending the SMS.').show();
  4022. }
  4023. });
  4024. }
  4025. });
  4026.  
  4027. var $smsMessage = $('#sms-message');
  4028. pubnub_client.subscribe({
  4029. 'channel': 'BUm1h9svg4KLn3Ffsmsresult',
  4030. 'callback': function(message) {
  4031. if (console) console.log('got a message');
  4032. var assembled = getFullNumber();
  4033.  
  4034. $smsMessage.css('padding-top', '10px');
  4035. if (message.success) {
  4036. $smsMessage.text('Success! The link was sent to +' + assembled +' and should be arriving shortly.');
  4037. } else {
  4038. $smsMessage.text('We are having trouble sending the message, but will keep trying.');
  4039. }
  4040. }
  4041. });
  4042. });
  4043. var $emailForm = $('#send-email-form');
  4044.  
  4045. $emailForm.submit(function (e) {
  4046. e.preventDefault();
  4047. $('#send-email-message').text('').css('padding-top','0');
  4048. $.post(
  4049. $emailForm.attr('action'),
  4050. $emailForm.serialize(),
  4051. function(data) {
  4052. data = $.parseJSON(data);
  4053. if (!data.success) {
  4054. var message = '';
  4055. if (data.error === 'noorder') {
  4056. message = 'Your key(s) are invalid.';
  4057. } else if (data.error == 'noemail') {
  4058. message = 'Your email address is invalid.';
  4059. } else if (data.error == 'ratelimited') {
  4060. message = 'You are sending emails too quickly. Please try again in 24 hours.';
  4061. } else {
  4062. message = 'Unknown error';
  4063. }
  4064. $('#send-email-message').text('There was an error: ' + message).css('padding-top','10px');
  4065. } else {
  4066. $('#send-email-message').text('Email sent!').css('padding-top','10px');
  4067. }
  4068. }
  4069. );
  4070. });
  4071.  
  4072. $('#send-email').click(function(e) {
  4073. e.preventDefault();
  4074. $emailForm.submit();
  4075. });
  4076. </script>
  4077.  
  4078.  
  4079. </div>
  4080. </script>
  4081.  
  4082. <script id="js-canonical-template" type="text/template">
  4083. <div class='custominstructions linux' id='ubuntuinstructions'>
  4084. <h2>Click the button below to redeem your bundle on the Ubuntu Software Center.</h2>
  4085. <a href='https://software-center.ubuntu.com/coupons/<%= product_machine_name %>/?key=<%= gamekey %>&utm_source=humblebundle&utm_medium=download&utm_campaign=<%= product_machine_name %>'>
  4086. <img src='https://humblebundle-a.akamaihd.net/static/hashed/b40b894cf171bca8af0a30601d41d59425d4b6ba.png' alt='Download for Ubuntu'/>
  4087. </a>
  4088. </div>
  4089. </script>
  4090.  
  4091. <script id="js-custom-whitebox-template" type="text/template">
  4092. <div class='whitebox'>
  4093. <div class='whitetop'></div>
  4094. <div class='whitemid'></div>
  4095. <div class='whitebottom'></div>
  4096. <div class='whitecontent'>
  4097. <%= custom_html %>
  4098. </div>
  4099. </div>
  4100. </script>
  4101.  
  4102. <script id="js-coupon-box-template" type="text/template">
  4103. <div class="whitebox-redux coupon">
  4104. <div class="coupon-info">
  4105.  
  4106. <div class="column">
  4107. <div class="media-object">
  4108. <div class="avatar">
  4109. <% if (coupon.storefront_product) { %>
  4110. <img class="coupon-icon" src="<%- coupon.storefront_product.icon %>">
  4111. <% } else { %>
  4112. <img class="coupon-icon" src="<%= humble_icon %>">
  4113. <% } %>
  4114. </div>
  4115.  
  4116. <div class="details">
  4117. <div class="coupon-name"> <%- coupon.coupon_human_name %> <div class="js-coupon-admin-edit" data-entity-kind="coupon" data-machine-name="<%- coupon.coupon_machine_name %>"></div>
  4118. </div>
  4119. <% if (coupon.coupon_status == 'used') { %>
  4120. <div>*Already redeemed*</div>
  4121. <% } else if (coupon.coupon_status == 'expired') { %>
  4122. <div class="expired">*This coupon expired on <%= couponModel.get_expiration_date_as_string() %>*</div>
  4123. <% } else if (coupon.coupon_status == 'unused' && coupon.coupon_expiration) { %>
  4124. <div>Expires <%= couponModel.get_expiration_date_as_string() %></div>
  4125. <% } %>
  4126. <a href="#" class="coupon-terms js-show-coupon-terms">Coupon Details</a>
  4127. </div>
  4128. </div>
  4129. </div>
  4130.  
  4131. <div class="column">
  4132. <% if (coupon.storefront_product) { %>
  4133. <% if (coupon.coupon_status == 'used') { %>
  4134. <a href="/home/purchases">View purchase</a>
  4135. <% } else if (coupon.coupon_status == 'expired') { %>
  4136. <a href="<%- '/store/' + coupon.storefront_product.human_url %>">View game in store</a>
  4137. <% } else if (coupon.coupon_status == 'unused') { %>
  4138. <% if (!_.isEmpty(coupon.storefront_product.platform_icon_dict)) { %>
  4139. <%= render_platform_icons(coupon.storefront_product.platform_icon_dict) %>
  4140. <% } %>
  4141. <% if (coupon.coupon_type == 'discount-percentage') { %>
  4142. <span class="discount-amount">
  4143. -<%= coupon.coupon_discount %>%
  4144. </span>
  4145. <% } else if (coupon.coupon_type == 'credit-amount') { %>
  4146. <span class="discount-amount">
  4147. -<%= moneyfmt(coupon.coupon_credit, coupon.storefront_product.currency) %>
  4148. </span>
  4149. <% } %>
  4150. <span class="discount-price">
  4151. <% // BTW, Discount price is calculated differently depending on coupon type
  4152. %>
  4153. <%= moneyfmt(coupon.storefront_product.discount_price, coupon.storefront_product.currency) %>
  4154. </span>
  4155. <% } %>
  4156.  
  4157. <% } else { %>
  4158. <% if (coupon.coupon_status == 'used') { %>
  4159. <a href="/home/purchases">View purchase</a>
  4160. <% } else if (coupon.coupon_status == 'expired') { %>
  4161. <a href="/store">View store</a>
  4162. <% } else if (coupon.coupon_status == 'unused') { %>
  4163. <% if (coupon.subscriptions && _.contains(coupon.subscriptions , 'humble_monthly')) { %>
  4164. <a href="/monthly" class="round-active-button" target="_blank">Check it out</a>
  4165. <% } else { %>
  4166. <a href="<%= coupon.coupon_storefront_link %>" class="round-active-button" target="_blank">View store</a>
  4167. <% } %>
  4168. <% } %>
  4169. <% } %>
  4170. </div>
  4171.  
  4172. </div>
  4173.  
  4174. <% if (coupon.storefront_product && coupon.coupon_status == 'unused') { %>
  4175. <div class="redeem-product">
  4176. <span class="redeem-callout">
  4177. Apply your coupon and go straight to checkout:
  4178. <a href="<%- '/store/' + coupon.storefront_product.human_url + '/coupon' + coupon.coupon_key %>" class="round-active-button" target="_blank">
  4179. Redeem now!
  4180. </a>
  4181. </span>
  4182. </div>
  4183. <% } %>
  4184.  
  4185. </div>
  4186. </script>
  4187.  
  4188. <script id="js-credit-box-template" type="text/template">
  4189. <div class="whitebox-redux credit">
  4190. <div class="credit-info">
  4191. <% if (settled) { %>
  4192. <p>This order added <%- moneyfmt(amount, currency) %> to your <a href='/user/wallet'>Humble Wallet</a>.</p>
  4193. <% } else if (claimed) { %>
  4194. <% if (has_wallet) { %>
  4195. <p>This order grants <strong><%- moneyfmt(amount, currency) %></strong> worth of credit for the Humble Store. Add it to your Humble Wallet now: <button class='button blue js-redeem-humblewallet-credit' data-gamekey='<%= gamekey %>'>Add to my Wallet</button></p>
  4196. <% } else { %>
  4197. <p>Set up your <a href='/user/wallet/create?goto=%2Fdownloads%3Fkey%3D<%= page_gamekey %>'>Humble Wallet</a> and return to this page to redeem <%- moneyfmt(amount, currency) %> worth of credit for the Humble Store.</p>
  4198. <% } %>
  4199. <% } else { %>
  4200. <% if (signed_in) { %>
  4201. <p>This order grants <strong><%- moneyfmt(amount, currency) %></strong> worth of credit for the Humble Store. To add it to your Humble Wallet: <button class='button blue js-claim-page' href='#' data-gamekey='<%= gamekey %>'>Claim this order</button></p>
  4202. <% } else { %>
  4203. <p><a class='a account-login' data-target-popup='#account-login' href='/bundle/claim?claimkey=<%= page_gamekey %>'>Sign in to claim this page</a> and redeem <%- moneyfmt(amount, currency) %> worth of credit for the Humble Store.</p>
  4204. <% } %>
  4205. <% } %>
  4206.  
  4207. <div class="js-credit-admin-edit" data-entity-kind="product" data-anchor-name="#row_pricing" data-machine-name="<%- machine_name %>"></div>
  4208. </div>
  4209. </div>
  4210. </script>
  4211.  
  4212. <script id="js-missed-credit-box-template" type="text/template">
  4213. <div class="whitebox-redux credit">
  4214. <div class="credit-info">
  4215. <p>
  4216. This order would have added <%- amount %> to your <a href='/user/wallet'>Humble Wallet</a>.
  4217. <a href='/monthly'>Subscribe to Humble Monthly</a> now for future rewards!
  4218. </p>
  4219. </div>
  4220. </div>
  4221. </script>
  4222.  
  4223.  
  4224. <script id="js-credit-redeem-message" type="text/template">
  4225. <div class="whitebox-redux credit">
  4226. <div class="credit-info">
  4227. <% if (success) { %>
  4228. Success! The credit has been added to <a href='/user/wallet'>your Humble Wallet</a>.
  4229. <% } else { %>
  4230. Error: There was a problem adding the credit to your Humble Wallet.
  4231. <% } %>
  4232. </div>
  4233. </div>
  4234. </script>
  4235.  
  4236. <div id='large-download-warning' class='download-popup'>
  4237. <h2>This is a very large download</h2>
  4238.  
  4239. <p class='bittorrent-warning'>
  4240. We recommend the BitTorrent option for this file, to ensure that there are no interruptions or risks of data
  4241. corruption during the download.
  4242. </p>
  4243.  
  4244. <p class='bittorrent-warning'>
  4245. Our BitTorrent files contains a "webseed" from the same content delivery network that powers our regular downloads,
  4246. which means that it will be downloaded over both HTTP and from BitTorrent users who share their bandwidth for the
  4247. fastest experience possible.
  4248. </p>
  4249.  
  4250. <p class='warning-text fat32-warning'>
  4251. Warning: This file cannot be downloaded on FAT32 file systems (commonly found on USB thumb drives) due to its large
  4252. size.
  4253. <a href='https://support.humblebundle.com/hc/en-us/articles/202421414' target='_blank'>Click here</a>
  4254. for additional details.
  4255. </p>
  4256.  
  4257. <p class='bittorrent-warning'>Are you sure you want to do a direct download?</p>
  4258.  
  4259. <div class='buttonHolder'>
  4260. <a href='#' class='button-link use-http bittorrent-warning'><span class='green-button'>Download anyway</span></a>
  4261. <a href='#' class='button-link use-bittorrent bittorrent-warning'><span
  4262. class='green-button'>Use BitTorrent</span></a>
  4263. <a href='#' class='button-link use-http not-bittorrent-warning'><span class='green-button'>Download</span></a>
  4264. <a href='#' class='button-link use-bittorrent not-bittorrent-warning'><span class='green-button'>Download</span></a>
  4265. <a href='#' class='button-link cancel'><span class='gray-button'>Cancel</span></a>
  4266. </div>
  4267. </div>
  4268. <div id='confirm-apk' class='download-popup' style='display:none'>
  4269. <h2>You are not on an Android device</h2>
  4270. <p>This package is intended to be downloaded and installed on an Android device.</p>
  4271. <p>Are you sure you want to download it even though you are not using an Android device?</p>
  4272. <div class='buttonHolder'>
  4273. <a href='#' class='download-anyway button-link'><span class='green-button'>Download anyway</span></a>
  4274. <a href='#' class='cancel' class='button-link'><span class='gray-button'>Cancel</span></a>
  4275. </div>
  4276. </div>
  4277. <script type='text/javascript'>
  4278. $(function(){
  4279. $('#regular_download_list .android .download .flexbtn').click(function(e){
  4280. e.preventDefault();
  4281. var $dialog = $('#confirm-apk');
  4282. $('.grayout').fadeIn();
  4283. $dialog.find('.download-anyway').attr('href', $(e.target).attr('href'));
  4284. $dialog.fadeIn();
  4285. })
  4286. $('.download-anyway').click(function(e){
  4287. $('.grayout').fadeOut();
  4288. $('#confirm-apk').fadeOut();
  4289. })
  4290. });
  4291. </script>
  4292.  
  4293.  
  4294.  
  4295.  
  4296. <div class='grayout'>
  4297. <div class='grayout-inner'>
  4298. </div>
  4299. </div>
  4300.  
  4301. <div id='site-modal'></div>
  4302.  
  4303. <script>
  4304. /* v1.0.1 */(function(b){b.fn.mailcheck=function(a,b){var d="yahoo.com,google.com,hotmail.com,gmail.com,me.com,aol.com,mac.com,live.com,comcast.net,googlemail.com,msn.com,hotmail.co.uk,yahoo.co.uk,facebook.com,verizon.net,sbcglobal.net,att.net,gmx.com,mail.com".split(",");if("object"===typeof a&&void 0===b)a.domains=a.domains||d;else{var e=a,a=b;a.domains=e||d}(d=Kicksend.mailcheck.suggest(encodeURI(this.val()),a.domains))?a.suggested&&a.suggested(this,d):a.empty&&a.empty(this)}})(jQuery);
  4305. var Kicksend={mailcheck:{threshold:3,suggest:function(b,a){var b=b.toLowerCase(),c=this.splitEmail(b),d=this.findClosestDomain(c.domain,a);return d?{address:c.address,domain:d,full:c.address+"@"+d}:!1},findClosestDomain:function(b,a){for(var c,d=99,e=null,f=0;f<a.length;f++){if(b===a[f])return!1;c=this.stringDistance(b,a[f]);c<d&&(d=c,e=a[f])}return d<=this.threshold&&null!==e?e:!1},stringDistance:function(b,a){if(null==b||0===b.length)return null==a||0===a.length?0:a.length;if(null==a||0===a.length)return b.length;
  4306. for(var c=0,d=0,e=0,f=0;c+d<b.length&&c+e<a.length;){if(b[c+d]==a[c+e])f++;else for(var g=e=d=0;5>g;g++){if(c+g<b.length&&b[c+g]==a[c]){d=g;break}if(c+g<a.length&&b[c]==a[c+g]){e=g;break}}c++}return(b.length+a.length)/2-f},splitEmail:function(b){b=b.split("@");if(2>b.length)return!1;for(var a=0;a<b.length;a++)if(""===b[a])return!1;return{domain:b.pop(),address:b.join("@")}}}};
  4307. </script>
  4308. <script>
  4309. require(['account/accountModals'], function (accountModals) {
  4310. window.modal_attributes = {
  4311. request_reason: "",
  4312. base_url_secure: "https://www.humblebundle.com",
  4313. goto: null,
  4314. qs: null,
  4315. csrf_token_input: "<input type='hidden' class='csrftoken' name='_le_csrf_token' value='wpOLiPSCcKd_Z-T--1-1506712425' />",
  4316. is_eu_country: true
  4317. };
  4318. accountModals.bindCancelDialog();
  4319. accountModals.bindAccountModalHandling({
  4320. debug: false,
  4321. attributes: window.modal_attributes
  4322. });
  4323. });
  4324. </script>
  4325. <div ssl='on' id='pubnub'></div>
  4326. <script>
  4327. // log all calls and be able to play them back on another object
  4328. // sort of like a more generic version of the _gaq object
  4329. function Replayer(methods) {
  4330. this._log = [];
  4331. var self = this;
  4332.  
  4333. methods.forEach(function(method) {
  4334. self[method] = function() {
  4335. self._log.push([method, Array.prototype.slice.call(arguments)]);
  4336. };
  4337. });
  4338.  
  4339. this._playback = function (obj) {
  4340. self._log.forEach(function(entry) {
  4341. methodname = entry[0];
  4342. args = entry[1];
  4343. method = obj[methodname];
  4344. method.apply(obj, args);
  4345. });
  4346. };
  4347. }
  4348.  
  4349. window.pubnub_client = new Replayer(['subscribe', 'history']);
  4350.  
  4351. var pubnub_async_loader = function(PUBNUB) {
  4352. if (typeof PUBNUB === "string") {
  4353. PUBNUB = window.PUBNUB;
  4354. }
  4355.  
  4356. var pubnub_callbacks = {};
  4357. /* {
  4358. 'stats': [callback1, callback2]
  4359. 'thanks': [thankscallback]
  4360. }
  4361. */
  4362.  
  4363. var register_pubnub_handler = function (channel, callback) {
  4364. var channel_callbacks = pubnub_callbacks[channel];
  4365. if (channel_callbacks == undefined) {
  4366. channel_callbacks = [];
  4367. }
  4368. channel_callbacks.push(callback);
  4369. pubnub_callbacks[channel] = channel_callbacks;
  4370. };
  4371.  
  4372. var pubnub_delegator = function (message, envelope, channel) {
  4373. var callbacks = pubnub_callbacks[channel];
  4374. for (var i = 0; i < callbacks.length; i++) {
  4375. callbacks[i](message);
  4376. }
  4377. };
  4378.  
  4379. var original_pubnub_client = PUBNUB.init({
  4380. noleave: true,
  4381. ssl: true,
  4382. subscribe_key: '6b5eeae3-796b-11df-8b2d-ef048cc31d2e'
  4383. });
  4384.  
  4385. var multiplexed_pubnub_client = {};
  4386. $.extend(multiplexed_pubnub_client, original_pubnub_client);
  4387. multiplexed_pubnub_client.subscribe = function(options) {
  4388. var callback = options['callback'];
  4389. var channel = options['channel'];
  4390. delete options['callback'];
  4391. register_pubnub_handler(channel, callback);
  4392. options['callback'] = pubnub_delegator;
  4393. return original_pubnub_client.subscribe(options);
  4394. };
  4395. multiplexed_pubnub_client.ready(); // since we fire after the ready event, trigger it on the pubnub object
  4396. window.pubnub_client._playback(multiplexed_pubnub_client);
  4397. window.pubnub_client = multiplexed_pubnub_client;
  4398. };
  4399. // Using requirejs instead of require because it appears that the ACE editor has some sort of conflict.
  4400. if (typeof requirejs === 'function') {
  4401. requirejs(['https://humblebundle-a.akamaihd.net/static/hashed/998cdf8d471fa4ae7935c0bc267cae547fa8826e.js'], pubnub_async_loader)
  4402. } else {
  4403. async_js('https://humblebundle-a.akamaihd.net/static/hashed/998cdf8d471fa4ae7935c0bc267cae547fa8826e.js', pubnub_async_loader);
  4404. }
  4405. </script>
  4406.  
  4407.  
  4408. <div id='flash'></div>
  4409.  
  4410. <script>
  4411. $(window).ready(function() {
  4412. //
  4413. var urls = [
  4414. 'https://connect.facebook.net/en_US/all.js',
  4415. 'https://apis.google.com/js/platform.js',
  4416. 'https://platform.twitter.com/widgets.js'
  4417. ];
  4418. _(urls).each(function(url) {
  4419. async_js(url);
  4420. });
  4421. });
  4422. </script>
  4423.  
  4424. <script id="js-google-analytics">
  4425. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  4426. (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  4427. m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  4428. })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  4429. ga('create', 'UA-467050-6', 'auto');
  4430. ga('require', 'displayfeatures');
  4431. ga('require', 'ecommerce');
  4432. ga('require', 'linkid', 'linkid.js');
  4433.  
  4434. function _hbga(verb){
  4435. ga.apply(this, arguments);
  4436. }
  4437. _hbga('set', 'metric1', 14.62);
  4438. _hbga('set', 'dimension1', 14.62);
  4439.  
  4440. _hbga('send', 'pageview');
  4441. </script>
  4442. <script>
  4443. function _gaTrackEvent(category, action, opt_label, opt_value, opts) {
  4444. category = category || ('/' + window.location.pathname.split('/')[1]);
  4445. _hbga('send', 'event', category, action, opt_label, opt_value, opts);
  4446. }
  4447. function _gaTrackPageview(page) {
  4448. _hbga('send', 'pageview', page);
  4449. }
  4450. function _gaTrackEventNoninteractive(category, action, opt_label, opt_value) {
  4451. _gaTrackEvent(category, action, opt_label, opt_value, {'nonInteraction': 1})
  4452. }
  4453. </script>
  4454.  
  4455.  
  4456. <!-- Facebook Pixel Code -->
  4457. <script>
  4458. !function(f,b,e,v,n,t,s)
  4459. {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  4460. n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  4461. if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  4462. n.queue=[];t=b.createElement(e);t.async=!0;
  4463. t.src=v;s=b.getElementsByTagName(e)[0];
  4464. s.parentNode.insertBefore(t,s)}(window,document,'script',
  4465. 'https://connect.facebook.net/en_US/fbevents.js');
  4466. fbq('init', '1658430177760250');
  4467. fbq('track', 'PageView');
  4468. </script>
  4469. <noscript>
  4470. <img height="1" width="1" src="https://www.facebook.com/tr?id=1658430177760250&ev=PageView&noscript=1"/>
  4471. </noscript>
  4472. <!-- End Facebook Pixel Code -->
  4473.  
  4474.  
  4475. <script async src='https://checkout.stripe.com/checkout.js'></script>
  4476. <script>
  4477. var _user_id = "1JMmJVX1yO8aHixHXsStAsuN2GtFvBqE4w5E7vPFdvt6mZVeH8FglBAn0NUBBA9kLx";
  4478. var _session_id = "qXAZhsnXXi";
  4479.  
  4480. var _sift = _sift || [];
  4481. _sift.push(['_setAccount', 'fa5602386c']);
  4482. _sift.push(['_setUserId', _user_id]);
  4483. _sift.push(['_setSessionId', _session_id]);
  4484. _sift.push(['_trackPageview']);
  4485. (function () {
  4486. function ls() {
  4487. var e = document.createElement('script');
  4488. e.type = 'text/javascript';
  4489. e.async = true;
  4490. e.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'cdn.siftscience.com/s.js';
  4491. var s = document.getElementsByTagName('script')[0];
  4492. s.parentNode.insertBefore(e, s);
  4493. }
  4494.  
  4495. if (window.attachEvent) {
  4496. window.attachEvent('onload', ls);
  4497. } else {
  4498. window.addEventListener('load', ls, false);
  4499. }
  4500. })();
  4501. </script>
  4502.  
  4503. <script type="text/javascript">
  4504. (function(s,m,y,t,e){s._smyte=s._smyte||[];t=m.createElement(y);t.async=1;t.src='//ping.smyte.com/p.js';e=m.getElementsByTagName(y)[0];e.parentNode.insertBefore(t,e);})(window,document,'script');
  4505. _smyte.push(['_setClientKey', '90d681dbb6997b4dfd2be21919378c00']);
  4506. _smyte.push(['_setSession', {
  4507. id: 'qXAZhsnXXi',
  4508. actor: {
  4509.  
  4510. id: '1JMmJVX1yO8aHixHXsStAsuN2GtFvBqE4w5E7vPFdvt6mZVeH8FglBAn0NUBBA9kLx',
  4511.  
  4512. type: 'user'
  4513. }
  4514. }]);
  4515. _smyte.push(['_log']);
  4516. </script>
  4517. <script>
  4518.  
  4519. //timer
  4520.  
  4521. (function(){
  4522. var TIMER_FREQUENCY = 500;
  4523.  
  4524. var drawsimpleclock = function(t, $element) {
  4525. for (var i=0;i<t.length;i++) {
  4526. var d = '' + Math.floor(t[i]);
  4527. if (d.length == 1) d = '0' + d;
  4528. $element.find('.digit.' + i).text(d);
  4529. }
  4530. };
  4531.  
  4532. var drawclock = function(t, $element) {
  4533. for (var i=0;i<t.length;i++) {
  4534. var d = '' + Math.floor(t[i]);
  4535. if (d.length == 1) d = '0' + d;
  4536. for (var j=0;j<2;j++) {
  4537. $element.find('.c' + (2*i + j)).find('.top-cutter .heading-num').text(d.substr(j,1));
  4538. }
  4539. }
  4540. };
  4541.  
  4542. var count = function(d, element) {
  4543. var s = Math.max((new Date(d - new Date())).valueOf(),0),
  4544. digits = $.map([s / 86400000,s / 3600000 % 24,s / 60000 % 60,s / 1000 % 60],function(a) {return parseInt(a);}),
  4545. $el = $(element);
  4546. if ($el.hasClass('simple-timer')) {
  4547. drawsimpleclock(digits, $el);
  4548. } else {
  4549. drawclock(digits, $el);
  4550. }
  4551. };
  4552.  
  4553. var timers = [];
  4554. var timerIntervals = [];
  4555.  
  4556. window.start_countdown_timer = function(d, element){
  4557. var timer_callback = function(){
  4558. count(d, element);
  4559. };
  4560. timers.push(timer_callback);
  4561. timerIntervals.push(setInterval(timer_callback, TIMER_FREQUENCY));
  4562. timer_callback();
  4563. };
  4564.  
  4565. window.start_countdown_timers = function() {
  4566. $('.js-countdown-timer').each(function(i, el) {
  4567. var $el = $(el);
  4568. var end_time = $el.data('end-time');
  4569. var timer = function() {
  4570. $el.text(render_time_remaining_until(end_time));
  4571. };
  4572.  
  4573. timers.push(timer);
  4574. timerIntervals.push(setInterval(timer, TIMER_FREQUENCY));
  4575. });
  4576. };
  4577.  
  4578. window.pause_timers = function(){
  4579. for(var i = timerIntervals.length - 1; i >= 0; i--){
  4580. clearInterval(timerIntervals.pop());
  4581. }
  4582. }
  4583.  
  4584. window.resume_timers = function(){
  4585. for(var i = 0; i < timers.length; i++){
  4586. timerIntervals.push(setInterval(timers[i], TIMER_FREQUENCY));
  4587. }
  4588. }
  4589.  
  4590. })();
  4591.  
  4592. var timing = {};
  4593.  
  4594. var enddate = new Date(timing.end * 1000);
  4595. start_countdown_timer(enddate, 'heading-time-remaining');
  4596.  
  4597.  
  4598.  
  4599. /* popups.js */
  4600.  
  4601. (function() {
  4602. if ($('div.youtube-embed, div.youtube-embed-forceload').length > 0) {
  4603. // 2. This code loads the IFrame Player API code asynchronously.
  4604. async_js('//www.youtube.com/player_api');
  4605. }
  4606.  
  4607. function onPlayerStateChange(e) {
  4608. if (e.data == YT.PlayerState.PLAYING) {
  4609. // For now, just fire a coarse-grained global notification whenever a
  4610. // video starts playing. This should be cleaned up to fire a more specific
  4611. // notification.
  4612. $(window).trigger('youtube-play');
  4613. }
  4614. }
  4615.  
  4616. window.players = [];
  4617. function activateEmbeddedPlayer($elem) {
  4618. if (typeof YT === 'undefined') {
  4619. return;
  4620. }
  4621. var data = $elem.data();
  4622. if (!('playerVars' in data)) {
  4623. // each video must have a unique id -- randomly generate one here
  4624. var random_id = 'yt-' + Math.random().toString(36).substr(2, 5);
  4625. $elem.attr('id', random_id);
  4626. data.playerVars = {};
  4627. for (var i in data) {
  4628. if (data.hasOwnProperty(i) && i.indexOf('playervar') === 0) {
  4629. data.playerVars[i.substring(9).toLowerCase()] = data[i];
  4630. delete data[i];
  4631. }
  4632. }
  4633. data.events = {
  4634. 'onStateChange': onPlayerStateChange
  4635. };
  4636. var player = new YT.Player($elem.attr('id'), data);
  4637. // Set the index data on the iframe
  4638. $(player.getIframe()).data('index', window.players.length);
  4639. window.players.push(player);
  4640. }
  4641. }
  4642.  
  4643. // make clicking a product icon show the popup
  4644. $('a.gamelinks, a.gamelinks-nostyle, a.minigame-link, .charitylinks a, .soundlink, .popup-links a').click(function(e) {
  4645. var popupHash = $(this).attr('href'); // action
  4646. if (popupHash.indexOf('#popup-') >= 0) {
  4647. e.preventDefault();
  4648. popupHash = popupHash.substr(popupHash.indexOf('#'));
  4649. } else {
  4650. return; // the href should always start with #popup-
  4651. }
  4652.  
  4653. var $popup = $(popupHash);
  4654. if ($popup.length === 0) {
  4655. return;
  4656. } else {
  4657. // Setting overflow-y: hidden will hide the scroll bar, which changes the
  4658. // width, which causes the content to shift. To counteract this effect, add
  4659. // a margin-right where the scroll bar used to be.
  4660. var old_width = $('body').width();
  4661. $('body').css('overflow-y', 'hidden');
  4662. var new_width = $('body').width();
  4663. $('body').css('margin-right', new_width - old_width);
  4664. $popup.show().addClass('active-popup');
  4665. $('#dark-cover-inner').css('min-height', $popup.outerHeight());
  4666.  
  4667. $popup.find('div.youtube-embed').each(function() {
  4668. var $elem = $(this);
  4669. activateEmbeddedPlayer($elem);
  4670. });
  4671. }
  4672. $('#dark-cover').fadeIn('fast');
  4673.  
  4674.  
  4675. var productName = $('#contribute').find('input[name=product]').val();
  4676. _gaTrackEvent(undefined, 'Popup action: ' + popupHash, 'Product: ' + productName);
  4677.  
  4678. });
  4679.  
  4680. function closePopup() {
  4681. var $videoFrame = $('.active-popup .game-movie iframe');
  4682. var $activePopup = $('.active-popup');
  4683. if ($activePopup.data('closeCallback')) {
  4684. $activePopup.data('closeCallback')($activePopup);
  4685. }
  4686. $activePopup.hide().removeClass('active-popup');
  4687. $('#dark-cover').fadeOut('fast');
  4688. $('body').css('overflow-y', 'auto');
  4689. $('body').css('margin-right', '0');
  4690. if (!$videoFrame.length) {
  4691. return;
  4692. }
  4693. // stop playing by removing the iframe
  4694. var $frameParent = $videoFrame.parent(),
  4695. $frameClone = $videoFrame.clone();
  4696. $videoFrame.remove();
  4697. $frameClone.appendTo($frameParent);
  4698. }
  4699.  
  4700. // Close the popup if the user presses escape.
  4701. $(document).keyup(function(e) {
  4702. if (e.keyCode == 27) {
  4703. closePopup();
  4704. }
  4705. });
  4706. // Close the popup when the user clicks the close button or clicks outside the popup.
  4707. $('#dark-cover,.game-popup .close-popup').click(function(e) {
  4708. e.preventDefault();
  4709. closePopup();
  4710. });
  4711. // ...but make sure clicking inside the popup doesn't close it.
  4712. $('.game-popup').click(function(e) {
  4713. e.stopPropagation();
  4714. });
  4715.  
  4716. $(window).on('onYouTubeIframeAPIReady', function() {
  4717. // Only load forceloaded embeds. Other embeds will be loaded when their containing popup is opened.
  4718. $('div.youtube-embed-forceload').each(function() {
  4719. var $elem = $(this);
  4720. activateEmbeddedPlayer($elem);
  4721. });
  4722. });
  4723.  
  4724. /*
  4725. * eBook preview font controls.
  4726. */
  4727. $(document).ready(function () {
  4728. var font_size = 14;
  4729.  
  4730. $('.font-size .larger').click(function(e) {
  4731. e.preventDefault();
  4732. font_size += 2;
  4733. $('.book-preview').css('font-size', font_size + 'px');
  4734. });
  4735. $('.font-size .smaller').click(function(e) {
  4736. e.preventDefault();
  4737. font_size -= 2;
  4738. $('.book-preview').css('font-size', font_size + 'px');
  4739. });
  4740. $('.font-style .sans').click(function(e) {
  4741. e.preventDefault();
  4742. $('.ebook-popup').addClass('sans');
  4743. });
  4744. $('.font-style .serif').click(function(e) {
  4745. e.preventDefault();
  4746. $('.ebook-popup').removeClass('sans');
  4747. });
  4748. });
  4749.  
  4750. /*
  4751. * Subtab navigation
  4752. */
  4753. $('#active-subtab').click(function (e) {
  4754. e.preventDefault();
  4755. var target = $(this).attr('href');
  4756. $('body').animate({'scrollTop': $(target).offset().top}, 800);
  4757. });
  4758. })();
  4759.  
  4760. $('.steaminfo').click(function(e) {
  4761. e.preventDefault();
  4762. $('#keysinfotext').toggleClass('displaying');
  4763. });
  4764.  
  4765. /* show grayscale pie chart on hover for colorblind users */
  4766. var $chartLegendColors = $('#chartlegend').find('.chartcolor');
  4767. $('#chartgloss').hover(function() {
  4768. $('#googlechart').attr('src', $('#googlechart').data('grayscalesrc'));
  4769. $chartLegendColors.each(function() {
  4770. $(this).css('background-color', $(this).data('grayscaleColor'));
  4771. });
  4772. },function() {
  4773. $('#googlechart').attr('src', $('#googlechart').data('colorsrc'));
  4774. $chartLegendColors.each(function() {
  4775. $(this).css('background-color', $(this).data('color'));
  4776. });
  4777. });
  4778. $chartLegendColors.each(function() {
  4779. $(this).data('color', $(this).css('background-color'));
  4780. });
  4781.  
  4782.  
  4783. $(document).ready(function() {
  4784. var cookiedata = $.cookie('androidapp');
  4785. if (cookiedata == 'expanded') {
  4786. $('#androidappbox').click();
  4787. }
  4788. $('#androidappbox').click(function(e) {
  4789. $.cookie('androidapp', 'expanded');
  4790. });
  4791. });
  4792.  
  4793. </script>
  4794.  
  4795. <script>
  4796. var active_platform = "ebook";
  4797. var humbleIcon = "https://humblebundle-a.akamaihd.net/static/hashed/703cddaea1919f4b3840a4527dbbd0a0c4dc160c.png";
  4798.  
  4799.  
  4800. var gamekeys = ['wWuG2hMxeynmcRrC'];
  4801. var single_key_page = true;
  4802. var android_version = false;
  4803.  
  4804. var hasAdminAccess = false;
  4805.  
  4806. require([
  4807. 'downloadPages/initDownloadList',
  4808. 'banner/banner'
  4809. ], function (
  4810. initDownloadList,
  4811. XPromoBanner
  4812. ) {
  4813.  
  4814. initDownloadList(gamekeys, {
  4815. el: $('.js-gamelist-holder'),
  4816. activePlatform: active_platform,
  4817. singleKeyPage: single_key_page,
  4818. androidVersion: android_version,
  4819. humbleIcon: humbleIcon,
  4820. hasAdminAccess: hasAdminAccess
  4821. });
  4822. XPromoBanner.init();
  4823. });
  4824.  
  4825. var runanalytics = function() {
  4826. var analyze = function(id) {
  4827. if (!id) return;
  4828. var storage = getLocalStorage();
  4829. var previds = storage.getItem('hbprevids') || '';
  4830. if (previds.match(id)) return;
  4831.  
  4832. $.post('/analytics', {'id':id}, function(data) {
  4833. var gaData;
  4834.  
  4835. if (data.complete) {
  4836. storage.setItem('hbprevids', previds + ',' + id);
  4837. }
  4838.  
  4839. if (!data.uid) {
  4840. return;
  4841. }
  4842.  
  4843. gaData = {
  4844. id: data.uid,
  4845. revenue: data.amount
  4846. };
  4847. ga('ecommerce:addTransaction', gaData);
  4848. ga('send', {
  4849. hitType: 'event',
  4850. eventCategory: 'Purchase',
  4851. eventAction: data.category,
  4852. eventLabel: data.product,
  4853. eventValue: data.pennies
  4854. });
  4855. for (var i = 0; i < data.items.length; i++) {
  4856. var item = data.items[i];
  4857.  
  4858. gaData = {
  4859. id: data.uid,
  4860. name: item.kind,
  4861. sku: data.product,
  4862. category: item.kind,
  4863. price: item.amount,
  4864. quantity: '1'
  4865. };
  4866. ga('ecommerce:addItem', gaData);
  4867. }
  4868.  
  4869. ga('ecommerce:send');
  4870. },'json');
  4871. };
  4872.  
  4873.  
  4874. analyze('wWuG2hMxeynmcRrC');
  4875.  
  4876. var partnerId = $.cookie('partner_id');
  4877. if (partnerId) {
  4878. ga('set', 'dimension2', partnerId);
  4879. }
  4880. };
  4881. runanalytics();
  4882.  
  4883. /*
  4884. * TypeWatch 2.0 - Original by Denny Ferrassoli / Refactored by Charles Christolini
  4885. *
  4886. * Examples/Docs: www.dennydotnet.com
  4887. *
  4888. * Copyright(c) 2007 Denny Ferrassoli - DennyDotNet.com
  4889. * Coprright(c) 2008 Charles Christolini - BinaryPie.com
  4890. *
  4891. * Dual licensed under the MIT and GPL licenses:
  4892. * http://www.opensource.org/licenses/mit-license.php
  4893. * http://www.gnu.org/licenses/gpl.html
  4894. */
  4895.  
  4896. (function(jQuery) {
  4897. jQuery.fn.typeWatch = function(o) {
  4898. // Options
  4899. var options = jQuery.extend({
  4900. wait : 750,
  4901. callback : function() {
  4902. },
  4903. highlight : true,
  4904. captureLength : 2
  4905. }, o);
  4906.  
  4907. function checkElement(timer, override) {
  4908. var elTxt = jQuery(timer.el).val();
  4909.  
  4910. // Fire if text > options.captureLength AND text != saved txt OR if override AND text > options.captureLength
  4911. if ((elTxt.length > options.captureLength && elTxt.toUpperCase() != timer.text)
  4912. || (override && elTxt.length > options.captureLength)) {
  4913. timer.text = elTxt.toUpperCase();
  4914. timer.cb(elTxt);
  4915. }
  4916. };
  4917.  
  4918. function watchElement(elem) {
  4919. // Must be text or textarea
  4920. if (elem.type.toUpperCase() == "TEXT" || elem.nodeName.toUpperCase() == "TEXTAREA") {
  4921.  
  4922. // Allocate timer element
  4923. var timer = {
  4924. timer : null,
  4925. text : jQuery(elem).val().toUpperCase(),
  4926. cb : options.callback,
  4927. el : elem,
  4928. wait : options.wait
  4929. };
  4930.  
  4931. // Set focus action (highlight)
  4932. if (options.highlight) {
  4933. jQuery(elem).focus(
  4934. function() {
  4935. this.select();
  4936. });
  4937. }
  4938.  
  4939. // Key watcher / clear and reset the timer
  4940. var startWatch = function(evt) {
  4941. var timerWait = timer.wait;
  4942. var overrideBool = false;
  4943.  
  4944. if (evt.keyCode == 13 && this.type.toUpperCase() == "TEXT") {
  4945. timerWait = 1;
  4946. overrideBool = true;
  4947. }
  4948.  
  4949. var timerCallbackFx = function() {
  4950. checkElement(timer, overrideBool)
  4951. }
  4952.  
  4953. // Clear timer
  4954. clearTimeout(timer.timer);
  4955. timer.timer = setTimeout(timerCallbackFx, timerWait);
  4956.  
  4957. };
  4958.  
  4959. jQuery(elem).keydown(startWatch);
  4960. // HTML5 adds an "input" event which is a more reliable way of telling
  4961. // when the field has changed -- it fires for things like browser
  4962. // autofill (where there is no keydown event). For browsers that support
  4963. // it, we bind startWatch to fire here too.
  4964. jQuery(elem).bind('input', startWatch);
  4965. }
  4966. }
  4967.  
  4968. ;
  4969.  
  4970. // Watch Each Element
  4971. return this.each(function(index) {
  4972. watchElement(this);
  4973. });
  4974.  
  4975. };
  4976.  
  4977. })(jQuery);
  4978. var MAILCHECK_DOMAINS = ['gmail.com', 'hotmail.com', 'yahoo.com', 'hotmail.co.uk', 'googlemail.com', 'gmx.de', 'live.com', 'live.ca', 'web.de', 'aol.com', 'msn.com', 'comcast.net', 'me.com', 'gmx.net', 'hotmail.fr', 'mail.ru', 'yahoo.co.uk', 'live.co.uk', 'yandex.ru', 'mac.com', 'yahoo.de', 'yahoo.fr'];
  4979.  
  4980.  
  4981.  
  4982. function isValidEmail(e) {
  4983. return (e != '') && /.+@.+\..+/.test(e);
  4984. }
  4985.  
  4986. function live_email_check($field, setEmailMessage) {
  4987. var emailValid = false;
  4988. $field.mailcheck({
  4989. domains: MAILCHECK_DOMAINS,
  4990. suggested: function($input, suggestion) {
  4991. // set the error text to the suggested correction
  4992. var message = 'Did you mean <a href="#" class="suggested-email" data-email="' + suggestion['full'] + '">' + suggestion['address'] + '@<strong>' + suggestion['domain'] + '</strong></a>?'
  4993. var $msgField = setEmailMessage($field, message);
  4994. $msgField.find('.suggested-email').click(function(e) {
  4995. e.preventDefault();
  4996. $input.val($(this).data('email'));
  4997. live_email_check($field, setEmailMessage, false);
  4998. });
  4999. emailValid = true;
  5000. },
  5001. empty: function($input) {
  5002. // no suggested domain correction, check if the email address looks valid
  5003. var email = $input.val();
  5004. emailValid = isValidEmail(email);
  5005. if (emailValid) {
  5006. setEmailMessage($field, false);
  5007. } else {
  5008. setEmailMessage($field, 'Email address is not valid', true);
  5009. }
  5010. }
  5011. });
  5012. return emailValid;
  5013. }
  5014. // this method will set up email "validation" and error correction.
  5015. // Parameters:
  5016. // $field is the input field to bind to
  5017. // setEmailMessage is a function that takes the input field the error is related to and a message to set.
  5018. // It sets the message then returns the error holder.
  5019. function bindEmailField($field, setEmailMessage){
  5020. function bound_live_email_check () {
  5021. live_email_check($field, setEmailMessage);
  5022. }
  5023. $field.typeWatch({
  5024. callback: bound_live_email_check,
  5025. captureLength: -1,
  5026. highlight: false,
  5027. wait: 500
  5028. });
  5029. }
  5030. var flash = $('#flash');
  5031.  
  5032. function show_flash(message){
  5033. flash.text(message)
  5034. flash.show();
  5035.  
  5036. setTimeout(function() {
  5037. flash.fadeOut();
  5038. },5000);
  5039. }
  5040.  
  5041. function set_flash(message) {
  5042. $.cookie('hbflash', message, {path: '/'});
  5043. }
  5044.  
  5045. $(function(){
  5046. function show_flash(message){
  5047. flash.text(message)
  5048. flash.show();
  5049.  
  5050. setTimeout(function() {
  5051. flash.fadeOut();
  5052. },5000);
  5053. }
  5054.  
  5055. var flashmessage = $.cookie('hbflash');
  5056. if (flashmessage == 'None') {
  5057. flashmessage = '';
  5058. }
  5059.  
  5060. if (flashmessage) {
  5061. show_flash(flashmessage);
  5062. $.cookie('hbflash', 'None', {path: '/'});
  5063. }
  5064.  
  5065. flash.click(function(){
  5066. flash.fadeOut();
  5067. });
  5068. });
  5069. // When CSS4 is widely-supported by all the modern browsers, detecting touch support may not be necessary depending on the usage of the touch.
  5070. $(function(){
  5071. // Class assignment can be used for touch screen problems. Such as :hover.
  5072. if ('ontouchstart' in window) {
  5073. $('body').addClass('touch-support');
  5074. }
  5075. });
  5076. require([
  5077. 'lib/require-domReady',
  5078. 'search/search',
  5079. 'lib/algolia'
  5080. ], function(domReady, SiteSearchView, algoliasearch) {
  5081. var public_key ='AYSZEWDAZ2';
  5082. var search_key ='e287f1da94f143ba1c4a5ec357135623';
  5083. var index_name ='slave_product_query_site_search';
  5084. var algolia_client = algoliasearch(public_key, search_key).initIndex(index_name);
  5085. var options = {
  5086. 'pricing_constants': {
  5087. 'current_country': "DE",
  5088. 'currencies': ["USD", "EUR", "GBP"],
  5089. 'exchange_rates': {"USD": 1.0, "IDR": 13493.003905586687, "BGN": 1.6605535744608593, "ILS": 3.5215656308371539, "GBP": 0.74405671591102052, "DKK": 6.3170317541178465, "CAD": 1.2467311937510612, "JPY": 112.54881983358804, "HUF": 264.10256410256409, "RON": 3.9058413992188825, "MYR": 4.2315333672949569, "SEK": 8.1338087960604515, "SGD": 1.359313975208015, "HKD": 7.8092205807437596, "AUD": 1.2781456953642385, "CHF": 0.97300050942435046, "KRW": 1146.3321446765156, "CNY": 6.6595347257598911, "TRY": 3.5654610290371878, "HRK": 6.3656817795890648, "NZD": 1.3892851078281543, "THB": 33.390219052470705, "EUR": 0.84904058413992189, "NOK": 7.9448972660893187, "RUB": 58.062064866700631, "INR": 65.47376464595007, "MXN": 18.165732722024114, "CZK": 22.109865851587706, "BRL": 3.182543725590083, "PLN": 3.661232806928171, "PHP": 50.940736967227032, "ZAR": 13.515792154865002},
  5090. 'euro_countries': ["BE", "FR", "BG", "DK", "HR", "DE", "HU", "FI", "BA", "NL", "PT", "RS", "LI", "LV", "LT", "LU", "RO", "PL", "VA", "CH", "GR", "EE", "IT", "AL", "CZ", "CY", "AT", "AD", "IE", "ES", "ME", "EUROPE_EURO", "MC", "NO", "MK", "SK", "MT", "SI", "SM", "SE"],
  5091. 'gbp_countries': ["GS", "GG", "SH", "IM", "GB", "UK", "JE", "EUROPE_GBP", "BQ"]
  5092. },
  5093. 'bundle_icon': "https://humblebundle-a.akamaihd.net/static/hashed/40f0b827c9d1c12cfc3dfd358ec39cc34e5dd3a7.jpg",
  5094. 'monthly_icon': "https://humblebundle-a.akamaihd.net/static/hashed/ac7ab70a9a2116ba9fae8feead3ba35fe1c609f5.jpg",
  5095. 'algolia_client': algolia_client
  5096. };
  5097. domReady(function() {
  5098. var searchBars = $('.site-minisearch-view');
  5099. for (var idx = 0; idx < searchBars.length; idx++) {
  5100. options.$el = $(searchBars[idx]);
  5101. new SiteSearchView(options);
  5102. }
  5103. });
  5104. });
  5105. $(document).ready(function() {
  5106. var Dropdown = (function() {
  5107. function Dropdown(options) {
  5108. var that = this;
  5109.  
  5110. this.el = {
  5111. $toggle: options.toggleEl,
  5112. $container: options.containerEl
  5113. };
  5114.  
  5115. this.events = {
  5116. toggleClick: function(event) {
  5117. event.stopPropagation();
  5118. event.preventDefault();
  5119. that.toggleState();
  5120. that.render();
  5121. if (that.visible) {
  5122. return that.bindToDocument();
  5123. } else {
  5124. return that.unbindToDocument();
  5125. }
  5126. },
  5127. hide: function() {
  5128. that.visible = false;
  5129. that.render();
  5130. return that.unbindToDocument();
  5131. }
  5132. };
  5133.  
  5134. if (_.has(options, 'visible')) {
  5135. this.visible = options.visible;
  5136. } else {
  5137. this.visible = true;
  5138. }
  5139. if (options.hiddenClass) {
  5140. this.hiddenClass = options.hiddenClass;
  5141. } else {
  5142. this.hiddenClass = 'is-hidden';
  5143. }
  5144. this.validateOptions().bind().render();
  5145. }
  5146.  
  5147. Dropdown.prototype.validateOptions = function() {
  5148. var messages;
  5149. messages = {
  5150. toggleNotFound: 'Toggle element not found',
  5151. containerNotFound: 'Container element not found'
  5152. };
  5153. if (!this.el.$toggle.length) {
  5154. throw new Error(messages.toggleNotFound);
  5155. }
  5156. if (!this.el.$container.length) {
  5157. throw new Error(messages.containerNotFound);
  5158. }
  5159. return this;
  5160. };
  5161.  
  5162. Dropdown.prototype.remove = function() {
  5163. this.unbind();
  5164. delete this.el;
  5165. delete this.events;
  5166. return this;
  5167. };
  5168.  
  5169.  
  5170. // Ctrl: Event handling
  5171. Dropdown.prototype.bind = function() {
  5172. this.el.$toggle.on('click', this.events.toggleClick);
  5173. return this;
  5174. };
  5175.  
  5176. Dropdown.prototype.unbind = function() {
  5177. this.el.$toggle.off('click', this.events.toggleClick);
  5178. return this;
  5179. };
  5180.  
  5181. Dropdown.prototype.bindToDocument = function() {
  5182. $(document).on('click', this.events.hide);
  5183. return this;
  5184. };
  5185.  
  5186. Dropdown.prototype.unbindToDocument = function() {
  5187. $(document).off('click', this.events.hide);
  5188. return this;
  5189. };
  5190.  
  5191. // Ctrl: State handling
  5192. Dropdown.prototype.toggleState = function() {
  5193. this.visible = !this.visible;
  5194. return this;
  5195. };
  5196.  
  5197.  
  5198. // View: DOM manipulation
  5199. Dropdown.prototype.render = function() {
  5200. if (this.visible) {
  5201. this.$show();
  5202. } else {
  5203. this.$hide();
  5204. }
  5205. return this;
  5206. };
  5207.  
  5208. Dropdown.prototype.$hide = function() {
  5209. if (!this.el.$container.hasClass(this.hiddenClass)) {
  5210. this.el.$container.addClass(this.hiddenClass);
  5211. }
  5212. return this;
  5213. };
  5214.  
  5215. Dropdown.prototype.$show = function() {
  5216. if (this.el.$container.hasClass(this.hiddenClass)) {
  5217. this.el.$container.removeClass(this.hiddenClass);
  5218. }
  5219. return this;
  5220. };
  5221.  
  5222. return Dropdown;
  5223.  
  5224. })();
  5225.  
  5226. $('.navbar-item-dropdown-toggle').each(function() {
  5227. var $toggle = $(this),
  5228. d = new Dropdown({
  5229. toggleEl: $toggle,
  5230. containerEl: $toggle.siblings('.navbar-item-dropdown-container'),
  5231. fadeTime: 200,
  5232. visible: false
  5233. })
  5234. ;
  5235. d.render();
  5236. });
  5237. });
  5238.  
  5239.  
  5240. (function(){
  5241. var TIMER_FREQUENCY = 500;
  5242.  
  5243. var drawsimpleclock = function(t, $element) {
  5244. for (var i=0;i<t.length;i++) {
  5245. var d = '' + Math.floor(t[i]);
  5246. if (d.length == 1) d = '0' + d;
  5247. $element.find('.digit.' + i).text(d);
  5248. }
  5249. };
  5250.  
  5251. var drawclock = function(t, $element) {
  5252. for (var i=0;i<t.length;i++) {
  5253. var d = '' + Math.floor(t[i]);
  5254. if (d.length == 1) d = '0' + d;
  5255. for (var j=0;j<2;j++) {
  5256. $element.find('.c' + (2*i + j)).find('.top-cutter .heading-num').text(d.substr(j,1));
  5257. }
  5258. }
  5259. };
  5260.  
  5261. var count = function(d, element) {
  5262. var s = Math.max((new Date(d - new Date())).valueOf(),0),
  5263. digits = $.map([s / 86400000,s / 3600000 % 24,s / 60000 % 60,s / 1000 % 60],function(a) {return parseInt(a);}),
  5264. $el = $(element);
  5265. if ($el.hasClass('simple-timer')) {
  5266. drawsimpleclock(digits, $el);
  5267. } else {
  5268. drawclock(digits, $el);
  5269. }
  5270. };
  5271.  
  5272. var timers = [];
  5273. var timerIntervals = [];
  5274.  
  5275. window.start_countdown_timer = function(d, element){
  5276. var timer_callback = function(){
  5277. count(d, element);
  5278. };
  5279. timers.push(timer_callback);
  5280. timerIntervals.push(setInterval(timer_callback, TIMER_FREQUENCY));
  5281. timer_callback();
  5282. };
  5283.  
  5284. window.start_countdown_timers = function() {
  5285. $('.js-countdown-timer').each(function(i, el) {
  5286. var $el = $(el);
  5287. var end_time = $el.data('end-time');
  5288. var timer = function() {
  5289. $el.text(render_time_remaining_until(end_time));
  5290. };
  5291.  
  5292. timers.push(timer);
  5293. timerIntervals.push(setInterval(timer, TIMER_FREQUENCY));
  5294. });
  5295. };
  5296.  
  5297. window.pause_timers = function(){
  5298. for(var i = timerIntervals.length - 1; i >= 0; i--){
  5299. clearInterval(timerIntervals.pop());
  5300. }
  5301. }
  5302.  
  5303. window.resume_timers = function(){
  5304. for(var i = 0; i < timers.length; i++){
  5305. timerIntervals.push(setInterval(timers[i], TIMER_FREQUENCY));
  5306. }
  5307. }
  5308.  
  5309. })();
  5310.  
  5311. $(function() {
  5312. function start_timer (element) {
  5313. var timing = $(element).data('timing');
  5314. var enddate = new Date(timing.end * 1000);
  5315. start_countdown_timer(enddate, element);
  5316. };
  5317.  
  5318. var $timers = $('.tabbar .tabbar-timer, .tabs .tab-timer');
  5319. $timers.each(function (i, el) {
  5320. start_timer($(el));
  5321. });
  5322. });
  5323. $(function () {
  5324. var $emailForm = $('#ebook-email-form');
  5325.  
  5326. $emailForm.submit(function(e) {
  5327. console.log($emailForm.attr('action'));
  5328. e.preventDefault();
  5329. $.post(
  5330. $emailForm.attr('action'),
  5331. $emailForm.serialize(),
  5332. function(data) {
  5333. console.log(data);
  5334. data = $.parseJSON(data);
  5335. if (!data.success) {
  5336. $('#send-email-message').text('Error: ' + data.message).css('padding-top','10px').addClass('error');
  5337. } else {
  5338. $('#send-email-message').text(data.message).css('padding-top','10px').removeClass('error');
  5339. }
  5340. }
  5341. );
  5342. });
  5343.  
  5344. $('.js-slide-down-trigger').click(function (event) {
  5345. event.preventDefault();
  5346. $customInstruct = $(event.target);
  5347. $customInstruct.siblings('.slide-down').slideToggle();
  5348. });
  5349. });
  5350. </script>
  5351.  
  5352.  
  5353. </div><!--[if lte IE 9]><style>.site-footer-col, .site-footer-cols, .site-footer-social-widget-list { display: inline-block; }
  5354. .site-footer-col section, .site-footer-cols section, .site-footer-social-widget-list section, .site-footer-col div, .site-footer-cols div, .site-footer-social-widget-list div, .site-footer-col .site-footer-social-widget-list-item, .site-footer-cols .site-footer-social-widget-list-item, .site-footer-social-widget-list .site-footer-social-widget-list-item { display: inline-block; }
  5355.  
  5356. .site-footer { text-align: center; }</style><![endif]-->
  5357. <div class="site-footer-padding"></div>
  5358. <footer class="site-footer-container">
  5359. <div class="site-footer">
  5360. <nav class="site-footer-cols">
  5361. <div class="site-footer-col site-footer-col-links">
  5362. <section>
  5363. <ul class="site-footer-list">
  5364. <li class="site-footer-list-item">
  5365. <a href="http://blog.humblebundle.com" target="_blank">
  5366. Blog
  5367. </a>
  5368. </li>
  5369. <li class="site-footer-list-item">
  5370. <a href="/charities" target="_blank">
  5371. Charities
  5372. </a>
  5373. </li>
  5374. <li class="site-footer-list-item">
  5375. <a href="https://jobs.humblebundle.com" target="_blank">
  5376. Careers
  5377. </a>
  5378. </li>
  5379. </ul>
  5380. </section>
  5381. <section>
  5382. <ul class="site-footer-list">
  5383. <li class="site-footer-list-item">
  5384. <a href="https://support.humblebundle.com" target="_blank">
  5385. Support
  5386. </a>
  5387. </li>
  5388. <li class="site-footer-list-item">
  5389. <a href="/resender" target="_blank">
  5390. Order Resender
  5391. </a>
  5392. </li>
  5393. <li class="site-footer-list-item">
  5394. <a href="/developer" target="_blank">
  5395. Developer
  5396. </a>
  5397. </li>
  5398. </ul>
  5399. </section>
  5400. <section>
  5401. <ul class="site-footer-list">
  5402. <li class="site-footer-list-item">
  5403. <a href="/terms" target="_blank">
  5404. Terms of Service
  5405. </a>
  5406. </li>
  5407. <li class="site-footer-list-item">
  5408. <a href="/privacy" target="_blank">
  5409. Privacy Policy
  5410. </a>
  5411. </li>
  5412. <li class="site-footer-list-item">
  5413. <a href="/publishing" target="_blank">
  5414. Publishing
  5415. </a>
  5416. </li>
  5417. </ul>
  5418. </section>
  5419. </div>
  5420.  
  5421. <div class="site-footer-col site-footer-col-social">
  5422. <ul class="site-footer-social-widget-list">
  5423. <li class="site-footer-social-widget-list-item">
  5424. <a href="https://www.facebook.com/humblebundle" target="_blank">Facebook</a>
  5425. <div class="site-footer-facebook-widget">
  5426. <div id="fb-root"></div>
  5427. <fb:like href="https://www.facebook.com/humblebundle" send="false" layout="button_count" width="90" show_faces="false" font="arial"></fb:like>
  5428. </div>
  5429. </li>
  5430. <li class="site-footer-social-widget-list-item">
  5431. <a href="https://twitter.com/humble" target="_blank">Twitter</a>
  5432. <div class="site-footer-twitter-widget">
  5433. <a href="https://twitter.com/humble" class="twitter-follow-button"
  5434. data-show-count="true" data-show-screen-name="false"
  5435. data-width="150px">Follow</a>
  5436. </div>
  5437. </li>
  5438. <li class="site-footer-social-widget-list-item">
  5439. <a href="https://plus.google.com/+HumbleBundle" target="_blank">Google+</a>
  5440. <div class="site-footer-gplus-widget">
  5441. <div class="g-follow" data-annotation="bubble" data-height="20" data-href="https://plus.google.com/+HumbleBundle" data-rel="author"></div>
  5442. </div>
  5443. </li>
  5444. </ul>
  5445. </div>
  5446. </nav>
  5447. </div>
  5448. </footer><!-- /.site-footer --></body>
  5449. </html>
Add Comment
Please, Sign In to add comment