Repository: jessepollak/card Branch: master Commit: fb006e9773b5 Files: 50 Total size: 197.9 KB Directory structure: gitextract_km5b62gn/ ├── .github/ │ └── dependabot.yml ├── .gitignore ├── .gitmodules ├── .npmignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── bower.json ├── dist/ │ ├── card.css │ ├── card.js │ ├── card.js.LICENSE.txt │ ├── jquery.card.js │ └── jquery.card.js.LICENSE.txt ├── package.json ├── public/ │ └── index.html ├── src/ │ ├── coffee/ │ │ ├── card.coffee │ │ └── jquery.card.coffee │ └── scss/ │ ├── _mixins.scss │ ├── browsers/ │ │ ├── _ie.scss │ │ └── _safari.scss │ ├── card.scss │ ├── cards/ │ │ ├── _amex.scss │ │ ├── _card.scss │ │ ├── _dankort.scss │ │ ├── _dinersclub.scss │ │ ├── _discover.scss │ │ ├── _elo.scss │ │ ├── _hipercard.scss │ │ ├── _jcb.scss │ │ ├── _maestro.scss │ │ ├── _mastercard.scss │ │ ├── _troy.scss │ │ ├── _unionpay.scss │ │ ├── _visa.scss │ │ └── _visaelectron.scss │ └── logos/ │ ├── _amex.scss │ ├── _dankort.scss │ ├── _dinersclub.scss │ ├── _discover.scss │ ├── _elo.scss │ ├── _hipercard.scss │ ├── _jcb.scss │ ├── _logo.scss │ ├── _maestro.scss │ ├── _mastercard.scss │ ├── _troy.scss │ ├── _unionpay.scss │ ├── _visa.scss │ └── _visaelectron.scss └── webpack.config.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "daily" ================================================ FILE: .gitignore ================================================ bower_components .tmp .idea coverage node_modules lib ================================================ FILE: .gitmodules ================================================ [submodule "src/scss/bourbon"] path = src/scss/bourbon url = https://github.com/thoughtbot/bourbon.git [submodule "src/coffee/payment"] path = src/coffee/payment url = https://github.com/jessepollak/payment ================================================ FILE: .npmignore ================================================ # Automatically ignored per: # https://www.npmjs.org/doc/developers.html#Keeping-files-out-of-your-package # # .*.swp # ._* # .DS_Store # .git # .hg # .lock-wscript # .svn # .wafpickle-* # CVS # npm-debug.log # node_modules *.seed *.log *.csv *.dat *.out *.pid *.gz *.orig *.jql.js work build src test spec pids logs results coverage lib-cov html-report xunit.xml .project .idea .settings .iml *.sublime-workspace *.sublime-project ehthumbs.db Icon? Thumbs.db .AppleDouble .LSOverride .Spotlight-V100 .Trashes ================================================ FILE: CONTRIBUTING.md ================================================ # Welcome Welcome to the Card contributor guidelines. We are *so happy to have you*. No matter who you are or what your contributing background is, we want this to be a safe, fun place for you to help out. Card follows the [Clef code of conduct](https://github.com/clef/code-of-conduct) and violations are taken very seriously. If you seem something wrong, please don't hesitate to reach out to [@jessepollak](http://twitter.com/jessepollak) through their email on Github. There is also a strict *no meanness* rule. At every step, please be kind and inclusive, even if people are asking not-so-informed questions. # How do I set up for development? Here's how you can get started developing locally: $ git clone --recursive https://github.com/jessepollak/card.git $ cd card $ git submodule init && git submodule update $ npm install $ npm start Now, if you go to localhost:8080/example in your browser, you should see the demo page. # How to contribute Here are the basic steps to get started contributing: 1. Fork then clone the repo and get development running on your computer. You can find instructions for setting up your development environment above. 2. Replicate the issue you're trying to fix or spec out the feature you're trying to add. Understanding the scope of what you're fixing or adding is important and upfront thought helps. 3. Change the code to fix the bug or add the feature. All changes should happen in the relevant `*.coffee` and `*.scss` files. All `*.js` files are automatically build. 4. Verify that your fix or feature works. 5. Run `NODE_ENV=production gulp build` to build your changes in the production build 6. Commit your changes with an informative description 7. Open a pull request to [the primary repo](https://github.com/jessepollak/card) with your new commit and a descriptive message about what the PR does. # What can I contribute? Check out the [issues](http://github.com/jessepollak/card/issues) for a comprehensive list of unfixed bugs and desired features. ## Are you new? If you're new to open source software, it can be really scary to get started. Believe me, we've all been there. To make it a little less scary, we've tagged a bunch of issues with `good-first-PR` tags. These issues or features are ones that we think will be approachable for a new contributor to the project (or to open source in general). They have a ton of information in the issue that should make it easy to get started. If you want to tackle one of these issues, we are here to help you! Ping [@jessepollak](http://twitter.com/jessepollak) and he'll walk you through everything you need to know to get started. ================================================ FILE: LICENSE ================================================ Copyright (c) 2014 Jesse Pollak Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ![npm](https://img.shields.io/npm/v/card) # Card - check out the **[demo](https://jessepollak.github.io/card)** ### A better credit card form in one line of code Card will take *any* credit card form and make it the best part of the checkout process (without you changing anything). Everything is created with pure CSS, HTML, and Javascript — no images required. ![card](http://i.imgur.com/qG3TenO.gif) ## Usage (without jQuery) To use, you'll need to include the Card JavaScript files into your HTML, no CSS link is necessary as the JavaScript file does this for you. You can find the necessary file at `/dist/card.js` and include it in your HTML like so. ```html ``` Once you've included those files, you can initialize Card. ```javascript var card = new Card({ // a selector or DOM element for the form where users will // be entering their information form: 'form', // *required* // a selector or DOM element for the container // where you want the card to appear container: '.card-wrapper', // *required* formSelectors: { numberInput: 'input#number', // optional — default input[name="number"] expiryInput: 'input#expiry', // optional — default input[name="expiry"] cvcInput: 'input#cvc', // optional — default input[name="cvc"] nameInput: 'input#name' // optional - defaults input[name="name"] }, width: 200, // optional — default 350px formatting: true, // optional - default true // Strings for translation - optional messages: { validDate: 'valid\ndate', // optional - default 'valid\nthru' monthYear: 'mm/yyyy', // optional - default 'month/year' }, // Default placeholders for rendered fields - optional placeholders: { number: '•••• •••• •••• ••••', name: 'Full Name', expiry: '••/••', cvc: '•••' }, masks: { cardNumber: '•' // optional - mask card number }, // if true, will log helpful messages for setting up Card debug: false // optional - default false }); ``` ### Installing card from bower If you're using bower, you can install card.js with: bower install card --save ### Installing card from npm If you're using npm, you can install card.js with: npm install --save card var $ = require("jquery"); // The current card.js code does not explictly require jQuery, but instead uses the global, so this line is needed. window.jQuery = $; var card = require("card"); ### Using multiple inputs for one field Card can be used in forms where you have multiple inputs that render to a single field (i.e. you have a first and last name input). To use Card with this functionality, just pass in a selector that selects the fields in the correct order. For example, ```html
``` ### Rendering with different initial card placeholders Card renders with default placeholders for card `name`, `number`, `expiry`, and `cvc`. To override these placeholders, you can pass in a `placeholders` object. ```html
``` ### Translation To render the card with the strings in a different language, you can pass in a `messages` object. ```html
``` ## Using with jQuery To use with jQuery, you'll need to include the `jquery.card.js` file into your HTML. You can find the necessary file at `/dist/jquery.card.js` and include it in your HTML like so. ```html ``` Once you've included those files, you can initialize Card with jQuery. ```javascript $('form').card({ // a selector or DOM element for the container // where you want the card to appear container: '.card-wrapper', // *required* // all of the other options from above }); ``` ## Using with other javascript libraries Card has wrappers that make it easy to use with other javascript libraries: ### Angular 1.x * [angular-card](https://github.com/gavruk/angular-card) ### Angular 2+ * [ngx-card](https://github.com/ihym/ngx-card) ### Ember * [ember-credit-card](https://github.com/esbanarango/ember-credit-card) ### React * [react-credit-card](https://github.com/JohnyDays/react-credit-card) * [card-react](https://github.com/shatran/card-react) * [react-plastic](https://github.com/armsteadj1/react-plastic) - static CSS only version. ### Vue For use with VueJs, install card.js from npm: ```bash npm install card --save ``` Add in your component an Div with class 'card-wrapper', just pass in a selector that selects the fields in the correct order. Import the component card.js and add the object in instance mounted like this example: ```html
``` ## Development To contribute, follow this steps: ```bash $ git clone --recursive https://github.com/jessepollak/card.git $ cd card $ git submodule init && git submodule update $ npm install $ npm run development ``` Now, if you go to localhost:8080/example in your browser, you should see the demo page. ## Places using Card Card is used in the wild in these places: * [InspectAll](http://www.inspectall.com/) * [PennyWhale](https://www.pennywhale.com/) * [MakeSpace](https://www.makespace.com/) * [Blumpa](http://www.blumpa.com/) * [CourseLoads](http://www.courseloads.com/) * [PubNub](http://pubnub.com/) * [GigSalad](https://www.gigsalad.com) * [Boligninja](http://www.boligninja.dk) * [EasyCarros](http://www.easycarros.com/) * [Sintelle](http://www.sintelleparapharmacie.com/) * [Wevorce](http://wevorce.com/) * [PayumServer](https://github.com/Payum/PayumServer) * [Paribus](https://paribus.co) * [Bizzabo](https://www.bizzabo.com) * [Tortuba](https://www.tortuba.com) * [Netlify](https://www.netlify.com) * [The Spice House](https://www.thespicehouse.com/) * [Touts](https://www.touts.com.br/) * [Ryman Limited](http://www.ryman.co.uk) * [Robert Dyas](http://www.robertdyas.co.uk) * [ROKA](https://www.rokahub.com) * [LeSalon](https://lesalon.com) * [Kenyan Directorate Of Immigration And Citizen Service](https://dis.ecitizen.go.ke) Are you using Card in production? If so, we'd love to link to you from this page. Open a PR or drop [@jessepollak](http://twitter.com/jessepollak) a line on [Twitter](http://twitter.com/jessepollak) and we'll add you right away! ## Project scope The project scope is to improve the capture of payment cards on websites. Issues and fixes related to the user interface and validating of payment cards are in scope. For questions on how to use Card in your particular project, please ask on Stack Overflow or similar forum. ## Donations If you'd like to donate to help support development of Card, send Bitcoin directly to `17NUKd3v7GWben18kGhmFafa4ZpWrXpQSC` or through Coinbase [here](https://coinbase.com/jessepollak). ================================================ FILE: bower.json ================================================ { "name": "card", "homepage": "https://github.com/jessepollak/card", "authors": ["Jesse Pollak "], "description": "Card let's you add an interactive, CSS3 credit card animation to your credit card form to help your users through the process.", "main": ["dist/card.js"], "keywords": ["card", "credit", "card", "form"], "dependencies": { "jquery": ">=1.5" }, "license": "MIT", "ignore": ["**/.*", "node_modules", "example", "test", "tests"], "version": "2.5.0" } ================================================ FILE: dist/card.css ================================================ .jp-card.jp-card-safari.jp-card-identified .jp-card-front:before,.jp-card.jp-card-safari.jp-card-identified .jp-card-back:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}.jp-card.jp-card-ie-10.jp-card-flipped,.jp-card.jp-card-ie-11.jp-card-flipped{-webkit-transform:0deg;-moz-transform:0deg;-ms-transform:0deg;-o-transform:0deg;transform:0deg}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-front,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-front{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back:after{left:18%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-cvc,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-cvc{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg);left:5%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny{left:84%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny:after{left:-480%;-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card.jp-card-ie-10.jp-card-amex .jp-card-back,.jp-card.jp-card-ie-11.jp-card-amex .jp-card-back{display:none}.jp-card-logo{height:36px;width:60px;font-style:italic}.jp-card-logo,.jp-card-logo:before,.jp-card-logo:after{box-sizing:border-box}.jp-card-logo.jp-card-amex{text-transform:uppercase;font-size:4px;font-weight:bold;color:white;background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);border:1px solid #EEE}.jp-card-logo.jp-card-amex:before,.jp-card-logo.jp-card-amex:after{width:28px;display:block;position:absolute;left:16px}.jp-card-logo.jp-card-amex:before{height:28px;content:"american";top:3px;text-align:left;padding-left:2px;padding-top:11px;background:#267AC3}.jp-card-logo.jp-card-amex:after{content:"express";bottom:11px;text-align:right;padding-right:2px}.jp-card.jp-card-amex.jp-card-flipped{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:before,.jp-card.jp-card-amex.jp-card-identified .jp-card-back:before{background-color:#108168}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-logo.jp-card-amex{opacity:1}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-cvc{visibility:visible}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:after{opacity:1}.jp-card-logo.jp-card-discover{background:#f60;color:#111;text-transform:uppercase;font-style:normal;font-weight:bold;font-size:10px;text-align:center;overflow:hidden;z-index:1;padding-top:9px;letter-spacing:.03em;border:1px solid #EEE}.jp-card-logo.jp-card-discover:before,.jp-card-logo.jp-card-discover:after{content:" ";display:block;position:absolute}.jp-card-logo.jp-card-discover:before{background:white;width:200px;height:200px;border-radius:200px;bottom:-5%;right:-80%;z-index:-1}.jp-card-logo.jp-card-discover:after{width:8px;height:8px;border-radius:4px;top:10px;left:27px;background-color:#f60;background-image:-webkit-radial-gradient(#f60,#fff);background-image:radial-gradient( #f60,#fff);content:"network";font-size:4px;line-height:24px;text-indent:-7px}.jp-card .jp-card-front .jp-card-logo.jp-card-discover{right:12%;top:18%}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:before,.jp-card.jp-card-discover.jp-card-identified .jp-card-back:before{background-color:#86B8CF}.jp-card.jp-card-discover.jp-card-identified .jp-card-logo.jp-card-discover{opacity:1}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:after{-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;content:" ";display:block;background-color:#f60;background-image:-webkit-linear-gradient(#f60,#ffa366,#f60);background-image:linear-gradient(#f60,#ffa366,#f60);height:50px;width:50px;border-radius:25px;position:absolute;left:100%;top:15%;margin-left:-25px;box-shadow:inset 1px 1px 3px 1px rgba(0,0,0,0.5)}.jp-card-logo.jp-card-unionpay{width:60px;display:block;height:40px;background:#e21836;-webkit-transform:skew(-15deg);-moz-transform:skew(20deg);-o-transform:skew(20deg);border-radius:5px;font-size:10px;z-index:1;line-height:33px;color:#fff;text-align:center;font-family:"Sans-serif", "Microsoft Yahei", "\5FAE\8F6F\96C5\9ED1", "Hiragino Sans", "Gulim", "\5B8B\4F53";font-weight:bold}.jp-card-logo.jp-card-unionpay:after,.jp-card-logo.jp-card-unionpay:before{display:block;margin:0 auto;position:absolute;height:40px;top:0;z-index:-1}.jp-card-logo.jp-card-unionpay:before{content:" ";width:28px;background:#00447c;left:14px;border-top-left-radius:5px;border-bottom-left-radius:5px}.jp-card-logo.jp-card-unionpay:after{content:"银联";width:26px;background:#007b84;left:34px;border-radius:5px;font-size:10px;line-height:54px;text-indent:-17px}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-back:before,.jp-card.jp-card-unionpay.jp-card-identified .jp-card-front:before{background-color:#987c00}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-logo.jp-card-unionpay{opacity:1}.jp-card-logo.jp-card-visa{text-transform:uppercase;color:white;text-align:center;font-weight:bold;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-visa:before,.jp-card-logo.jp-card-visa:after{content:" ";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visa:before{position:absolute;left:-4px;width:0;height:0;border-style:solid;border-width:0 12px 6px 0;border-color:transparent #ffffff transparent transparent}.jp-card.jp-card-visa.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visa.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visa.jp-card-identified .jp-card-logo.jp-card-visa{opacity:1;box-shadow:none}.jp-card-logo.jp-card-visaelectron{background:white;text-transform:uppercase;color:#1A1876;text-align:center;font-weight:bold;font-size:15px;line-height:18px}.jp-card-logo.jp-card-visaelectron:before,.jp-card-logo.jp-card-visaelectron:after{content:" ";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visaelectron:before{background:#1A1876}.jp-card-logo.jp-card-visaelectron:after{background:#E79800}.jp-card-logo.jp-card-visaelectron .elec{float:right;font-family:arial;font-size:9px;margin-right:1px;margin-top:-5px;text-transform:none}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-logo.jp-card-visaelectron{opacity:1}.jp-card-logo.jp-card-mastercard{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:9px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-mastercard:before,.jp-card-logo.jp-card-mastercard:after{content:" ";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-mastercard:before{left:0;background:#EB001B;z-index:-1;opacity:0.9}.jp-card-logo.jp-card-mastercard:after{right:0;background:#FF5F00;z-index:-2}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front .jp-card-logo.jp-card-mastercard,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back .jp-card-logo.jp-card-mastercard{box-shadow:none}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back:before{background-color:#0061A8}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-logo.jp-card-mastercard{opacity:1}.jp-card-logo.jp-card-maestro{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:14px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-maestro:before,.jp-card-logo.jp-card-maestro:after{content:" ";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-maestro:before{left:0;background:#EB001B;z-index:-2}.jp-card-logo.jp-card-maestro:after{right:0;background:#00A2E5;z-index:-1;opacity:0.8}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front .jp-card-logo.jp-card-maestro,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back .jp-card-logo.jp-card-maestro{box-shadow:none}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front:before,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back:before{background-color:#0B2C5F}.jp-card.jp-card-maestro.jp-card-identified .jp-card-logo.jp-card-maestro{opacity:1}.jp-card-logo.jp-card-dankort{width:60px;height:36px;padding:3px;border-radius:8px;border:#000 1px solid;background-color:#fff}.jp-card-logo.jp-card-dankort .dk{position:relative;width:100%;height:100%;overflow:hidden}.jp-card-logo.jp-card-dankort .dk:before{background-color:#ED1C24;content:'';position:absolute;width:100%;height:100%;display:block;border-radius:6px}.jp-card-logo.jp-card-dankort .dk:after{content:'';position:absolute;top:50%;margin-top:-7.7px;right:0;width:0;height:0;border-style:solid;border-width:7px 7px 10px 0;border-color:transparent #ED1C24 transparent transparent;z-index:1}.jp-card-logo.jp-card-dankort .d,.jp-card-logo.jp-card-dankort .k{position:absolute;top:50%;width:50%;display:block;height:15.4px;margin-top:-7.7px;background:white}.jp-card-logo.jp-card-dankort .d{left:0;border-radius:0 8px 10px 0}.jp-card-logo.jp-card-dankort .d:before{content:'';position:absolute;top:50%;left:50%;display:block;background:#ED1C24;border-radius:2px 4px 6px 0px;height:5px;width:7px;margin:-3px 0 0 -4px}.jp-card-logo.jp-card-dankort .k{right:0}.jp-card-logo.jp-card-dankort .k:before,.jp-card-logo.jp-card-dankort .k:after{content:'';position:absolute;right:50%;width:0;height:0;border-style:solid;margin-right:-1px}.jp-card-logo.jp-card-dankort .k:before{top:0;border-width:8px 5px 0 0;border-color:#ED1C24 transparent transparent transparent}.jp-card-logo.jp-card-dankort .k:after{bottom:0;border-width:0 5px 8px 0;border-color:transparent transparent #ED1C24 transparent}.jp-card.jp-card-dankort.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dankort.jp-card-identified .jp-card-back:before{background-color:#0055C7}.jp-card.jp-card-dankort.jp-card-identified .jp-card-logo.jp-card-dankort{opacity:1}.jp-card-logo.jp-card-elo{height:50px;width:50px;border-radius:100%;background:black;color:white;text-align:center;text-transform:lowercase;font-size:21px;font-style:normal;letter-spacing:1px;font-weight:bold;padding-top:13px}.jp-card-logo.jp-card-elo .e,.jp-card-logo.jp-card-elo .l,.jp-card-logo.jp-card-elo .o{display:inline-block;position:relative}.jp-card-logo.jp-card-elo .e{-webkit-transform:rotate(-15deg);-moz-transform:rotate(-15deg);-ms-transform:rotate(-15deg);-o-transform:rotate(-15deg);transform:rotate(-15deg)}.jp-card-logo.jp-card-elo .o{position:relative;display:inline-block;width:12px;height:12px;right:0;top:7px;border-radius:100%;background-image:-webkit-linear-gradient( #ff0 50%,red 50%);background-image:linear-gradient( #ff0 50%,red 50%);-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);text-indent:-9999px}.jp-card-logo.jp-card-elo .o:before{content:"";position:absolute;width:49%;height:49%;background:black;border-radius:100%;text-indent:-99999px;top:25%;left:25%}.jp-card.jp-card-elo.jp-card-identified .jp-card-front:before,.jp-card.jp-card-elo.jp-card-identified .jp-card-back:before{background-color:#6F6969}.jp-card.jp-card-elo.jp-card-identified .jp-card-logo.jp-card-elo{opacity:1}.jp-card-logo.jp-card-jcb{border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px;background-color:white;font-style:normal;color:white;width:50px;padding:2px 0 0 2px}.jp-card-logo.jp-card-jcb>div{width:15px;margin-right:1px;display:inline-block;text-align:center;text-shadow:1px 1px rgba(0,0,0,0.6);border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px}.jp-card-logo.jp-card-jcb>div:before,.jp-card-logo.jp-card-jcb>div:after{content:" ";display:block;height:8px}.jp-card-logo.jp-card-jcb>div.j{background-color:#000063;background-image:-webkit-linear-gradient(left, #000063,#008cff);background-image:linear-gradient(to right,#000063,#008cff)}.jp-card-logo.jp-card-jcb>div.c{background-color:#630000;background-image:-webkit-linear-gradient(left, #630000,#ff008d);background-image:linear-gradient(to right,#630000,#ff008d)}.jp-card-logo.jp-card-jcb>div.b{background-color:#006300;background-image:-webkit-linear-gradient(left, #006300,lime);background-image:linear-gradient(to right,#006300,lime)}.jp-card.jp-card-jcb.jp-card-identified .jp-card-front:before,.jp-card.jp-card-jcb.jp-card-identified .jp-card-back:before{background-color:#CB8000}.jp-card.jp-card-jcb.jp-card-identified .jp-card-logo.jp-card-jcb{opacity:1;box-shadow:none}.jp-card-logo.jp-card-dinersclub{font-family:serif;height:40px;width:100px;color:white;font-size:17px;font-style:normal;letter-spacing:1px}.jp-card-logo.jp-card-dinersclub::before,.jp-card-logo.jp-card-dinersclub::after{display:block;position:relative}.jp-card-logo.jp-card-dinersclub::before{content:'Diners Club'}.jp-card-logo.jp-card-dinersclub::after{content:'International';text-transform:uppercase;font-size:0.6em}.jp-card.jp-card-dinersclub .jp-card-front .jp-card-logo{box-shadow:none !important}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-back:before{background-color:#999}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-logo.jp-card-dinersclub{opacity:1}.jp-card-logo.jp-card-hipercard{height:20px;width:100px;color:white;font-size:21px;font-style:italic;font-weight:bold}.jp-card-logo.jp-card-hipercard::before,.jp-card-logo.jp-card-hipercard::after{display:block;position:relative}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-hipercard.jp-card-identified .jp-card-back:before{background-color:#770304}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-logo.jp-card-hipercard{opacity:1;box-shadow:none}.jp-card-logo.jp-card-troy{text-transform:lowercase;color:#fff;text-align:center;font-weight:700;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-troy:before,.jp-card-logo.jp-card-troy:after{content:\"\";display:block;width:26%;height:6%;background:#22b8c3;right:32%;top:24%;position:absolute;transform:rotate(105deg)}.jp-card.jp-card-troy.jp-card-identified .jp-card-front:before,.jp-card.jp-card-troy.jp-card-identified .jp-card-back:before{background-color:#01adba}.jp-card.jp-card-troy.jp-card-identified .jp-card-logo.jp-card-troy{opacity:1;box-shadow:none}.jp-card-container{-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px;width:350px;max-width:100%;height:200px;margin:auto;z-index:1;position:relative}.jp-card{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1;position:relative;width:100%;height:100%;min-width:315px;border-radius:10px;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear}.jp-card>*,.jp-card>*:after,.jp-card>*:before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:inherit}.jp-card.jp-card-flipped{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back,.jp-card .jp-card-front{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden;border-radius:10px;background:#ddd}.jp-card .jp-card-back:before,.jp-card .jp-card-front:before{content:" ";display:block;position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;border-radius:10px;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease}.jp-card .jp-card-back:after,.jp-card .jp-card-front:after{content:" ";display:block}.jp-card .jp-card-back .jp-card-display,.jp-card .jp-card-front .jp-card-display{color:#fff;font-weight:normal;opacity:0.5;-webkit-transition:opacity 400ms linear;-moz-transition:opacity 400ms linear;transition:opacity 400ms linear}.jp-card .jp-card-back .jp-card-display.jp-card-focused,.jp-card .jp-card-front .jp-card-display.jp-card-focused{opacity:1;font-weight:700}.jp-card .jp-card-back .jp-card-cvc,.jp-card .jp-card-front .jp-card-cvc{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:14px}.jp-card .jp-card-back .jp-card-shiny,.jp-card .jp-card-front .jp-card-shiny{width:50px;height:35px;border-radius:5px;background:#ccc;position:relative}.jp-card .jp-card-back .jp-card-shiny:before,.jp-card .jp-card-front .jp-card-shiny:before{content:" ";display:block;width:70%;height:60%;border-top-right-radius:5px;border-bottom-right-radius:5px;background:#d9d9d9;position:absolute;top:20%}.jp-card .jp-card-front .jp-card-logo{position:absolute;opacity:0;right:5%;top:8%;-webkit-transition:400ms;-moz-transition:400ms;transition:400ms}.jp-card .jp-card-front .jp-card-lower{width:80%;position:absolute;left:10%;bottom:30px}@media only screen and (max-width: 480px){.jp-card .jp-card-front .jp-card-lower{width:90%;left:5%}}.jp-card .jp-card-front .jp-card-lower .jp-card-cvc{visibility:hidden;float:right;position:relative;bottom:5px}.jp-card .jp-card-front .jp-card-lower .jp-card-number{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:24px;clear:both;margin-bottom:30px}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;letter-spacing:0;position:relative;float:right;width:25%}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after,.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;font-size:7px;white-space:pre;display:block;opacity:0.5}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{content:attr(data-before);margin-bottom:2px;font-size:7px;text-transform:uppercase}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after{position:absolute;content:attr(data-after);text-align:right;right:100%;margin-right:5px;margin-top:2px;bottom:0}.jp-card .jp-card-front .jp-card-lower .jp-card-name{text-transform:uppercase;font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:20px;max-height:45px;position:absolute;bottom:0;width:190px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:horizontal;overflow:hidden;text-overflow:ellipsis}.jp-card .jp-card-back{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back .jp-card-bar{background-color:#444;background-image:-webkit-linear-gradient(#444,#333);background-image:linear-gradient(#444,#333);width:100%;height:20%;position:absolute;top:10%}.jp-card .jp-card-back:after{content:" ";display:block;background-color:#fff;background-image:-webkit-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff);width:80%;height:16%;position:absolute;top:40%;left:2%}.jp-card .jp-card-back .jp-card-cvc{position:absolute;top:40%;left:85%;-webkit-transition-delay:600ms;-moz-transition-delay:600ms;transition-delay:600ms}.jp-card .jp-card-back .jp-card-shiny{position:absolute;top:66%;left:2%}.jp-card .jp-card-back .jp-card-shiny:after{content:"This card has been issued by Jesse Pollak and is licensed for anyone to use anywhere for free. It comes with no warranty. For support issues, please visit: github.com/jessepollak/card.";position:absolute;left:120%;top:5%;color:white;font-size:7px;width:230px;opacity:0.5}.jp-card.jp-card-identified{box-shadow:0 0 20px rgba(0,0,0,0.3)}.jp-card.jp-card-identified .jp-card-back,.jp-card.jp-card-identified .jp-card-front{background-color:#000;background-color:rgba(0,0,0,0.5)}.jp-card.jp-card-identified .jp-card-back:before,.jp-card.jp-card-identified .jp-card-front:before{-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease;background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);opacity:1}.jp-card.jp-card-identified .jp-card-back .jp-card-logo,.jp-card.jp-card-identified .jp-card-front .jp-card-logo{box-shadow:0 0 0 2px rgba(255,255,255,0.3)}.jp-card.jp-card-identified.no-radial-gradient .jp-card-back:before,.jp-card.jp-card-identified.no-radial-gradient .jp-card-front:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}@media (max-width: 450px){.card-wrapper{max-width:80vw;width:100%;margin:20px auto;overflow-x:hidden}.card-wrapper>.jp-card-container{transform:scale(0.625);transform-origin:left center}} ================================================ FILE: dist/card.js ================================================ /*! For license information please see card.js.LICENSE.txt */ var card;(()=>{var r={579:function(r,e,t){var a,n,o;t(346),n=t(202),t(28),o=t(907),a=function(){var r,e;class t{template(r,e){return r.replace(/\{\{(.*?)\}\}/g,(function(r,t,a){return e[t]}))}constructor(r){var e;this.maskCardNumber=this.maskCardNumber.bind(this),this.options=o(!0,this.defaults,r),this.options.form?(this.$el=n(this.options.form),this.options.container?(this.$container=n(this.options.container),(e=n.isDOMElement(this.$container)?this.$container:this.$container[0]).getAttribute(this.initializedDataAttr)||(e.setAttribute(this.initializedDataAttr,!0),this.render(),this.attachHandlers(),this.handleInitialPlaceholders())):console.log("Please provide a container")):console.log("Please provide a form")}render(){var r,e,t,a,i,d,c,p;for(t in n.append(this.$container,this.template(this.cardTemplate,o({},this.options.messages,this.options.placeholders))),i=this.options.cardSelectors)c=i[t],this[`$${t}`]=n.find(this.$container,c);for(t in d=this.options.formSelectors)c=d[t],c=this.options[t]?this.options[t]:c,!(a=n.find(this.$el,c)).length&&this.options.debug&&console.error(`Card can't find a ${t} in your form.`),this[`$${t}`]=a;if(this.options.formatting&&(Payment.formatCardNumber(this.$numberInput),Payment.formatCardCVC(this.$cvcInput),Payment.formatCardExpiry(this.$expiryInput)),this.options.width&&(r=n(this.options.cardSelectors.cardContainer)[0],e=parseInt(r.clientWidth||window.getComputedStyle(r).width),r.style.transform=`scale(${this.options.width/e})`),("undefined"!=typeof navigator&&null!==navigator?navigator.userAgent:void 0)&&-1!==(p=navigator.userAgent.toLowerCase()).indexOf("safari")&&-1===p.indexOf("chrome")&&n.addClass(this.$card,"jp-card-safari"),/MSIE 10\./i.test(navigator.userAgent)&&n.addClass(this.$card,"jp-card-ie-10"),/rv:11.0/i.test(navigator.userAgent))return n.addClass(this.$card,"jp-card-ie-11")}attachHandlers(){var e,t;return t=[this.validToggler("cardNumber")],this.options.masks.cardNumber&&t.push(this.maskCardNumber),r(this.$numberInput,this.$numberDisplay,{fill:!1,filters:t}),n.on(this.$numberInput,"payment.cardType",this.handle("setCardType")),(e=[function(r){return 1===r.length&&"0"===r[0]?"":r.replace(/(\s+)/g,"")}]).push(this.validToggler("cardExpiry")),r(this.$expiryInput,this.$expiryDisplay,{join:function(r){return 2===r[0].length||r[1]?"/":""},filters:e}),r(this.$cvcInput,this.$cvcDisplay,{filters:this.validToggler("cardCVC")}),n.on(this.$cvcInput,"focus",this.handle("flipCard")),n.on(this.$cvcInput,"blur",this.handle("unflipCard")),r(this.$nameInput,this.$nameDisplay,{fill:!1,filters:this.validToggler("cardHolderName"),join:" "})}handleInitialPlaceholders(){var r,e,t,a;for(e in a=[],t=this.options.formSelectors)t[e],(r=this[`$${e}`])instanceof NodeList&&(r=r[0]),n.val(r)?(n.trigger(r,"paste"),a.push(function(r){return setTimeout((function(){return n.trigger(r,"keyup")}))}(r))):a.push(void 0);return a}handle(r){return e=>{var t;return(t=Array.prototype.slice.call(arguments)).unshift(e.target),this.handlers[r].apply(this,t)}}validToggler(r){var e;return"cardExpiry"===r?e=function(r){var e;return e=Payment.fns.cardExpiryVal(r),Payment.fns.validateCardExpiry(e.month,e.year)}:"cardCVC"===r?e=r=>Payment.fns.validateCardCVC(r,this.cardType):"cardNumber"===r?e=function(r){return Payment.fns.validateCardNumber(r)}:"cardHolderName"===r&&(e=function(r){return""!==r}),(r,t,a)=>{var n;return n=e(r),this.toggleValidClass(t,n),this.toggleValidClass(a,n),r}}toggleValidClass(r,e){return n.toggleClass(r,this.options.classes.valid,e),n.toggleClass(r,this.options.classes.invalid,!e)}maskCardNumber(r,e,t){var a,n;return a=this.options.masks.cardNumber,(n=r.split(" ")).length>=3?(n.forEach((function(r,e){if(e!==n.length-1)return n[e]=n[e].replace(/\d/g,a)})),n.join(" ")):r.replace(/\d/g,a)}getCardType(){return Payment.fns.cardType(this.$numberInput[0].value)||"unknown"}}return t.prototype.initializedDataAttr="data-jp-card-initialized",t.prototype.cardTemplate='
',t.prototype.cardTypes=["jp-card-amex","jp-card-dankort","jp-card-dinersclub","jp-card-discover","jp-card-unionpay","jp-card-jcb","jp-card-laser","jp-card-maestro","jp-card-mastercard","jp-card-troy","jp-card-unionpay","jp-card-visa","jp-card-visaelectron","jp-card-elo","jp-card-hipercard"],t.prototype.defaults={formatting:!0,formSelectors:{numberInput:'input[name="number"]',expiryInput:'input[name="expiry"]',cvcInput:'input[name="cvc"]',nameInput:'input[name="name"]'},cardSelectors:{cardContainer:".jp-card-container",card:".jp-card",numberDisplay:".jp-card-number",expiryDisplay:".jp-card-expiry",cvcDisplay:".jp-card-cvc",nameDisplay:".jp-card-name"},messages:{validDate:"valid\nthru",monthYear:"month/year"},placeholders:{number:"•••• •••• •••• ••••",cvc:"•••",expiry:"••/••",name:"Full Name"},masks:{cardNumber:!1},classes:{valid:"jp-card-valid",invalid:"jp-card-invalid"},debug:!1},t.prototype.handlers={setCardType:function(r,e){var t,a;if(t=e.data,a=new CustomEvent("card-type-changed",{detail:e.data}),document.dispatchEvent(a),!n.hasClass(this.$card,t))return n.removeClass(this.$card,"jp-card-unknown"),n.removeClass(this.$card,this.cardTypes.join(" ")),n.addClass(this.$card,`jp-card-${t}`),n.toggleClass(this.$card,"jp-card-identified","unknown"!==t),this.cardType=t},flipCard:function(){return n.addClass(this.$card,"jp-card-flipped")},unflipCard:function(){return n.removeClass(this.$card,"jp-card-flipped")}},r=function(r,t,a={}){var o,i,d;return a.fill=a.fill||!1,a.filters=a.filters||[],a.filters instanceof Array||(a.filters=[a.filters]),a.join=a.join||"","function"!=typeof a.join&&(o=a.join,a.join=function(){return o}),d=function(){var r,e,a;for(a=[],r=0,e=t.length;r{"use strict";t.d(e,{Z:()=>d});var a=t(81),n=t.n(a),o=t(645),i=t.n(o)()(n());i.push([r.id,'.jp-card.jp-card-safari.jp-card-identified .jp-card-front:before,.jp-card.jp-card-safari.jp-card-identified .jp-card-back:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}.jp-card.jp-card-ie-10.jp-card-flipped,.jp-card.jp-card-ie-11.jp-card-flipped{-webkit-transform:0deg;-moz-transform:0deg;-ms-transform:0deg;-o-transform:0deg;transform:0deg}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-front,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-front{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back:after{left:18%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-cvc,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-cvc{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg);left:5%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny{left:84%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny:after{left:-480%;-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card.jp-card-ie-10.jp-card-amex .jp-card-back,.jp-card.jp-card-ie-11.jp-card-amex .jp-card-back{display:none}.jp-card-logo{height:36px;width:60px;font-style:italic}.jp-card-logo,.jp-card-logo:before,.jp-card-logo:after{box-sizing:border-box}.jp-card-logo.jp-card-amex{text-transform:uppercase;font-size:4px;font-weight:bold;color:white;background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);border:1px solid #EEE}.jp-card-logo.jp-card-amex:before,.jp-card-logo.jp-card-amex:after{width:28px;display:block;position:absolute;left:16px}.jp-card-logo.jp-card-amex:before{height:28px;content:"american";top:3px;text-align:left;padding-left:2px;padding-top:11px;background:#267AC3}.jp-card-logo.jp-card-amex:after{content:"express";bottom:11px;text-align:right;padding-right:2px}.jp-card.jp-card-amex.jp-card-flipped{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:before,.jp-card.jp-card-amex.jp-card-identified .jp-card-back:before{background-color:#108168}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-logo.jp-card-amex{opacity:1}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-cvc{visibility:visible}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:after{opacity:1}.jp-card-logo.jp-card-discover{background:#f60;color:#111;text-transform:uppercase;font-style:normal;font-weight:bold;font-size:10px;text-align:center;overflow:hidden;z-index:1;padding-top:9px;letter-spacing:.03em;border:1px solid #EEE}.jp-card-logo.jp-card-discover:before,.jp-card-logo.jp-card-discover:after{content:" ";display:block;position:absolute}.jp-card-logo.jp-card-discover:before{background:white;width:200px;height:200px;border-radius:200px;bottom:-5%;right:-80%;z-index:-1}.jp-card-logo.jp-card-discover:after{width:8px;height:8px;border-radius:4px;top:10px;left:27px;background-color:#f60;background-image:-webkit-radial-gradient(#f60,#fff);background-image:radial-gradient( #f60,#fff);content:"network";font-size:4px;line-height:24px;text-indent:-7px}.jp-card .jp-card-front .jp-card-logo.jp-card-discover{right:12%;top:18%}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:before,.jp-card.jp-card-discover.jp-card-identified .jp-card-back:before{background-color:#86B8CF}.jp-card.jp-card-discover.jp-card-identified .jp-card-logo.jp-card-discover{opacity:1}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:after{-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;content:" ";display:block;background-color:#f60;background-image:-webkit-linear-gradient(#f60,#ffa366,#f60);background-image:linear-gradient(#f60,#ffa366,#f60);height:50px;width:50px;border-radius:25px;position:absolute;left:100%;top:15%;margin-left:-25px;box-shadow:inset 1px 1px 3px 1px rgba(0,0,0,0.5)}.jp-card-logo.jp-card-unionpay{width:60px;display:block;height:40px;background:#e21836;-webkit-transform:skew(-15deg);-moz-transform:skew(20deg);-o-transform:skew(20deg);border-radius:5px;font-size:10px;z-index:1;line-height:33px;color:#fff;text-align:center;font-family:"Sans-serif", "Microsoft Yahei", "\\5FAE\\8F6F\\96C5\\9ED1", "Hiragino Sans", "Gulim", "\\5B8B\\4F53";font-weight:bold}.jp-card-logo.jp-card-unionpay:after,.jp-card-logo.jp-card-unionpay:before{display:block;margin:0 auto;position:absolute;height:40px;top:0;z-index:-1}.jp-card-logo.jp-card-unionpay:before{content:" ";width:28px;background:#00447c;left:14px;border-top-left-radius:5px;border-bottom-left-radius:5px}.jp-card-logo.jp-card-unionpay:after{content:"银联";width:26px;background:#007b84;left:34px;border-radius:5px;font-size:10px;line-height:54px;text-indent:-17px}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-back:before,.jp-card.jp-card-unionpay.jp-card-identified .jp-card-front:before{background-color:#987c00}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-logo.jp-card-unionpay{opacity:1}.jp-card-logo.jp-card-visa{text-transform:uppercase;color:white;text-align:center;font-weight:bold;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-visa:before,.jp-card-logo.jp-card-visa:after{content:" ";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visa:before{position:absolute;left:-4px;width:0;height:0;border-style:solid;border-width:0 12px 6px 0;border-color:transparent #ffffff transparent transparent}.jp-card.jp-card-visa.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visa.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visa.jp-card-identified .jp-card-logo.jp-card-visa{opacity:1;box-shadow:none}.jp-card-logo.jp-card-visaelectron{background:white;text-transform:uppercase;color:#1A1876;text-align:center;font-weight:bold;font-size:15px;line-height:18px}.jp-card-logo.jp-card-visaelectron:before,.jp-card-logo.jp-card-visaelectron:after{content:" ";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visaelectron:before{background:#1A1876}.jp-card-logo.jp-card-visaelectron:after{background:#E79800}.jp-card-logo.jp-card-visaelectron .elec{float:right;font-family:arial;font-size:9px;margin-right:1px;margin-top:-5px;text-transform:none}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-logo.jp-card-visaelectron{opacity:1}.jp-card-logo.jp-card-mastercard{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:9px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-mastercard:before,.jp-card-logo.jp-card-mastercard:after{content:" ";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-mastercard:before{left:0;background:#EB001B;z-index:-1;opacity:0.9}.jp-card-logo.jp-card-mastercard:after{right:0;background:#FF5F00;z-index:-2}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front .jp-card-logo.jp-card-mastercard,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back .jp-card-logo.jp-card-mastercard{box-shadow:none}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back:before{background-color:#0061A8}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-logo.jp-card-mastercard{opacity:1}.jp-card-logo.jp-card-maestro{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:14px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-maestro:before,.jp-card-logo.jp-card-maestro:after{content:" ";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-maestro:before{left:0;background:#EB001B;z-index:-2}.jp-card-logo.jp-card-maestro:after{right:0;background:#00A2E5;z-index:-1;opacity:0.8}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front .jp-card-logo.jp-card-maestro,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back .jp-card-logo.jp-card-maestro{box-shadow:none}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front:before,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back:before{background-color:#0B2C5F}.jp-card.jp-card-maestro.jp-card-identified .jp-card-logo.jp-card-maestro{opacity:1}.jp-card-logo.jp-card-dankort{width:60px;height:36px;padding:3px;border-radius:8px;border:#000 1px solid;background-color:#fff}.jp-card-logo.jp-card-dankort .dk{position:relative;width:100%;height:100%;overflow:hidden}.jp-card-logo.jp-card-dankort .dk:before{background-color:#ED1C24;content:\'\';position:absolute;width:100%;height:100%;display:block;border-radius:6px}.jp-card-logo.jp-card-dankort .dk:after{content:\'\';position:absolute;top:50%;margin-top:-7.7px;right:0;width:0;height:0;border-style:solid;border-width:7px 7px 10px 0;border-color:transparent #ED1C24 transparent transparent;z-index:1}.jp-card-logo.jp-card-dankort .d,.jp-card-logo.jp-card-dankort .k{position:absolute;top:50%;width:50%;display:block;height:15.4px;margin-top:-7.7px;background:white}.jp-card-logo.jp-card-dankort .d{left:0;border-radius:0 8px 10px 0}.jp-card-logo.jp-card-dankort .d:before{content:\'\';position:absolute;top:50%;left:50%;display:block;background:#ED1C24;border-radius:2px 4px 6px 0px;height:5px;width:7px;margin:-3px 0 0 -4px}.jp-card-logo.jp-card-dankort .k{right:0}.jp-card-logo.jp-card-dankort .k:before,.jp-card-logo.jp-card-dankort .k:after{content:\'\';position:absolute;right:50%;width:0;height:0;border-style:solid;margin-right:-1px}.jp-card-logo.jp-card-dankort .k:before{top:0;border-width:8px 5px 0 0;border-color:#ED1C24 transparent transparent transparent}.jp-card-logo.jp-card-dankort .k:after{bottom:0;border-width:0 5px 8px 0;border-color:transparent transparent #ED1C24 transparent}.jp-card.jp-card-dankort.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dankort.jp-card-identified .jp-card-back:before{background-color:#0055C7}.jp-card.jp-card-dankort.jp-card-identified .jp-card-logo.jp-card-dankort{opacity:1}.jp-card-logo.jp-card-elo{height:50px;width:50px;border-radius:100%;background:black;color:white;text-align:center;text-transform:lowercase;font-size:21px;font-style:normal;letter-spacing:1px;font-weight:bold;padding-top:13px}.jp-card-logo.jp-card-elo .e,.jp-card-logo.jp-card-elo .l,.jp-card-logo.jp-card-elo .o{display:inline-block;position:relative}.jp-card-logo.jp-card-elo .e{-webkit-transform:rotate(-15deg);-moz-transform:rotate(-15deg);-ms-transform:rotate(-15deg);-o-transform:rotate(-15deg);transform:rotate(-15deg)}.jp-card-logo.jp-card-elo .o{position:relative;display:inline-block;width:12px;height:12px;right:0;top:7px;border-radius:100%;background-image:-webkit-linear-gradient( #ff0 50%,red 50%);background-image:linear-gradient( #ff0 50%,red 50%);-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);text-indent:-9999px}.jp-card-logo.jp-card-elo .o:before{content:"";position:absolute;width:49%;height:49%;background:black;border-radius:100%;text-indent:-99999px;top:25%;left:25%}.jp-card.jp-card-elo.jp-card-identified .jp-card-front:before,.jp-card.jp-card-elo.jp-card-identified .jp-card-back:before{background-color:#6F6969}.jp-card.jp-card-elo.jp-card-identified .jp-card-logo.jp-card-elo{opacity:1}.jp-card-logo.jp-card-jcb{border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px;background-color:white;font-style:normal;color:white;width:50px;padding:2px 0 0 2px}.jp-card-logo.jp-card-jcb>div{width:15px;margin-right:1px;display:inline-block;text-align:center;text-shadow:1px 1px rgba(0,0,0,0.6);border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px}.jp-card-logo.jp-card-jcb>div:before,.jp-card-logo.jp-card-jcb>div:after{content:" ";display:block;height:8px}.jp-card-logo.jp-card-jcb>div.j{background-color:#000063;background-image:-webkit-linear-gradient(left, #000063,#008cff);background-image:linear-gradient(to right,#000063,#008cff)}.jp-card-logo.jp-card-jcb>div.c{background-color:#630000;background-image:-webkit-linear-gradient(left, #630000,#ff008d);background-image:linear-gradient(to right,#630000,#ff008d)}.jp-card-logo.jp-card-jcb>div.b{background-color:#006300;background-image:-webkit-linear-gradient(left, #006300,lime);background-image:linear-gradient(to right,#006300,lime)}.jp-card.jp-card-jcb.jp-card-identified .jp-card-front:before,.jp-card.jp-card-jcb.jp-card-identified .jp-card-back:before{background-color:#CB8000}.jp-card.jp-card-jcb.jp-card-identified .jp-card-logo.jp-card-jcb{opacity:1;box-shadow:none}.jp-card-logo.jp-card-dinersclub{font-family:serif;height:40px;width:100px;color:white;font-size:17px;font-style:normal;letter-spacing:1px}.jp-card-logo.jp-card-dinersclub::before,.jp-card-logo.jp-card-dinersclub::after{display:block;position:relative}.jp-card-logo.jp-card-dinersclub::before{content:\'Diners Club\'}.jp-card-logo.jp-card-dinersclub::after{content:\'International\';text-transform:uppercase;font-size:0.6em}.jp-card.jp-card-dinersclub .jp-card-front .jp-card-logo{box-shadow:none !important}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-back:before{background-color:#999}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-logo.jp-card-dinersclub{opacity:1}.jp-card-logo.jp-card-hipercard{height:20px;width:100px;color:white;font-size:21px;font-style:italic;font-weight:bold}.jp-card-logo.jp-card-hipercard::before,.jp-card-logo.jp-card-hipercard::after{display:block;position:relative}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-hipercard.jp-card-identified .jp-card-back:before{background-color:#770304}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-logo.jp-card-hipercard{opacity:1;box-shadow:none}.jp-card-logo.jp-card-troy{text-transform:lowercase;color:#fff;text-align:center;font-weight:700;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-troy:before,.jp-card-logo.jp-card-troy:after{content:\\"\\";display:block;width:26%;height:6%;background:#22b8c3;right:32%;top:24%;position:absolute;transform:rotate(105deg)}.jp-card.jp-card-troy.jp-card-identified .jp-card-front:before,.jp-card.jp-card-troy.jp-card-identified .jp-card-back:before{background-color:#01adba}.jp-card.jp-card-troy.jp-card-identified .jp-card-logo.jp-card-troy{opacity:1;box-shadow:none}.jp-card-container{-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px;width:350px;max-width:100%;height:200px;margin:auto;z-index:1;position:relative}.jp-card{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1;position:relative;width:100%;height:100%;min-width:315px;border-radius:10px;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear}.jp-card>*,.jp-card>*:after,.jp-card>*:before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:inherit}.jp-card.jp-card-flipped{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back,.jp-card .jp-card-front{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden;border-radius:10px;background:#ddd}.jp-card .jp-card-back:before,.jp-card .jp-card-front:before{content:" ";display:block;position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;border-radius:10px;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease}.jp-card .jp-card-back:after,.jp-card .jp-card-front:after{content:" ";display:block}.jp-card .jp-card-back .jp-card-display,.jp-card .jp-card-front .jp-card-display{color:#fff;font-weight:normal;opacity:0.5;-webkit-transition:opacity 400ms linear;-moz-transition:opacity 400ms linear;transition:opacity 400ms linear}.jp-card .jp-card-back .jp-card-display.jp-card-focused,.jp-card .jp-card-front .jp-card-display.jp-card-focused{opacity:1;font-weight:700}.jp-card .jp-card-back .jp-card-cvc,.jp-card .jp-card-front .jp-card-cvc{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:14px}.jp-card .jp-card-back .jp-card-shiny,.jp-card .jp-card-front .jp-card-shiny{width:50px;height:35px;border-radius:5px;background:#ccc;position:relative}.jp-card .jp-card-back .jp-card-shiny:before,.jp-card .jp-card-front .jp-card-shiny:before{content:" ";display:block;width:70%;height:60%;border-top-right-radius:5px;border-bottom-right-radius:5px;background:#d9d9d9;position:absolute;top:20%}.jp-card .jp-card-front .jp-card-logo{position:absolute;opacity:0;right:5%;top:8%;-webkit-transition:400ms;-moz-transition:400ms;transition:400ms}.jp-card .jp-card-front .jp-card-lower{width:80%;position:absolute;left:10%;bottom:30px}@media only screen and (max-width: 480px){.jp-card .jp-card-front .jp-card-lower{width:90%;left:5%}}.jp-card .jp-card-front .jp-card-lower .jp-card-cvc{visibility:hidden;float:right;position:relative;bottom:5px}.jp-card .jp-card-front .jp-card-lower .jp-card-number{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:24px;clear:both;margin-bottom:30px}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;letter-spacing:0;position:relative;float:right;width:25%}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after,.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;font-size:7px;white-space:pre;display:block;opacity:0.5}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{content:attr(data-before);margin-bottom:2px;font-size:7px;text-transform:uppercase}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after{position:absolute;content:attr(data-after);text-align:right;right:100%;margin-right:5px;margin-top:2px;bottom:0}.jp-card .jp-card-front .jp-card-lower .jp-card-name{text-transform:uppercase;font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:20px;max-height:45px;position:absolute;bottom:0;width:190px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:horizontal;overflow:hidden;text-overflow:ellipsis}.jp-card .jp-card-back{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back .jp-card-bar{background-color:#444;background-image:-webkit-linear-gradient(#444,#333);background-image:linear-gradient(#444,#333);width:100%;height:20%;position:absolute;top:10%}.jp-card .jp-card-back:after{content:" ";display:block;background-color:#fff;background-image:-webkit-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff);width:80%;height:16%;position:absolute;top:40%;left:2%}.jp-card .jp-card-back .jp-card-cvc{position:absolute;top:40%;left:85%;-webkit-transition-delay:600ms;-moz-transition-delay:600ms;transition-delay:600ms}.jp-card .jp-card-back .jp-card-shiny{position:absolute;top:66%;left:2%}.jp-card .jp-card-back .jp-card-shiny:after{content:"This card has been issued by Jesse Pollak and is licensed for anyone to use anywhere for free. It comes with no warranty. For support issues, please visit: github.com/jessepollak/card.";position:absolute;left:120%;top:5%;color:white;font-size:7px;width:230px;opacity:0.5}.jp-card.jp-card-identified{box-shadow:0 0 20px rgba(0,0,0,0.3)}.jp-card.jp-card-identified .jp-card-back,.jp-card.jp-card-identified .jp-card-front{background-color:#000;background-color:rgba(0,0,0,0.5)}.jp-card.jp-card-identified .jp-card-back:before,.jp-card.jp-card-identified .jp-card-front:before{-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease;background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);opacity:1}.jp-card.jp-card-identified .jp-card-back .jp-card-logo,.jp-card.jp-card-identified .jp-card-front .jp-card-logo{box-shadow:0 0 0 2px rgba(255,255,255,0.3)}.jp-card.jp-card-identified.no-radial-gradient .jp-card-back:before,.jp-card.jp-card-identified.no-radial-gradient .jp-card-front:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}@media (max-width: 450px){.card-wrapper{max-width:80vw;width:100%;margin:20px auto;overflow-x:hidden}.card-wrapper>.jp-card-container{transform:scale(0.625);transform-origin:left center}}\n',""]);const d=i},645:r=>{"use strict";r.exports=function(r){var e=[];return e.toString=function(){return this.map((function(e){var t="",a=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),a&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=r(e),a&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(r,t,a,n,o){"string"==typeof r&&(r=[[null,r,void 0]]);var i={};if(a)for(var d=0;d0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=o),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),n&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=n):l[4]="".concat(n)),e.push(l))}},e}},81:r=>{"use strict";r.exports=function(r){return r[1]}},648:r=>{"use strict";var e="Function.prototype.bind called on incompatible ",t=Array.prototype.slice,a=Object.prototype.toString,n="[object Function]";r.exports=function(r){var o=this;if("function"!=typeof o||a.call(o)!==n)throw new TypeError(e+o);for(var i,d=t.call(arguments,1),c=function(){if(this instanceof i){var e=o.apply(this,d.concat(t.call(arguments)));return Object(e)===e?e:this}return o.apply(r,d.concat(t.call(arguments)))},p=Math.max(0,o.length-d.length),l=[],s=0;s{"use strict";var a=t(648);r.exports=Function.prototype.bind||a},221:r=>{"use strict";"undefined"!=typeof self?r.exports=self:"undefined"!=typeof window?r.exports=window:r.exports=Function("return this")()},168:(r,e,t)=>{"use strict";var a=t(221);r.exports=function(){return"object"==typeof t.g&&t.g&&t.g.Math===Math&&t.g.Array===Array?t.g:a}},642:(r,e,t)=>{"use strict";var a=t(612);r.exports=a.call(Function.call,Object.prototype.hasOwnProperty)},452:r=>{"use strict";var e,t,a=Object.prototype,n=a.hasOwnProperty,o=a.toString;"function"==typeof Symbol&&(e=Symbol.prototype.valueOf),"function"==typeof BigInt&&(t=BigInt.prototype.valueOf);var i=function(r){return r!=r},d={boolean:1,number:1,string:1,undefined:1},c=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,p=/^[A-Fa-f0-9]+$/,l={};l.a=l.type=function(r,e){return typeof r===e},l.defined=function(r){return void 0!==r},l.empty=function(r){var e,t=o.call(r);if("[object Array]"===t||"[object Arguments]"===t||"[object String]"===t)return 0===r.length;if("[object Object]"===t){for(e in r)if(n.call(r,e))return!1;return!0}return!r},l.equal=function(r,e){if(r===e)return!0;var t,a=o.call(r);if(a!==o.call(e))return!1;if("[object Object]"===a){for(t in r)if(!l.equal(r[t],e[t])||!(t in e))return!1;for(t in e)if(!l.equal(r[t],e[t])||!(t in r))return!1;return!0}if("[object Array]"===a){if((t=r.length)!==e.length)return!1;for(;t--;)if(!l.equal(r[t],e[t]))return!1;return!0}return"[object Function]"===a?r.prototype===e.prototype:"[object Date]"===a&&r.getTime()===e.getTime()},l.hosted=function(r,e){var t=typeof e[r];return"object"===t?!!e[r]:!d[t]},l.instance=l.instanceof=function(r,e){return r instanceof e},l.nil=l.null=function(r){return null===r},l.undef=l.undefined=function(r){return void 0===r},l.args=l.arguments=function(r){var e="[object Arguments]"===o.call(r),t=!l.array(r)&&l.arraylike(r)&&l.object(r)&&l.fn(r.callee);return e||t},l.array=Array.isArray||function(r){return"[object Array]"===o.call(r)},l.args.empty=function(r){return l.args(r)&&0===r.length},l.array.empty=function(r){return l.array(r)&&0===r.length},l.arraylike=function(r){return!!r&&!l.bool(r)&&n.call(r,"length")&&isFinite(r.length)&&l.number(r.length)&&r.length>=0},l.bool=l.boolean=function(r){return"[object Boolean]"===o.call(r)},l.false=function(r){return l.bool(r)&&!1===Boolean(Number(r))},l.true=function(r){return l.bool(r)&&!0===Boolean(Number(r))},l.date=function(r){return"[object Date]"===o.call(r)},l.date.valid=function(r){return l.date(r)&&!isNaN(Number(r))},l.element=function(r){return void 0!==r&&"undefined"!=typeof HTMLElement&&r instanceof HTMLElement&&1===r.nodeType},l.error=function(r){return"[object Error]"===o.call(r)},l.fn=l.function=function(r){if("undefined"!=typeof window&&r===window.alert)return!0;var e=o.call(r);return"[object Function]"===e||"[object GeneratorFunction]"===e||"[object AsyncFunction]"===e},l.number=function(r){return"[object Number]"===o.call(r)},l.infinite=function(r){return r===1/0||r===-1/0},l.decimal=function(r){return l.number(r)&&!i(r)&&!l.infinite(r)&&r%1!=0},l.divisibleBy=function(r,e){var t=l.infinite(r),a=l.infinite(e),n=l.number(r)&&!i(r)&&l.number(e)&&!i(e)&&0!==e;return t||a||n&&r%e==0},l.integer=l.int=function(r){return l.number(r)&&!i(r)&&r%1==0},l.maximum=function(r,e){if(i(r))throw new TypeError("NaN is not a valid value");if(!l.arraylike(e))throw new TypeError("second argument must be array-like");for(var t=e.length;--t>=0;)if(r=0;)if(r>e[t])return!1;return!0},l.nan=function(r){return!l.number(r)||r!=r},l.even=function(r){return l.infinite(r)||l.number(r)&&r==r&&r%2==0},l.odd=function(r){return l.infinite(r)||l.number(r)&&r==r&&r%2!=0},l.ge=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r>=e},l.gt=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r>e},l.le=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r<=e},l.lt=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r=e&&r<=t},l.object=function(r){return"[object Object]"===o.call(r)},l.primitive=function(r){return!r||!("object"==typeof r||l.object(r)||l.fn(r)||l.array(r))},l.hash=function(r){return l.object(r)&&r.constructor===Object&&!r.nodeType&&!r.setInterval},l.regexp=function(r){return"[object RegExp]"===o.call(r)},l.string=function(r){return"[object String]"===o.call(r)},l.base64=function(r){return l.string(r)&&(!r.length||c.test(r))},l.hex=function(r){return l.string(r)&&(!r.length||p.test(r))},l.symbol=function(r){return"function"==typeof Symbol&&"[object Symbol]"===o.call(r)&&"symbol"==typeof e.call(r)},l.bigint=function(r){return"function"==typeof BigInt&&"[object BigInt]"===o.call(r)&&"bigint"==typeof t.call(r)},r.exports=l},907:(r,e,t)=>{"use strict";r.exports=t(886)},886:(r,e,t)=>{"use strict";var a=t(452),n=t(642),o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,d=function(r,e,t){o&&"__proto__"===e?o(r,e,{enumerable:!0,configurable:!0,value:t,writable:!0}):r[e]=t},c=function(r,e){if("__proto__"===e){if(!n(r,e))return;if(i)return i(r,e).value}return r[e]};r.exports=function r(){var e,t,n,o,i,p,l=arguments[0]||{},s=1,f=arguments.length,g=!1;for("boolean"==typeof l&&(g=l,l=arguments[1]||{},s=2),"object"==typeof l||a.fn(l)||(l={});st[1][0].length)&&(t=[e,o]);return t&&t[0]},o=function(r){var e,t,a;for(t=0,a=i.length;t9&&(e-=9),i+=e;return i%10==0},h=function(r){var e;try{if(null!=r.selectionStart&&r.selectionStart!==r.selectionEnd)return!0;if(null!=("undefined"!=typeof document&&null!==document&&null!=(e=document.selection)?e.createRange:void 0)&&document.selection.createRange().text)return!0}catch(r){}return!1},v=function(r){return setTimeout((function(){var t,n;return t=r.target,n=a.val(t),n=e.fns.formatCardNumber(n),d(t,n),a.trigger(t,"change")}))},s=function(r){return function(e){var t,o,i,d,c,p,l,s,f,g,u;if(e.which>0?(o=String.fromCharCode(e.which),u=a.val(e.target)+o):(o=e.data,u=a.val(e.target)),/^\d+$/.test(o)){for(s=e.target,t=n(u),p=u.replace(/\D/g,"").length,g=[16],t&&(g=t.length),r&&(g=g.filter((function(e){return e<=r}))),i=d=0,c=g.length;d=(f=g[i])&&g[i+1])&&p>=f)return;if(!h(s))return l=t&&"amex"===t.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,u=u.substring(0,u.length-1),l.test(u)?(e.preventDefault(),a.val(s,u+" "+o),a.trigger(s,"change")):void 0}}},p=function(r){var e,t;if(e=r.target,t=a.val(e),!r.meta&&8===r.which&&!h(e))return/\d\s$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\d\s$/,"")),a.trigger(e,"change")):/\s\d?$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\s\d?$/,"")),a.trigger(e,"change")):void 0},f=function(r){var e,t,n;if(t=r.target,r.which>0?(e=String.fromCharCode(r.which),n=a.val(t)+e):(e=r.data,n=a.val(t)),/^\d+$/.test(e))return/^\d$/.test(n)&&"0"!==n&&"1"!==n?(r.preventDefault(),a.val(t,"0"+n+" / "),a.trigger(t,"change")):/^\d\d$/.test(n)?(r.preventDefault(),a.val(t,n+" / "),a.trigger(t,"change")):void 0},j=function(r){var e,t,n;if(e=String.fromCharCode(r.which),/^\d+$/.test(e))return t=r.target,n=a.val(t)+e,/^\d$/.test(n)&&"0"!==n&&"1"!==n?(r.preventDefault(),a.val(t,"0"+n),a.trigger(t,"change")):/^\d\d$/.test(n)?(r.preventDefault(),a.val(t,""+n),a.trigger(t,"change")):void 0},g=function(r){var e,t,n;if(e=String.fromCharCode(r.which),/^\d+$/.test(e))return t=r.target,n=a.val(t),/^\d\d$/.test(n)?(a.val(t,n+" / "),a.trigger(t,"change")):void 0},u=function(r){var e,t;if("/"===String.fromCharCode(r.which))return e=r.target,t=a.val(e),/^\d$/.test(t)&&"0"!==t?(a.val(e,"0"+t+" / "),a.trigger(e,"change")):void 0},l=function(r){var e,t;if(!r.metaKey&&(e=r.target,t=a.val(e),8===r.which&&!h(e)))return/\d(\s|\/)+$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\d(\s|\/)*$/,"")),a.trigger(e,"change")):/\s\/\s?\d?$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\s\/\s?\d?$/,"")),a.trigger(e,"change")):void 0},E=function(r){var e;return!(!r.metaKey&&!r.ctrlKey)||(32===r.which?r.preventDefault():0===r.which||r.which<33||(e=String.fromCharCode(r.which),/[\d\s]/.test(e)?void 0:r.preventDefault()))},y=function(r){return function(e){var t,o,i,d,c;if(d=e.target,o=String.fromCharCode(e.which),/^\d+$/.test(o)&&!h(d))return c=(a.val(d)+o).replace(/\D/g,""),i=16,(t=n(c))&&(i=t.length[t.length.length-1]),r&&(i=Math.min(i,r)),c.length<=i?void 0:e.preventDefault()}},w=function(r,e){var t,n;if(n=r.target,t=String.fromCharCode(r.which),/^\d+$/.test(t)&&!h(n))return(a.val(n)+t).replace(/\D/g,"").length>e?r.preventDefault():void 0},k=function(r){return w(r,6)},C=function(r){return w(r,2)},$=function(r){return w(r,4)},x=function(r){var e,t;if(t=r.target,e=String.fromCharCode(r.which),/^\d+$/.test(e)&&!h(t))return(a.val(t)+e).length<=4?void 0:r.preventDefault()},z=function(r){var t,n,o,d,c;if(d=r.target,c=a.val(d),o=e.fns.cardType(c)||"unknown",!a.hasClass(d,o))return t=function(){var r,e,t;for(t=[],r=0,e=i.length;r=0&&(!1===e.luhn||m(r)))},validateCardExpiry:function(e,t){var n,o,i,d;return"object"==typeof e&&"month"in e?(e=(i=e).month,t=i.year):"string"==typeof e&&D.call(e,"/")>=0&&(e=(d=r.fns.cardExpiryVal(e)).month,t=d.year),!(!e||!t)&&(e=a.trim(e),t=a.trim(t),!!/^\d+$/.test(e)&&!!/^\d+$/.test(t)&&!!((e=parseInt(e,10))&&e<=12)&&(2===t.length&&(t=(new Date).getFullYear().toString().slice(0,2)+t),o=new Date(t,e),n=new Date,o.setMonth(o.getMonth()-1),o.setMonth(o.getMonth()+1,1),o>n))},validateCardCVC:function(r,e){var t,n;return r=a.trim(r),!!/^\d+$/.test(r)&&(e&&o(e)?(t=r.length,D.call(null!=(n=o(e))?n.cvcLength:void 0,t)>=0):r.length>=3&&r.length<=4)},cardType:function(r){var e;return r&&(null!=(e=n(r))?e.type:void 0)||null},formatCardNumber:function(r){var e,t,a,o;return(e=n(r))?(o=e.length[e.length.length-1],r=(r=r.replace(/\D/g,"")).slice(0,o),e.format.global?null!=(a=r.match(e.format))?a.join(" "):void 0:null!=(t=e.format.exec(r))?(t.shift(),(t=t.filter((function(r){return r}))).join(" ")):void 0):r}},r.restrictNumeric=function(r){return a.on(r,"keypress",E),a.on(r,"input",E)},r.cardExpiryVal=function(e){return r.fns.cardExpiryVal(a.val(e))},r.formatCardCVC=function(e){return r.restrictNumeric(e),a.on(e,"keypress",x),a.on(e,"input",x),e},r.formatCardExpiry=function(e){var t,n;return r.restrictNumeric(e),e.length&&2===e.length?(t=e[0],n=e[1],this.formatCardExpiryMultiple(t,n)):(a.on(e,"keypress",k),a.on(e,"keypress",f),a.on(e,"keypress",u),a.on(e,"keypress",g),a.on(e,"keydown",l),a.on(e,"input",f)),e},r.formatCardExpiryMultiple=function(r,e){return a.on(r,"keypress",C),a.on(r,"keypress",j),a.on(r,"input",j),a.on(e,"keypress",$),a.on(e,"input",$)},r.formatCardNumber=function(e,t){return r.restrictNumeric(e),a.on(e,"keypress",y(t)),a.on(e,"keypress",s(t)),a.on(e,"keydown",p),a.on(e,"keyup blur",z),a.on(e,"blur",s(t)),a.on(e,"paste",v),a.on(e,"input",s(t)),e},r.getCardArray=function(){return i},r.setCardArray=function(r){return i=r,!0},r.addToCardArray=function(r){return i.push(r)},r.removeFromCardArray=function(r){var e;for(e in i)i[e].type===r&&i.splice(e,1);return!0},r}(),r.exports=e,b.Payment=e}).call(this)},202:function(r){(function(){var e,t,a;(e=function(r){return e.isDOMElement(r)?r:document.querySelectorAll(r)}).isDOMElement=function(r){return r&&null!=r.nodeName},a=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,e.trim=function(r){return null===r?"":(r+"").replace(a,"")},t=/\r/g,e.val=function(r,e){var a;return arguments.length>1?r.value=e:"string"==typeof(a=r.value)?a.replace(t,""):null===a?"":a},e.preventDefault=function(r){if("function"!=typeof r.preventDefault)return r.returnValue=!1,!1;r.preventDefault()},e.normalizeEvent=function(r){var t;return null==(r={which:null!=(t=r).which?t.which:void 0,target:t.target||t.srcElement,preventDefault:function(){return e.preventDefault(t)},originalEvent:t,data:t.data||t.detail}).which&&(r.which=null!=t.charCode?t.charCode:t.keyCode),r},e.on=function(r,t,a){var n,o,i,d,c,p,l,s;if(r.length)for(o=0,d=r.length;o{"use strict";t.r(e),t.d(e,{default:()=>h});var a=t(379),n=t.n(a),o=t(795),i=t.n(o),d=t(569),c=t.n(d),p=t(565),l=t.n(p),s=t(216),f=t.n(s),g=t(589),u=t.n(g),j=t(120),b={};b.styleTagTransform=u(),b.setAttributes=l(),b.insert=c().bind(null,"head"),b.domAPI=i(),b.insertStyleElement=f(),n()(j.Z,b);const h=j.Z&&j.Z.locals?j.Z.locals:void 0},379:r=>{"use strict";var e=[];function t(r){for(var t=-1,a=0;a{"use strict";var e={};r.exports=function(r,t){var a=function(r){if(void 0===e[r]){var t=document.querySelector(r);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(r){t=null}e[r]=t}return e[r]}(r);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}},216:r=>{"use strict";r.exports=function(r){var e=document.createElement("style");return r.setAttributes(e,r.attributes),r.insert(e,r.options),e}},565:(r,e,t)=>{"use strict";r.exports=function(r){var e=t.nc;e&&r.setAttribute("nonce",e)}},795:r=>{"use strict";r.exports=function(r){var e=r.insertStyleElement(r);return{update:function(t){!function(r,e,t){var a="";t.supports&&(a+="@supports (".concat(t.supports,") {")),t.media&&(a+="@media ".concat(t.media," {"));var n=void 0!==t.layer;n&&(a+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),a+=t.css,n&&(a+="}"),t.media&&(a+="}"),t.supports&&(a+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(a,r,e.options)}(e,r,t)},remove:function(){!function(r){if(null===r.parentNode)return!1;r.parentNode.removeChild(r)}(e)}}}},589:r=>{"use strict";r.exports=function(r,e){if(e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}}},e={};function t(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={id:a,exports:{}};return r[a].call(o.exports,o,o.exports,t),o.exports}t.n=r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return t.d(e,{a:e}),e},t.d=(r,e)=>{for(var a in e)t.o(e,a)&&!t.o(r,a)&&Object.defineProperty(r,a,{enumerable:!0,get:e[a]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(r){if("object"==typeof window)return window}}(),t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),t.r=r=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.nc=void 0;var a=t(579);card=a})(); ================================================ FILE: dist/card.js.LICENSE.txt ================================================ /*! * node.extend * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * @fileoverview * Port of jQuery.extend that actually works on node.js */ /**! * is * the definitive JavaScript type testing library * * @copyright 2013-2014 Enrico Marino / Jordan Harband * @license MIT */ ================================================ FILE: dist/jquery.card.js ================================================ /*! For license information please see jquery.card.js.LICENSE.txt */ var card;(()=>{var r,e,t={579:function(r,e,t){var a,n,o;t(346),n=t(202),t(28),o=t(907),a=function(){var r,e;class t{template(r,e){return r.replace(/\{\{(.*?)\}\}/g,(function(r,t,a){return e[t]}))}constructor(r){var e;this.maskCardNumber=this.maskCardNumber.bind(this),this.options=o(!0,this.defaults,r),this.options.form?(this.$el=n(this.options.form),this.options.container?(this.$container=n(this.options.container),(e=n.isDOMElement(this.$container)?this.$container:this.$container[0]).getAttribute(this.initializedDataAttr)||(e.setAttribute(this.initializedDataAttr,!0),this.render(),this.attachHandlers(),this.handleInitialPlaceholders())):console.log("Please provide a container")):console.log("Please provide a form")}render(){var r,e,t,a,i,d,c,p;for(t in n.append(this.$container,this.template(this.cardTemplate,o({},this.options.messages,this.options.placeholders))),i=this.options.cardSelectors)c=i[t],this[`$${t}`]=n.find(this.$container,c);for(t in d=this.options.formSelectors)c=d[t],c=this.options[t]?this.options[t]:c,!(a=n.find(this.$el,c)).length&&this.options.debug&&console.error(`Card can't find a ${t} in your form.`),this[`$${t}`]=a;if(this.options.formatting&&(Payment.formatCardNumber(this.$numberInput),Payment.formatCardCVC(this.$cvcInput),Payment.formatCardExpiry(this.$expiryInput)),this.options.width&&(r=n(this.options.cardSelectors.cardContainer)[0],e=parseInt(r.clientWidth||window.getComputedStyle(r).width),r.style.transform=`scale(${this.options.width/e})`),("undefined"!=typeof navigator&&null!==navigator?navigator.userAgent:void 0)&&-1!==(p=navigator.userAgent.toLowerCase()).indexOf("safari")&&-1===p.indexOf("chrome")&&n.addClass(this.$card,"jp-card-safari"),/MSIE 10\./i.test(navigator.userAgent)&&n.addClass(this.$card,"jp-card-ie-10"),/rv:11.0/i.test(navigator.userAgent))return n.addClass(this.$card,"jp-card-ie-11")}attachHandlers(){var e,t;return t=[this.validToggler("cardNumber")],this.options.masks.cardNumber&&t.push(this.maskCardNumber),r(this.$numberInput,this.$numberDisplay,{fill:!1,filters:t}),n.on(this.$numberInput,"payment.cardType",this.handle("setCardType")),(e=[function(r){return 1===r.length&&"0"===r[0]?"":r.replace(/(\s+)/g,"")}]).push(this.validToggler("cardExpiry")),r(this.$expiryInput,this.$expiryDisplay,{join:function(r){return 2===r[0].length||r[1]?"/":""},filters:e}),r(this.$cvcInput,this.$cvcDisplay,{filters:this.validToggler("cardCVC")}),n.on(this.$cvcInput,"focus",this.handle("flipCard")),n.on(this.$cvcInput,"blur",this.handle("unflipCard")),r(this.$nameInput,this.$nameDisplay,{fill:!1,filters:this.validToggler("cardHolderName"),join:" "})}handleInitialPlaceholders(){var r,e,t,a;for(e in a=[],t=this.options.formSelectors)t[e],(r=this[`$${e}`])instanceof NodeList&&(r=r[0]),n.val(r)?(n.trigger(r,"paste"),a.push(function(r){return setTimeout((function(){return n.trigger(r,"keyup")}))}(r))):a.push(void 0);return a}handle(r){return e=>{var t;return(t=Array.prototype.slice.call(arguments)).unshift(e.target),this.handlers[r].apply(this,t)}}validToggler(r){var e;return"cardExpiry"===r?e=function(r){var e;return e=Payment.fns.cardExpiryVal(r),Payment.fns.validateCardExpiry(e.month,e.year)}:"cardCVC"===r?e=r=>Payment.fns.validateCardCVC(r,this.cardType):"cardNumber"===r?e=function(r){return Payment.fns.validateCardNumber(r)}:"cardHolderName"===r&&(e=function(r){return""!==r}),(r,t,a)=>{var n;return n=e(r),this.toggleValidClass(t,n),this.toggleValidClass(a,n),r}}toggleValidClass(r,e){return n.toggleClass(r,this.options.classes.valid,e),n.toggleClass(r,this.options.classes.invalid,!e)}maskCardNumber(r,e,t){var a,n;return a=this.options.masks.cardNumber,(n=r.split(" ")).length>=3?(n.forEach((function(r,e){if(e!==n.length-1)return n[e]=n[e].replace(/\d/g,a)})),n.join(" ")):r.replace(/\d/g,a)}getCardType(){return Payment.fns.cardType(this.$numberInput[0].value)||"unknown"}}return t.prototype.initializedDataAttr="data-jp-card-initialized",t.prototype.cardTemplate='',t.prototype.cardTypes=["jp-card-amex","jp-card-dankort","jp-card-dinersclub","jp-card-discover","jp-card-unionpay","jp-card-jcb","jp-card-laser","jp-card-maestro","jp-card-mastercard","jp-card-troy","jp-card-unionpay","jp-card-visa","jp-card-visaelectron","jp-card-elo","jp-card-hipercard"],t.prototype.defaults={formatting:!0,formSelectors:{numberInput:'input[name="number"]',expiryInput:'input[name="expiry"]',cvcInput:'input[name="cvc"]',nameInput:'input[name="name"]'},cardSelectors:{cardContainer:".jp-card-container",card:".jp-card",numberDisplay:".jp-card-number",expiryDisplay:".jp-card-expiry",cvcDisplay:".jp-card-cvc",nameDisplay:".jp-card-name"},messages:{validDate:"valid\nthru",monthYear:"month/year"},placeholders:{number:"•••• •••• •••• ••••",cvc:"•••",expiry:"••/••",name:"Full Name"},masks:{cardNumber:!1},classes:{valid:"jp-card-valid",invalid:"jp-card-invalid"},debug:!1},t.prototype.handlers={setCardType:function(r,e){var t,a;if(t=e.data,a=new CustomEvent("card-type-changed",{detail:e.data}),document.dispatchEvent(a),!n.hasClass(this.$card,t))return n.removeClass(this.$card,"jp-card-unknown"),n.removeClass(this.$card,this.cardTypes.join(" ")),n.addClass(this.$card,`jp-card-${t}`),n.toggleClass(this.$card,"jp-card-identified","unknown"!==t),this.cardType=t},flipCard:function(){return n.addClass(this.$card,"jp-card-flipped")},unflipCard:function(){return n.removeClass(this.$card,"jp-card-flipped")}},r=function(r,t,a={}){var o,i,d;return a.fill=a.fill||!1,a.filters=a.filters||[],a.filters instanceof Array||(a.filters=[a.filters]),a.join=a.join||"","function"!=typeof a.join&&(o=a.join,a.join=function(){return o}),d=function(){var r,e,a;for(a=[],r=0,e=t.length;r{"use strict";t.d(e,{Z:()=>d});var a=t(81),n=t.n(a),o=t(645),i=t.n(o)()(n());i.push([r.id,'.jp-card.jp-card-safari.jp-card-identified .jp-card-front:before,.jp-card.jp-card-safari.jp-card-identified .jp-card-back:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}.jp-card.jp-card-ie-10.jp-card-flipped,.jp-card.jp-card-ie-11.jp-card-flipped{-webkit-transform:0deg;-moz-transform:0deg;-ms-transform:0deg;-o-transform:0deg;transform:0deg}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-front,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-front{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back:after{left:18%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-cvc,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-cvc{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg);left:5%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny{left:84%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny:after{left:-480%;-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card.jp-card-ie-10.jp-card-amex .jp-card-back,.jp-card.jp-card-ie-11.jp-card-amex .jp-card-back{display:none}.jp-card-logo{height:36px;width:60px;font-style:italic}.jp-card-logo,.jp-card-logo:before,.jp-card-logo:after{box-sizing:border-box}.jp-card-logo.jp-card-amex{text-transform:uppercase;font-size:4px;font-weight:bold;color:white;background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);border:1px solid #EEE}.jp-card-logo.jp-card-amex:before,.jp-card-logo.jp-card-amex:after{width:28px;display:block;position:absolute;left:16px}.jp-card-logo.jp-card-amex:before{height:28px;content:"american";top:3px;text-align:left;padding-left:2px;padding-top:11px;background:#267AC3}.jp-card-logo.jp-card-amex:after{content:"express";bottom:11px;text-align:right;padding-right:2px}.jp-card.jp-card-amex.jp-card-flipped{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:before,.jp-card.jp-card-amex.jp-card-identified .jp-card-back:before{background-color:#108168}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-logo.jp-card-amex{opacity:1}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-cvc{visibility:visible}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:after{opacity:1}.jp-card-logo.jp-card-discover{background:#f60;color:#111;text-transform:uppercase;font-style:normal;font-weight:bold;font-size:10px;text-align:center;overflow:hidden;z-index:1;padding-top:9px;letter-spacing:.03em;border:1px solid #EEE}.jp-card-logo.jp-card-discover:before,.jp-card-logo.jp-card-discover:after{content:" ";display:block;position:absolute}.jp-card-logo.jp-card-discover:before{background:white;width:200px;height:200px;border-radius:200px;bottom:-5%;right:-80%;z-index:-1}.jp-card-logo.jp-card-discover:after{width:8px;height:8px;border-radius:4px;top:10px;left:27px;background-color:#f60;background-image:-webkit-radial-gradient(#f60,#fff);background-image:radial-gradient( #f60,#fff);content:"network";font-size:4px;line-height:24px;text-indent:-7px}.jp-card .jp-card-front .jp-card-logo.jp-card-discover{right:12%;top:18%}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:before,.jp-card.jp-card-discover.jp-card-identified .jp-card-back:before{background-color:#86B8CF}.jp-card.jp-card-discover.jp-card-identified .jp-card-logo.jp-card-discover{opacity:1}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:after{-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;content:" ";display:block;background-color:#f60;background-image:-webkit-linear-gradient(#f60,#ffa366,#f60);background-image:linear-gradient(#f60,#ffa366,#f60);height:50px;width:50px;border-radius:25px;position:absolute;left:100%;top:15%;margin-left:-25px;box-shadow:inset 1px 1px 3px 1px rgba(0,0,0,0.5)}.jp-card-logo.jp-card-unionpay{width:60px;display:block;height:40px;background:#e21836;-webkit-transform:skew(-15deg);-moz-transform:skew(20deg);-o-transform:skew(20deg);border-radius:5px;font-size:10px;z-index:1;line-height:33px;color:#fff;text-align:center;font-family:"Sans-serif", "Microsoft Yahei", "\\5FAE\\8F6F\\96C5\\9ED1", "Hiragino Sans", "Gulim", "\\5B8B\\4F53";font-weight:bold}.jp-card-logo.jp-card-unionpay:after,.jp-card-logo.jp-card-unionpay:before{display:block;margin:0 auto;position:absolute;height:40px;top:0;z-index:-1}.jp-card-logo.jp-card-unionpay:before{content:" ";width:28px;background:#00447c;left:14px;border-top-left-radius:5px;border-bottom-left-radius:5px}.jp-card-logo.jp-card-unionpay:after{content:"银联";width:26px;background:#007b84;left:34px;border-radius:5px;font-size:10px;line-height:54px;text-indent:-17px}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-back:before,.jp-card.jp-card-unionpay.jp-card-identified .jp-card-front:before{background-color:#987c00}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-logo.jp-card-unionpay{opacity:1}.jp-card-logo.jp-card-visa{text-transform:uppercase;color:white;text-align:center;font-weight:bold;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-visa:before,.jp-card-logo.jp-card-visa:after{content:" ";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visa:before{position:absolute;left:-4px;width:0;height:0;border-style:solid;border-width:0 12px 6px 0;border-color:transparent #ffffff transparent transparent}.jp-card.jp-card-visa.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visa.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visa.jp-card-identified .jp-card-logo.jp-card-visa{opacity:1;box-shadow:none}.jp-card-logo.jp-card-visaelectron{background:white;text-transform:uppercase;color:#1A1876;text-align:center;font-weight:bold;font-size:15px;line-height:18px}.jp-card-logo.jp-card-visaelectron:before,.jp-card-logo.jp-card-visaelectron:after{content:" ";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visaelectron:before{background:#1A1876}.jp-card-logo.jp-card-visaelectron:after{background:#E79800}.jp-card-logo.jp-card-visaelectron .elec{float:right;font-family:arial;font-size:9px;margin-right:1px;margin-top:-5px;text-transform:none}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-logo.jp-card-visaelectron{opacity:1}.jp-card-logo.jp-card-mastercard{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:9px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-mastercard:before,.jp-card-logo.jp-card-mastercard:after{content:" ";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-mastercard:before{left:0;background:#EB001B;z-index:-1;opacity:0.9}.jp-card-logo.jp-card-mastercard:after{right:0;background:#FF5F00;z-index:-2}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front .jp-card-logo.jp-card-mastercard,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back .jp-card-logo.jp-card-mastercard{box-shadow:none}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back:before{background-color:#0061A8}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-logo.jp-card-mastercard{opacity:1}.jp-card-logo.jp-card-maestro{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:14px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-maestro:before,.jp-card-logo.jp-card-maestro:after{content:" ";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-maestro:before{left:0;background:#EB001B;z-index:-2}.jp-card-logo.jp-card-maestro:after{right:0;background:#00A2E5;z-index:-1;opacity:0.8}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front .jp-card-logo.jp-card-maestro,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back .jp-card-logo.jp-card-maestro{box-shadow:none}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front:before,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back:before{background-color:#0B2C5F}.jp-card.jp-card-maestro.jp-card-identified .jp-card-logo.jp-card-maestro{opacity:1}.jp-card-logo.jp-card-dankort{width:60px;height:36px;padding:3px;border-radius:8px;border:#000 1px solid;background-color:#fff}.jp-card-logo.jp-card-dankort .dk{position:relative;width:100%;height:100%;overflow:hidden}.jp-card-logo.jp-card-dankort .dk:before{background-color:#ED1C24;content:\'\';position:absolute;width:100%;height:100%;display:block;border-radius:6px}.jp-card-logo.jp-card-dankort .dk:after{content:\'\';position:absolute;top:50%;margin-top:-7.7px;right:0;width:0;height:0;border-style:solid;border-width:7px 7px 10px 0;border-color:transparent #ED1C24 transparent transparent;z-index:1}.jp-card-logo.jp-card-dankort .d,.jp-card-logo.jp-card-dankort .k{position:absolute;top:50%;width:50%;display:block;height:15.4px;margin-top:-7.7px;background:white}.jp-card-logo.jp-card-dankort .d{left:0;border-radius:0 8px 10px 0}.jp-card-logo.jp-card-dankort .d:before{content:\'\';position:absolute;top:50%;left:50%;display:block;background:#ED1C24;border-radius:2px 4px 6px 0px;height:5px;width:7px;margin:-3px 0 0 -4px}.jp-card-logo.jp-card-dankort .k{right:0}.jp-card-logo.jp-card-dankort .k:before,.jp-card-logo.jp-card-dankort .k:after{content:\'\';position:absolute;right:50%;width:0;height:0;border-style:solid;margin-right:-1px}.jp-card-logo.jp-card-dankort .k:before{top:0;border-width:8px 5px 0 0;border-color:#ED1C24 transparent transparent transparent}.jp-card-logo.jp-card-dankort .k:after{bottom:0;border-width:0 5px 8px 0;border-color:transparent transparent #ED1C24 transparent}.jp-card.jp-card-dankort.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dankort.jp-card-identified .jp-card-back:before{background-color:#0055C7}.jp-card.jp-card-dankort.jp-card-identified .jp-card-logo.jp-card-dankort{opacity:1}.jp-card-logo.jp-card-elo{height:50px;width:50px;border-radius:100%;background:black;color:white;text-align:center;text-transform:lowercase;font-size:21px;font-style:normal;letter-spacing:1px;font-weight:bold;padding-top:13px}.jp-card-logo.jp-card-elo .e,.jp-card-logo.jp-card-elo .l,.jp-card-logo.jp-card-elo .o{display:inline-block;position:relative}.jp-card-logo.jp-card-elo .e{-webkit-transform:rotate(-15deg);-moz-transform:rotate(-15deg);-ms-transform:rotate(-15deg);-o-transform:rotate(-15deg);transform:rotate(-15deg)}.jp-card-logo.jp-card-elo .o{position:relative;display:inline-block;width:12px;height:12px;right:0;top:7px;border-radius:100%;background-image:-webkit-linear-gradient( #ff0 50%,red 50%);background-image:linear-gradient( #ff0 50%,red 50%);-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);text-indent:-9999px}.jp-card-logo.jp-card-elo .o:before{content:"";position:absolute;width:49%;height:49%;background:black;border-radius:100%;text-indent:-99999px;top:25%;left:25%}.jp-card.jp-card-elo.jp-card-identified .jp-card-front:before,.jp-card.jp-card-elo.jp-card-identified .jp-card-back:before{background-color:#6F6969}.jp-card.jp-card-elo.jp-card-identified .jp-card-logo.jp-card-elo{opacity:1}.jp-card-logo.jp-card-jcb{border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px;background-color:white;font-style:normal;color:white;width:50px;padding:2px 0 0 2px}.jp-card-logo.jp-card-jcb>div{width:15px;margin-right:1px;display:inline-block;text-align:center;text-shadow:1px 1px rgba(0,0,0,0.6);border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px}.jp-card-logo.jp-card-jcb>div:before,.jp-card-logo.jp-card-jcb>div:after{content:" ";display:block;height:8px}.jp-card-logo.jp-card-jcb>div.j{background-color:#000063;background-image:-webkit-linear-gradient(left, #000063,#008cff);background-image:linear-gradient(to right,#000063,#008cff)}.jp-card-logo.jp-card-jcb>div.c{background-color:#630000;background-image:-webkit-linear-gradient(left, #630000,#ff008d);background-image:linear-gradient(to right,#630000,#ff008d)}.jp-card-logo.jp-card-jcb>div.b{background-color:#006300;background-image:-webkit-linear-gradient(left, #006300,lime);background-image:linear-gradient(to right,#006300,lime)}.jp-card.jp-card-jcb.jp-card-identified .jp-card-front:before,.jp-card.jp-card-jcb.jp-card-identified .jp-card-back:before{background-color:#CB8000}.jp-card.jp-card-jcb.jp-card-identified .jp-card-logo.jp-card-jcb{opacity:1;box-shadow:none}.jp-card-logo.jp-card-dinersclub{font-family:serif;height:40px;width:100px;color:white;font-size:17px;font-style:normal;letter-spacing:1px}.jp-card-logo.jp-card-dinersclub::before,.jp-card-logo.jp-card-dinersclub::after{display:block;position:relative}.jp-card-logo.jp-card-dinersclub::before{content:\'Diners Club\'}.jp-card-logo.jp-card-dinersclub::after{content:\'International\';text-transform:uppercase;font-size:0.6em}.jp-card.jp-card-dinersclub .jp-card-front .jp-card-logo{box-shadow:none !important}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-back:before{background-color:#999}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-logo.jp-card-dinersclub{opacity:1}.jp-card-logo.jp-card-hipercard{height:20px;width:100px;color:white;font-size:21px;font-style:italic;font-weight:bold}.jp-card-logo.jp-card-hipercard::before,.jp-card-logo.jp-card-hipercard::after{display:block;position:relative}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-hipercard.jp-card-identified .jp-card-back:before{background-color:#770304}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-logo.jp-card-hipercard{opacity:1;box-shadow:none}.jp-card-logo.jp-card-troy{text-transform:lowercase;color:#fff;text-align:center;font-weight:700;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-troy:before,.jp-card-logo.jp-card-troy:after{content:\\"\\";display:block;width:26%;height:6%;background:#22b8c3;right:32%;top:24%;position:absolute;transform:rotate(105deg)}.jp-card.jp-card-troy.jp-card-identified .jp-card-front:before,.jp-card.jp-card-troy.jp-card-identified .jp-card-back:before{background-color:#01adba}.jp-card.jp-card-troy.jp-card-identified .jp-card-logo.jp-card-troy{opacity:1;box-shadow:none}.jp-card-container{-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px;width:350px;max-width:100%;height:200px;margin:auto;z-index:1;position:relative}.jp-card{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1;position:relative;width:100%;height:100%;min-width:315px;border-radius:10px;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear}.jp-card>*,.jp-card>*:after,.jp-card>*:before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:inherit}.jp-card.jp-card-flipped{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back,.jp-card .jp-card-front{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden;border-radius:10px;background:#ddd}.jp-card .jp-card-back:before,.jp-card .jp-card-front:before{content:" ";display:block;position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;border-radius:10px;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease}.jp-card .jp-card-back:after,.jp-card .jp-card-front:after{content:" ";display:block}.jp-card .jp-card-back .jp-card-display,.jp-card .jp-card-front .jp-card-display{color:#fff;font-weight:normal;opacity:0.5;-webkit-transition:opacity 400ms linear;-moz-transition:opacity 400ms linear;transition:opacity 400ms linear}.jp-card .jp-card-back .jp-card-display.jp-card-focused,.jp-card .jp-card-front .jp-card-display.jp-card-focused{opacity:1;font-weight:700}.jp-card .jp-card-back .jp-card-cvc,.jp-card .jp-card-front .jp-card-cvc{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:14px}.jp-card .jp-card-back .jp-card-shiny,.jp-card .jp-card-front .jp-card-shiny{width:50px;height:35px;border-radius:5px;background:#ccc;position:relative}.jp-card .jp-card-back .jp-card-shiny:before,.jp-card .jp-card-front .jp-card-shiny:before{content:" ";display:block;width:70%;height:60%;border-top-right-radius:5px;border-bottom-right-radius:5px;background:#d9d9d9;position:absolute;top:20%}.jp-card .jp-card-front .jp-card-logo{position:absolute;opacity:0;right:5%;top:8%;-webkit-transition:400ms;-moz-transition:400ms;transition:400ms}.jp-card .jp-card-front .jp-card-lower{width:80%;position:absolute;left:10%;bottom:30px}@media only screen and (max-width: 480px){.jp-card .jp-card-front .jp-card-lower{width:90%;left:5%}}.jp-card .jp-card-front .jp-card-lower .jp-card-cvc{visibility:hidden;float:right;position:relative;bottom:5px}.jp-card .jp-card-front .jp-card-lower .jp-card-number{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:24px;clear:both;margin-bottom:30px}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry{font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;letter-spacing:0;position:relative;float:right;width:25%}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after,.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;font-size:7px;white-space:pre;display:block;opacity:0.5}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{content:attr(data-before);margin-bottom:2px;font-size:7px;text-transform:uppercase}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after{position:absolute;content:attr(data-after);text-align:right;right:100%;margin-right:5px;margin-top:2px;bottom:0}.jp-card .jp-card-front .jp-card-lower .jp-card-name{text-transform:uppercase;font-family:"Bitstream Vera Sans Mono",Consolas,Courier,monospace;font-size:20px;max-height:45px;position:absolute;bottom:0;width:190px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:horizontal;overflow:hidden;text-overflow:ellipsis}.jp-card .jp-card-back{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back .jp-card-bar{background-color:#444;background-image:-webkit-linear-gradient(#444,#333);background-image:linear-gradient(#444,#333);width:100%;height:20%;position:absolute;top:10%}.jp-card .jp-card-back:after{content:" ";display:block;background-color:#fff;background-image:-webkit-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff);width:80%;height:16%;position:absolute;top:40%;left:2%}.jp-card .jp-card-back .jp-card-cvc{position:absolute;top:40%;left:85%;-webkit-transition-delay:600ms;-moz-transition-delay:600ms;transition-delay:600ms}.jp-card .jp-card-back .jp-card-shiny{position:absolute;top:66%;left:2%}.jp-card .jp-card-back .jp-card-shiny:after{content:"This card has been issued by Jesse Pollak and is licensed for anyone to use anywhere for free. It comes with no warranty. For support issues, please visit: github.com/jessepollak/card.";position:absolute;left:120%;top:5%;color:white;font-size:7px;width:230px;opacity:0.5}.jp-card.jp-card-identified{box-shadow:0 0 20px rgba(0,0,0,0.3)}.jp-card.jp-card-identified .jp-card-back,.jp-card.jp-card-identified .jp-card-front{background-color:#000;background-color:rgba(0,0,0,0.5)}.jp-card.jp-card-identified .jp-card-back:before,.jp-card.jp-card-identified .jp-card-front:before{-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease;background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);opacity:1}.jp-card.jp-card-identified .jp-card-back .jp-card-logo,.jp-card.jp-card-identified .jp-card-front .jp-card-logo{box-shadow:0 0 0 2px rgba(255,255,255,0.3)}.jp-card.jp-card-identified.no-radial-gradient .jp-card-back:before,.jp-card.jp-card-identified.no-radial-gradient .jp-card-front:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}@media (max-width: 450px){.card-wrapper{max-width:80vw;width:100%;margin:20px auto;overflow-x:hidden}.card-wrapper>.jp-card-container{transform:scale(0.625);transform-origin:left center}}\n',""]);const d=i},645:r=>{"use strict";r.exports=function(r){var e=[];return e.toString=function(){return this.map((function(e){var t="",a=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),a&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=r(e),a&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(r,t,a,n,o){"string"==typeof r&&(r=[[null,r,void 0]]);var i={};if(a)for(var d=0;d0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=o),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),n&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=n):l[4]="".concat(n)),e.push(l))}},e}},81:r=>{"use strict";r.exports=function(r){return r[1]}},648:r=>{"use strict";var e="Function.prototype.bind called on incompatible ",t=Array.prototype.slice,a=Object.prototype.toString,n="[object Function]";r.exports=function(r){var o=this;if("function"!=typeof o||a.call(o)!==n)throw new TypeError(e+o);for(var i,d=t.call(arguments,1),c=function(){if(this instanceof i){var e=o.apply(this,d.concat(t.call(arguments)));return Object(e)===e?e:this}return o.apply(r,d.concat(t.call(arguments)))},p=Math.max(0,o.length-d.length),l=[],s=0;s{"use strict";var a=t(648);r.exports=Function.prototype.bind||a},221:r=>{"use strict";"undefined"!=typeof self?r.exports=self:"undefined"!=typeof window?r.exports=window:r.exports=Function("return this")()},168:(r,e,t)=>{"use strict";var a=t(221);r.exports=function(){return"object"==typeof t.g&&t.g&&t.g.Math===Math&&t.g.Array===Array?t.g:a}},642:(r,e,t)=>{"use strict";var a=t(612);r.exports=a.call(Function.call,Object.prototype.hasOwnProperty)},452:r=>{"use strict";var e,t,a=Object.prototype,n=a.hasOwnProperty,o=a.toString;"function"==typeof Symbol&&(e=Symbol.prototype.valueOf),"function"==typeof BigInt&&(t=BigInt.prototype.valueOf);var i=function(r){return r!=r},d={boolean:1,number:1,string:1,undefined:1},c=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,p=/^[A-Fa-f0-9]+$/,l={};l.a=l.type=function(r,e){return typeof r===e},l.defined=function(r){return void 0!==r},l.empty=function(r){var e,t=o.call(r);if("[object Array]"===t||"[object Arguments]"===t||"[object String]"===t)return 0===r.length;if("[object Object]"===t){for(e in r)if(n.call(r,e))return!1;return!0}return!r},l.equal=function(r,e){if(r===e)return!0;var t,a=o.call(r);if(a!==o.call(e))return!1;if("[object Object]"===a){for(t in r)if(!l.equal(r[t],e[t])||!(t in e))return!1;for(t in e)if(!l.equal(r[t],e[t])||!(t in r))return!1;return!0}if("[object Array]"===a){if((t=r.length)!==e.length)return!1;for(;t--;)if(!l.equal(r[t],e[t]))return!1;return!0}return"[object Function]"===a?r.prototype===e.prototype:"[object Date]"===a&&r.getTime()===e.getTime()},l.hosted=function(r,e){var t=typeof e[r];return"object"===t?!!e[r]:!d[t]},l.instance=l.instanceof=function(r,e){return r instanceof e},l.nil=l.null=function(r){return null===r},l.undef=l.undefined=function(r){return void 0===r},l.args=l.arguments=function(r){var e="[object Arguments]"===o.call(r),t=!l.array(r)&&l.arraylike(r)&&l.object(r)&&l.fn(r.callee);return e||t},l.array=Array.isArray||function(r){return"[object Array]"===o.call(r)},l.args.empty=function(r){return l.args(r)&&0===r.length},l.array.empty=function(r){return l.array(r)&&0===r.length},l.arraylike=function(r){return!!r&&!l.bool(r)&&n.call(r,"length")&&isFinite(r.length)&&l.number(r.length)&&r.length>=0},l.bool=l.boolean=function(r){return"[object Boolean]"===o.call(r)},l.false=function(r){return l.bool(r)&&!1===Boolean(Number(r))},l.true=function(r){return l.bool(r)&&!0===Boolean(Number(r))},l.date=function(r){return"[object Date]"===o.call(r)},l.date.valid=function(r){return l.date(r)&&!isNaN(Number(r))},l.element=function(r){return void 0!==r&&"undefined"!=typeof HTMLElement&&r instanceof HTMLElement&&1===r.nodeType},l.error=function(r){return"[object Error]"===o.call(r)},l.fn=l.function=function(r){if("undefined"!=typeof window&&r===window.alert)return!0;var e=o.call(r);return"[object Function]"===e||"[object GeneratorFunction]"===e||"[object AsyncFunction]"===e},l.number=function(r){return"[object Number]"===o.call(r)},l.infinite=function(r){return r===1/0||r===-1/0},l.decimal=function(r){return l.number(r)&&!i(r)&&!l.infinite(r)&&r%1!=0},l.divisibleBy=function(r,e){var t=l.infinite(r),a=l.infinite(e),n=l.number(r)&&!i(r)&&l.number(e)&&!i(e)&&0!==e;return t||a||n&&r%e==0},l.integer=l.int=function(r){return l.number(r)&&!i(r)&&r%1==0},l.maximum=function(r,e){if(i(r))throw new TypeError("NaN is not a valid value");if(!l.arraylike(e))throw new TypeError("second argument must be array-like");for(var t=e.length;--t>=0;)if(r=0;)if(r>e[t])return!1;return!0},l.nan=function(r){return!l.number(r)||r!=r},l.even=function(r){return l.infinite(r)||l.number(r)&&r==r&&r%2==0},l.odd=function(r){return l.infinite(r)||l.number(r)&&r==r&&r%2!=0},l.ge=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r>=e},l.gt=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r>e},l.le=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r<=e},l.lt=function(r,e){if(i(r)||i(e))throw new TypeError("NaN is not a valid value");return!l.infinite(r)&&!l.infinite(e)&&r=e&&r<=t},l.object=function(r){return"[object Object]"===o.call(r)},l.primitive=function(r){return!r||!("object"==typeof r||l.object(r)||l.fn(r)||l.array(r))},l.hash=function(r){return l.object(r)&&r.constructor===Object&&!r.nodeType&&!r.setInterval},l.regexp=function(r){return"[object RegExp]"===o.call(r)},l.string=function(r){return"[object String]"===o.call(r)},l.base64=function(r){return l.string(r)&&(!r.length||c.test(r))},l.hex=function(r){return l.string(r)&&(!r.length||p.test(r))},l.symbol=function(r){return"function"==typeof Symbol&&"[object Symbol]"===o.call(r)&&"symbol"==typeof e.call(r)},l.bigint=function(r){return"function"==typeof BigInt&&"[object BigInt]"===o.call(r)&&"bigint"==typeof t.call(r)},r.exports=l},907:(r,e,t)=>{"use strict";r.exports=t(886)},886:(r,e,t)=>{"use strict";var a=t(452),n=t(642),o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,d=function(r,e,t){o&&"__proto__"===e?o(r,e,{enumerable:!0,configurable:!0,value:t,writable:!0}):r[e]=t},c=function(r,e){if("__proto__"===e){if(!n(r,e))return;if(i)return i(r,e).value}return r[e]};r.exports=function r(){var e,t,n,o,i,p,l=arguments[0]||{},s=1,f=arguments.length,g=!1;for("boolean"==typeof l&&(g=l,l=arguments[1]||{},s=2),"object"==typeof l||a.fn(l)||(l={});st[1][0].length)&&(t=[e,o]);return t&&t[0]},o=function(r){var e,t,a;for(t=0,a=i.length;t9&&(e-=9),i+=e;return i%10==0},h=function(r){var e;try{if(null!=r.selectionStart&&r.selectionStart!==r.selectionEnd)return!0;if(null!=("undefined"!=typeof document&&null!==document&&null!=(e=document.selection)?e.createRange:void 0)&&document.selection.createRange().text)return!0}catch(r){}return!1},v=function(r){return setTimeout((function(){var t,n;return t=r.target,n=a.val(t),n=e.fns.formatCardNumber(n),d(t,n),a.trigger(t,"change")}))},s=function(r){return function(e){var t,o,i,d,c,p,l,s,f,g,u;if(e.which>0?(o=String.fromCharCode(e.which),u=a.val(e.target)+o):(o=e.data,u=a.val(e.target)),/^\d+$/.test(o)){for(s=e.target,t=n(u),p=u.replace(/\D/g,"").length,g=[16],t&&(g=t.length),r&&(g=g.filter((function(e){return e<=r}))),i=d=0,c=g.length;d=(f=g[i])&&g[i+1])&&p>=f)return;if(!h(s))return l=t&&"amex"===t.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,u=u.substring(0,u.length-1),l.test(u)?(e.preventDefault(),a.val(s,u+" "+o),a.trigger(s,"change")):void 0}}},p=function(r){var e,t;if(e=r.target,t=a.val(e),!r.meta&&8===r.which&&!h(e))return/\d\s$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\d\s$/,"")),a.trigger(e,"change")):/\s\d?$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\s\d?$/,"")),a.trigger(e,"change")):void 0},f=function(r){var e,t,n;if(t=r.target,r.which>0?(e=String.fromCharCode(r.which),n=a.val(t)+e):(e=r.data,n=a.val(t)),/^\d+$/.test(e))return/^\d$/.test(n)&&"0"!==n&&"1"!==n?(r.preventDefault(),a.val(t,"0"+n+" / "),a.trigger(t,"change")):/^\d\d$/.test(n)?(r.preventDefault(),a.val(t,n+" / "),a.trigger(t,"change")):void 0},j=function(r){var e,t,n;if(e=String.fromCharCode(r.which),/^\d+$/.test(e))return t=r.target,n=a.val(t)+e,/^\d$/.test(n)&&"0"!==n&&"1"!==n?(r.preventDefault(),a.val(t,"0"+n),a.trigger(t,"change")):/^\d\d$/.test(n)?(r.preventDefault(),a.val(t,""+n),a.trigger(t,"change")):void 0},g=function(r){var e,t,n;if(e=String.fromCharCode(r.which),/^\d+$/.test(e))return t=r.target,n=a.val(t),/^\d\d$/.test(n)?(a.val(t,n+" / "),a.trigger(t,"change")):void 0},u=function(r){var e,t;if("/"===String.fromCharCode(r.which))return e=r.target,t=a.val(e),/^\d$/.test(t)&&"0"!==t?(a.val(e,"0"+t+" / "),a.trigger(e,"change")):void 0},l=function(r){var e,t;if(!r.metaKey&&(e=r.target,t=a.val(e),8===r.which&&!h(e)))return/\d(\s|\/)+$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\d(\s|\/)*$/,"")),a.trigger(e,"change")):/\s\/\s?\d?$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\s\/\s?\d?$/,"")),a.trigger(e,"change")):void 0},E=function(r){var e;return!(!r.metaKey&&!r.ctrlKey)||(32===r.which?r.preventDefault():0===r.which||r.which<33||(e=String.fromCharCode(r.which),/[\d\s]/.test(e)?void 0:r.preventDefault()))},y=function(r){return function(e){var t,o,i,d,c;if(d=e.target,o=String.fromCharCode(e.which),/^\d+$/.test(o)&&!h(d))return c=(a.val(d)+o).replace(/\D/g,""),i=16,(t=n(c))&&(i=t.length[t.length.length-1]),r&&(i=Math.min(i,r)),c.length<=i?void 0:e.preventDefault()}},w=function(r,e){var t,n;if(n=r.target,t=String.fromCharCode(r.which),/^\d+$/.test(t)&&!h(n))return(a.val(n)+t).replace(/\D/g,"").length>e?r.preventDefault():void 0},k=function(r){return w(r,6)},C=function(r){return w(r,2)},$=function(r){return w(r,4)},x=function(r){var e,t;if(t=r.target,e=String.fromCharCode(r.which),/^\d+$/.test(e)&&!h(t))return(a.val(t)+e).length<=4?void 0:r.preventDefault()},z=function(r){var t,n,o,d,c;if(d=r.target,c=a.val(d),o=e.fns.cardType(c)||"unknown",!a.hasClass(d,o))return t=function(){var r,e,t;for(t=[],r=0,e=i.length;r=0&&(!1===e.luhn||m(r)))},validateCardExpiry:function(e,t){var n,o,i,d;return"object"==typeof e&&"month"in e?(e=(i=e).month,t=i.year):"string"==typeof e&&D.call(e,"/")>=0&&(e=(d=r.fns.cardExpiryVal(e)).month,t=d.year),!(!e||!t)&&(e=a.trim(e),t=a.trim(t),!!/^\d+$/.test(e)&&!!/^\d+$/.test(t)&&!!((e=parseInt(e,10))&&e<=12)&&(2===t.length&&(t=(new Date).getFullYear().toString().slice(0,2)+t),o=new Date(t,e),n=new Date,o.setMonth(o.getMonth()-1),o.setMonth(o.getMonth()+1,1),o>n))},validateCardCVC:function(r,e){var t,n;return r=a.trim(r),!!/^\d+$/.test(r)&&(e&&o(e)?(t=r.length,D.call(null!=(n=o(e))?n.cvcLength:void 0,t)>=0):r.length>=3&&r.length<=4)},cardType:function(r){var e;return r&&(null!=(e=n(r))?e.type:void 0)||null},formatCardNumber:function(r){var e,t,a,o;return(e=n(r))?(o=e.length[e.length.length-1],r=(r=r.replace(/\D/g,"")).slice(0,o),e.format.global?null!=(a=r.match(e.format))?a.join(" "):void 0:null!=(t=e.format.exec(r))?(t.shift(),(t=t.filter((function(r){return r}))).join(" ")):void 0):r}},r.restrictNumeric=function(r){return a.on(r,"keypress",E),a.on(r,"input",E)},r.cardExpiryVal=function(e){return r.fns.cardExpiryVal(a.val(e))},r.formatCardCVC=function(e){return r.restrictNumeric(e),a.on(e,"keypress",x),a.on(e,"input",x),e},r.formatCardExpiry=function(e){var t,n;return r.restrictNumeric(e),e.length&&2===e.length?(t=e[0],n=e[1],this.formatCardExpiryMultiple(t,n)):(a.on(e,"keypress",k),a.on(e,"keypress",f),a.on(e,"keypress",u),a.on(e,"keypress",g),a.on(e,"keydown",l),a.on(e,"input",f)),e},r.formatCardExpiryMultiple=function(r,e){return a.on(r,"keypress",C),a.on(r,"keypress",j),a.on(r,"input",j),a.on(e,"keypress",$),a.on(e,"input",$)},r.formatCardNumber=function(e,t){return r.restrictNumeric(e),a.on(e,"keypress",y(t)),a.on(e,"keypress",s(t)),a.on(e,"keydown",p),a.on(e,"keyup blur",z),a.on(e,"blur",s(t)),a.on(e,"paste",v),a.on(e,"input",s(t)),e},r.getCardArray=function(){return i},r.setCardArray=function(r){return i=r,!0},r.addToCardArray=function(r){return i.push(r)},r.removeFromCardArray=function(r){var e;for(e in i)i[e].type===r&&i.splice(e,1);return!0},r}(),r.exports=e,b.Payment=e}).call(this)},202:function(r){(function(){var e,t,a;(e=function(r){return e.isDOMElement(r)?r:document.querySelectorAll(r)}).isDOMElement=function(r){return r&&null!=r.nodeName},a=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,e.trim=function(r){return null===r?"":(r+"").replace(a,"")},t=/\r/g,e.val=function(r,e){var a;return arguments.length>1?r.value=e:"string"==typeof(a=r.value)?a.replace(t,""):null===a?"":a},e.preventDefault=function(r){if("function"!=typeof r.preventDefault)return r.returnValue=!1,!1;r.preventDefault()},e.normalizeEvent=function(r){var t;return null==(r={which:null!=(t=r).which?t.which:void 0,target:t.target||t.srcElement,preventDefault:function(){return e.preventDefault(t)},originalEvent:t,data:t.data||t.detail}).which&&(r.which=null!=t.charCode?t.charCode:t.keyCode),r},e.on=function(r,t,a){var n,o,i,d,c,p,l,s;if(r.length)for(o=0,d=r.length;o{"use strict";t.r(e),t.d(e,{default:()=>h});var a=t(379),n=t.n(a),o=t(795),i=t.n(o),d=t(569),c=t.n(d),p=t(565),l=t.n(p),s=t(216),f=t.n(s),g=t(589),u=t.n(g),j=t(120),b={};b.styleTagTransform=u(),b.setAttributes=l(),b.insert=c().bind(null,"head"),b.domAPI=i(),b.insertStyleElement=f(),n()(j.Z,b);const h=j.Z&&j.Z.locals?j.Z.locals:void 0},379:r=>{"use strict";var e=[];function t(r){for(var t=-1,a=0;a{"use strict";var e={};r.exports=function(r,t){var a=function(r){if(void 0===e[r]){var t=document.querySelector(r);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(r){t=null}e[r]=t}return e[r]}(r);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}},216:r=>{"use strict";r.exports=function(r){var e=document.createElement("style");return r.setAttributes(e,r.attributes),r.insert(e,r.options),e}},565:(r,e,t)=>{"use strict";r.exports=function(r){var e=t.nc;e&&r.setAttribute("nonce",e)}},795:r=>{"use strict";r.exports=function(r){var e=r.insertStyleElement(r);return{update:function(t){!function(r,e,t){var a="";t.supports&&(a+="@supports (".concat(t.supports,") {")),t.media&&(a+="@media ".concat(t.media," {"));var n=void 0!==t.layer;n&&(a+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),a+=t.css,n&&(a+="}"),t.media&&(a+="}"),t.supports&&(a+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(a,r,e.options)}(e,r,t)},remove:function(){!function(r){if(null===r.parentNode)return!1;r.parentNode.removeChild(r)}(e)}}}},589:r=>{"use strict";r.exports=function(r,e){if(e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}},311:r=>{"use strict";r.exports=jQuery}},a={};function n(r){var e=a[r];if(void 0!==e)return e.exports;var o=a[r]={id:r,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.exports}n.n=r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return n.d(e,{a:e}),e},n.d=(r,e)=>{for(var t in e)n.o(e,t)&&!n.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:e[t]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(r){if("object"==typeof window)return window}}(),n.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),n.r=r=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},n.nc=void 0,e=n(579),(r=n(311)).card={},r.card.fn={},r.fn.card=function(e){return r.card.fn.construct.apply(this,e)},r.fn.extend({card:function(t,...a){return this.each((function(){var n,o;if((o=(n=r(this)).data("card"))||(r.each(t,((r,e)=>{if(e instanceof jQuery)return t[r]=e[0]})),t.form=this,n.data("card",o=new e(t))),"string"==typeof t)return o[t].apply(o,a)}))}}),card={}})(); ================================================ FILE: dist/jquery.card.js.LICENSE.txt ================================================ /*! * node.extend * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * @fileoverview * Port of jQuery.extend that actually works on node.js */ /**! * is * the definitive JavaScript type testing library * * @copyright 2013-2014 Enrico Marino / Jordan Harband * @license MIT */ ================================================ FILE: package.json ================================================ { "name": "card", "version": "2.5.4", "author": "Jesse Pollak ", "description": "Card lets you add an interactive, CSS3 credit card animation to your credit card form to help your users through the process.", "main": "lib/card.js", "repository": { "type": "git", "url": "https://github.com/jessepollak/card" }, "contributors": [ { "name": "Jesse Pollak", "email": "jpollak92@gmail.com" }, { "name": "Melloware", "email": "mellowaredev@gmail.com" }, { "name": "Daniel Juhl", "email": "danieljuhl@gmail.com" } ], "scripts": { "clean": "rimraf ./lib/ && rimraf ./dist/", "compile": "npm run clean && npm run compile:lib && npm run compile:dist && npm run compile:styles", "compile:lib": "coffee --compile -o ./lib/ ./src/coffee/card.coffee && node-sass ./src/scss/card.scss -o lib/ && replace '../scss/card.scss' './card.css' lib/card.js", "compile:dist": "npm run env NODE_ENV=production && webpack", "compile:styles": "node-sass ./src/scss/card.scss -o ./dist/ --output-style compressed", "development": "webpack-dev-server --hot", "preversion": "npm run compile", "prepublish": "npm run env NODE_ENV=production && npm run compile", "postpublish": "git push origin master && git push --tags", "test": "karma start --single-run --browsers PhantomJS" }, "devDependencies": { "bower": "^1.8.12", "coffee-loader": "^4.0.0", "coffee-script": "~1.12.7", "css-loader": "^6.7.2", "event-stream": "^4.0.1", "glob": "^8.0.3", "jquery": "^3.6.0", "node-sass": "^8.0.0", "nodemon": "^2.0.7", "replace": "^1.2.1", "rimraf": "^4.0.4", "run-sequence": "~2.2.1", "sass-loader": "^13.2.0", "style-loader": "^3.3.1", "underscore": "^1.12.1", "vinyl-source-stream": "^2.0.0", "webpack": "^5.75.0", "webpack-cli": "^5.0.0", "webpack-dev-server": "^4.11.1" }, "dependencies": { "node.extend": "~2.0.2", "payment": "^2.4.6", "qj": "^2.0.0" }, "engines": { "node": ">=16.0.0" } } ================================================ FILE: public/index.html ================================================  Card – the better way to collect credit cards
================================================ FILE: src/coffee/card.coffee ================================================ require '../scss/card.scss' QJ = require 'qj' payment = require 'payment' extend = require 'node.extend' class Card initializedDataAttr: "data-jp-card-initialized" cardTemplate: '' + '' template: (tpl, data) -> tpl.replace /\{\{(.*?)\}\}/g, (match, key, str) -> data[key] cardTypes: [ 'jp-card-amex', 'jp-card-dankort', 'jp-card-dinersclub', 'jp-card-discover', 'jp-card-unionpay', 'jp-card-jcb', 'jp-card-laser', 'jp-card-maestro', 'jp-card-mastercard', 'jp-card-troy', 'jp-card-unionpay', 'jp-card-visa', 'jp-card-visaelectron', 'jp-card-elo', 'jp-card-hipercard' ] defaults: formatting: true formSelectors: numberInput: 'input[name="number"]' expiryInput: 'input[name="expiry"]' cvcInput: 'input[name="cvc"]' nameInput: 'input[name="name"]' cardSelectors: cardContainer: '.jp-card-container' card: '.jp-card' numberDisplay: '.jp-card-number' expiryDisplay: '.jp-card-expiry' cvcDisplay: '.jp-card-cvc' nameDisplay: '.jp-card-name' messages: validDate: 'valid\nthru' monthYear: 'month/year' placeholders: number: '•••• •••• •••• ••••' cvc: '•••' expiry: '••/••' name: 'Full Name' masks: cardNumber: false classes: valid: 'jp-card-valid' invalid: 'jp-card-invalid' debug: false constructor: (opts) -> @options = extend(true, @defaults, opts) unless @options.form console.log "Please provide a form" return @$el = QJ(@options.form) unless @options.container console.log "Please provide a container" return @$container = QJ(@options.container) # set a data attribute to ensure that card is only ever initialized # once on a given container toInitialize = if QJ.isDOMElement(@$container) then @$container else @$container[0] return if toInitialize.getAttribute(@initializedDataAttr) toInitialize.setAttribute(@initializedDataAttr, true) @render() @attachHandlers() @handleInitialPlaceholders() render: -> QJ.append(@$container, @template( @cardTemplate, extend({}, @options.messages, @options.placeholders) )) for name, selector of @options.cardSelectors this["$#{name}"] = QJ.find(@$container, selector) for name, selector of @options.formSelectors selector = if @options[name] then @options[name] else selector obj = QJ.find(@$el, selector) console.error "Card can't find a #{name} in your form." if !obj.length and @options.debug this["$#{name}"] = obj if @options.formatting Payment.formatCardNumber(@$numberInput) Payment.formatCardCVC(@$cvcInput) Payment.formatCardExpiry(@$expiryInput) if @options.width $cardContainer = QJ(@options.cardSelectors.cardContainer)[0] baseWidth = parseInt($cardContainer.clientWidth || window.getComputedStyle($cardContainer).width) $cardContainer.style.transform = "scale(#{@options.width / baseWidth})" # safari can't handle transparent radial gradient right now if navigator?.userAgent ua = navigator.userAgent.toLowerCase() if ua.indexOf('safari') != -1 and ua.indexOf('chrome') == -1 QJ.addClass @$card, 'jp-card-safari' if (/MSIE 10\./i.test(navigator.userAgent)) QJ.addClass @$card, 'jp-card-ie-10' # ie 11 does not support conditional compilation, use user agent instead if (/rv:11.0/i.test(navigator.userAgent)) QJ.addClass @$card, 'jp-card-ie-11' attachHandlers: -> numberInputFilters = [@validToggler('cardNumber')] numberInputFilters.push(@maskCardNumber) if @options.masks.cardNumber bindVal @$numberInput, @$numberDisplay, fill: false, filters: numberInputFilters QJ.on @$numberInput, 'payment.cardType', @handle('setCardType') expiryFilters = [(val) -> if val.length == 1 and val[0] == '0' then '' else val.replace /(\s+)/g, '' ] expiryFilters.push @validToggler('cardExpiry') bindVal @$expiryInput, @$expiryDisplay, join: (text) -> if text[0].length == 2 or text[1] then "/" else "" filters: expiryFilters bindVal @$cvcInput, @$cvcDisplay, filters: @validToggler('cardCVC') QJ.on @$cvcInput, 'focus', @handle('flipCard') QJ.on @$cvcInput, 'blur', @handle('unflipCard') bindVal @$nameInput, @$nameDisplay, fill: false filters: @validToggler('cardHolderName') join: ' ' handleInitialPlaceholders: -> for name, selector of @options.formSelectors el = this["$#{name}"] el = el[0] if el instanceof NodeList if QJ.val(el) # if the input has a value, we want to trigger a refresh QJ.trigger el, 'paste' # set a timeout because `jquery.payment` does the reset of the val # in a timeout do (el) -> setTimeout -> QJ.trigger el, 'keyup' handle: (fn) -> (e) => args = Array.prototype.slice.call arguments args.unshift e.target @handlers[fn].apply this, args validToggler: (validatorName) -> if validatorName == "cardExpiry" isValid = (val) -> objVal = Payment.fns.cardExpiryVal val Payment.fns.validateCardExpiry objVal.month, objVal.year else if validatorName == "cardCVC" isValid = (val) => Payment.fns.validateCardCVC val, @cardType else if validatorName == "cardNumber" isValid = (val) -> Payment.fns.validateCardNumber val else if validatorName == "cardHolderName" isValid = (val) -> val != "" (val, $in, $out) => result = isValid val @toggleValidClass $in, result @toggleValidClass $out, result val toggleValidClass: (el, test) -> QJ.toggleClass el, @options.classes.valid, test QJ.toggleClass el, @options.classes.invalid, !test maskCardNumber: (val, el, out) => mask = @options.masks.cardNumber numbers = val.split(' ') if numbers.length >= 3 numbers.forEach (item, idx) -> numbers[idx] = numbers[idx].replace(/\d/g, mask) unless idx == numbers.length - 1 numbers.join(' ') else val.replace /\d/g, mask handlers: setCardType: ($el, e) -> cardType = e.data event = new CustomEvent('card-type-changed', 'detail': e.data) document.dispatchEvent event unless QJ.hasClass @$card, cardType QJ.removeClass @$card, 'jp-card-unknown' QJ.removeClass @$card, @cardTypes.join(' ') QJ.addClass @$card, "jp-card-#{cardType}" QJ.toggleClass @$card, 'jp-card-identified', (cardType isnt 'unknown') @cardType = cardType flipCard: -> QJ.addClass @$card, 'jp-card-flipped' unflipCard: -> QJ.removeClass @$card, 'jp-card-flipped' bindVal = (el, out, opts={}) -> opts.fill = opts.fill || false opts.filters = opts.filters || [] opts.filters = [opts.filters] unless opts.filters instanceof Array opts.join = opts.join || "" if !(typeof(opts.join) == "function") joiner = opts.join opts.join = () -> joiner outDefaults = (o.textContent for o in out) # Set the value on initiation setVal(el, out, outDefaults, opts) # Update on Events QJ.on el, 'focus', -> QJ.addClass out, 'jp-card-focused' QJ.on el, 'blur', -> QJ.removeClass out, 'jp-card-focused' QJ.on el, 'keyup change paste', (e) -> setVal(el, out, outDefaults, opts) el setVal = (el, out, outDefaults, opts) -> val = (QJ.val(elem) for elem in el) join = opts.join(val) val = val.join(join) val = "" if val == join for filter in opts.filters val = filter(val, el, out) for outEl, i in out if opts.fill outVal = val + outDefaults[i].substring(val.length) else outVal = val or outDefaults[i] outEl.textContent = outVal getCardType: -> ccType = Payment.fns.cardType(@$numberInput[0].value) if ccType then ccType else 'unknown' module.exports = Card global.Card = Card ================================================ FILE: src/coffee/jquery.card.coffee ================================================ Card = require './card' $ = require('jquery') $.card = {} $.card.fn = {} $.fn.card = (opts) -> $.card.fn.construct.apply(this, opts) $.fn.extend card: (option, args...) -> @each -> $this = $(this) data = $this.data('card') if !data $.each option, (key, value) => if value instanceof jQuery option[key] = value[0] option['form'] = this $this.data 'card', (data = new Card(option)) if typeof option == 'string' data[option].apply(data, args) ================================================ FILE: src/scss/_mixins.scss ================================================ // IMPORT ONCE // We use this to prevent styles from being loaded multiple times for compenents that rely on other components. $modules: () !default; @mixin exports($name) { // Import from global scope $modules: $modules !global; // Check if a module is already on the list $module_index: index($modules, $name); @if (($module_index == null) or ($module_index == false)) { $modules: append($modules, $name) !global; @content; } } @mixin shape() { content: " "; display: block; } @mixin card-texture($radial-gradient: true) { $b1: rgba(255, 255, 255, 0); $b2: opacify($b1, .03); $b3: opacify($b1, .04); $b4: opacify($b1, .05); @if ($radial-gradient) { @include background-image( repeating-linear-gradient(45deg, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-linear-gradient(135deg, $b4 1px, $b1 2px, $b3 3px, $b2 4px ), repeating-linear-gradient(90deg, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-linear-gradient(210deg, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-radial-gradient(circle at 30% 30%, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-radial-gradient(circle at 70% 70%, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-radial-gradient(circle at 90% 20%, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-radial-gradient(circle at 15% 80%, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), linear-gradient(-25deg, $b1 50%, opacify($b1, .2) 70%, $b1 90%) ); } @else { @include background-image( repeating-linear-gradient(45deg, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-linear-gradient(135deg, $b4 1px, $b1 2px, $b3 3px, $b2 4px ), repeating-linear-gradient(90deg, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), repeating-linear-gradient(210deg, $b1 1px, $b2 2px, $b3 3px, $b4 4px ), linear-gradient(-25deg, $b1 50%, opacify($b1, .2) 70%, $b1 90%) ); } } ================================================ FILE: src/scss/browsers/_ie.scss ================================================ .jp-card.jp-card-ie-10, .jp-card.jp-card-ie-11 { &.jp-card-flipped { @include transform(0deg); .jp-card-front { @include transform(rotateY(0deg)); } .jp-card-back { @include transform(rotateY(0deg)); &:after { left: 18%; } .jp-card-cvc { @include transform(rotateY(180deg)); left: 5%; } .jp-card-shiny { left: 84%; &:after { left: -480%; @include transform(rotateY(180deg)); } } } } } .jp-card.jp-card-ie-10.jp-card-amex .jp-card-back, .jp-card.jp-card-ie-11.jp-card-amex .jp-card-back { display: none; } ================================================ FILE: src/scss/browsers/_safari.scss ================================================ .jp-card.jp-card-safari { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { @include card-texture($radial-gradient: false); } } } } ================================================ FILE: src/scss/card.scss ================================================ @import "bourbon/app/assets/stylesheets/bourbon"; @import "mixins"; // browser specific hacks @import "browsers/safari"; @import "browsers/ie"; @import "cards/amex"; @import "cards/discover"; @import "cards/unionpay"; @import "cards/visa"; @import "cards/visaelectron"; @import "cards/mastercard"; @import "cards/maestro"; @import "cards/dankort"; @import "cards/elo"; @import "cards/jcb"; @import "cards/dinersclub"; @import "cards/hipercard"; @import "cards/troy"; .jp-card-container { @include perspective(1000px); width: $card-width; max-width: 100%; height: $card-height; margin: auto; z-index: 1; position: relative; } .jp-card { font-family: $card-font-family; line-height: 1; position: relative; width: 100%; height: 100%; min-width: 315px; border-radius: $card-border-radius; & > *, & > *:after, & > *:before { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; font-family: inherit; } @include transform-style(preserve-3d); @include transition(all $card-transition-time linear); &.jp-card-flipped { @include transform(rotateY(180deg)); } .jp-card-back, .jp-card-front { @include backface-visibility(hidden); @include transform-style(preserve-3d); @include transition(all $card-transition-time linear); width: 100%; height: 100%; position: absolute; top: 0; left: 0; overflow: hidden; border-radius: $card-border-radius; background: #ddd; &:before { @include shape(); position: absolute; width: 100%; height: 100%; top: 0; left: 0; opacity: 0; border-radius: 10px; @include transition(all $card-transition-time ease); } &:after { @include shape(); } .jp-card-display { color: $card-font-color; font-weight: normal; opacity: 0.5; @include transition(opacity $card-transition-time linear); &.jp-card-focused { opacity: 1; font-weight: 700; &.valid { } } } .jp-card-cvc { font-family: $card-monospace-font-family; font-size: 14px; } .jp-card-shiny { $color: #ccc; $radius: 5px; width: 50px; height: 35px; border-radius: $radius; background: $color; position: relative; &:before { @include shape(); $height: 60%; width: 70%; height: $height; border-top-right-radius: $radius; border-bottom-right-radius: $radius; background: lighten($color, 5%); position: absolute; top: (100% - $height) / 2; } } } .jp-card-front { .jp-card-logo { position: absolute; opacity: 0; right: 5%; top: 8%; @include transition($card-transition-time); } .jp-card-lower { $width: 80%; width: $width; position: absolute; left: (100% - $width) / 2; bottom: 30px; @media only screen and (max-width: 480px) { width: 90%; left: 5%; } .jp-card-cvc { visibility: hidden; float: right; position: relative; bottom: 5px; } .jp-card-number { font-family: $card-monospace-font-family; font-size: 24px; clear: both; margin-bottom: 30px; } .jp-card-expiry { font-family: $card-monospace-font-family; $label-padding: 5px; letter-spacing: 0; position: relative; float: right; width: 25%; &:after, &:before { font-family: $card-font-family; font-weight: bold; font-size: 7px; white-space: pre; display: block; opacity: 0.5; } &:before { content: attr(data-before); margin-bottom: $label-padding - 3px; font-size: 7px; text-transform: uppercase; } &:after { position: absolute; content: attr(data-after); text-align: right; right: 100%; margin-right: $label-padding; margin-top: 2px; bottom: 0; } } .jp-card-name { text-transform: uppercase; font-family: $card-monospace-font-family; font-size: 20px; max-height: 45px; position: absolute; bottom: 0; width: 190px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: horizontal; overflow: hidden; text-overflow: ellipsis; } } } .jp-card-back { @include transform(rotateY(180deg)); $bar-top-offset: 40%; $signature-height: 16%; $signature-left: 2%; .jp-card-bar { @include linear-gradient(#444, #333); width: 100%; height: 20%; position: absolute; top: 10%; } &:after { @include shape(); @include linear-gradient(#fff, #fff); width: 80%; height: $signature-height; position: absolute; top: $bar-top-offset; left: $signature-left; } .jp-card-cvc { position: absolute; top: $bar-top-offset; left: 85%; @include transition-delay($card-transition-time + 200ms); } .jp-card-shiny { position: absolute; top: $bar-top-offset + $signature-height + 10%; left: $signature-left; &:after { content: "This card has been issued by Jesse Pollak and is licensed for anyone to use anywhere for free. It comes with no warranty. For support issues, please visit: github.com/jessepollak/card."; position: absolute; left: 120%; top: 5%; color: white; font-size: 7px; width: 230px; opacity: 0.5; } } } &.jp-card-identified { box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); .jp-card-back, .jp-card-front { background-color: #000; background-color: rgba(0, 0, 0, 0.5); &:before { @include transition(all $card-transition-time ease); @include card-texture(); opacity: 1; // box-shadow: inset 0 0 5px rgba(255,255,255,1); } .jp-card-logo { box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.3); } } &.no-radial-gradient { .jp-card-back, .jp-card-front { &:before { @include card-texture($radial-gradient: false); } } } } } @media (max-width: 450px) { .card-wrapper { max-width: 80vw; width: 100%; margin: 20px auto; overflow-x: hidden; & > .jp-card-container { transform: scale(0.625); transform-origin: left center; } } } ================================================ FILE: src/scss/cards/_amex.scss ================================================ @import "card"; @import "../logos/amex"; $fill-color: #108168; .jp-card.jp-card-amex { &.jp-card-flipped{ @include transform(none); } &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-front { .jp-card-logo.jp-card-amex { opacity: 1; } .jp-card-cvc { visibility: visible; } &:after { opacity: 1; } } } } ================================================ FILE: src/scss/cards/_card.scss ================================================ $card-width: 350px; $card-height: 200px; $card-border-radius: 10px; $card-fill-color: #3399cc; $card-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; $card-monospace-font-family: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; $card-font-color: white; $card-transition-time: 400ms; ================================================ FILE: src/scss/cards/_dankort.scss ================================================ @import "card"; @import "../logos/dankort"; $fill-color: #0055C7; .jp-card.jp-card-dankort { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-dankort { opacity: 1; } } } ================================================ FILE: src/scss/cards/_dinersclub.scss ================================================ @import "card"; @import "../logos/dinersclub"; $fill-color: #999; .jp-card.jp-card-dinersclub .jp-card-front .jp-card-logo { box-shadow: none !important; } .jp-card.jp-card-dinersclub { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-dinersclub { opacity: 1; } } } ================================================ FILE: src/scss/cards/_discover.scss ================================================ @import "card"; @import "../logos/discover"; $fill-color: #86B8CF; $highlight-color: #FF6600; .jp-card { .jp-card-front .jp-card-logo.jp-card-discover { right: 12%; top: 18%; } } .jp-card.jp-card-discover { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-discover { opacity: 1; } .jp-card-front { &:after { $size: 50px; @include transition($card-transition-time); @include shape(); @include linear-gradient($highlight-color, lighten($highlight-color, 20%), $highlight-color); height: $size; width: $size; border-radius: $size / 2; position: absolute; left: 100%; top: 15%; margin-left: -$size / 2; box-shadow: inset 1px 1px 3px 1px rgba(0, 0, 0, .5); } } } } ================================================ FILE: src/scss/cards/_elo.scss ================================================ @import "card"; @import "../logos/elo"; $fill-color: #6F6969; .jp-card.jp-card-elo { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-elo { opacity: 1; } } } ================================================ FILE: src/scss/cards/_hipercard.scss ================================================ @import "card"; @import "../logos/hipercard"; $fill-color: #770304; .jp-card.jp-card-hipercard { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-hipercard { opacity: 1; box-shadow: none; } } } ================================================ FILE: src/scss/cards/_jcb.scss ================================================ @import "card"; @import "../logos/jcb"; $fill-color: #CB8000; .jp-card.jp-card-jcb { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-jcb { opacity: 1; box-shadow: none; } } } ================================================ FILE: src/scss/cards/_maestro.scss ================================================ @import "card"; @import "../logos/maestro"; $fill-color: #0B2C5F; .jp-card.jp-card-maestro { &.jp-card-identified { .jp-card-front, .jp-card-back { .jp-card-logo.jp-card-maestro { box-shadow: none; } &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-maestro { opacity: 1; } } } ================================================ FILE: src/scss/cards/_mastercard.scss ================================================ @import "card"; @import "../logos/mastercard"; $fill-color: #0061A8; .jp-card.jp-card-mastercard { &.jp-card-identified { .jp-card-front, .jp-card-back { .jp-card-logo.jp-card-mastercard { box-shadow: none; } &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-mastercard { opacity: 1; } } } ================================================ FILE: src/scss/cards/_troy.scss ================================================ @import "card"; @import "../logos/troy"; $fill-color: #01adba; .jp-card.jp-card-troy { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-troy { opacity: 1; box-shadow: none; } } } ================================================ FILE: src/scss/cards/_unionpay.scss ================================================ @import "card"; @import "../logos/unionpay"; $fill-color: #987c00; $highlight-color: #FF6600; .jp-card.jp-card-unionpay { &.jp-card-identified { .jp-card-back, .jp-card-front { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-unionpay { opacity: 1; } } } ================================================ FILE: src/scss/cards/_visa.scss ================================================ @import "card"; @import "../logos/visa"; $fill-color: #191278; .jp-card.jp-card-visa { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-visa { opacity: 1; box-shadow: none; } } } ================================================ FILE: src/scss/cards/_visaelectron.scss ================================================ @import "card"; @import "../logos/visaelectron"; $fill-color: #191278; .jp-card.jp-card-visaelectron { &.jp-card-identified { .jp-card-front, .jp-card-back { &:before { background-color: $fill-color; } } .jp-card-logo.jp-card-visaelectron { opacity: 1; } } } ================================================ FILE: src/scss/logos/_amex.scss ================================================ @import "logo"; .jp-card-logo.jp-card-amex { $box-offset: 8px; $box-width: $logo-height - $box-offset; $box-height: $box-width; $font-size: 4px; $font-padding: 2px; text-transform: uppercase; font-size: $font-size; font-weight: bold; color: white; @include background-image(repeating-radial-gradient(circle at center, #FFF 1px, #999 2px)); border: 1px solid #EEE; &:before, &:after { width: $box-width; display: block; position: absolute; left: ($logo-width - $box-width) / 2; } &:before { $blue: #267AC3; height: $box-height; content: "american"; // box-shadow: 1px 1px 0 0 rgba(0, 0, 0, 0.6); top: $box-offset / 2 - 1; text-align: left; padding-left: $font-padding; padding-top: $box-height / 2 - $font-size + 1; background: $blue; } &:after { content: "express"; bottom: $box-height / 2 - $font-size + 1; text-align: right; padding-right: $font-padding; } } ================================================ FILE: src/scss/logos/_dankort.scss ================================================ @import "logo"; .jp-card-logo.jp-card-dankort { $white: #FFFFFF; $black: #000000; $red: #ED1C24; $padding: 3px; $radius: 8px; $inner-height: $logo-height - ($padding * 2) - 2; // height - padding - border $letter-height: $inner-height * 0.55; width: $logo-width; height: $logo-height; padding: $padding; border-radius: $radius; border: $black 1px solid; background-color: $white; .dk { position: relative; width: 100%; height: 100%; overflow: hidden; &:before { background-color: $red; content: ''; position: absolute; width: 100%; height: 100%; display: block; border-radius: $radius*0.75; } &:after { content: ''; position: absolute; top: 50%; margin-top: -($letter-height/2); right: 0; width: 0; height: 0; border-style: solid; border-width: 7px 7px 10px 0; border-color: transparent $red transparent transparent; z-index: 1; } } .d, .k { position: absolute; top: 50%; width: 50%; display: block; height: $letter-height; margin-top: -($letter-height/2); background: white; } .d { left: 0; border-radius: 0 8px 10px 0; &:before { content: ''; position: absolute; top: 50%; left: 50%; display: block; background: $red; border-radius: 2px 4px 6px 0px; height: 5px; width: 7px; margin: -3px 0 0 -4px; } } .k { right: 0; &:before, &:after { content: ''; position: absolute; right: 50%; width: 0; height: 0; border-style: solid; margin-right: -1px; } &:before { top: 0; border-width: 8px 5px 0 0; border-color: $red transparent transparent transparent; } &:after { bottom: 0; border-width: 0 5px 8px 0; border-color: transparent transparent $red transparent; } } } ================================================ FILE: src/scss/logos/_dinersclub.scss ================================================ @import "logo"; .jp-card-logo.jp-card-dinersclub { font-family: serif; height: 40px; width: 100px; color: white; font-size: 17px; font-style: normal; letter-spacing: 1px; &::before, &::after { display: block; position: relative; } &::before { content: 'Diners Club'; } &::after { content: 'International'; text-transform: uppercase; font-size: 0.6em; } } ================================================ FILE: src/scss/logos/_discover.scss ================================================ @import "logo"; .jp-card-logo.jp-card-discover { $orange: #FF6600; $offset: 9px; background: $orange; color: #111; text-transform: uppercase; font-style: normal; font-weight: bold; font-size: 10px; text-align: center; overflow: hidden; z-index: 1; padding-top: $offset; letter-spacing: .03em; border: 1px solid #EEE; &:before, &:after { content: " "; display: block; position: absolute; } &:before { $size: 200px; background: white; width: $size; height: $size; border-radius: $size; bottom: -5%; right: -80%; z-index: -1; } &:after { $size: 8px; width: $size; height: $size; border-radius: $size /2; top: $offset + 1; left: 27px; @include radial-gradient($orange, #fff); content: "network"; font-size: 4px; line-height: 24px; text-indent: -7px; } } ================================================ FILE: src/scss/logos/_elo.scss ================================================ @import "logo"; .jp-card-logo.jp-card-elo { height: 50px; width: 50px; border-radius: 100%; background: black; color: white; text-align: center; text-transform: lowercase; font-size: 21px; font-style: normal; letter-spacing: 1px; font-weight: bold; padding-top: 13px; .e, .l, .o { display: inline-block; position: relative; } .e { @include transform(rotate(-15deg)); } .o { position: relative; display: inline-block; width: 12px; height: 12px; right: 0; top: 7px; border-radius: 100%; @include background-image(linear-gradient(yellow 50%, red 50%)); @include transform(rotate(40deg)); text-indent: -9999px; &:before { content: ""; position: absolute; width: 49%; height: 49%; background: black; border-radius: 100%; text-indent: -99999px; top: 25%; left: 25%; } } } ================================================ FILE: src/scss/logos/_hipercard.scss ================================================ @import "logo"; .jp-card-logo.jp-card-hipercard { height: 20px; width: 100px; color: white; font-size: 21px; font-style: italic; font-weight: bold; &::before, &::after { display: block; position: relative; } } ================================================ FILE: src/scss/logos/_jcb.scss ================================================ @import "logo"; .jp-card-logo.jp-card-jcb { @mixin jcb-radius($jcbradius) { border-radius: $jcbradius 0px $jcbradius 0px; -moz-border-radius: $jcbradius 0px $jcbradius 0px; -webkit-border-radius: $jcbradius 0px $jcbradius 0px; } $logo-padding:2px; $logo-margin:3px; $j-left : #000063; $j-right: #008cff; $c-left : #630000; $c-right: #ff008d; $b-left : #006300; $b-right: #00ff00; @include jcb-radius( 5px ); background-color: white; font-style:normal; color:white; width:50px; padding:$logo-padding 0 0 $logo-padding; > div { width: 15px ; margin-right:1px; display:inline-block; text-align:center; text-shadow:1px 1px rgba(0, 0, 0, 0.6); @include jcb-radius( 5px ); &:before, &:after { content: " "; display: block; height: 8px; } &.j { @include linear-gradient( to right , $j-left, $j-right); } &.c { @include linear-gradient( to right , $c-left, $c-right); } &.b { @include linear-gradient( to right , $b-left, $b-right); } } } ================================================ FILE: src/scss/logos/_logo.scss ================================================ $logo-height: 36px; $logo-width: 60px; $mastercard-family-name-height: 84px; @include exports("_logo.scss") { .jp-card-logo { &, &:before, &:after { box-sizing: border-box; } height: $logo-height; width: $logo-width; font-style: italic; } } ================================================ FILE: src/scss/logos/_maestro.scss ================================================ @import "logo"; .jp-card-logo.jp-card-maestro { // display: none; $blue: #EB001B; $red: #00A2E5; $offset: 0; color: white; font-style: normal; text-transform: lowercase; font-weight: bold; text-align: center; font-size: 14px; line-height: $mastercard-family-name-height; z-index: 1; text-shadow: 1px 1px rgba(0, 0, 0, .6); &:before, &:after { content: " "; display: block; width: $logo-height; top: 0; position: absolute; height: $logo-height; border-radius: $logo-height / 2; } &:before { left: $offset; background: $blue; z-index: -2; } &:after { right: $offset; background: $red; z-index: -1; opacity: 0.8; } } ================================================ FILE: src/scss/logos/_mastercard.scss ================================================ @import "logo"; .jp-card-logo.jp-card-mastercard { // display: none; $red: #EB001B; $yellow: #FF5F00; $offset: 0; color: white; font-style: normal; text-transform: lowercase; font-weight: bold; text-align: center; font-size: 9px; line-height: $mastercard-family-name-height; z-index: 1; text-shadow: 1px 1px rgba(0, 0, 0, .6); &:before, &:after { content: " "; display: block; width: $logo-height; top: 0; position: absolute; height: $logo-height; border-radius: $logo-height / 2; } &:before { left: $offset; background: $red; z-index: -1; opacity: 0.9; } &:after { right: $offset; background: $yellow; z-index: -2; } } ================================================ FILE: src/scss/logos/_troy.scss ================================================ @import "logo"; .jp-card-logo.jp-card-troy { text-transform: lowercase; color: #fff; text-align: center; font-weight: 700; font-size: 24px; line-height: 18px; margin-top: 5px; &:before, &:after { content: \"\"; display: block; width: 26%; height: 6%; background: #22b8c3; right: 32%; top: 24%; position: absolute; transform: rotate(105deg); } } ================================================ FILE: src/scss/logos/_unionpay.scss ================================================ @import "logo"; .jp-card-logo.jp-card-unionpay { $red: #e21836; $offset: 0; $size: 40px; width: $size + 20; display: block; height: $size; background: $red; -webkit-transform: skew(-15deg); -moz-transform: skew(20deg); -o-transform: skew(20deg); border-radius: 5px; font-size: 10px; z-index: 1; line-height: 33px; color: #fff; text-align: center; font-family: "Sans-serif", "Microsoft Yahei", "\5FAE\8F6F\96C5\9ED1", "Hiragino Sans", "Gulim", "\5B8B\4F53"; font-weight: bold; &:after, &:before { display: block; margin: $offset auto; position: absolute; height: $size; top: $offset; z-index: -1; } &:before { content: " "; width: $size - 12; background: #00447c; left: 14px; border-top-left-radius: 5px; border-bottom-left-radius: 5px; } &:after { content: "银联"; width: $size - 14; background: #007b84; left: 34px; border-radius: 5px; font-size: 10px; line-height: 54px; text-indent: -17px; } } ================================================ FILE: src/scss/logos/_visa.scss ================================================ @import "logo"; .jp-card-logo.jp-card-visa { // display: none; text-transform: uppercase; color: white; text-align: center; font-weight: bold; font-size: 24px; line-height: 18px; margin-top:5px; &:before, &:after { content: " "; display: block; width: 100%; height: 25%; } &:before { position:absolute; left:-4px; width: 0; height: 0; border-style: solid; border-width: 0 12px 6px 0; border-color: transparent #ffffff transparent transparent; } } ================================================ FILE: src/scss/logos/_visaelectron.scss ================================================ @import "logo"; .jp-card-logo.jp-card-visaelectron { // display: none; $blue: #1A1876; $yellow: #E79800; background: white; text-transform: uppercase; color: $blue; text-align: center; font-weight: bold; font-size: 15px; line-height: 18px; &:before, &:after { content: " "; display: block; width: 100%; height: 25%; } &:before { background: $blue; } &:after { background: $yellow; } .elec { float: right; font-family: arial; font-size: 9px; margin-right: 1px; margin-top: -5px; text-transform: none; } } ================================================ FILE: webpack.config.js ================================================ var webpack = require("webpack"); var _ = require("underscore"); var baseConfig = { mode: "production", resolve: { extensions: [".js", ".coffee", ".scss"], }, entry: "./src/coffee/card.coffee", output: { path: __dirname + "/dist/", filename: "card.js", library: "card", libraryTarget: "var", }, module: { rules: [ { test: /\.scss/, use: [ "style-loader", "css-loader", { loader: "sass-loader", options: { implementation: require("node-sass"), sassOptions: { outputStyle: "compressed", }, }, }, ], }, { test: /\.coffee$/, loader: "coffee-loader" }, ], }, }; var jQueryConfig = _.defaults( { entry: "./src/coffee/jquery.card.coffee", output: { path: __dirname + "/dist/", filename: "jquery.card.js", library: "card", libraryTarget: "var", }, externals: { jquery: "jQuery", }, }, baseConfig ); module.exports = [baseConfig, jQueryConfig];