- // ==UserScript==
- // @name Pxer: the tool for pixiv.net
- // @name:zh-CN 像素猎手: Pixiv 批量下载工具
- // @name:en-US Pxer: the tool for pixiv.net
- // @name:ja-JP Pxer: Pixiv に向くクローラー
- // @description Maybe the best tool for pixiv.net for capture pictures
- // @description:zh-CN 可能是目前最好用的P站批量抓图工具
- // @description:en-US Maybe the best tool for pixiv.net for capture pictures
- // @description:ja-JP Pixiv の全てのツールで一番使いやすいバッチキャプチャーソフトかもしれない
- // @icon https://pxer-app.pea3nut.org/public/favicon.ico
- // @version 2021.12.5
- // @namespace http://pxer.pea3nut.org/sfp
- // @homepageURL http://pxer.pea3nut.org/
- // @supportURL https://github.com/FoXZilla/Pxer/issues/new/choose
- // @author pea3nut / eternal-flame-AD
- // @grant none
- // @noframes
- // @require https://cdn.jsdelivr.net/npm/vue@2.6/dist/vue.min.js
- // @include https://www.pixiv.net*
- // @include http://www.pixiv.net**
- // @include http://pxer.pea3nut.org*
- // @include https://pxer.pea3nut.org*
- // ==/UserScript==
- javascript: void(function() {
-
- window['PXER_URL'] = 'https://pxer-app.pea3nut.org/';
- window['PXER_MODE'] = 'sfp';
-
- window['pxer'] = window['pxer'] || {};
- pxer.util = pxer.util || {};
- pxer.util.afterLoad =function(fn){
- if(document.readyState !== 'loading'){
- setTimeout(fn);
- }else{
- document.addEventListener('DOMContentLoaded', fn);
- }
- };
- pxer.util.compile = function (str, scope = window) {
- let matchResult = null;
- while (matchResult = str.match(/{{\s*([\w_]+)\s*}}/)) {
- str = str.replace(matchResult[0], scope[matchResult[1]]);
- }
- return str;
- };
- pxer.util.set = function (obj, key, val) {
- const keys = key.split('.');
- let pointer = obj;
- for (let i = 0; i < keys.length; i++) {
- if (i === keys.length - 1) {
- pointer[keys[i]] = val;
- } else {
- pointer[keys[i]] = pointer[keys[i]] || {};
- pointer = pointer[keys[i]];
- }
- }
- };
- // @ref https://www.jianshu.com/p/162dad820f48
- pxer.util.get = function self(data,f){
- if(f.substr) f = f.split(/\.|\\|\//);
-
- if(f.length && data){
- return self(data[f.shift()],f)
- }else if(!f.length && data){
- return data
- }else {
- return "";
- }
- };
- pxer.util.addFile = async function (url) {
- const sector = url.includes('?') ? '&' : '?';
- const pxerVersion = /*@auto-fill*/'2021.12.5'/*@auto-fill*/;
-
- if (!/^(https?:)?\/\//.test(url)) url = pxer.url + url;
- url = url + sector + `pxer-version=${pxerVersion}`;
-
- const createScript = () => new Promise(function (resolve, reject) {
- const elt = document.createElement('script');
- elt.addEventListener('error', reject);
- elt.addEventListener('load', resolve);
- elt.addEventListener('load', () => pxer.log('Loaded ' + url));
- elt.src = url;
- document.documentElement.appendChild(elt);
- return elt;
- });
- const createCss = () => new Promise(function (resolve) {
- const elt = document.createElement('link');
- elt.rel = 'stylesheet';
- elt.href = url;
- document.documentElement.appendChild(elt);
- resolve();
- });
- const createIcon = () => new Promise(function (resolve) {
- pxer.util.afterLoad(() => {
- Array.from(document.querySelectorAll("link[rel*='icon']")).forEach(elt => elt.href = url);
- });
- (document.head || document.documentElement).appendChild(function(){
- const elt = document.createElement('link');
- elt.rel = 'shortcut icon';
- elt.type = 'image/x-icon';
- elt.href = url;
- return elt;
- }());
- resolve();
- });
-
- const fileFormat = url.match(/\.([^.]+?)(\?.+?)?$/)[1];
- switch (fileFormat) {
- case 'js':
- return createScript();
- case 'css':
- return createCss();
- case 'ico':
- return createIcon();
- case 'json':
- return fetch(url).then(res => res.json());
- default:
- return fetch(url).then(res => res.text());
- }
- };
-
- (async function(){
- window['PXER_URL'] = window['PXER_URL'] || 'https://pxer-app.pea3nut.org/';
- window['PXER_MODE'] = window['PXER_MODE'] || 'native';
- window['PXER_LANG'] = window['PXER_LANG'] || (document.documentElement.lang || window.navigator.language).split('-')[0];
-
- pxer.url = PXER_URL;
- pxer.mode = PXER_MODE;
- pxer.lang = PXER_LANG;
- pxer.log = (...msg) => console.log('[Pxer]', ...msg);
-
- switch (PXER_MODE) {
- case 'dev':
- case 'master':
- // old version doesn't declare "@require vuejs"
- await pxer.util.addFile('https://cdn.jsdelivr.net/npm/vue@2.6/dist/vue.min.js');
- case 'native':
- await pxer.util.addFile('native.js');
- break;
- case 'local':
- await pxer.util.addFile('src/local.js');
- break;
- case 'sfp':
- break;
- }
- })().catch(console.error);
-
- // package.json
- pxer.util.set(pxer, 'package', {
- "name": "pxer",
- "version": "2021.12.5",
- "private": true,
- "scripts": {
- "dev": "npm run build && ws --https --port 8125 --cors.origin=*",
- "build": "node-sass src/ --output src/ && node build/build-launcher && node build/build-native && node build/build-sfp",
- "test-build": "ws --directory dist/ --https --port 8125 --cors.origin *"
- },
- "dependencies": {
- "request": "^2.88.0",
- "vue": "^2.6.10"
- },
- "devDependencies": {
- "bootstrap": "^4.3.1",
- "ejs": "^2.7.1",
- "local-web-server": "^3.0.7",
- "node-sass": "^4.12.0"
- }
- }
- )
- ;
-
-
- // src/view/template.html
- pxer.util.set(pxer, 'uiTemplate', `<div id="pxerApp" class="pxer-app">
-
- <div class="pxer-nav">
- <div class="pn-header">
- <a href="http://pxer.pea3nut.org/" target="_blank">Pxer <small>{{ pxerVersion }}</small></a>
- </div>
- <div class="pn-message" v-text="errmsg" v-if="errmsg">
- oops~ get some error
- </div>
- <div v-if="showAll || canCrawl" class="pn-buttons">
- <div
- class="pnb-progress"
- v-show="showAll || isRunning || ['ready','re-ready'].includes(state)"
- >
- <span>{{ finishCount >= 0 ? finishCount : '-' }} / {{ taskCount }}</span>
- </div>
- <button
- v-show="showAll || ['ready'].includes(state)"
- @click="showTaskOption = !showTaskOption"
- class="btn btn-outline-info"
- >{{ t('button.option') }}</button>
-
- <div
- id="wave"
- v-if="state==='init' || showLoadingButton"
- >
- <span class="dot"></span>
- <span class="dot"></span>
- <span class="dot"></span>
- </div>
- <button
- class="btn btn-outline-primary"
- @click="crawlDirectly"
- v-else-if="canCrawlDirectly"
- >{{ t('button.crawl') }}</button>
- <template v-else>
- <button class="btn btn-outline-success"
- @click="load"
- v-if="state==='standby'&&showLoadBtn"
- >{{ t('button.load') }}</button>
- <button class="btn btn-outline-primary"
- @click="run"
- v-if="state==='ready' || (state==='re-ready'&&pxer.taskList.length)"
- >{{ t('button.crawl') }}</button>
- <button class="btn btn-outline-danger"
- @click="stop"
- v-if="isRunning"
- >{{ t('button.stop') }}</button>
- <template v-if="showAll || showFailTaskList.length">
- <button class="btn btn-outline-warning"
- @click="showPxerFailWindow=!showPxerFailWindow"
- >{{ t('button.successBut') }}</button><span class="pnb-warn-number"
- v-text="showFailTaskList.length>99?99:showFailTaskList.length"></span>
- </template>
- </template>
- </div>
- </div>
-
- <div class="pxer-fail" v-if="showAll ||(showPxerFailWindow &&showFailTaskList.length)">
- <table class="table">
- <thead class="pft-head"><tr>
- <td>{{ t('label.pictureId') }}</td>
- <td width="100">{{ t('label.reason') }}</td>
- <td>{{ t('label.way') }}</td>
- <td width="170" class="text-right">
- <button class="btn btn-outline-secondary"
- @click="checkedFailWorksList =pxer.failList">{{ t('button.selectAll') }}</button>
- <button class="btn btn-outline-success" @click="tryCheckedPfi">{{ t('button.retryTheSelected') }}</button>
- </td>
- </tr></thead>
- <tbody><tr v-for="pfi of showFailTaskList">
- <td><a :href="pfi.url">{{pfi.task.id}}</a></td>
- <td v-text="formatFailType(pfi.type)"></td>
- <td v-html="formatFailSolution(pfi.type)"></td>
- <td class="text-right"><input type="checkbox" :value="pfi" v-model="checkedFailWorksList"></td>
- </tr></tbody>
- </table>
- </div>
-
-
- <div class="pxer-task-option form-inline" v-if="showAll ||(showTaskOption&&state==='ready')">
- <div class="form-group">
- <label class="pcf-title">{{ t('label.onlyGetTop') }}</label>
- <input type="number" class="form-control" v-model="taskOption.limit" />
- </div>
- <div class="form-group">
- <label class="pcf-title">{{ t('label.onlyGetBeforeId') }}</label>
- <input type="number" class="form-control" v-model="taskOption.stopId" />
- </div>
- <div class="form-group ptp-buttons">
- <button class="btn btn-outline-success" @click="useTaskOption">{{ t('button.apply') }}</button>
- </div>
- </div>
-
-
-
-
-
- <div class="pxer-print" v-if="showAll ||['finish'].indexOf(state)!==-1">
- <div class="pp-filter pxer-class-fieldset">
- <div class="ppf-title pcf-title">{{ t('title.filterOptions') }}</div>
- <div class="ppf-form">
- <div class="form-row">
- <div class="form-row">
- <div class="form-group col">
- <label>{{ t('label.likeCount') }} ≥</label>
- <input type="number" class="form-control" v-model.number="pxer.pfConfig.rated" />
- </div>
- <div class="form-group col">
- <label>{{ t('label.viewCount') }} ≥</label>
- <input type="number" class="form-control" v-model.number="pxer.pfConfig.view" />
- </div>
- <div class="form-group col">
- <label>{{ t('label.likeProportion') }} ≥</label>
- <input
- type="number"
- class="form-control"
- v-model.number="pxer.pfConfig.rated_pro"
- :placeholder="t('phrase.likeProportion')"
- />
- </div>
- </div>
- </div>
- <div class="card ppf-tag-card">
- <div class="card-header">
- {{ t('title.filterByTag')}}
- <div class="float-right">
- <span class="badge badge-secondary">{{ t('label.whatever') }}</span>
- <span class="badge badge-danger ">{{ t('label.exclude') }}</span>
- <span class="badge badge-success">{{ t('label.mustInclude') }}</span>
- </div>
- </div>
- <div class="card-body" :style="tagFilterFolded ? 'height: 500px' : ''">
- <button
- v-for="tagName in tagInfo.tags"
- class="btn btn-sm ppf-tag"
- :class="countTagTheme(tagName)"
- @click="onTagClick(tagName)"
- @dblclick.stop
- >
- {{ tagName }}
- <span class="badge badge-light">{{ tagInfo.count[tagName] }}</span>
- </button>
- <div
- v-if="tagFilterFolded"
- class="ppf-show-all-tag"
- @click="showAllTagFilter = true"
- >{{ t('button.showAll')}}</div>
- </div>
- </div>
- </div>
- </div>
- <div class="pp-print pxer-class-fieldset">
- <div class="ppp-title pcf-title">{{ t('title.printOptions') }}</div>
- <div class="ppp-form">
- <div class="form-group">
- <label>{{ t('label.singleIllust') }}</label>
- <select class="form-control" v-model="pxer.ppConfig.illust_single">
- <option value="max">{{ t('option.max') }}</option>
- <option value="600p">600p</option>
- <option value="no">{{ t('option.no') }}</option>
- </select>
- </div>
- <div class="form-group">
- <label>{{ t('label.multipleIllust') }}</label>
- <select class="form-control" v-model="pxer.ppConfig.illust_multiple">
- <option value="max">{{ t('option.max') }}</option>
- <option value="1200p">1200p</option>
- <option value="cover_600p">{{ t('option.cover600p') }}</option>
- <option value="no">{{ t('option.no') }}</option>
- </select>
- </div>
- <div class="form-group">
- <label>{{ t('label.singleManga') }}</label>
- <select class="form-control" v-model="pxer.ppConfig.manga_single">
- <option value="max">{{ t('option.max') }}</option>
- <option value="600p">600p</option>
- <option value="no">{{ t('option.no') }}</option>
- </select>
- </div>
- <div class="form-group">
- <label>{{ t('label.multipleManga') }}</label>
- <select class="form-control" v-model="pxer.ppConfig.manga_multiple">
- <option value="max">{{ t('option.max') }}</option>
- <option value="1200p">1200p</option>
- <option value="cover_600p">{{ t('option.cover600p') }}</option>
- <option value="no">{{ t('option.no') }}</option>
- </select>
- </div>
- <div class="form-group">
- <label>{{ t('label.ugoira') }}</label>
- <select class="form-control" v-model="printConfigUgoira">
- <option value="max-no">{{ t('option.ugoiraMax') }}</option>
- <option value="600p-no">{{ t('option.ugoira600p') }}</option>
- <option value="max-yes">{{ t('option.ugoiraMax') }} + {{ t('option.ugoiraConfig') }}</option>
- <option value="600p-yes">{{ t('option.ugoira600p') }} + {{ t('option.ugoiraConfig') }}</option>
- <option value="no-no">{{ t('option.no') }}</option>
- </select>
- </div>
- <div class="pppf-buttons">
- <p class="pppfb-msg" v-html="taskInfo" v-if="taskInfo"></p>
- <button class="btn btn-outline-info" @click="count">{{ t('button.preview') }}</button>
- <button class="btn btn-outline-success" @click="printWorks">{{ t('button.print') }}</button>
- </div>
- </div>
- </div>
- </div>
-
- </div>`)
- ;
-
-
- // src/view/style.css
- document.documentElement.appendChild(
- document.createElement('style')
- ).innerHTML = `.pxer-app {
- /*!
- * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)
- * Copyright 2011-2019 The Bootstrap Authors
- * Copyright 2011-2019 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
- max-width: 970px;
- width: 100%;
- margin: 0 auto;
- box-sizing: border-box;
- color: #212529;
- font-size: 14px; }
- .pxer-app html {
- box-sizing: border-box;
- -ms-overflow-style: scrollbar; }
- .pxer-app *,
- .pxer-app *::before,
- .pxer-app *::after {
- box-sizing: inherit; }
- .pxer-app .container {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto; }
- @media (min-width: 576px) {
- .pxer-app .container {
- max-width: 540px; } }
- @media (min-width: 768px) {
- .pxer-app .container {
- max-width: 720px; } }
- @media (min-width: 992px) {
- .pxer-app .container {
- max-width: 960px; } }
- @media (min-width: 1200px) {
- .pxer-app .container {
- max-width: 1140px; } }
- .pxer-app .container-fluid {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto; }
- .pxer-app .row {
- display: flex;
- flex-wrap: wrap;
- margin-right: -15px;
- margin-left: -15px; }
- .pxer-app .no-gutters {
- margin-right: 0;
- margin-left: 0; }
- .pxer-app .no-gutters > .col,
- .pxer-app .no-gutters > [class*="col-"] {
- padding-right: 0;
- padding-left: 0; }
- .pxer-app .col-1, .pxer-app .col-2, .pxer-app .col-3, .pxer-app .col-4, .pxer-app .col-5, .pxer-app .col-6, .pxer-app .col-7, .pxer-app .col-8, .pxer-app .col-9, .pxer-app .col-10, .pxer-app .col-11, .pxer-app .col-12, .pxer-app .col,
- .pxer-app .col-auto, .pxer-app .col-sm-1, .pxer-app .col-sm-2, .pxer-app .col-sm-3, .pxer-app .col-sm-4, .pxer-app .col-sm-5, .pxer-app .col-sm-6, .pxer-app .col-sm-7, .pxer-app .col-sm-8, .pxer-app .col-sm-9, .pxer-app .col-sm-10, .pxer-app .col-sm-11, .pxer-app .col-sm-12, .pxer-app .col-sm,
- .pxer-app .col-sm-auto, .pxer-app .col-md-1, .pxer-app .col-md-2, .pxer-app .col-md-3, .pxer-app .col-md-4, .pxer-app .col-md-5, .pxer-app .col-md-6, .pxer-app .col-md-7, .pxer-app .col-md-8, .pxer-app .col-md-9, .pxer-app .col-md-10, .pxer-app .col-md-11, .pxer-app .col-md-12, .pxer-app .col-md,
- .pxer-app .col-md-auto, .pxer-app .col-lg-1, .pxer-app .col-lg-2, .pxer-app .col-lg-3, .pxer-app .col-lg-4, .pxer-app .col-lg-5, .pxer-app .col-lg-6, .pxer-app .col-lg-7, .pxer-app .col-lg-8, .pxer-app .col-lg-9, .pxer-app .col-lg-10, .pxer-app .col-lg-11, .pxer-app .col-lg-12, .pxer-app .col-lg,
- .pxer-app .col-lg-auto, .pxer-app .col-xl-1, .pxer-app .col-xl-2, .pxer-app .col-xl-3, .pxer-app .col-xl-4, .pxer-app .col-xl-5, .pxer-app .col-xl-6, .pxer-app .col-xl-7, .pxer-app .col-xl-8, .pxer-app .col-xl-9, .pxer-app .col-xl-10, .pxer-app .col-xl-11, .pxer-app .col-xl-12, .pxer-app .col-xl,
- .pxer-app .col-xl-auto {
- position: relative;
- width: 100%;
- padding-right: 15px;
- padding-left: 15px; }
- .pxer-app .col {
- flex-basis: 0;
- flex-grow: 1;
- max-width: 100%; }
- .pxer-app .col-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%; }
- .pxer-app .col-1 {
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .pxer-app .col-2 {
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .pxer-app .col-3 {
- flex: 0 0 25%;
- max-width: 25%; }
- .pxer-app .col-4 {
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .pxer-app .col-5 {
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .pxer-app .col-6 {
- flex: 0 0 50%;
- max-width: 50%; }
- .pxer-app .col-7 {
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .pxer-app .col-8 {
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .pxer-app .col-9 {
- flex: 0 0 75%;
- max-width: 75%; }
- .pxer-app .col-10 {
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .pxer-app .col-11 {
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .pxer-app .col-12 {
- flex: 0 0 100%;
- max-width: 100%; }
- .pxer-app .order-first {
- order: -1; }
- .pxer-app .order-last {
- order: 13; }
- .pxer-app .order-0 {
- order: 0; }
- .pxer-app .order-1 {
- order: 1; }
- .pxer-app .order-2 {
- order: 2; }
- .pxer-app .order-3 {
- order: 3; }
- .pxer-app .order-4 {
- order: 4; }
- .pxer-app .order-5 {
- order: 5; }
- .pxer-app .order-6 {
- order: 6; }
- .pxer-app .order-7 {
- order: 7; }
- .pxer-app .order-8 {
- order: 8; }
- .pxer-app .order-9 {
- order: 9; }
- .pxer-app .order-10 {
- order: 10; }
- .pxer-app .order-11 {
- order: 11; }
- .pxer-app .order-12 {
- order: 12; }
- .pxer-app .offset-1 {
- margin-left: 8.33333%; }
- .pxer-app .offset-2 {
- margin-left: 16.66667%; }
- .pxer-app .offset-3 {
- margin-left: 25%; }
- .pxer-app .offset-4 {
- margin-left: 33.33333%; }
- .pxer-app .offset-5 {
- margin-left: 41.66667%; }
- .pxer-app .offset-6 {
- margin-left: 50%; }
- .pxer-app .offset-7 {
- margin-left: 58.33333%; }
- .pxer-app .offset-8 {
- margin-left: 66.66667%; }
- .pxer-app .offset-9 {
- margin-left: 75%; }
- .pxer-app .offset-10 {
- margin-left: 83.33333%; }
- .pxer-app .offset-11 {
- margin-left: 91.66667%; }
- @media (min-width: 576px) {
- .pxer-app .col-sm {
- flex-basis: 0;
- flex-grow: 1;
- max-width: 100%; }
- .pxer-app .col-sm-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%; }
- .pxer-app .col-sm-1 {
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .pxer-app .col-sm-2 {
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .pxer-app .col-sm-3 {
- flex: 0 0 25%;
- max-width: 25%; }
- .pxer-app .col-sm-4 {
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .pxer-app .col-sm-5 {
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .pxer-app .col-sm-6 {
- flex: 0 0 50%;
- max-width: 50%; }
- .pxer-app .col-sm-7 {
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .pxer-app .col-sm-8 {
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .pxer-app .col-sm-9 {
- flex: 0 0 75%;
- max-width: 75%; }
- .pxer-app .col-sm-10 {
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .pxer-app .col-sm-11 {
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .pxer-app .col-sm-12 {
- flex: 0 0 100%;
- max-width: 100%; }
- .pxer-app .order-sm-first {
- order: -1; }
- .pxer-app .order-sm-last {
- order: 13; }
- .pxer-app .order-sm-0 {
- order: 0; }
- .pxer-app .order-sm-1 {
- order: 1; }
- .pxer-app .order-sm-2 {
- order: 2; }
- .pxer-app .order-sm-3 {
- order: 3; }
- .pxer-app .order-sm-4 {
- order: 4; }
- .pxer-app .order-sm-5 {
- order: 5; }
- .pxer-app .order-sm-6 {
- order: 6; }
- .pxer-app .order-sm-7 {
- order: 7; }
- .pxer-app .order-sm-8 {
- order: 8; }
- .pxer-app .order-sm-9 {
- order: 9; }
- .pxer-app .order-sm-10 {
- order: 10; }
- .pxer-app .order-sm-11 {
- order: 11; }
- .pxer-app .order-sm-12 {
- order: 12; }
- .pxer-app .offset-sm-0 {
- margin-left: 0; }
- .pxer-app .offset-sm-1 {
- margin-left: 8.33333%; }
- .pxer-app .offset-sm-2 {
- margin-left: 16.66667%; }
- .pxer-app .offset-sm-3 {
- margin-left: 25%; }
- .pxer-app .offset-sm-4 {
- margin-left: 33.33333%; }
- .pxer-app .offset-sm-5 {
- margin-left: 41.66667%; }
- .pxer-app .offset-sm-6 {
- margin-left: 50%; }
- .pxer-app .offset-sm-7 {
- margin-left: 58.33333%; }
- .pxer-app .offset-sm-8 {
- margin-left: 66.66667%; }
- .pxer-app .offset-sm-9 {
- margin-left: 75%; }
- .pxer-app .offset-sm-10 {
- margin-left: 83.33333%; }
- .pxer-app .offset-sm-11 {
- margin-left: 91.66667%; } }
- @media (min-width: 768px) {
- .pxer-app .col-md {
- flex-basis: 0;
- flex-grow: 1;
- max-width: 100%; }
- .pxer-app .col-md-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%; }
- .pxer-app .col-md-1 {
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .pxer-app .col-md-2 {
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .pxer-app .col-md-3 {
- flex: 0 0 25%;
- max-width: 25%; }
- .pxer-app .col-md-4 {
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .pxer-app .col-md-5 {
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .pxer-app .col-md-6 {
- flex: 0 0 50%;
- max-width: 50%; }
- .pxer-app .col-md-7 {
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .pxer-app .col-md-8 {
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .pxer-app .col-md-9 {
- flex: 0 0 75%;
- max-width: 75%; }
- .pxer-app .col-md-10 {
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .pxer-app .col-md-11 {
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .pxer-app .col-md-12 {
- flex: 0 0 100%;
- max-width: 100%; }
- .pxer-app .order-md-first {
- order: -1; }
- .pxer-app .order-md-last {
- order: 13; }
- .pxer-app .order-md-0 {
- order: 0; }
- .pxer-app .order-md-1 {
- order: 1; }
- .pxer-app .order-md-2 {
- order: 2; }
- .pxer-app .order-md-3 {
- order: 3; }
- .pxer-app .order-md-4 {
- order: 4; }
- .pxer-app .order-md-5 {
- order: 5; }
- .pxer-app .order-md-6 {
- order: 6; }
- .pxer-app .order-md-7 {
- order: 7; }
- .pxer-app .order-md-8 {
- order: 8; }
- .pxer-app .order-md-9 {
- order: 9; }
- .pxer-app .order-md-10 {
- order: 10; }
- .pxer-app .order-md-11 {
- order: 11; }
- .pxer-app .order-md-12 {
- order: 12; }
- .pxer-app .offset-md-0 {
- margin-left: 0; }
- .pxer-app .offset-md-1 {
- margin-left: 8.33333%; }
- .pxer-app .offset-md-2 {
- margin-left: 16.66667%; }
- .pxer-app .offset-md-3 {
- margin-left: 25%; }
- .pxer-app .offset-md-4 {
- margin-left: 33.33333%; }
- .pxer-app .offset-md-5 {
- margin-left: 41.66667%; }
- .pxer-app .offset-md-6 {
- margin-left: 50%; }
- .pxer-app .offset-md-7 {
- margin-left: 58.33333%; }
- .pxer-app .offset-md-8 {
- margin-left: 66.66667%; }
- .pxer-app .offset-md-9 {
- margin-left: 75%; }
- .pxer-app .offset-md-10 {
- margin-left: 83.33333%; }
- .pxer-app .offset-md-11 {
- margin-left: 91.66667%; } }
- @media (min-width: 992px) {
- .pxer-app .col-lg {
- flex-basis: 0;
- flex-grow: 1;
- max-width: 100%; }
- .pxer-app .col-lg-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%; }
- .pxer-app .col-lg-1 {
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .pxer-app .col-lg-2 {
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .pxer-app .col-lg-3 {
- flex: 0 0 25%;
- max-width: 25%; }
- .pxer-app .col-lg-4 {
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .pxer-app .col-lg-5 {
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .pxer-app .col-lg-6 {
- flex: 0 0 50%;
- max-width: 50%; }
- .pxer-app .col-lg-7 {
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .pxer-app .col-lg-8 {
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .pxer-app .col-lg-9 {
- flex: 0 0 75%;
- max-width: 75%; }
- .pxer-app .col-lg-10 {
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .pxer-app .col-lg-11 {
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .pxer-app .col-lg-12 {
- flex: 0 0 100%;
- max-width: 100%; }
- .pxer-app .order-lg-first {
- order: -1; }
- .pxer-app .order-lg-last {
- order: 13; }
- .pxer-app .order-lg-0 {
- order: 0; }
- .pxer-app .order-lg-1 {
- order: 1; }
- .pxer-app .order-lg-2 {
- order: 2; }
- .pxer-app .order-lg-3 {
- order: 3; }
- .pxer-app .order-lg-4 {
- order: 4; }
- .pxer-app .order-lg-5 {
- order: 5; }
- .pxer-app .order-lg-6 {
- order: 6; }
- .pxer-app .order-lg-7 {
- order: 7; }
- .pxer-app .order-lg-8 {
- order: 8; }
- .pxer-app .order-lg-9 {
- order: 9; }
- .pxer-app .order-lg-10 {
- order: 10; }
- .pxer-app .order-lg-11 {
- order: 11; }
- .pxer-app .order-lg-12 {
- order: 12; }
- .pxer-app .offset-lg-0 {
- margin-left: 0; }
- .pxer-app .offset-lg-1 {
- margin-left: 8.33333%; }
- .pxer-app .offset-lg-2 {
- margin-left: 16.66667%; }
- .pxer-app .offset-lg-3 {
- margin-left: 25%; }
- .pxer-app .offset-lg-4 {
- margin-left: 33.33333%; }
- .pxer-app .offset-lg-5 {
- margin-left: 41.66667%; }
- .pxer-app .offset-lg-6 {
- margin-left: 50%; }
- .pxer-app .offset-lg-7 {
- margin-left: 58.33333%; }
- .pxer-app .offset-lg-8 {
- margin-left: 66.66667%; }
- .pxer-app .offset-lg-9 {
- margin-left: 75%; }
- .pxer-app .offset-lg-10 {
- margin-left: 83.33333%; }
- .pxer-app .offset-lg-11 {
- margin-left: 91.66667%; } }
- @media (min-width: 1200px) {
- .pxer-app .col-xl {
- flex-basis: 0;
- flex-grow: 1;
- max-width: 100%; }
- .pxer-app .col-xl-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%; }
- .pxer-app .col-xl-1 {
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .pxer-app .col-xl-2 {
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .pxer-app .col-xl-3 {
- flex: 0 0 25%;
- max-width: 25%; }
- .pxer-app .col-xl-4 {
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .pxer-app .col-xl-5 {
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .pxer-app .col-xl-6 {
- flex: 0 0 50%;
- max-width: 50%; }
- .pxer-app .col-xl-7 {
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .pxer-app .col-xl-8 {
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .pxer-app .col-xl-9 {
- flex: 0 0 75%;
- max-width: 75%; }
- .pxer-app .col-xl-10 {
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .pxer-app .col-xl-11 {
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .pxer-app .col-xl-12 {
- flex: 0 0 100%;
- max-width: 100%; }
- .pxer-app .order-xl-first {
- order: -1; }
- .pxer-app .order-xl-last {
- order: 13; }
- .pxer-app .order-xl-0 {
- order: 0; }
- .pxer-app .order-xl-1 {
- order: 1; }
- .pxer-app .order-xl-2 {
- order: 2; }
- .pxer-app .order-xl-3 {
- order: 3; }
- .pxer-app .order-xl-4 {
- order: 4; }
- .pxer-app .order-xl-5 {
- order: 5; }
- .pxer-app .order-xl-6 {
- order: 6; }
- .pxer-app .order-xl-7 {
- order: 7; }
- .pxer-app .order-xl-8 {
- order: 8; }
- .pxer-app .order-xl-9 {
- order: 9; }
- .pxer-app .order-xl-10 {
- order: 10; }
- .pxer-app .order-xl-11 {
- order: 11; }
- .pxer-app .order-xl-12 {
- order: 12; }
- .pxer-app .offset-xl-0 {
- margin-left: 0; }
- .pxer-app .offset-xl-1 {
- margin-left: 8.33333%; }
- .pxer-app .offset-xl-2 {
- margin-left: 16.66667%; }
- .pxer-app .offset-xl-3 {
- margin-left: 25%; }
- .pxer-app .offset-xl-4 {
- margin-left: 33.33333%; }
- .pxer-app .offset-xl-5 {
- margin-left: 41.66667%; }
- .pxer-app .offset-xl-6 {
- margin-left: 50%; }
- .pxer-app .offset-xl-7 {
- margin-left: 58.33333%; }
- .pxer-app .offset-xl-8 {
- margin-left: 66.66667%; }
- .pxer-app .offset-xl-9 {
- margin-left: 75%; }
- .pxer-app .offset-xl-10 {
- margin-left: 83.33333%; }
- .pxer-app .offset-xl-11 {
- margin-left: 91.66667%; } }
- .pxer-app .d-none {
- display: none !important; }
- .pxer-app .d-inline {
- display: inline !important; }
- .pxer-app .d-inline-block {
- display: inline-block !important; }
- .pxer-app .d-block {
- display: block !important; }
- .pxer-app .d-table {
- display: table !important; }
- .pxer-app .d-table-row {
- display: table-row !important; }
- .pxer-app .d-table-cell {
- display: table-cell !important; }
- .pxer-app .d-flex {
- display: flex !important; }
- .pxer-app .d-inline-flex {
- display: inline-flex !important; }
- @media (min-width: 576px) {
- .pxer-app .d-sm-none {
- display: none !important; }
- .pxer-app .d-sm-inline {
- display: inline !important; }
- .pxer-app .d-sm-inline-block {
- display: inline-block !important; }
- .pxer-app .d-sm-block {
- display: block !important; }
- .pxer-app .d-sm-table {
- display: table !important; }
- .pxer-app .d-sm-table-row {
- display: table-row !important; }
- .pxer-app .d-sm-table-cell {
- display: table-cell !important; }
- .pxer-app .d-sm-flex {
- display: flex !important; }
- .pxer-app .d-sm-inline-flex {
- display: inline-flex !important; } }
- @media (min-width: 768px) {
- .pxer-app .d-md-none {
- display: none !important; }
- .pxer-app .d-md-inline {
- display: inline !important; }
- .pxer-app .d-md-inline-block {
- display: inline-block !important; }
- .pxer-app .d-md-block {
- display: block !important; }
- .pxer-app .d-md-table {
- display: table !important; }
- .pxer-app .d-md-table-row {
- display: table-row !important; }
- .pxer-app .d-md-table-cell {
- display: table-cell !important; }
- .pxer-app .d-md-flex {
- display: flex !important; }
- .pxer-app .d-md-inline-flex {
- display: inline-flex !important; } }
- @media (min-width: 992px) {
- .pxer-app .d-lg-none {
- display: none !important; }
- .pxer-app .d-lg-inline {
- display: inline !important; }
- .pxer-app .d-lg-inline-block {
- display: inline-block !important; }
- .pxer-app .d-lg-block {
- display: block !important; }
- .pxer-app .d-lg-table {
- display: table !important; }
- .pxer-app .d-lg-table-row {
- display: table-row !important; }
- .pxer-app .d-lg-table-cell {
- display: table-cell !important; }
- .pxer-app .d-lg-flex {
- display: flex !important; }
- .pxer-app .d-lg-inline-flex {
- display: inline-flex !important; } }
- @media (min-width: 1200px) {
- .pxer-app .d-xl-none {
- display: none !important; }
- .pxer-app .d-xl-inline {
- display: inline !important; }
- .pxer-app .d-xl-inline-block {
- display: inline-block !important; }
- .pxer-app .d-xl-block {
- display: block !important; }
- .pxer-app .d-xl-table {
- display: table !important; }
- .pxer-app .d-xl-table-row {
- display: table-row !important; }
- .pxer-app .d-xl-table-cell {
- display: table-cell !important; }
- .pxer-app .d-xl-flex {
- display: flex !important; }
- .pxer-app .d-xl-inline-flex {
- display: inline-flex !important; } }
- @media print {
- .pxer-app .d-print-none {
- display: none !important; }
- .pxer-app .d-print-inline {
- display: inline !important; }
- .pxer-app .d-print-inline-block {
- display: inline-block !important; }
- .pxer-app .d-print-block {
- display: block !important; }
- .pxer-app .d-print-table {
- display: table !important; }
- .pxer-app .d-print-table-row {
- display: table-row !important; }
- .pxer-app .d-print-table-cell {
- display: table-cell !important; }
- .pxer-app .d-print-flex {
- display: flex !important; }
- .pxer-app .d-print-inline-flex {
- display: inline-flex !important; } }
- .pxer-app .flex-row {
- flex-direction: row !important; }
- .pxer-app .flex-column {
- flex-direction: column !important; }
- .pxer-app .flex-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-center {
- justify-content: center !important; }
- .pxer-app .justify-content-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-center {
- align-items: center !important; }
- .pxer-app .align-items-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-center {
- align-content: center !important; }
- .pxer-app .align-content-between {
- align-content: space-between !important; }
- .pxer-app .align-content-around {
- align-content: space-around !important; }
- .pxer-app .align-content-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-auto {
- align-self: auto !important; }
- .pxer-app .align-self-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-center {
- align-self: center !important; }
- .pxer-app .align-self-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-stretch {
- align-self: stretch !important; }
- @media (min-width: 576px) {
- .pxer-app .flex-sm-row {
- flex-direction: row !important; }
- .pxer-app .flex-sm-column {
- flex-direction: column !important; }
- .pxer-app .flex-sm-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-sm-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-sm-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-sm-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-sm-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-sm-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-sm-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-sm-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-sm-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-sm-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-sm-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-sm-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-sm-center {
- justify-content: center !important; }
- .pxer-app .justify-content-sm-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-sm-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-sm-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-sm-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-sm-center {
- align-items: center !important; }
- .pxer-app .align-items-sm-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-sm-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-sm-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-sm-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-sm-center {
- align-content: center !important; }
- .pxer-app .align-content-sm-between {
- align-content: space-between !important; }
- .pxer-app .align-content-sm-around {
- align-content: space-around !important; }
- .pxer-app .align-content-sm-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-sm-auto {
- align-self: auto !important; }
- .pxer-app .align-self-sm-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-sm-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-sm-center {
- align-self: center !important; }
- .pxer-app .align-self-sm-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-sm-stretch {
- align-self: stretch !important; } }
- @media (min-width: 768px) {
- .pxer-app .flex-md-row {
- flex-direction: row !important; }
- .pxer-app .flex-md-column {
- flex-direction: column !important; }
- .pxer-app .flex-md-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-md-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-md-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-md-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-md-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-md-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-md-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-md-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-md-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-md-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-md-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-md-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-md-center {
- justify-content: center !important; }
- .pxer-app .justify-content-md-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-md-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-md-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-md-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-md-center {
- align-items: center !important; }
- .pxer-app .align-items-md-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-md-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-md-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-md-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-md-center {
- align-content: center !important; }
- .pxer-app .align-content-md-between {
- align-content: space-between !important; }
- .pxer-app .align-content-md-around {
- align-content: space-around !important; }
- .pxer-app .align-content-md-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-md-auto {
- align-self: auto !important; }
- .pxer-app .align-self-md-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-md-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-md-center {
- align-self: center !important; }
- .pxer-app .align-self-md-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-md-stretch {
- align-self: stretch !important; } }
- @media (min-width: 992px) {
- .pxer-app .flex-lg-row {
- flex-direction: row !important; }
- .pxer-app .flex-lg-column {
- flex-direction: column !important; }
- .pxer-app .flex-lg-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-lg-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-lg-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-lg-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-lg-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-lg-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-lg-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-lg-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-lg-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-lg-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-lg-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-lg-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-lg-center {
- justify-content: center !important; }
- .pxer-app .justify-content-lg-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-lg-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-lg-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-lg-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-lg-center {
- align-items: center !important; }
- .pxer-app .align-items-lg-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-lg-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-lg-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-lg-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-lg-center {
- align-content: center !important; }
- .pxer-app .align-content-lg-between {
- align-content: space-between !important; }
- .pxer-app .align-content-lg-around {
- align-content: space-around !important; }
- .pxer-app .align-content-lg-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-lg-auto {
- align-self: auto !important; }
- .pxer-app .align-self-lg-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-lg-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-lg-center {
- align-self: center !important; }
- .pxer-app .align-self-lg-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-lg-stretch {
- align-self: stretch !important; } }
- @media (min-width: 1200px) {
- .pxer-app .flex-xl-row {
- flex-direction: row !important; }
- .pxer-app .flex-xl-column {
- flex-direction: column !important; }
- .pxer-app .flex-xl-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-xl-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-xl-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-xl-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-xl-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-xl-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-xl-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-xl-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-xl-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-xl-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-xl-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-xl-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-xl-center {
- justify-content: center !important; }
- .pxer-app .justify-content-xl-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-xl-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-xl-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-xl-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-xl-center {
- align-items: center !important; }
- .pxer-app .align-items-xl-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-xl-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-xl-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-xl-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-xl-center {
- align-content: center !important; }
- .pxer-app .align-content-xl-between {
- align-content: space-between !important; }
- .pxer-app .align-content-xl-around {
- align-content: space-around !important; }
- .pxer-app .align-content-xl-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-xl-auto {
- align-self: auto !important; }
- .pxer-app .align-self-xl-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-xl-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-xl-center {
- align-self: center !important; }
- .pxer-app .align-self-xl-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-xl-stretch {
- align-self: stretch !important; } }
- .pxer-app .m-0 {
- margin: 0 !important; }
- .pxer-app .mt-0,
- .pxer-app .my-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-0,
- .pxer-app .mx-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-0,
- .pxer-app .my-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-0,
- .pxer-app .mx-0 {
- margin-left: 0 !important; }
- .pxer-app .m-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-1,
- .pxer-app .my-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-1,
- .pxer-app .mx-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-1,
- .pxer-app .my-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-1,
- .pxer-app .mx-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-2,
- .pxer-app .my-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-2,
- .pxer-app .mx-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-2,
- .pxer-app .my-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-2,
- .pxer-app .mx-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-3 {
- margin: 1rem !important; }
- .pxer-app .mt-3,
- .pxer-app .my-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-3,
- .pxer-app .mx-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-3,
- .pxer-app .my-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-3,
- .pxer-app .mx-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-4,
- .pxer-app .my-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-4,
- .pxer-app .mx-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-4,
- .pxer-app .my-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-4,
- .pxer-app .mx-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-5 {
- margin: 3rem !important; }
- .pxer-app .mt-5,
- .pxer-app .my-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-5,
- .pxer-app .mx-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-5,
- .pxer-app .my-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-5,
- .pxer-app .mx-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-0 {
- padding: 0 !important; }
- .pxer-app .pt-0,
- .pxer-app .py-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-0,
- .pxer-app .px-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-0,
- .pxer-app .py-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-0,
- .pxer-app .px-0 {
- padding-left: 0 !important; }
- .pxer-app .p-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-1,
- .pxer-app .py-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-1,
- .pxer-app .px-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-1,
- .pxer-app .py-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-1,
- .pxer-app .px-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-2,
- .pxer-app .py-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-2,
- .pxer-app .px-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-2,
- .pxer-app .py-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-2,
- .pxer-app .px-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-3 {
- padding: 1rem !important; }
- .pxer-app .pt-3,
- .pxer-app .py-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-3,
- .pxer-app .px-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-3,
- .pxer-app .py-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-3,
- .pxer-app .px-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-4,
- .pxer-app .py-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-4,
- .pxer-app .px-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-4,
- .pxer-app .py-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-4,
- .pxer-app .px-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-5 {
- padding: 3rem !important; }
- .pxer-app .pt-5,
- .pxer-app .py-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-5,
- .pxer-app .px-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-5,
- .pxer-app .py-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-5,
- .pxer-app .px-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-n1,
- .pxer-app .my-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-n1,
- .pxer-app .mx-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-n1,
- .pxer-app .my-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-n1,
- .pxer-app .mx-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-n2,
- .pxer-app .my-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-n2,
- .pxer-app .mx-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-n2,
- .pxer-app .my-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-n2,
- .pxer-app .mx-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-n3,
- .pxer-app .my-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-n3,
- .pxer-app .mx-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-n3,
- .pxer-app .my-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-n3,
- .pxer-app .mx-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-n4,
- .pxer-app .my-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-n4,
- .pxer-app .mx-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-n4,
- .pxer-app .my-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-n4,
- .pxer-app .mx-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-n5,
- .pxer-app .my-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-n5,
- .pxer-app .mx-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-n5,
- .pxer-app .my-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-n5,
- .pxer-app .mx-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-auto {
- margin: auto !important; }
- .pxer-app .mt-auto,
- .pxer-app .my-auto {
- margin-top: auto !important; }
- .pxer-app .mr-auto,
- .pxer-app .mx-auto {
- margin-right: auto !important; }
- .pxer-app .mb-auto,
- .pxer-app .my-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-auto,
- .pxer-app .mx-auto {
- margin-left: auto !important; }
- @media (min-width: 576px) {
- .pxer-app .m-sm-0 {
- margin: 0 !important; }
- .pxer-app .mt-sm-0,
- .pxer-app .my-sm-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-sm-0,
- .pxer-app .mx-sm-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-sm-0,
- .pxer-app .my-sm-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-sm-0,
- .pxer-app .mx-sm-0 {
- margin-left: 0 !important; }
- .pxer-app .m-sm-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-sm-1,
- .pxer-app .my-sm-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-sm-1,
- .pxer-app .mx-sm-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-sm-1,
- .pxer-app .my-sm-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-sm-1,
- .pxer-app .mx-sm-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-sm-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-sm-2,
- .pxer-app .my-sm-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-sm-2,
- .pxer-app .mx-sm-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-sm-2,
- .pxer-app .my-sm-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-sm-2,
- .pxer-app .mx-sm-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-sm-3 {
- margin: 1rem !important; }
- .pxer-app .mt-sm-3,
- .pxer-app .my-sm-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-sm-3,
- .pxer-app .mx-sm-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-sm-3,
- .pxer-app .my-sm-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-sm-3,
- .pxer-app .mx-sm-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-sm-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-sm-4,
- .pxer-app .my-sm-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-sm-4,
- .pxer-app .mx-sm-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-sm-4,
- .pxer-app .my-sm-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-sm-4,
- .pxer-app .mx-sm-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-sm-5 {
- margin: 3rem !important; }
- .pxer-app .mt-sm-5,
- .pxer-app .my-sm-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-sm-5,
- .pxer-app .mx-sm-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-sm-5,
- .pxer-app .my-sm-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-sm-5,
- .pxer-app .mx-sm-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-sm-0 {
- padding: 0 !important; }
- .pxer-app .pt-sm-0,
- .pxer-app .py-sm-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-sm-0,
- .pxer-app .px-sm-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-sm-0,
- .pxer-app .py-sm-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-sm-0,
- .pxer-app .px-sm-0 {
- padding-left: 0 !important; }
- .pxer-app .p-sm-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-sm-1,
- .pxer-app .py-sm-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-sm-1,
- .pxer-app .px-sm-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-sm-1,
- .pxer-app .py-sm-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-sm-1,
- .pxer-app .px-sm-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-sm-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-sm-2,
- .pxer-app .py-sm-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-sm-2,
- .pxer-app .px-sm-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-sm-2,
- .pxer-app .py-sm-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-sm-2,
- .pxer-app .px-sm-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-sm-3 {
- padding: 1rem !important; }
- .pxer-app .pt-sm-3,
- .pxer-app .py-sm-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-sm-3,
- .pxer-app .px-sm-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-sm-3,
- .pxer-app .py-sm-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-sm-3,
- .pxer-app .px-sm-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-sm-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-sm-4,
- .pxer-app .py-sm-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-sm-4,
- .pxer-app .px-sm-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-sm-4,
- .pxer-app .py-sm-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-sm-4,
- .pxer-app .px-sm-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-sm-5 {
- padding: 3rem !important; }
- .pxer-app .pt-sm-5,
- .pxer-app .py-sm-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-sm-5,
- .pxer-app .px-sm-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-sm-5,
- .pxer-app .py-sm-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-sm-5,
- .pxer-app .px-sm-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-sm-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-sm-n1,
- .pxer-app .my-sm-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-sm-n1,
- .pxer-app .mx-sm-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-sm-n1,
- .pxer-app .my-sm-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-sm-n1,
- .pxer-app .mx-sm-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-sm-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-sm-n2,
- .pxer-app .my-sm-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-sm-n2,
- .pxer-app .mx-sm-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-sm-n2,
- .pxer-app .my-sm-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-sm-n2,
- .pxer-app .mx-sm-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-sm-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-sm-n3,
- .pxer-app .my-sm-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-sm-n3,
- .pxer-app .mx-sm-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-sm-n3,
- .pxer-app .my-sm-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-sm-n3,
- .pxer-app .mx-sm-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-sm-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-sm-n4,
- .pxer-app .my-sm-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-sm-n4,
- .pxer-app .mx-sm-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-sm-n4,
- .pxer-app .my-sm-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-sm-n4,
- .pxer-app .mx-sm-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-sm-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-sm-n5,
- .pxer-app .my-sm-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-sm-n5,
- .pxer-app .mx-sm-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-sm-n5,
- .pxer-app .my-sm-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-sm-n5,
- .pxer-app .mx-sm-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-sm-auto {
- margin: auto !important; }
- .pxer-app .mt-sm-auto,
- .pxer-app .my-sm-auto {
- margin-top: auto !important; }
- .pxer-app .mr-sm-auto,
- .pxer-app .mx-sm-auto {
- margin-right: auto !important; }
- .pxer-app .mb-sm-auto,
- .pxer-app .my-sm-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-sm-auto,
- .pxer-app .mx-sm-auto {
- margin-left: auto !important; } }
- @media (min-width: 768px) {
- .pxer-app .m-md-0 {
- margin: 0 !important; }
- .pxer-app .mt-md-0,
- .pxer-app .my-md-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-md-0,
- .pxer-app .mx-md-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-md-0,
- .pxer-app .my-md-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-md-0,
- .pxer-app .mx-md-0 {
- margin-left: 0 !important; }
- .pxer-app .m-md-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-md-1,
- .pxer-app .my-md-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-md-1,
- .pxer-app .mx-md-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-md-1,
- .pxer-app .my-md-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-md-1,
- .pxer-app .mx-md-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-md-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-md-2,
- .pxer-app .my-md-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-md-2,
- .pxer-app .mx-md-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-md-2,
- .pxer-app .my-md-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-md-2,
- .pxer-app .mx-md-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-md-3 {
- margin: 1rem !important; }
- .pxer-app .mt-md-3,
- .pxer-app .my-md-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-md-3,
- .pxer-app .mx-md-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-md-3,
- .pxer-app .my-md-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-md-3,
- .pxer-app .mx-md-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-md-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-md-4,
- .pxer-app .my-md-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-md-4,
- .pxer-app .mx-md-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-md-4,
- .pxer-app .my-md-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-md-4,
- .pxer-app .mx-md-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-md-5 {
- margin: 3rem !important; }
- .pxer-app .mt-md-5,
- .pxer-app .my-md-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-md-5,
- .pxer-app .mx-md-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-md-5,
- .pxer-app .my-md-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-md-5,
- .pxer-app .mx-md-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-md-0 {
- padding: 0 !important; }
- .pxer-app .pt-md-0,
- .pxer-app .py-md-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-md-0,
- .pxer-app .px-md-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-md-0,
- .pxer-app .py-md-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-md-0,
- .pxer-app .px-md-0 {
- padding-left: 0 !important; }
- .pxer-app .p-md-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-md-1,
- .pxer-app .py-md-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-md-1,
- .pxer-app .px-md-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-md-1,
- .pxer-app .py-md-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-md-1,
- .pxer-app .px-md-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-md-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-md-2,
- .pxer-app .py-md-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-md-2,
- .pxer-app .px-md-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-md-2,
- .pxer-app .py-md-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-md-2,
- .pxer-app .px-md-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-md-3 {
- padding: 1rem !important; }
- .pxer-app .pt-md-3,
- .pxer-app .py-md-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-md-3,
- .pxer-app .px-md-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-md-3,
- .pxer-app .py-md-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-md-3,
- .pxer-app .px-md-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-md-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-md-4,
- .pxer-app .py-md-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-md-4,
- .pxer-app .px-md-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-md-4,
- .pxer-app .py-md-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-md-4,
- .pxer-app .px-md-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-md-5 {
- padding: 3rem !important; }
- .pxer-app .pt-md-5,
- .pxer-app .py-md-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-md-5,
- .pxer-app .px-md-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-md-5,
- .pxer-app .py-md-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-md-5,
- .pxer-app .px-md-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-md-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-md-n1,
- .pxer-app .my-md-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-md-n1,
- .pxer-app .mx-md-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-md-n1,
- .pxer-app .my-md-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-md-n1,
- .pxer-app .mx-md-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-md-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-md-n2,
- .pxer-app .my-md-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-md-n2,
- .pxer-app .mx-md-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-md-n2,
- .pxer-app .my-md-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-md-n2,
- .pxer-app .mx-md-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-md-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-md-n3,
- .pxer-app .my-md-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-md-n3,
- .pxer-app .mx-md-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-md-n3,
- .pxer-app .my-md-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-md-n3,
- .pxer-app .mx-md-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-md-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-md-n4,
- .pxer-app .my-md-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-md-n4,
- .pxer-app .mx-md-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-md-n4,
- .pxer-app .my-md-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-md-n4,
- .pxer-app .mx-md-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-md-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-md-n5,
- .pxer-app .my-md-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-md-n5,
- .pxer-app .mx-md-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-md-n5,
- .pxer-app .my-md-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-md-n5,
- .pxer-app .mx-md-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-md-auto {
- margin: auto !important; }
- .pxer-app .mt-md-auto,
- .pxer-app .my-md-auto {
- margin-top: auto !important; }
- .pxer-app .mr-md-auto,
- .pxer-app .mx-md-auto {
- margin-right: auto !important; }
- .pxer-app .mb-md-auto,
- .pxer-app .my-md-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-md-auto,
- .pxer-app .mx-md-auto {
- margin-left: auto !important; } }
- @media (min-width: 992px) {
- .pxer-app .m-lg-0 {
- margin: 0 !important; }
- .pxer-app .mt-lg-0,
- .pxer-app .my-lg-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-lg-0,
- .pxer-app .mx-lg-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-lg-0,
- .pxer-app .my-lg-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-lg-0,
- .pxer-app .mx-lg-0 {
- margin-left: 0 !important; }
- .pxer-app .m-lg-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-lg-1,
- .pxer-app .my-lg-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-lg-1,
- .pxer-app .mx-lg-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-lg-1,
- .pxer-app .my-lg-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-lg-1,
- .pxer-app .mx-lg-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-lg-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-lg-2,
- .pxer-app .my-lg-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-lg-2,
- .pxer-app .mx-lg-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-lg-2,
- .pxer-app .my-lg-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-lg-2,
- .pxer-app .mx-lg-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-lg-3 {
- margin: 1rem !important; }
- .pxer-app .mt-lg-3,
- .pxer-app .my-lg-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-lg-3,
- .pxer-app .mx-lg-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-lg-3,
- .pxer-app .my-lg-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-lg-3,
- .pxer-app .mx-lg-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-lg-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-lg-4,
- .pxer-app .my-lg-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-lg-4,
- .pxer-app .mx-lg-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-lg-4,
- .pxer-app .my-lg-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-lg-4,
- .pxer-app .mx-lg-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-lg-5 {
- margin: 3rem !important; }
- .pxer-app .mt-lg-5,
- .pxer-app .my-lg-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-lg-5,
- .pxer-app .mx-lg-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-lg-5,
- .pxer-app .my-lg-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-lg-5,
- .pxer-app .mx-lg-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-lg-0 {
- padding: 0 !important; }
- .pxer-app .pt-lg-0,
- .pxer-app .py-lg-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-lg-0,
- .pxer-app .px-lg-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-lg-0,
- .pxer-app .py-lg-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-lg-0,
- .pxer-app .px-lg-0 {
- padding-left: 0 !important; }
- .pxer-app .p-lg-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-lg-1,
- .pxer-app .py-lg-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-lg-1,
- .pxer-app .px-lg-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-lg-1,
- .pxer-app .py-lg-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-lg-1,
- .pxer-app .px-lg-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-lg-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-lg-2,
- .pxer-app .py-lg-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-lg-2,
- .pxer-app .px-lg-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-lg-2,
- .pxer-app .py-lg-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-lg-2,
- .pxer-app .px-lg-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-lg-3 {
- padding: 1rem !important; }
- .pxer-app .pt-lg-3,
- .pxer-app .py-lg-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-lg-3,
- .pxer-app .px-lg-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-lg-3,
- .pxer-app .py-lg-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-lg-3,
- .pxer-app .px-lg-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-lg-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-lg-4,
- .pxer-app .py-lg-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-lg-4,
- .pxer-app .px-lg-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-lg-4,
- .pxer-app .py-lg-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-lg-4,
- .pxer-app .px-lg-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-lg-5 {
- padding: 3rem !important; }
- .pxer-app .pt-lg-5,
- .pxer-app .py-lg-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-lg-5,
- .pxer-app .px-lg-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-lg-5,
- .pxer-app .py-lg-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-lg-5,
- .pxer-app .px-lg-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-lg-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-lg-n1,
- .pxer-app .my-lg-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-lg-n1,
- .pxer-app .mx-lg-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-lg-n1,
- .pxer-app .my-lg-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-lg-n1,
- .pxer-app .mx-lg-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-lg-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-lg-n2,
- .pxer-app .my-lg-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-lg-n2,
- .pxer-app .mx-lg-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-lg-n2,
- .pxer-app .my-lg-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-lg-n2,
- .pxer-app .mx-lg-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-lg-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-lg-n3,
- .pxer-app .my-lg-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-lg-n3,
- .pxer-app .mx-lg-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-lg-n3,
- .pxer-app .my-lg-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-lg-n3,
- .pxer-app .mx-lg-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-lg-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-lg-n4,
- .pxer-app .my-lg-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-lg-n4,
- .pxer-app .mx-lg-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-lg-n4,
- .pxer-app .my-lg-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-lg-n4,
- .pxer-app .mx-lg-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-lg-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-lg-n5,
- .pxer-app .my-lg-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-lg-n5,
- .pxer-app .mx-lg-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-lg-n5,
- .pxer-app .my-lg-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-lg-n5,
- .pxer-app .mx-lg-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-lg-auto {
- margin: auto !important; }
- .pxer-app .mt-lg-auto,
- .pxer-app .my-lg-auto {
- margin-top: auto !important; }
- .pxer-app .mr-lg-auto,
- .pxer-app .mx-lg-auto {
- margin-right: auto !important; }
- .pxer-app .mb-lg-auto,
- .pxer-app .my-lg-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-lg-auto,
- .pxer-app .mx-lg-auto {
- margin-left: auto !important; } }
- @media (min-width: 1200px) {
- .pxer-app .m-xl-0 {
- margin: 0 !important; }
- .pxer-app .mt-xl-0,
- .pxer-app .my-xl-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-xl-0,
- .pxer-app .mx-xl-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-xl-0,
- .pxer-app .my-xl-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-xl-0,
- .pxer-app .mx-xl-0 {
- margin-left: 0 !important; }
- .pxer-app .m-xl-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-xl-1,
- .pxer-app .my-xl-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-xl-1,
- .pxer-app .mx-xl-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-xl-1,
- .pxer-app .my-xl-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-xl-1,
- .pxer-app .mx-xl-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-xl-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-xl-2,
- .pxer-app .my-xl-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-xl-2,
- .pxer-app .mx-xl-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-xl-2,
- .pxer-app .my-xl-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-xl-2,
- .pxer-app .mx-xl-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-xl-3 {
- margin: 1rem !important; }
- .pxer-app .mt-xl-3,
- .pxer-app .my-xl-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-xl-3,
- .pxer-app .mx-xl-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-xl-3,
- .pxer-app .my-xl-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-xl-3,
- .pxer-app .mx-xl-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-xl-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-xl-4,
- .pxer-app .my-xl-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-xl-4,
- .pxer-app .mx-xl-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-xl-4,
- .pxer-app .my-xl-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-xl-4,
- .pxer-app .mx-xl-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-xl-5 {
- margin: 3rem !important; }
- .pxer-app .mt-xl-5,
- .pxer-app .my-xl-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-xl-5,
- .pxer-app .mx-xl-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-xl-5,
- .pxer-app .my-xl-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-xl-5,
- .pxer-app .mx-xl-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-xl-0 {
- padding: 0 !important; }
- .pxer-app .pt-xl-0,
- .pxer-app .py-xl-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-xl-0,
- .pxer-app .px-xl-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-xl-0,
- .pxer-app .py-xl-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-xl-0,
- .pxer-app .px-xl-0 {
- padding-left: 0 !important; }
- .pxer-app .p-xl-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-xl-1,
- .pxer-app .py-xl-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-xl-1,
- .pxer-app .px-xl-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-xl-1,
- .pxer-app .py-xl-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-xl-1,
- .pxer-app .px-xl-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-xl-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-xl-2,
- .pxer-app .py-xl-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-xl-2,
- .pxer-app .px-xl-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-xl-2,
- .pxer-app .py-xl-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-xl-2,
- .pxer-app .px-xl-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-xl-3 {
- padding: 1rem !important; }
- .pxer-app .pt-xl-3,
- .pxer-app .py-xl-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-xl-3,
- .pxer-app .px-xl-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-xl-3,
- .pxer-app .py-xl-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-xl-3,
- .pxer-app .px-xl-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-xl-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-xl-4,
- .pxer-app .py-xl-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-xl-4,
- .pxer-app .px-xl-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-xl-4,
- .pxer-app .py-xl-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-xl-4,
- .pxer-app .px-xl-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-xl-5 {
- padding: 3rem !important; }
- .pxer-app .pt-xl-5,
- .pxer-app .py-xl-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-xl-5,
- .pxer-app .px-xl-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-xl-5,
- .pxer-app .py-xl-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-xl-5,
- .pxer-app .px-xl-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-xl-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-xl-n1,
- .pxer-app .my-xl-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-xl-n1,
- .pxer-app .mx-xl-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-xl-n1,
- .pxer-app .my-xl-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-xl-n1,
- .pxer-app .mx-xl-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-xl-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-xl-n2,
- .pxer-app .my-xl-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-xl-n2,
- .pxer-app .mx-xl-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-xl-n2,
- .pxer-app .my-xl-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-xl-n2,
- .pxer-app .mx-xl-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-xl-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-xl-n3,
- .pxer-app .my-xl-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-xl-n3,
- .pxer-app .mx-xl-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-xl-n3,
- .pxer-app .my-xl-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-xl-n3,
- .pxer-app .mx-xl-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-xl-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-xl-n4,
- .pxer-app .my-xl-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-xl-n4,
- .pxer-app .mx-xl-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-xl-n4,
- .pxer-app .my-xl-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-xl-n4,
- .pxer-app .mx-xl-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-xl-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-xl-n5,
- .pxer-app .my-xl-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-xl-n5,
- .pxer-app .mx-xl-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-xl-n5,
- .pxer-app .my-xl-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-xl-n5,
- .pxer-app .mx-xl-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-xl-auto {
- margin: auto !important; }
- .pxer-app .mt-xl-auto,
- .pxer-app .my-xl-auto {
- margin-top: auto !important; }
- .pxer-app .mr-xl-auto,
- .pxer-app .mx-xl-auto {
- margin-right: auto !important; }
- .pxer-app .mb-xl-auto,
- .pxer-app .my-xl-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-xl-auto,
- .pxer-app .mx-xl-auto {
- margin-left: auto !important; } }
- .pxer-app *,
- .pxer-app *::before,
- .pxer-app *::after {
- box-sizing: border-box; }
- .pxer-app html {
- font-family: sans-serif;
- line-height: 1.15;
- -webkit-text-size-adjust: 100%;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
- .pxer-app article, .pxer-app aside, .pxer-app figcaption, .pxer-app figure, .pxer-app footer, .pxer-app header, .pxer-app hgroup, .pxer-app main, .pxer-app nav, .pxer-app section {
- display: block; }
- .pxer-app body {
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #212529;
- text-align: left;
- background-color: #fff; }
- .pxer-app [tabindex="-1"]:focus {
- outline: 0 !important; }
- .pxer-app hr {
- box-sizing: content-box;
- height: 0;
- overflow: visible; }
- .pxer-app h1, .pxer-app h2, .pxer-app h3, .pxer-app h4, .pxer-app h5, .pxer-app h6 {
- margin-top: 0;
- margin-bottom: 0.5rem; }
- .pxer-app p {
- margin-top: 0;
- margin-bottom: 1rem; }
- .pxer-app abbr[title],
- .pxer-app abbr[data-original-title] {
- text-decoration: underline;
- text-decoration: underline dotted;
- cursor: help;
- border-bottom: 0;
- text-decoration-skip-ink: none; }
- .pxer-app address {
- margin-bottom: 1rem;
- font-style: normal;
- line-height: inherit; }
- .pxer-app ol,
- .pxer-app ul,
- .pxer-app dl {
- margin-top: 0;
- margin-bottom: 1rem; }
- .pxer-app ol ol,
- .pxer-app ul ul,
- .pxer-app ol ul,
- .pxer-app ul ol {
- margin-bottom: 0; }
- .pxer-app dt {
- font-weight: 700; }
- .pxer-app dd {
- margin-bottom: .5rem;
- margin-left: 0; }
- .pxer-app blockquote {
- margin: 0 0 1rem; }
- .pxer-app b,
- .pxer-app strong {
- font-weight: bolder; }
- .pxer-app small {
- font-size: 80%; }
- .pxer-app sub,
- .pxer-app sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline; }
- .pxer-app sub {
- bottom: -.25em; }
- .pxer-app sup {
- top: -.5em; }
- .pxer-app a {
- color: #007bff;
- text-decoration: none;
- background-color: transparent; }
- .pxer-app a:hover {
- color: #0056b3;
- text-decoration: underline; }
- .pxer-app a:not([href]):not([tabindex]) {
- color: inherit;
- text-decoration: none; }
- .pxer-app a:not([href]):not([tabindex]):hover, .pxer-app a:not([href]):not([tabindex]):focus {
- color: inherit;
- text-decoration: none; }
- .pxer-app a:not([href]):not([tabindex]):focus {
- outline: 0; }
- .pxer-app pre,
- .pxer-app code,
- .pxer-app kbd,
- .pxer-app samp {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 1em; }
- .pxer-app pre {
- margin-top: 0;
- margin-bottom: 1rem;
- overflow: auto; }
- .pxer-app figure {
- margin: 0 0 1rem; }
- .pxer-app img {
- vertical-align: middle;
- border-style: none; }
- .pxer-app svg {
- overflow: hidden;
- vertical-align: middle; }
- .pxer-app table {
- border-collapse: collapse; }
- .pxer-app caption {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
- color: #6c757d;
- text-align: left;
- caption-side: bottom; }
- .pxer-app th {
- text-align: inherit; }
- .pxer-app label {
- display: inline-block;
- margin-bottom: 0.5rem; }
- .pxer-app button {
- border-radius: 0; }
- .pxer-app button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color; }
- .pxer-app input,
- .pxer-app button,
- .pxer-app select,
- .pxer-app optgroup,
- .pxer-app textarea {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit; }
- .pxer-app button,
- .pxer-app input {
- overflow: visible; }
- .pxer-app button,
- .pxer-app select {
- text-transform: none; }
- .pxer-app select {
- word-wrap: normal; }
- .pxer-app button,
- .pxer-app [type="button"],
- .pxer-app [type="reset"],
- .pxer-app [type="submit"] {
- -webkit-appearance: button; }
- .pxer-app button:not(:disabled),
- .pxer-app [type="button"]:not(:disabled),
- .pxer-app [type="reset"]:not(:disabled),
- .pxer-app [type="submit"]:not(:disabled) {
- cursor: pointer; }
- .pxer-app button::-moz-focus-inner,
- .pxer-app [type="button"]::-moz-focus-inner,
- .pxer-app [type="reset"]::-moz-focus-inner,
- .pxer-app [type="submit"]::-moz-focus-inner {
- padding: 0;
- border-style: none; }
- .pxer-app input[type="radio"],
- .pxer-app input[type="checkbox"] {
- box-sizing: border-box;
- padding: 0; }
- .pxer-app input[type="date"],
- .pxer-app input[type="time"],
- .pxer-app input[type="datetime-local"],
- .pxer-app input[type="month"] {
- -webkit-appearance: listbox; }
- .pxer-app textarea {
- overflow: auto;
- resize: vertical; }
- .pxer-app fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0; }
- .pxer-app legend {
- display: block;
- width: 100%;
- max-width: 100%;
- padding: 0;
- margin-bottom: .5rem;
- font-size: 1.5rem;
- line-height: inherit;
- color: inherit;
- white-space: normal; }
- .pxer-app progress {
- vertical-align: baseline; }
- .pxer-app [type="number"]::-webkit-inner-spin-button,
- .pxer-app [type="number"]::-webkit-outer-spin-button {
- height: auto; }
- .pxer-app [type="search"] {
- outline-offset: -2px;
- -webkit-appearance: none; }
- .pxer-app [type="search"]::-webkit-search-decoration {
- -webkit-appearance: none; }
- .pxer-app ::-webkit-file-upload-button {
- font: inherit;
- -webkit-appearance: button; }
- .pxer-app output {
- display: inline-block; }
- .pxer-app summary {
- display: list-item;
- cursor: pointer; }
- .pxer-app template {
- display: none; }
- .pxer-app [hidden] {
- display: none !important; }
- .pxer-app .table {
- width: 100%;
- margin-bottom: 1rem;
- color: #212529; }
- .pxer-app .table th,
- .pxer-app .table td {
- padding: 0.75rem;
- vertical-align: top;
- border-top: 1px solid #dee2e6; }
- .pxer-app .table thead th {
- vertical-align: bottom;
- border-bottom: 2px solid #dee2e6; }
- .pxer-app .table tbody + tbody {
- border-top: 2px solid #dee2e6; }
- .pxer-app .table-sm th,
- .pxer-app .table-sm td {
- padding: 0.3rem; }
- .pxer-app .table-bordered {
- border: 1px solid #dee2e6; }
- .pxer-app .table-bordered th,
- .pxer-app .table-bordered td {
- border: 1px solid #dee2e6; }
- .pxer-app .table-bordered thead th,
- .pxer-app .table-bordered thead td {
- border-bottom-width: 2px; }
- .pxer-app .table-borderless th,
- .pxer-app .table-borderless td,
- .pxer-app .table-borderless thead th,
- .pxer-app .table-borderless tbody + tbody {
- border: 0; }
- .pxer-app .table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(0, 0, 0, 0.05); }
- .pxer-app .table-hover tbody tr:hover {
- color: #212529;
- background-color: rgba(0, 0, 0, 0.075); }
- .pxer-app .table-primary,
- .pxer-app .table-primary > th,
- .pxer-app .table-primary > td {
- background-color: #b8daff; }
- .pxer-app .table-primary th,
- .pxer-app .table-primary td,
- .pxer-app .table-primary thead th,
- .pxer-app .table-primary tbody + tbody {
- border-color: #7abaff; }
- .pxer-app .table-hover .table-primary:hover {
- background-color: #9fcdff; }
- .pxer-app .table-hover .table-primary:hover > td,
- .pxer-app .table-hover .table-primary:hover > th {
- background-color: #9fcdff; }
- .pxer-app .table-secondary,
- .pxer-app .table-secondary > th,
- .pxer-app .table-secondary > td {
- background-color: #d6d8db; }
- .pxer-app .table-secondary th,
- .pxer-app .table-secondary td,
- .pxer-app .table-secondary thead th,
- .pxer-app .table-secondary tbody + tbody {
- border-color: #b3b7bb; }
- .pxer-app .table-hover .table-secondary:hover {
- background-color: #c8cbcf; }
- .pxer-app .table-hover .table-secondary:hover > td,
- .pxer-app .table-hover .table-secondary:hover > th {
- background-color: #c8cbcf; }
- .pxer-app .table-success,
- .pxer-app .table-success > th,
- .pxer-app .table-success > td {
- background-color: #c3e6cb; }
- .pxer-app .table-success th,
- .pxer-app .table-success td,
- .pxer-app .table-success thead th,
- .pxer-app .table-success tbody + tbody {
- border-color: #8fd19e; }
- .pxer-app .table-hover .table-success:hover {
- background-color: #b1dfbb; }
- .pxer-app .table-hover .table-success:hover > td,
- .pxer-app .table-hover .table-success:hover > th {
- background-color: #b1dfbb; }
- .pxer-app .table-info,
- .pxer-app .table-info > th,
- .pxer-app .table-info > td {
- background-color: #bee5eb; }
- .pxer-app .table-info th,
- .pxer-app .table-info td,
- .pxer-app .table-info thead th,
- .pxer-app .table-info tbody + tbody {
- border-color: #86cfda; }
- .pxer-app .table-hover .table-info:hover {
- background-color: #abdde5; }
- .pxer-app .table-hover .table-info:hover > td,
- .pxer-app .table-hover .table-info:hover > th {
- background-color: #abdde5; }
- .pxer-app .table-warning,
- .pxer-app .table-warning > th,
- .pxer-app .table-warning > td {
- background-color: #ffeeba; }
- .pxer-app .table-warning th,
- .pxer-app .table-warning td,
- .pxer-app .table-warning thead th,
- .pxer-app .table-warning tbody + tbody {
- border-color: #ffdf7e; }
- .pxer-app .table-hover .table-warning:hover {
- background-color: #ffe8a1; }
- .pxer-app .table-hover .table-warning:hover > td,
- .pxer-app .table-hover .table-warning:hover > th {
- background-color: #ffe8a1; }
- .pxer-app .table-danger,
- .pxer-app .table-danger > th,
- .pxer-app .table-danger > td {
- background-color: #f5c6cb; }
- .pxer-app .table-danger th,
- .pxer-app .table-danger td,
- .pxer-app .table-danger thead th,
- .pxer-app .table-danger tbody + tbody {
- border-color: #ed969e; }
- .pxer-app .table-hover .table-danger:hover {
- background-color: #f1b0b7; }
- .pxer-app .table-hover .table-danger:hover > td,
- .pxer-app .table-hover .table-danger:hover > th {
- background-color: #f1b0b7; }
- .pxer-app .table-light,
- .pxer-app .table-light > th,
- .pxer-app .table-light > td {
- background-color: #fdfdfe; }
- .pxer-app .table-light th,
- .pxer-app .table-light td,
- .pxer-app .table-light thead th,
- .pxer-app .table-light tbody + tbody {
- border-color: #fbfcfc; }
- .pxer-app .table-hover .table-light:hover {
- background-color: #ececf6; }
- .pxer-app .table-hover .table-light:hover > td,
- .pxer-app .table-hover .table-light:hover > th {
- background-color: #ececf6; }
- .pxer-app .table-dark,
- .pxer-app .table-dark > th,
- .pxer-app .table-dark > td {
- background-color: #c6c8ca; }
- .pxer-app .table-dark th,
- .pxer-app .table-dark td,
- .pxer-app .table-dark thead th,
- .pxer-app .table-dark tbody + tbody {
- border-color: #95999c; }
- .pxer-app .table-hover .table-dark:hover {
- background-color: #b9bbbe; }
- .pxer-app .table-hover .table-dark:hover > td,
- .pxer-app .table-hover .table-dark:hover > th {
- background-color: #b9bbbe; }
- .pxer-app .table-active,
- .pxer-app .table-active > th,
- .pxer-app .table-active > td {
- background-color: rgba(0, 0, 0, 0.075); }
- .pxer-app .table-hover .table-active:hover {
- background-color: rgba(0, 0, 0, 0.075); }
- .pxer-app .table-hover .table-active:hover > td,
- .pxer-app .table-hover .table-active:hover > th {
- background-color: rgba(0, 0, 0, 0.075); }
- .pxer-app .table .thead-dark th {
- color: #fff;
- background-color: #343a40;
- border-color: #454d55; }
- .pxer-app .table .thead-light th {
- color: #495057;
- background-color: #e9ecef;
- border-color: #dee2e6; }
- .pxer-app .table-dark {
- color: #fff;
- background-color: #343a40; }
- .pxer-app .table-dark th,
- .pxer-app .table-dark td,
- .pxer-app .table-dark thead th {
- border-color: #454d55; }
- .pxer-app .table-dark.table-bordered {
- border: 0; }
- .pxer-app .table-dark.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(255, 255, 255, 0.05); }
- .pxer-app .table-dark.table-hover tbody tr:hover {
- color: #fff;
- background-color: rgba(255, 255, 255, 0.075); }
- @media (max-width: 575.98px) {
- .pxer-app .table-responsive-sm {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch; }
- .pxer-app .table-responsive-sm > .table-bordered {
- border: 0; } }
- @media (max-width: 767.98px) {
- .pxer-app .table-responsive-md {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch; }
- .pxer-app .table-responsive-md > .table-bordered {
- border: 0; } }
- @media (max-width: 991.98px) {
- .pxer-app .table-responsive-lg {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch; }
- .pxer-app .table-responsive-lg > .table-bordered {
- border: 0; } }
- @media (max-width: 1199.98px) {
- .pxer-app .table-responsive-xl {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch; }
- .pxer-app .table-responsive-xl > .table-bordered {
- border: 0; } }
- .pxer-app .table-responsive {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch; }
- .pxer-app .table-responsive > .table-bordered {
- border: 0; }
- .pxer-app .form-control {
- display: block;
- width: 100%;
- height: calc(1.5em + 0.75rem + 2px);
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }
- @media (prefers-reduced-motion: reduce) {
- .pxer-app .form-control {
- transition: none; } }
- .pxer-app .form-control::-ms-expand {
- background-color: transparent;
- border: 0; }
- .pxer-app .form-control:focus {
- color: #495057;
- background-color: #fff;
- border-color: #80bdff;
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
- .pxer-app .form-control::placeholder {
- color: #6c757d;
- opacity: 1; }
- .pxer-app .form-control:disabled, .pxer-app .form-control[readonly] {
- background-color: #e9ecef;
- opacity: 1; }
- .pxer-app select.form-control:focus::-ms-value {
- color: #495057;
- background-color: #fff; }
- .pxer-app .form-control-file,
- .pxer-app .form-control-range {
- display: block;
- width: 100%; }
- .pxer-app .col-form-label {
- padding-top: calc(0.375rem + 1px);
- padding-bottom: calc(0.375rem + 1px);
- margin-bottom: 0;
- font-size: inherit;
- line-height: 1.5; }
- .pxer-app .col-form-label-lg {
- padding-top: calc(0.5rem + 1px);
- padding-bottom: calc(0.5rem + 1px);
- font-size: 1.25rem;
- line-height: 1.5; }
- .pxer-app .col-form-label-sm {
- padding-top: calc(0.25rem + 1px);
- padding-bottom: calc(0.25rem + 1px);
- font-size: 0.875rem;
- line-height: 1.5; }
- .pxer-app .form-control-plaintext {
- display: block;
- width: 100%;
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- margin-bottom: 0;
- line-height: 1.5;
- color: #212529;
- background-color: transparent;
- border: solid transparent;
- border-width: 1px 0; }
- .pxer-app .form-control-plaintext.form-control-sm, .pxer-app input.form-control-plaintext.form-control, .pxer-app select.form-control-plaintext.form-control, .pxer-app .form-control-plaintext.form-control-lg {
- padding-right: 0;
- padding-left: 0; }
- .pxer-app .form-control-sm, .pxer-app input.form-control, .pxer-app select.form-control {
- height: calc(1.5em + 0.5rem + 2px);
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem; }
- .pxer-app .form-control-lg {
- height: calc(1.5em + 1rem + 2px);
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem; }
- .pxer-app select.form-control[size], .pxer-app select.form-control[multiple] {
- height: auto; }
- .pxer-app textarea.form-control {
- height: auto; }
- .pxer-app .form-group {
- margin-bottom: 1rem; }
- .pxer-app .form-text {
- display: block;
- margin-top: 0.25rem; }
- .pxer-app .form-row {
- display: flex;
- flex-wrap: wrap;
- margin-right: -5px;
- margin-left: -5px; }
- .pxer-app .form-row > .col,
- .pxer-app .form-row > [class*="col-"] {
- padding-right: 5px;
- padding-left: 5px; }
- .pxer-app .form-check {
- position: relative;
- display: block;
- padding-left: 1.25rem; }
- .pxer-app .form-check-input {
- position: absolute;
- margin-top: 0.3rem;
- margin-left: -1.25rem; }
- .pxer-app .form-check-input:disabled ~ .form-check-label {
- color: #6c757d; }
- .pxer-app .form-check-label {
- margin-bottom: 0; }
- .pxer-app .form-check-inline {
- display: inline-flex;
- align-items: center;
- padding-left: 0;
- margin-right: 0.75rem; }
- .pxer-app .form-check-inline .form-check-input {
- position: static;
- margin-top: 0;
- margin-right: 0.3125rem;
- margin-left: 0; }
- .pxer-app .valid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #28a745; }
- .pxer-app .valid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: 0.25rem 0.5rem;
- margin-top: .1rem;
- font-size: 0.875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(40, 167, 69, 0.9);
- border-radius: 0.25rem; }
- .was-validated .pxer-app .form-control:valid, .pxer-app .form-control.is-valid {
- border-color: #28a745;
- padding-right: calc(1.5em + 0.75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
- background-repeat: no-repeat;
- background-position: center right calc(0.375em + 0.1875rem);
- background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
- .was-validated .pxer-app .form-control:valid:focus, .pxer-app .form-control.is-valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
- .was-validated .pxer-app .form-control:valid ~ .valid-feedback,
- .was-validated .pxer-app .form-control:valid ~ .valid-tooltip, .pxer-app .form-control.is-valid ~ .valid-feedback,
- .pxer-app .form-control.is-valid ~ .valid-tooltip {
- display: block; }
- .was-validated .pxer-app textarea.form-control:valid, .pxer-app textarea.form-control.is-valid {
- padding-right: calc(1.5em + 0.75rem);
- background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }
- .was-validated .pxer-app .custom-select:valid, .pxer-app .custom-select.is-valid {
- border-color: #28a745;
- padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
- background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
- .was-validated .pxer-app .custom-select:valid:focus, .pxer-app .custom-select.is-valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
- .was-validated .pxer-app .custom-select:valid ~ .valid-feedback,
- .was-validated .pxer-app .custom-select:valid ~ .valid-tooltip, .pxer-app .custom-select.is-valid ~ .valid-feedback,
- .pxer-app .custom-select.is-valid ~ .valid-tooltip {
- display: block; }
- .was-validated .pxer-app .form-control-file:valid ~ .valid-feedback,
- .was-validated .pxer-app .form-control-file:valid ~ .valid-tooltip, .pxer-app .form-control-file.is-valid ~ .valid-feedback,
- .pxer-app .form-control-file.is-valid ~ .valid-tooltip {
- display: block; }
- .was-validated .pxer-app .form-check-input:valid ~ .form-check-label, .pxer-app .form-check-input.is-valid ~ .form-check-label {
- color: #28a745; }
- .was-validated .pxer-app .form-check-input:valid ~ .valid-feedback,
- .was-validated .pxer-app .form-check-input:valid ~ .valid-tooltip, .pxer-app .form-check-input.is-valid ~ .valid-feedback,
- .pxer-app .form-check-input.is-valid ~ .valid-tooltip {
- display: block; }
- .was-validated .pxer-app .custom-control-input:valid ~ .custom-control-label, .pxer-app .custom-control-input.is-valid ~ .custom-control-label {
- color: #28a745; }
- .was-validated .pxer-app .custom-control-input:valid ~ .custom-control-label::before, .pxer-app .custom-control-input.is-valid ~ .custom-control-label::before {
- border-color: #28a745; }
- .was-validated .pxer-app .custom-control-input:valid ~ .valid-feedback,
- .was-validated .pxer-app .custom-control-input:valid ~ .valid-tooltip, .pxer-app .custom-control-input.is-valid ~ .valid-feedback,
- .pxer-app .custom-control-input.is-valid ~ .valid-tooltip {
- display: block; }
- .was-validated .pxer-app .custom-control-input:valid:checked ~ .custom-control-label::before, .pxer-app .custom-control-input.is-valid:checked ~ .custom-control-label::before {
- border-color: #34ce57;
- background-color: #34ce57; }
- .was-validated .pxer-app .custom-control-input:valid:focus ~ .custom-control-label::before, .pxer-app .custom-control-input.is-valid:focus ~ .custom-control-label::before {
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
- .was-validated .pxer-app .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .pxer-app .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {
- border-color: #28a745; }
- .was-validated .pxer-app .custom-file-input:valid ~ .custom-file-label, .pxer-app .custom-file-input.is-valid ~ .custom-file-label {
- border-color: #28a745; }
- .was-validated .pxer-app .custom-file-input:valid ~ .valid-feedback,
- .was-validated .pxer-app .custom-file-input:valid ~ .valid-tooltip, .pxer-app .custom-file-input.is-valid ~ .valid-feedback,
- .pxer-app .custom-file-input.is-valid ~ .valid-tooltip {
- display: block; }
- .was-validated .pxer-app .custom-file-input:valid:focus ~ .custom-file-label, .pxer-app .custom-file-input.is-valid:focus ~ .custom-file-label {
- border-color: #28a745;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
- .pxer-app .invalid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #dc3545; }
- .pxer-app .invalid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: 0.25rem 0.5rem;
- margin-top: .1rem;
- font-size: 0.875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(220, 53, 69, 0.9);
- border-radius: 0.25rem; }
- .was-validated .pxer-app .form-control:invalid, .pxer-app .form-control.is-invalid {
- border-color: #dc3545;
- padding-right: calc(1.5em + 0.75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");
- background-repeat: no-repeat;
- background-position: center right calc(0.375em + 0.1875rem);
- background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
- .was-validated .pxer-app .form-control:invalid:focus, .pxer-app .form-control.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
- .was-validated .pxer-app .form-control:invalid ~ .invalid-feedback,
- .was-validated .pxer-app .form-control:invalid ~ .invalid-tooltip, .pxer-app .form-control.is-invalid ~ .invalid-feedback,
- .pxer-app .form-control.is-invalid ~ .invalid-tooltip {
- display: block; }
- .was-validated .pxer-app textarea.form-control:invalid, .pxer-app textarea.form-control.is-invalid {
- padding-right: calc(1.5em + 0.75rem);
- background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }
- .was-validated .pxer-app .custom-select:invalid, .pxer-app .custom-select.is-invalid {
- border-color: #dc3545;
- padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
- background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
- .was-validated .pxer-app .custom-select:invalid:focus, .pxer-app .custom-select.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
- .was-validated .pxer-app .custom-select:invalid ~ .invalid-feedback,
- .was-validated .pxer-app .custom-select:invalid ~ .invalid-tooltip, .pxer-app .custom-select.is-invalid ~ .invalid-feedback,
- .pxer-app .custom-select.is-invalid ~ .invalid-tooltip {
- display: block; }
- .was-validated .pxer-app .form-control-file:invalid ~ .invalid-feedback,
- .was-validated .pxer-app .form-control-file:invalid ~ .invalid-tooltip, .pxer-app .form-control-file.is-invalid ~ .invalid-feedback,
- .pxer-app .form-control-file.is-invalid ~ .invalid-tooltip {
- display: block; }
- .was-validated .pxer-app .form-check-input:invalid ~ .form-check-label, .pxer-app .form-check-input.is-invalid ~ .form-check-label {
- color: #dc3545; }
- .was-validated .pxer-app .form-check-input:invalid ~ .invalid-feedback,
- .was-validated .pxer-app .form-check-input:invalid ~ .invalid-tooltip, .pxer-app .form-check-input.is-invalid ~ .invalid-feedback,
- .pxer-app .form-check-input.is-invalid ~ .invalid-tooltip {
- display: block; }
- .was-validated .pxer-app .custom-control-input:invalid ~ .custom-control-label, .pxer-app .custom-control-input.is-invalid ~ .custom-control-label {
- color: #dc3545; }
- .was-validated .pxer-app .custom-control-input:invalid ~ .custom-control-label::before, .pxer-app .custom-control-input.is-invalid ~ .custom-control-label::before {
- border-color: #dc3545; }
- .was-validated .pxer-app .custom-control-input:invalid ~ .invalid-feedback,
- .was-validated .pxer-app .custom-control-input:invalid ~ .invalid-tooltip, .pxer-app .custom-control-input.is-invalid ~ .invalid-feedback,
- .pxer-app .custom-control-input.is-invalid ~ .invalid-tooltip {
- display: block; }
- .was-validated .pxer-app .custom-control-input:invalid:checked ~ .custom-control-label::before, .pxer-app .custom-control-input.is-invalid:checked ~ .custom-control-label::before {
- border-color: #e4606d;
- background-color: #e4606d; }
- .was-validated .pxer-app .custom-control-input:invalid:focus ~ .custom-control-label::before, .pxer-app .custom-control-input.is-invalid:focus ~ .custom-control-label::before {
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
- .was-validated .pxer-app .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .pxer-app .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {
- border-color: #dc3545; }
- .was-validated .pxer-app .custom-file-input:invalid ~ .custom-file-label, .pxer-app .custom-file-input.is-invalid ~ .custom-file-label {
- border-color: #dc3545; }
- .was-validated .pxer-app .custom-file-input:invalid ~ .invalid-feedback,
- .was-validated .pxer-app .custom-file-input:invalid ~ .invalid-tooltip, .pxer-app .custom-file-input.is-invalid ~ .invalid-feedback,
- .pxer-app .custom-file-input.is-invalid ~ .invalid-tooltip {
- display: block; }
- .was-validated .pxer-app .custom-file-input:invalid:focus ~ .custom-file-label, .pxer-app .custom-file-input.is-invalid:focus ~ .custom-file-label {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
- .pxer-app .form-inline {
- display: flex;
- flex-flow: row wrap;
- align-items: center; }
- .pxer-app .form-inline .form-check {
- width: 100%; }
- @media (min-width: 576px) {
- .pxer-app .form-inline label {
- display: flex;
- align-items: center;
- justify-content: center;
- margin-bottom: 0; }
- .pxer-app .form-inline .form-group {
- display: flex;
- flex: 0 0 auto;
- flex-flow: row wrap;
- align-items: center;
- margin-bottom: 0; }
- .pxer-app .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle; }
- .pxer-app .form-inline .form-control-plaintext {
- display: inline-block; }
- .pxer-app .form-inline .input-group,
- .pxer-app .form-inline .custom-select {
- width: auto; }
- .pxer-app .form-inline .form-check {
- display: flex;
- align-items: center;
- justify-content: center;
- width: auto;
- padding-left: 0; }
- .pxer-app .form-inline .form-check-input {
- position: relative;
- flex-shrink: 0;
- margin-top: 0;
- margin-right: 0.25rem;
- margin-left: 0; }
- .pxer-app .form-inline .custom-control {
- align-items: center;
- justify-content: center; }
- .pxer-app .form-inline .custom-control-label {
- margin-bottom: 0; } }
- .pxer-app .btn {
- display: inline-block;
- font-weight: 400;
- color: #212529;
- text-align: center;
- vertical-align: middle;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 1.5;
- border-radius: 0.25rem;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }
- @media (prefers-reduced-motion: reduce) {
- .pxer-app .btn {
- transition: none; } }
- .pxer-app .btn:hover {
- color: #212529;
- text-decoration: none; }
- .pxer-app .btn:focus, .pxer-app .btn.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
- .pxer-app .btn.disabled, .pxer-app .btn:disabled {
- opacity: 0.65; }
- .pxer-app a.btn.disabled,
- .pxer-app fieldset:disabled a.btn {
- pointer-events: none; }
- .pxer-app .btn-primary {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
- .pxer-app .btn-primary:hover {
- color: #fff;
- background-color: #0069d9;
- border-color: #0062cc; }
- .pxer-app .btn-primary:focus, .pxer-app .btn-primary.focus {
- box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); }
- .pxer-app .btn-primary.disabled, .pxer-app .btn-primary:disabled {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
- .pxer-app .btn-primary:not(:disabled):not(.disabled):active, .pxer-app .btn-primary:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-primary.dropdown-toggle {
- color: #fff;
- background-color: #0062cc;
- border-color: #005cbf; }
- .pxer-app .btn-primary:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-primary:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); }
- .pxer-app .btn-secondary {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
- .pxer-app .btn-secondary:hover {
- color: #fff;
- background-color: #5a6268;
- border-color: #545b62; }
- .pxer-app .btn-secondary:focus, .pxer-app .btn-secondary.focus {
- box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); }
- .pxer-app .btn-secondary.disabled, .pxer-app .btn-secondary:disabled {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
- .pxer-app .btn-secondary:not(:disabled):not(.disabled):active, .pxer-app .btn-secondary:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-secondary.dropdown-toggle {
- color: #fff;
- background-color: #545b62;
- border-color: #4e555b; }
- .pxer-app .btn-secondary:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-secondary:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); }
- .pxer-app .btn-success {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
- .pxer-app .btn-success:hover {
- color: #fff;
- background-color: #218838;
- border-color: #1e7e34; }
- .pxer-app .btn-success:focus, .pxer-app .btn-success.focus {
- box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); }
- .pxer-app .btn-success.disabled, .pxer-app .btn-success:disabled {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
- .pxer-app .btn-success:not(:disabled):not(.disabled):active, .pxer-app .btn-success:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-success.dropdown-toggle {
- color: #fff;
- background-color: #1e7e34;
- border-color: #1c7430; }
- .pxer-app .btn-success:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-success:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); }
- .pxer-app .btn-info {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
- .pxer-app .btn-info:hover {
- color: #fff;
- background-color: #138496;
- border-color: #117a8b; }
- .pxer-app .btn-info:focus, .pxer-app .btn-info.focus {
- box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); }
- .pxer-app .btn-info.disabled, .pxer-app .btn-info:disabled {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
- .pxer-app .btn-info:not(:disabled):not(.disabled):active, .pxer-app .btn-info:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-info.dropdown-toggle {
- color: #fff;
- background-color: #117a8b;
- border-color: #10707f; }
- .pxer-app .btn-info:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-info:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); }
- .pxer-app .btn-warning {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
- .pxer-app .btn-warning:hover {
- color: #212529;
- background-color: #e0a800;
- border-color: #d39e00; }
- .pxer-app .btn-warning:focus, .pxer-app .btn-warning.focus {
- box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); }
- .pxer-app .btn-warning.disabled, .pxer-app .btn-warning:disabled {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
- .pxer-app .btn-warning:not(:disabled):not(.disabled):active, .pxer-app .btn-warning:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-warning.dropdown-toggle {
- color: #212529;
- background-color: #d39e00;
- border-color: #c69500; }
- .pxer-app .btn-warning:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-warning:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); }
- .pxer-app .btn-danger {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
- .pxer-app .btn-danger:hover {
- color: #fff;
- background-color: #c82333;
- border-color: #bd2130; }
- .pxer-app .btn-danger:focus, .pxer-app .btn-danger.focus {
- box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); }
- .pxer-app .btn-danger.disabled, .pxer-app .btn-danger:disabled {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
- .pxer-app .btn-danger:not(:disabled):not(.disabled):active, .pxer-app .btn-danger:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-danger.dropdown-toggle {
- color: #fff;
- background-color: #bd2130;
- border-color: #b21f2d; }
- .pxer-app .btn-danger:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-danger:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); }
- .pxer-app .btn-light {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
- .pxer-app .btn-light:hover {
- color: #212529;
- background-color: #e2e6ea;
- border-color: #dae0e5; }
- .pxer-app .btn-light:focus, .pxer-app .btn-light.focus {
- box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); }
- .pxer-app .btn-light.disabled, .pxer-app .btn-light:disabled {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
- .pxer-app .btn-light:not(:disabled):not(.disabled):active, .pxer-app .btn-light:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-light.dropdown-toggle {
- color: #212529;
- background-color: #dae0e5;
- border-color: #d3d9df; }
- .pxer-app .btn-light:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-light:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); }
- .pxer-app .btn-dark {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
- .pxer-app .btn-dark:hover {
- color: #fff;
- background-color: #23272b;
- border-color: #1d2124; }
- .pxer-app .btn-dark:focus, .pxer-app .btn-dark.focus {
- box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); }
- .pxer-app .btn-dark.disabled, .pxer-app .btn-dark:disabled {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
- .pxer-app .btn-dark:not(:disabled):not(.disabled):active, .pxer-app .btn-dark:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-dark.dropdown-toggle {
- color: #fff;
- background-color: #1d2124;
- border-color: #171a1d; }
- .pxer-app .btn-dark:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-dark:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); }
- .pxer-app .btn-outline-primary {
- color: #007bff;
- border-color: #007bff; }
- .pxer-app .btn-outline-primary:hover {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
- .pxer-app .btn-outline-primary:focus, .pxer-app .btn-outline-primary.focus {
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
- .pxer-app .btn-outline-primary.disabled, .pxer-app .btn-outline-primary:disabled {
- color: #007bff;
- background-color: transparent; }
- .pxer-app .btn-outline-primary:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-primary:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-primary.dropdown-toggle {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
- .pxer-app .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-primary:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
- .pxer-app .btn-outline-secondary {
- color: #6c757d;
- border-color: #6c757d; }
- .pxer-app .btn-outline-secondary:hover {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
- .pxer-app .btn-outline-secondary:focus, .pxer-app .btn-outline-secondary.focus {
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
- .pxer-app .btn-outline-secondary.disabled, .pxer-app .btn-outline-secondary:disabled {
- color: #6c757d;
- background-color: transparent; }
- .pxer-app .btn-outline-secondary:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-secondary:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-secondary.dropdown-toggle {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
- .pxer-app .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
- .pxer-app .btn-outline-success {
- color: #28a745;
- border-color: #28a745; }
- .pxer-app .btn-outline-success:hover {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
- .pxer-app .btn-outline-success:focus, .pxer-app .btn-outline-success.focus {
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
- .pxer-app .btn-outline-success.disabled, .pxer-app .btn-outline-success:disabled {
- color: #28a745;
- background-color: transparent; }
- .pxer-app .btn-outline-success:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-success:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-success.dropdown-toggle {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
- .pxer-app .btn-outline-success:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-success:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
- .pxer-app .btn-outline-info {
- color: #17a2b8;
- border-color: #17a2b8; }
- .pxer-app .btn-outline-info:hover {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
- .pxer-app .btn-outline-info:focus, .pxer-app .btn-outline-info.focus {
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
- .pxer-app .btn-outline-info.disabled, .pxer-app .btn-outline-info:disabled {
- color: #17a2b8;
- background-color: transparent; }
- .pxer-app .btn-outline-info:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-info:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-info.dropdown-toggle {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
- .pxer-app .btn-outline-info:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-info:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
- .pxer-app .btn-outline-warning {
- color: #ffc107;
- border-color: #ffc107; }
- .pxer-app .btn-outline-warning:hover {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
- .pxer-app .btn-outline-warning:focus, .pxer-app .btn-outline-warning.focus {
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
- .pxer-app .btn-outline-warning.disabled, .pxer-app .btn-outline-warning:disabled {
- color: #ffc107;
- background-color: transparent; }
- .pxer-app .btn-outline-warning:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-warning:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-warning.dropdown-toggle {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
- .pxer-app .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-warning:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
- .pxer-app .btn-outline-danger {
- color: #dc3545;
- border-color: #dc3545; }
- .pxer-app .btn-outline-danger:hover {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
- .pxer-app .btn-outline-danger:focus, .pxer-app .btn-outline-danger.focus {
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
- .pxer-app .btn-outline-danger.disabled, .pxer-app .btn-outline-danger:disabled {
- color: #dc3545;
- background-color: transparent; }
- .pxer-app .btn-outline-danger:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-danger:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-danger.dropdown-toggle {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
- .pxer-app .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-danger:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
- .pxer-app .btn-outline-light {
- color: #f8f9fa;
- border-color: #f8f9fa; }
- .pxer-app .btn-outline-light:hover {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
- .pxer-app .btn-outline-light:focus, .pxer-app .btn-outline-light.focus {
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
- .pxer-app .btn-outline-light.disabled, .pxer-app .btn-outline-light:disabled {
- color: #f8f9fa;
- background-color: transparent; }
- .pxer-app .btn-outline-light:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-light:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-light.dropdown-toggle {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
- .pxer-app .btn-outline-light:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-light:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
- .pxer-app .btn-outline-dark {
- color: #343a40;
- border-color: #343a40; }
- .pxer-app .btn-outline-dark:hover {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
- .pxer-app .btn-outline-dark:focus, .pxer-app .btn-outline-dark.focus {
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
- .pxer-app .btn-outline-dark.disabled, .pxer-app .btn-outline-dark:disabled {
- color: #343a40;
- background-color: transparent; }
- .pxer-app .btn-outline-dark:not(:disabled):not(.disabled):active, .pxer-app .btn-outline-dark:not(:disabled):not(.disabled).active,
- .show > .pxer-app .btn-outline-dark.dropdown-toggle {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
- .pxer-app .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .pxer-app .btn-outline-dark:not(:disabled):not(.disabled).active:focus,
- .show > .pxer-app .btn-outline-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
- .pxer-app .btn-link {
- font-weight: 400;
- color: #007bff;
- text-decoration: none; }
- .pxer-app .btn-link:hover {
- color: #0056b3;
- text-decoration: underline; }
- .pxer-app .btn-link:focus, .pxer-app .btn-link.focus {
- text-decoration: underline;
- box-shadow: none; }
- .pxer-app .btn-link:disabled, .pxer-app .btn-link.disabled {
- color: #6c757d;
- pointer-events: none; }
- .pxer-app .btn-lg {
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem; }
- .pxer-app .btn-sm, .pxer-app .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem; }
- .pxer-app .btn-block {
- display: block;
- width: 100%; }
- .pxer-app .btn-block + .btn-block {
- margin-top: 0.5rem; }
- .pxer-app input[type="submit"].btn-block,
- .pxer-app input[type="reset"].btn-block,
- .pxer-app input[type="button"].btn-block {
- width: 100%; }
- .pxer-app .badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }
- @media (prefers-reduced-motion: reduce) {
- .pxer-app .badge {
- transition: none; } }
- a.pxer-app .badge:hover, a.pxer-app .badge:focus {
- text-decoration: none; }
- .pxer-app .badge:empty {
- display: none; }
- .pxer-app .btn .badge {
- position: relative;
- top: -1px; }
- .pxer-app .badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem; }
- .pxer-app .badge-primary {
- color: #fff;
- background-color: #007bff; }
- a.pxer-app .badge-primary:hover, a.pxer-app .badge-primary:focus {
- color: #fff;
- background-color: #0062cc; }
- a.pxer-app .badge-primary:focus, a.pxer-app .badge-primary.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
- .pxer-app .badge-secondary {
- color: #fff;
- background-color: #6c757d; }
- a.pxer-app .badge-secondary:hover, a.pxer-app .badge-secondary:focus {
- color: #fff;
- background-color: #545b62; }
- a.pxer-app .badge-secondary:focus, a.pxer-app .badge-secondary.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
- .pxer-app .badge-success {
- color: #fff;
- background-color: #28a745; }
- a.pxer-app .badge-success:hover, a.pxer-app .badge-success:focus {
- color: #fff;
- background-color: #1e7e34; }
- a.pxer-app .badge-success:focus, a.pxer-app .badge-success.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
- .pxer-app .badge-info {
- color: #fff;
- background-color: #17a2b8; }
- a.pxer-app .badge-info:hover, a.pxer-app .badge-info:focus {
- color: #fff;
- background-color: #117a8b; }
- a.pxer-app .badge-info:focus, a.pxer-app .badge-info.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
- .pxer-app .badge-warning {
- color: #212529;
- background-color: #ffc107; }
- a.pxer-app .badge-warning:hover, a.pxer-app .badge-warning:focus {
- color: #212529;
- background-color: #d39e00; }
- a.pxer-app .badge-warning:focus, a.pxer-app .badge-warning.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
- .pxer-app .badge-danger {
- color: #fff;
- background-color: #dc3545; }
- a.pxer-app .badge-danger:hover, a.pxer-app .badge-danger:focus {
- color: #fff;
- background-color: #bd2130; }
- a.pxer-app .badge-danger:focus, a.pxer-app .badge-danger.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
- .pxer-app .badge-light {
- color: #212529;
- background-color: #f8f9fa; }
- a.pxer-app .badge-light:hover, a.pxer-app .badge-light:focus {
- color: #212529;
- background-color: #dae0e5; }
- a.pxer-app .badge-light:focus, a.pxer-app .badge-light.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
- .pxer-app .badge-dark {
- color: #fff;
- background-color: #343a40; }
- a.pxer-app .badge-dark:hover, a.pxer-app .badge-dark:focus {
- color: #fff;
- background-color: #1d2124; }
- a.pxer-app .badge-dark:focus, a.pxer-app .badge-dark.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
- .pxer-app .align-baseline {
- vertical-align: baseline !important; }
- .pxer-app .align-top {
- vertical-align: top !important; }
- .pxer-app .align-middle {
- vertical-align: middle !important; }
- .pxer-app .align-bottom {
- vertical-align: bottom !important; }
- .pxer-app .align-text-bottom {
- vertical-align: text-bottom !important; }
- .pxer-app .align-text-top {
- vertical-align: text-top !important; }
- .pxer-app .bg-primary {
- background-color: #007bff !important; }
- .pxer-app a.bg-primary:hover, .pxer-app a.bg-primary:focus,
- .pxer-app button.bg-primary:hover,
- .pxer-app button.bg-primary:focus {
- background-color: #0062cc !important; }
- .pxer-app .bg-secondary {
- background-color: #6c757d !important; }
- .pxer-app a.bg-secondary:hover, .pxer-app a.bg-secondary:focus,
- .pxer-app button.bg-secondary:hover,
- .pxer-app button.bg-secondary:focus {
- background-color: #545b62 !important; }
- .pxer-app .bg-success {
- background-color: #28a745 !important; }
- .pxer-app a.bg-success:hover, .pxer-app a.bg-success:focus,
- .pxer-app button.bg-success:hover,
- .pxer-app button.bg-success:focus {
- background-color: #1e7e34 !important; }
- .pxer-app .bg-info {
- background-color: #17a2b8 !important; }
- .pxer-app a.bg-info:hover, .pxer-app a.bg-info:focus,
- .pxer-app button.bg-info:hover,
- .pxer-app button.bg-info:focus {
- background-color: #117a8b !important; }
- .pxer-app .bg-warning {
- background-color: #ffc107 !important; }
- .pxer-app a.bg-warning:hover, .pxer-app a.bg-warning:focus,
- .pxer-app button.bg-warning:hover,
- .pxer-app button.bg-warning:focus {
- background-color: #d39e00 !important; }
- .pxer-app .bg-danger {
- background-color: #dc3545 !important; }
- .pxer-app a.bg-danger:hover, .pxer-app a.bg-danger:focus,
- .pxer-app button.bg-danger:hover,
- .pxer-app button.bg-danger:focus {
- background-color: #bd2130 !important; }
- .pxer-app .bg-light {
- background-color: #f8f9fa !important; }
- .pxer-app a.bg-light:hover, .pxer-app a.bg-light:focus,
- .pxer-app button.bg-light:hover,
- .pxer-app button.bg-light:focus {
- background-color: #dae0e5 !important; }
- .pxer-app .bg-dark {
- background-color: #343a40 !important; }
- .pxer-app a.bg-dark:hover, .pxer-app a.bg-dark:focus,
- .pxer-app button.bg-dark:hover,
- .pxer-app button.bg-dark:focus {
- background-color: #1d2124 !important; }
- .pxer-app .bg-white {
- background-color: #fff !important; }
- .pxer-app .bg-transparent {
- background-color: transparent !important; }
- .pxer-app .border {
- border: 1px solid #dee2e6 !important; }
- .pxer-app .border-top {
- border-top: 1px solid #dee2e6 !important; }
- .pxer-app .border-right {
- border-right: 1px solid #dee2e6 !important; }
- .pxer-app .border-bottom {
- border-bottom: 1px solid #dee2e6 !important; }
- .pxer-app .border-left {
- border-left: 1px solid #dee2e6 !important; }
- .pxer-app .border-0 {
- border: 0 !important; }
- .pxer-app .border-top-0 {
- border-top: 0 !important; }
- .pxer-app .border-right-0 {
- border-right: 0 !important; }
- .pxer-app .border-bottom-0 {
- border-bottom: 0 !important; }
- .pxer-app .border-left-0 {
- border-left: 0 !important; }
- .pxer-app .border-primary {
- border-color: #007bff !important; }
- .pxer-app .border-secondary {
- border-color: #6c757d !important; }
- .pxer-app .border-success {
- border-color: #28a745 !important; }
- .pxer-app .border-info {
- border-color: #17a2b8 !important; }
- .pxer-app .border-warning {
- border-color: #ffc107 !important; }
- .pxer-app .border-danger {
- border-color: #dc3545 !important; }
- .pxer-app .border-light {
- border-color: #f8f9fa !important; }
- .pxer-app .border-dark {
- border-color: #343a40 !important; }
- .pxer-app .border-white {
- border-color: #fff !important; }
- .pxer-app .rounded-sm {
- border-radius: 0.2rem !important; }
- .pxer-app .rounded {
- border-radius: 0.25rem !important; }
- .pxer-app .rounded-top {
- border-top-left-radius: 0.25rem !important;
- border-top-right-radius: 0.25rem !important; }
- .pxer-app .rounded-right {
- border-top-right-radius: 0.25rem !important;
- border-bottom-right-radius: 0.25rem !important; }
- .pxer-app .rounded-bottom {
- border-bottom-right-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important; }
- .pxer-app .rounded-left {
- border-top-left-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important; }
- .pxer-app .rounded-lg {
- border-radius: 0.3rem !important; }
- .pxer-app .rounded-circle {
- border-radius: 50% !important; }
- .pxer-app .rounded-pill {
- border-radius: 50rem !important; }
- .pxer-app .rounded-0 {
- border-radius: 0 !important; }
- .pxer-app .clearfix::after {
- display: block;
- clear: both;
- content: ""; }
- .pxer-app .d-none {
- display: none !important; }
- .pxer-app .d-inline {
- display: inline !important; }
- .pxer-app .d-inline-block {
- display: inline-block !important; }
- .pxer-app .d-block {
- display: block !important; }
- .pxer-app .d-table {
- display: table !important; }
- .pxer-app .d-table-row {
- display: table-row !important; }
- .pxer-app .d-table-cell {
- display: table-cell !important; }
- .pxer-app .d-flex {
- display: flex !important; }
- .pxer-app .d-inline-flex {
- display: inline-flex !important; }
- @media (min-width: 576px) {
- .pxer-app .d-sm-none {
- display: none !important; }
- .pxer-app .d-sm-inline {
- display: inline !important; }
- .pxer-app .d-sm-inline-block {
- display: inline-block !important; }
- .pxer-app .d-sm-block {
- display: block !important; }
- .pxer-app .d-sm-table {
- display: table !important; }
- .pxer-app .d-sm-table-row {
- display: table-row !important; }
- .pxer-app .d-sm-table-cell {
- display: table-cell !important; }
- .pxer-app .d-sm-flex {
- display: flex !important; }
- .pxer-app .d-sm-inline-flex {
- display: inline-flex !important; } }
- @media (min-width: 768px) {
- .pxer-app .d-md-none {
- display: none !important; }
- .pxer-app .d-md-inline {
- display: inline !important; }
- .pxer-app .d-md-inline-block {
- display: inline-block !important; }
- .pxer-app .d-md-block {
- display: block !important; }
- .pxer-app .d-md-table {
- display: table !important; }
- .pxer-app .d-md-table-row {
- display: table-row !important; }
- .pxer-app .d-md-table-cell {
- display: table-cell !important; }
- .pxer-app .d-md-flex {
- display: flex !important; }
- .pxer-app .d-md-inline-flex {
- display: inline-flex !important; } }
- @media (min-width: 992px) {
- .pxer-app .d-lg-none {
- display: none !important; }
- .pxer-app .d-lg-inline {
- display: inline !important; }
- .pxer-app .d-lg-inline-block {
- display: inline-block !important; }
- .pxer-app .d-lg-block {
- display: block !important; }
- .pxer-app .d-lg-table {
- display: table !important; }
- .pxer-app .d-lg-table-row {
- display: table-row !important; }
- .pxer-app .d-lg-table-cell {
- display: table-cell !important; }
- .pxer-app .d-lg-flex {
- display: flex !important; }
- .pxer-app .d-lg-inline-flex {
- display: inline-flex !important; } }
- @media (min-width: 1200px) {
- .pxer-app .d-xl-none {
- display: none !important; }
- .pxer-app .d-xl-inline {
- display: inline !important; }
- .pxer-app .d-xl-inline-block {
- display: inline-block !important; }
- .pxer-app .d-xl-block {
- display: block !important; }
- .pxer-app .d-xl-table {
- display: table !important; }
- .pxer-app .d-xl-table-row {
- display: table-row !important; }
- .pxer-app .d-xl-table-cell {
- display: table-cell !important; }
- .pxer-app .d-xl-flex {
- display: flex !important; }
- .pxer-app .d-xl-inline-flex {
- display: inline-flex !important; } }
- @media print {
- .pxer-app .d-print-none {
- display: none !important; }
- .pxer-app .d-print-inline {
- display: inline !important; }
- .pxer-app .d-print-inline-block {
- display: inline-block !important; }
- .pxer-app .d-print-block {
- display: block !important; }
- .pxer-app .d-print-table {
- display: table !important; }
- .pxer-app .d-print-table-row {
- display: table-row !important; }
- .pxer-app .d-print-table-cell {
- display: table-cell !important; }
- .pxer-app .d-print-flex {
- display: flex !important; }
- .pxer-app .d-print-inline-flex {
- display: inline-flex !important; } }
- .pxer-app .embed-responsive {
- position: relative;
- display: block;
- width: 100%;
- padding: 0;
- overflow: hidden; }
- .pxer-app .embed-responsive::before {
- display: block;
- content: ""; }
- .pxer-app .embed-responsive .embed-responsive-item,
- .pxer-app .embed-responsive iframe,
- .pxer-app .embed-responsive embed,
- .pxer-app .embed-responsive object,
- .pxer-app .embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0; }
- .pxer-app .embed-responsive-21by9::before {
- padding-top: 42.85714%; }
- .pxer-app .embed-responsive-16by9::before {
- padding-top: 56.25%; }
- .pxer-app .embed-responsive-4by3::before {
- padding-top: 75%; }
- .pxer-app .embed-responsive-1by1::before {
- padding-top: 100%; }
- .pxer-app .flex-row {
- flex-direction: row !important; }
- .pxer-app .flex-column {
- flex-direction: column !important; }
- .pxer-app .flex-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-center {
- justify-content: center !important; }
- .pxer-app .justify-content-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-center {
- align-items: center !important; }
- .pxer-app .align-items-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-center {
- align-content: center !important; }
- .pxer-app .align-content-between {
- align-content: space-between !important; }
- .pxer-app .align-content-around {
- align-content: space-around !important; }
- .pxer-app .align-content-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-auto {
- align-self: auto !important; }
- .pxer-app .align-self-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-center {
- align-self: center !important; }
- .pxer-app .align-self-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-stretch {
- align-self: stretch !important; }
- @media (min-width: 576px) {
- .pxer-app .flex-sm-row {
- flex-direction: row !important; }
- .pxer-app .flex-sm-column {
- flex-direction: column !important; }
- .pxer-app .flex-sm-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-sm-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-sm-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-sm-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-sm-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-sm-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-sm-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-sm-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-sm-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-sm-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-sm-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-sm-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-sm-center {
- justify-content: center !important; }
- .pxer-app .justify-content-sm-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-sm-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-sm-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-sm-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-sm-center {
- align-items: center !important; }
- .pxer-app .align-items-sm-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-sm-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-sm-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-sm-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-sm-center {
- align-content: center !important; }
- .pxer-app .align-content-sm-between {
- align-content: space-between !important; }
- .pxer-app .align-content-sm-around {
- align-content: space-around !important; }
- .pxer-app .align-content-sm-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-sm-auto {
- align-self: auto !important; }
- .pxer-app .align-self-sm-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-sm-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-sm-center {
- align-self: center !important; }
- .pxer-app .align-self-sm-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-sm-stretch {
- align-self: stretch !important; } }
- @media (min-width: 768px) {
- .pxer-app .flex-md-row {
- flex-direction: row !important; }
- .pxer-app .flex-md-column {
- flex-direction: column !important; }
- .pxer-app .flex-md-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-md-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-md-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-md-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-md-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-md-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-md-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-md-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-md-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-md-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-md-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-md-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-md-center {
- justify-content: center !important; }
- .pxer-app .justify-content-md-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-md-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-md-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-md-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-md-center {
- align-items: center !important; }
- .pxer-app .align-items-md-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-md-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-md-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-md-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-md-center {
- align-content: center !important; }
- .pxer-app .align-content-md-between {
- align-content: space-between !important; }
- .pxer-app .align-content-md-around {
- align-content: space-around !important; }
- .pxer-app .align-content-md-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-md-auto {
- align-self: auto !important; }
- .pxer-app .align-self-md-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-md-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-md-center {
- align-self: center !important; }
- .pxer-app .align-self-md-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-md-stretch {
- align-self: stretch !important; } }
- @media (min-width: 992px) {
- .pxer-app .flex-lg-row {
- flex-direction: row !important; }
- .pxer-app .flex-lg-column {
- flex-direction: column !important; }
- .pxer-app .flex-lg-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-lg-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-lg-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-lg-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-lg-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-lg-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-lg-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-lg-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-lg-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-lg-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-lg-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-lg-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-lg-center {
- justify-content: center !important; }
- .pxer-app .justify-content-lg-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-lg-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-lg-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-lg-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-lg-center {
- align-items: center !important; }
- .pxer-app .align-items-lg-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-lg-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-lg-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-lg-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-lg-center {
- align-content: center !important; }
- .pxer-app .align-content-lg-between {
- align-content: space-between !important; }
- .pxer-app .align-content-lg-around {
- align-content: space-around !important; }
- .pxer-app .align-content-lg-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-lg-auto {
- align-self: auto !important; }
- .pxer-app .align-self-lg-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-lg-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-lg-center {
- align-self: center !important; }
- .pxer-app .align-self-lg-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-lg-stretch {
- align-self: stretch !important; } }
- @media (min-width: 1200px) {
- .pxer-app .flex-xl-row {
- flex-direction: row !important; }
- .pxer-app .flex-xl-column {
- flex-direction: column !important; }
- .pxer-app .flex-xl-row-reverse {
- flex-direction: row-reverse !important; }
- .pxer-app .flex-xl-column-reverse {
- flex-direction: column-reverse !important; }
- .pxer-app .flex-xl-wrap {
- flex-wrap: wrap !important; }
- .pxer-app .flex-xl-nowrap {
- flex-wrap: nowrap !important; }
- .pxer-app .flex-xl-wrap-reverse {
- flex-wrap: wrap-reverse !important; }
- .pxer-app .flex-xl-fill {
- flex: 1 1 auto !important; }
- .pxer-app .flex-xl-grow-0 {
- flex-grow: 0 !important; }
- .pxer-app .flex-xl-grow-1 {
- flex-grow: 1 !important; }
- .pxer-app .flex-xl-shrink-0 {
- flex-shrink: 0 !important; }
- .pxer-app .flex-xl-shrink-1 {
- flex-shrink: 1 !important; }
- .pxer-app .justify-content-xl-start {
- justify-content: flex-start !important; }
- .pxer-app .justify-content-xl-end {
- justify-content: flex-end !important; }
- .pxer-app .justify-content-xl-center {
- justify-content: center !important; }
- .pxer-app .justify-content-xl-between {
- justify-content: space-between !important; }
- .pxer-app .justify-content-xl-around {
- justify-content: space-around !important; }
- .pxer-app .align-items-xl-start {
- align-items: flex-start !important; }
- .pxer-app .align-items-xl-end {
- align-items: flex-end !important; }
- .pxer-app .align-items-xl-center {
- align-items: center !important; }
- .pxer-app .align-items-xl-baseline {
- align-items: baseline !important; }
- .pxer-app .align-items-xl-stretch {
- align-items: stretch !important; }
- .pxer-app .align-content-xl-start {
- align-content: flex-start !important; }
- .pxer-app .align-content-xl-end {
- align-content: flex-end !important; }
- .pxer-app .align-content-xl-center {
- align-content: center !important; }
- .pxer-app .align-content-xl-between {
- align-content: space-between !important; }
- .pxer-app .align-content-xl-around {
- align-content: space-around !important; }
- .pxer-app .align-content-xl-stretch {
- align-content: stretch !important; }
- .pxer-app .align-self-xl-auto {
- align-self: auto !important; }
- .pxer-app .align-self-xl-start {
- align-self: flex-start !important; }
- .pxer-app .align-self-xl-end {
- align-self: flex-end !important; }
- .pxer-app .align-self-xl-center {
- align-self: center !important; }
- .pxer-app .align-self-xl-baseline {
- align-self: baseline !important; }
- .pxer-app .align-self-xl-stretch {
- align-self: stretch !important; } }
- .pxer-app .float-left {
- float: left !important; }
- .pxer-app .float-right {
- float: right !important; }
- .pxer-app .float-none {
- float: none !important; }
- @media (min-width: 576px) {
- .pxer-app .float-sm-left {
- float: left !important; }
- .pxer-app .float-sm-right {
- float: right !important; }
- .pxer-app .float-sm-none {
- float: none !important; } }
- @media (min-width: 768px) {
- .pxer-app .float-md-left {
- float: left !important; }
- .pxer-app .float-md-right {
- float: right !important; }
- .pxer-app .float-md-none {
- float: none !important; } }
- @media (min-width: 992px) {
- .pxer-app .float-lg-left {
- float: left !important; }
- .pxer-app .float-lg-right {
- float: right !important; }
- .pxer-app .float-lg-none {
- float: none !important; } }
- @media (min-width: 1200px) {
- .pxer-app .float-xl-left {
- float: left !important; }
- .pxer-app .float-xl-right {
- float: right !important; }
- .pxer-app .float-xl-none {
- float: none !important; } }
- .pxer-app .overflow-auto {
- overflow: auto !important; }
- .pxer-app .overflow-hidden {
- overflow: hidden !important; }
- .pxer-app .position-static {
- position: static !important; }
- .pxer-app .position-relative {
- position: relative !important; }
- .pxer-app .position-absolute {
- position: absolute !important; }
- .pxer-app .position-fixed {
- position: fixed !important; }
- .pxer-app .position-sticky {
- position: sticky !important; }
- .pxer-app .fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030; }
- .pxer-app .fixed-bottom {
- position: fixed;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030; }
- @supports (position: sticky) {
- .pxer-app .sticky-top {
- position: sticky;
- top: 0;
- z-index: 1020; } }
- .pxer-app .sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0; }
- .pxer-app .sr-only-focusable:active, .pxer-app .sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: normal; }
- .pxer-app .shadow-sm {
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; }
- .pxer-app .shadow {
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
- .pxer-app .shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; }
- .pxer-app .shadow-none {
- box-shadow: none !important; }
- .pxer-app .w-25 {
- width: 25% !important; }
- .pxer-app .w-50 {
- width: 50% !important; }
- .pxer-app .w-75 {
- width: 75% !important; }
- .pxer-app .w-100 {
- width: 100% !important; }
- .pxer-app .w-auto {
- width: auto !important; }
- .pxer-app .h-25 {
- height: 25% !important; }
- .pxer-app .h-50 {
- height: 50% !important; }
- .pxer-app .h-75 {
- height: 75% !important; }
- .pxer-app .h-100 {
- height: 100% !important; }
- .pxer-app .h-auto {
- height: auto !important; }
- .pxer-app .mw-100 {
- max-width: 100% !important; }
- .pxer-app .mh-100 {
- max-height: 100% !important; }
- .pxer-app .min-vw-100 {
- min-width: 100vw !important; }
- .pxer-app .min-vh-100 {
- min-height: 100vh !important; }
- .pxer-app .vw-100 {
- width: 100vw !important; }
- .pxer-app .vh-100 {
- height: 100vh !important; }
- .pxer-app .stretched-link::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1;
- pointer-events: auto;
- content: "";
- background-color: rgba(0, 0, 0, 0); }
- .pxer-app .m-0 {
- margin: 0 !important; }
- .pxer-app .mt-0,
- .pxer-app .my-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-0,
- .pxer-app .mx-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-0,
- .pxer-app .my-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-0,
- .pxer-app .mx-0 {
- margin-left: 0 !important; }
- .pxer-app .m-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-1,
- .pxer-app .my-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-1,
- .pxer-app .mx-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-1,
- .pxer-app .my-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-1,
- .pxer-app .mx-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-2,
- .pxer-app .my-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-2,
- .pxer-app .mx-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-2,
- .pxer-app .my-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-2,
- .pxer-app .mx-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-3 {
- margin: 1rem !important; }
- .pxer-app .mt-3,
- .pxer-app .my-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-3,
- .pxer-app .mx-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-3,
- .pxer-app .my-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-3,
- .pxer-app .mx-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-4,
- .pxer-app .my-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-4,
- .pxer-app .mx-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-4,
- .pxer-app .my-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-4,
- .pxer-app .mx-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-5 {
- margin: 3rem !important; }
- .pxer-app .mt-5,
- .pxer-app .my-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-5,
- .pxer-app .mx-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-5,
- .pxer-app .my-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-5,
- .pxer-app .mx-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-0 {
- padding: 0 !important; }
- .pxer-app .pt-0,
- .pxer-app .py-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-0,
- .pxer-app .px-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-0,
- .pxer-app .py-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-0,
- .pxer-app .px-0 {
- padding-left: 0 !important; }
- .pxer-app .p-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-1,
- .pxer-app .py-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-1,
- .pxer-app .px-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-1,
- .pxer-app .py-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-1,
- .pxer-app .px-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-2,
- .pxer-app .py-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-2,
- .pxer-app .px-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-2,
- .pxer-app .py-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-2,
- .pxer-app .px-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-3 {
- padding: 1rem !important; }
- .pxer-app .pt-3,
- .pxer-app .py-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-3,
- .pxer-app .px-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-3,
- .pxer-app .py-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-3,
- .pxer-app .px-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-4,
- .pxer-app .py-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-4,
- .pxer-app .px-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-4,
- .pxer-app .py-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-4,
- .pxer-app .px-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-5 {
- padding: 3rem !important; }
- .pxer-app .pt-5,
- .pxer-app .py-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-5,
- .pxer-app .px-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-5,
- .pxer-app .py-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-5,
- .pxer-app .px-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-n1,
- .pxer-app .my-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-n1,
- .pxer-app .mx-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-n1,
- .pxer-app .my-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-n1,
- .pxer-app .mx-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-n2,
- .pxer-app .my-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-n2,
- .pxer-app .mx-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-n2,
- .pxer-app .my-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-n2,
- .pxer-app .mx-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-n3,
- .pxer-app .my-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-n3,
- .pxer-app .mx-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-n3,
- .pxer-app .my-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-n3,
- .pxer-app .mx-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-n4,
- .pxer-app .my-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-n4,
- .pxer-app .mx-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-n4,
- .pxer-app .my-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-n4,
- .pxer-app .mx-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-n5,
- .pxer-app .my-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-n5,
- .pxer-app .mx-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-n5,
- .pxer-app .my-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-n5,
- .pxer-app .mx-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-auto {
- margin: auto !important; }
- .pxer-app .mt-auto,
- .pxer-app .my-auto {
- margin-top: auto !important; }
- .pxer-app .mr-auto,
- .pxer-app .mx-auto {
- margin-right: auto !important; }
- .pxer-app .mb-auto,
- .pxer-app .my-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-auto,
- .pxer-app .mx-auto {
- margin-left: auto !important; }
- @media (min-width: 576px) {
- .pxer-app .m-sm-0 {
- margin: 0 !important; }
- .pxer-app .mt-sm-0,
- .pxer-app .my-sm-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-sm-0,
- .pxer-app .mx-sm-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-sm-0,
- .pxer-app .my-sm-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-sm-0,
- .pxer-app .mx-sm-0 {
- margin-left: 0 !important; }
- .pxer-app .m-sm-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-sm-1,
- .pxer-app .my-sm-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-sm-1,
- .pxer-app .mx-sm-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-sm-1,
- .pxer-app .my-sm-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-sm-1,
- .pxer-app .mx-sm-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-sm-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-sm-2,
- .pxer-app .my-sm-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-sm-2,
- .pxer-app .mx-sm-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-sm-2,
- .pxer-app .my-sm-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-sm-2,
- .pxer-app .mx-sm-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-sm-3 {
- margin: 1rem !important; }
- .pxer-app .mt-sm-3,
- .pxer-app .my-sm-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-sm-3,
- .pxer-app .mx-sm-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-sm-3,
- .pxer-app .my-sm-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-sm-3,
- .pxer-app .mx-sm-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-sm-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-sm-4,
- .pxer-app .my-sm-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-sm-4,
- .pxer-app .mx-sm-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-sm-4,
- .pxer-app .my-sm-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-sm-4,
- .pxer-app .mx-sm-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-sm-5 {
- margin: 3rem !important; }
- .pxer-app .mt-sm-5,
- .pxer-app .my-sm-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-sm-5,
- .pxer-app .mx-sm-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-sm-5,
- .pxer-app .my-sm-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-sm-5,
- .pxer-app .mx-sm-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-sm-0 {
- padding: 0 !important; }
- .pxer-app .pt-sm-0,
- .pxer-app .py-sm-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-sm-0,
- .pxer-app .px-sm-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-sm-0,
- .pxer-app .py-sm-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-sm-0,
- .pxer-app .px-sm-0 {
- padding-left: 0 !important; }
- .pxer-app .p-sm-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-sm-1,
- .pxer-app .py-sm-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-sm-1,
- .pxer-app .px-sm-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-sm-1,
- .pxer-app .py-sm-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-sm-1,
- .pxer-app .px-sm-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-sm-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-sm-2,
- .pxer-app .py-sm-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-sm-2,
- .pxer-app .px-sm-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-sm-2,
- .pxer-app .py-sm-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-sm-2,
- .pxer-app .px-sm-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-sm-3 {
- padding: 1rem !important; }
- .pxer-app .pt-sm-3,
- .pxer-app .py-sm-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-sm-3,
- .pxer-app .px-sm-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-sm-3,
- .pxer-app .py-sm-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-sm-3,
- .pxer-app .px-sm-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-sm-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-sm-4,
- .pxer-app .py-sm-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-sm-4,
- .pxer-app .px-sm-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-sm-4,
- .pxer-app .py-sm-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-sm-4,
- .pxer-app .px-sm-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-sm-5 {
- padding: 3rem !important; }
- .pxer-app .pt-sm-5,
- .pxer-app .py-sm-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-sm-5,
- .pxer-app .px-sm-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-sm-5,
- .pxer-app .py-sm-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-sm-5,
- .pxer-app .px-sm-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-sm-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-sm-n1,
- .pxer-app .my-sm-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-sm-n1,
- .pxer-app .mx-sm-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-sm-n1,
- .pxer-app .my-sm-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-sm-n1,
- .pxer-app .mx-sm-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-sm-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-sm-n2,
- .pxer-app .my-sm-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-sm-n2,
- .pxer-app .mx-sm-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-sm-n2,
- .pxer-app .my-sm-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-sm-n2,
- .pxer-app .mx-sm-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-sm-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-sm-n3,
- .pxer-app .my-sm-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-sm-n3,
- .pxer-app .mx-sm-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-sm-n3,
- .pxer-app .my-sm-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-sm-n3,
- .pxer-app .mx-sm-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-sm-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-sm-n4,
- .pxer-app .my-sm-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-sm-n4,
- .pxer-app .mx-sm-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-sm-n4,
- .pxer-app .my-sm-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-sm-n4,
- .pxer-app .mx-sm-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-sm-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-sm-n5,
- .pxer-app .my-sm-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-sm-n5,
- .pxer-app .mx-sm-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-sm-n5,
- .pxer-app .my-sm-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-sm-n5,
- .pxer-app .mx-sm-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-sm-auto {
- margin: auto !important; }
- .pxer-app .mt-sm-auto,
- .pxer-app .my-sm-auto {
- margin-top: auto !important; }
- .pxer-app .mr-sm-auto,
- .pxer-app .mx-sm-auto {
- margin-right: auto !important; }
- .pxer-app .mb-sm-auto,
- .pxer-app .my-sm-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-sm-auto,
- .pxer-app .mx-sm-auto {
- margin-left: auto !important; } }
- @media (min-width: 768px) {
- .pxer-app .m-md-0 {
- margin: 0 !important; }
- .pxer-app .mt-md-0,
- .pxer-app .my-md-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-md-0,
- .pxer-app .mx-md-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-md-0,
- .pxer-app .my-md-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-md-0,
- .pxer-app .mx-md-0 {
- margin-left: 0 !important; }
- .pxer-app .m-md-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-md-1,
- .pxer-app .my-md-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-md-1,
- .pxer-app .mx-md-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-md-1,
- .pxer-app .my-md-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-md-1,
- .pxer-app .mx-md-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-md-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-md-2,
- .pxer-app .my-md-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-md-2,
- .pxer-app .mx-md-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-md-2,
- .pxer-app .my-md-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-md-2,
- .pxer-app .mx-md-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-md-3 {
- margin: 1rem !important; }
- .pxer-app .mt-md-3,
- .pxer-app .my-md-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-md-3,
- .pxer-app .mx-md-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-md-3,
- .pxer-app .my-md-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-md-3,
- .pxer-app .mx-md-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-md-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-md-4,
- .pxer-app .my-md-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-md-4,
- .pxer-app .mx-md-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-md-4,
- .pxer-app .my-md-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-md-4,
- .pxer-app .mx-md-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-md-5 {
- margin: 3rem !important; }
- .pxer-app .mt-md-5,
- .pxer-app .my-md-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-md-5,
- .pxer-app .mx-md-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-md-5,
- .pxer-app .my-md-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-md-5,
- .pxer-app .mx-md-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-md-0 {
- padding: 0 !important; }
- .pxer-app .pt-md-0,
- .pxer-app .py-md-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-md-0,
- .pxer-app .px-md-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-md-0,
- .pxer-app .py-md-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-md-0,
- .pxer-app .px-md-0 {
- padding-left: 0 !important; }
- .pxer-app .p-md-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-md-1,
- .pxer-app .py-md-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-md-1,
- .pxer-app .px-md-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-md-1,
- .pxer-app .py-md-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-md-1,
- .pxer-app .px-md-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-md-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-md-2,
- .pxer-app .py-md-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-md-2,
- .pxer-app .px-md-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-md-2,
- .pxer-app .py-md-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-md-2,
- .pxer-app .px-md-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-md-3 {
- padding: 1rem !important; }
- .pxer-app .pt-md-3,
- .pxer-app .py-md-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-md-3,
- .pxer-app .px-md-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-md-3,
- .pxer-app .py-md-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-md-3,
- .pxer-app .px-md-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-md-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-md-4,
- .pxer-app .py-md-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-md-4,
- .pxer-app .px-md-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-md-4,
- .pxer-app .py-md-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-md-4,
- .pxer-app .px-md-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-md-5 {
- padding: 3rem !important; }
- .pxer-app .pt-md-5,
- .pxer-app .py-md-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-md-5,
- .pxer-app .px-md-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-md-5,
- .pxer-app .py-md-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-md-5,
- .pxer-app .px-md-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-md-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-md-n1,
- .pxer-app .my-md-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-md-n1,
- .pxer-app .mx-md-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-md-n1,
- .pxer-app .my-md-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-md-n1,
- .pxer-app .mx-md-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-md-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-md-n2,
- .pxer-app .my-md-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-md-n2,
- .pxer-app .mx-md-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-md-n2,
- .pxer-app .my-md-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-md-n2,
- .pxer-app .mx-md-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-md-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-md-n3,
- .pxer-app .my-md-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-md-n3,
- .pxer-app .mx-md-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-md-n3,
- .pxer-app .my-md-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-md-n3,
- .pxer-app .mx-md-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-md-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-md-n4,
- .pxer-app .my-md-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-md-n4,
- .pxer-app .mx-md-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-md-n4,
- .pxer-app .my-md-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-md-n4,
- .pxer-app .mx-md-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-md-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-md-n5,
- .pxer-app .my-md-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-md-n5,
- .pxer-app .mx-md-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-md-n5,
- .pxer-app .my-md-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-md-n5,
- .pxer-app .mx-md-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-md-auto {
- margin: auto !important; }
- .pxer-app .mt-md-auto,
- .pxer-app .my-md-auto {
- margin-top: auto !important; }
- .pxer-app .mr-md-auto,
- .pxer-app .mx-md-auto {
- margin-right: auto !important; }
- .pxer-app .mb-md-auto,
- .pxer-app .my-md-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-md-auto,
- .pxer-app .mx-md-auto {
- margin-left: auto !important; } }
- @media (min-width: 992px) {
- .pxer-app .m-lg-0 {
- margin: 0 !important; }
- .pxer-app .mt-lg-0,
- .pxer-app .my-lg-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-lg-0,
- .pxer-app .mx-lg-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-lg-0,
- .pxer-app .my-lg-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-lg-0,
- .pxer-app .mx-lg-0 {
- margin-left: 0 !important; }
- .pxer-app .m-lg-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-lg-1,
- .pxer-app .my-lg-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-lg-1,
- .pxer-app .mx-lg-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-lg-1,
- .pxer-app .my-lg-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-lg-1,
- .pxer-app .mx-lg-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-lg-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-lg-2,
- .pxer-app .my-lg-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-lg-2,
- .pxer-app .mx-lg-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-lg-2,
- .pxer-app .my-lg-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-lg-2,
- .pxer-app .mx-lg-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-lg-3 {
- margin: 1rem !important; }
- .pxer-app .mt-lg-3,
- .pxer-app .my-lg-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-lg-3,
- .pxer-app .mx-lg-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-lg-3,
- .pxer-app .my-lg-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-lg-3,
- .pxer-app .mx-lg-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-lg-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-lg-4,
- .pxer-app .my-lg-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-lg-4,
- .pxer-app .mx-lg-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-lg-4,
- .pxer-app .my-lg-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-lg-4,
- .pxer-app .mx-lg-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-lg-5 {
- margin: 3rem !important; }
- .pxer-app .mt-lg-5,
- .pxer-app .my-lg-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-lg-5,
- .pxer-app .mx-lg-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-lg-5,
- .pxer-app .my-lg-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-lg-5,
- .pxer-app .mx-lg-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-lg-0 {
- padding: 0 !important; }
- .pxer-app .pt-lg-0,
- .pxer-app .py-lg-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-lg-0,
- .pxer-app .px-lg-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-lg-0,
- .pxer-app .py-lg-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-lg-0,
- .pxer-app .px-lg-0 {
- padding-left: 0 !important; }
- .pxer-app .p-lg-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-lg-1,
- .pxer-app .py-lg-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-lg-1,
- .pxer-app .px-lg-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-lg-1,
- .pxer-app .py-lg-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-lg-1,
- .pxer-app .px-lg-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-lg-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-lg-2,
- .pxer-app .py-lg-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-lg-2,
- .pxer-app .px-lg-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-lg-2,
- .pxer-app .py-lg-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-lg-2,
- .pxer-app .px-lg-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-lg-3 {
- padding: 1rem !important; }
- .pxer-app .pt-lg-3,
- .pxer-app .py-lg-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-lg-3,
- .pxer-app .px-lg-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-lg-3,
- .pxer-app .py-lg-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-lg-3,
- .pxer-app .px-lg-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-lg-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-lg-4,
- .pxer-app .py-lg-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-lg-4,
- .pxer-app .px-lg-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-lg-4,
- .pxer-app .py-lg-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-lg-4,
- .pxer-app .px-lg-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-lg-5 {
- padding: 3rem !important; }
- .pxer-app .pt-lg-5,
- .pxer-app .py-lg-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-lg-5,
- .pxer-app .px-lg-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-lg-5,
- .pxer-app .py-lg-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-lg-5,
- .pxer-app .px-lg-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-lg-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-lg-n1,
- .pxer-app .my-lg-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-lg-n1,
- .pxer-app .mx-lg-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-lg-n1,
- .pxer-app .my-lg-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-lg-n1,
- .pxer-app .mx-lg-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-lg-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-lg-n2,
- .pxer-app .my-lg-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-lg-n2,
- .pxer-app .mx-lg-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-lg-n2,
- .pxer-app .my-lg-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-lg-n2,
- .pxer-app .mx-lg-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-lg-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-lg-n3,
- .pxer-app .my-lg-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-lg-n3,
- .pxer-app .mx-lg-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-lg-n3,
- .pxer-app .my-lg-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-lg-n3,
- .pxer-app .mx-lg-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-lg-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-lg-n4,
- .pxer-app .my-lg-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-lg-n4,
- .pxer-app .mx-lg-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-lg-n4,
- .pxer-app .my-lg-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-lg-n4,
- .pxer-app .mx-lg-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-lg-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-lg-n5,
- .pxer-app .my-lg-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-lg-n5,
- .pxer-app .mx-lg-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-lg-n5,
- .pxer-app .my-lg-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-lg-n5,
- .pxer-app .mx-lg-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-lg-auto {
- margin: auto !important; }
- .pxer-app .mt-lg-auto,
- .pxer-app .my-lg-auto {
- margin-top: auto !important; }
- .pxer-app .mr-lg-auto,
- .pxer-app .mx-lg-auto {
- margin-right: auto !important; }
- .pxer-app .mb-lg-auto,
- .pxer-app .my-lg-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-lg-auto,
- .pxer-app .mx-lg-auto {
- margin-left: auto !important; } }
- @media (min-width: 1200px) {
- .pxer-app .m-xl-0 {
- margin: 0 !important; }
- .pxer-app .mt-xl-0,
- .pxer-app .my-xl-0 {
- margin-top: 0 !important; }
- .pxer-app .mr-xl-0,
- .pxer-app .mx-xl-0 {
- margin-right: 0 !important; }
- .pxer-app .mb-xl-0,
- .pxer-app .my-xl-0 {
- margin-bottom: 0 !important; }
- .pxer-app .ml-xl-0,
- .pxer-app .mx-xl-0 {
- margin-left: 0 !important; }
- .pxer-app .m-xl-1 {
- margin: 0.25rem !important; }
- .pxer-app .mt-xl-1,
- .pxer-app .my-xl-1 {
- margin-top: 0.25rem !important; }
- .pxer-app .mr-xl-1,
- .pxer-app .mx-xl-1 {
- margin-right: 0.25rem !important; }
- .pxer-app .mb-xl-1,
- .pxer-app .my-xl-1 {
- margin-bottom: 0.25rem !important; }
- .pxer-app .ml-xl-1,
- .pxer-app .mx-xl-1 {
- margin-left: 0.25rem !important; }
- .pxer-app .m-xl-2 {
- margin: 0.5rem !important; }
- .pxer-app .mt-xl-2,
- .pxer-app .my-xl-2 {
- margin-top: 0.5rem !important; }
- .pxer-app .mr-xl-2,
- .pxer-app .mx-xl-2 {
- margin-right: 0.5rem !important; }
- .pxer-app .mb-xl-2,
- .pxer-app .my-xl-2 {
- margin-bottom: 0.5rem !important; }
- .pxer-app .ml-xl-2,
- .pxer-app .mx-xl-2 {
- margin-left: 0.5rem !important; }
- .pxer-app .m-xl-3 {
- margin: 1rem !important; }
- .pxer-app .mt-xl-3,
- .pxer-app .my-xl-3 {
- margin-top: 1rem !important; }
- .pxer-app .mr-xl-3,
- .pxer-app .mx-xl-3 {
- margin-right: 1rem !important; }
- .pxer-app .mb-xl-3,
- .pxer-app .my-xl-3 {
- margin-bottom: 1rem !important; }
- .pxer-app .ml-xl-3,
- .pxer-app .mx-xl-3 {
- margin-left: 1rem !important; }
- .pxer-app .m-xl-4 {
- margin: 1.5rem !important; }
- .pxer-app .mt-xl-4,
- .pxer-app .my-xl-4 {
- margin-top: 1.5rem !important; }
- .pxer-app .mr-xl-4,
- .pxer-app .mx-xl-4 {
- margin-right: 1.5rem !important; }
- .pxer-app .mb-xl-4,
- .pxer-app .my-xl-4 {
- margin-bottom: 1.5rem !important; }
- .pxer-app .ml-xl-4,
- .pxer-app .mx-xl-4 {
- margin-left: 1.5rem !important; }
- .pxer-app .m-xl-5 {
- margin: 3rem !important; }
- .pxer-app .mt-xl-5,
- .pxer-app .my-xl-5 {
- margin-top: 3rem !important; }
- .pxer-app .mr-xl-5,
- .pxer-app .mx-xl-5 {
- margin-right: 3rem !important; }
- .pxer-app .mb-xl-5,
- .pxer-app .my-xl-5 {
- margin-bottom: 3rem !important; }
- .pxer-app .ml-xl-5,
- .pxer-app .mx-xl-5 {
- margin-left: 3rem !important; }
- .pxer-app .p-xl-0 {
- padding: 0 !important; }
- .pxer-app .pt-xl-0,
- .pxer-app .py-xl-0 {
- padding-top: 0 !important; }
- .pxer-app .pr-xl-0,
- .pxer-app .px-xl-0 {
- padding-right: 0 !important; }
- .pxer-app .pb-xl-0,
- .pxer-app .py-xl-0 {
- padding-bottom: 0 !important; }
- .pxer-app .pl-xl-0,
- .pxer-app .px-xl-0 {
- padding-left: 0 !important; }
- .pxer-app .p-xl-1 {
- padding: 0.25rem !important; }
- .pxer-app .pt-xl-1,
- .pxer-app .py-xl-1 {
- padding-top: 0.25rem !important; }
- .pxer-app .pr-xl-1,
- .pxer-app .px-xl-1 {
- padding-right: 0.25rem !important; }
- .pxer-app .pb-xl-1,
- .pxer-app .py-xl-1 {
- padding-bottom: 0.25rem !important; }
- .pxer-app .pl-xl-1,
- .pxer-app .px-xl-1 {
- padding-left: 0.25rem !important; }
- .pxer-app .p-xl-2 {
- padding: 0.5rem !important; }
- .pxer-app .pt-xl-2,
- .pxer-app .py-xl-2 {
- padding-top: 0.5rem !important; }
- .pxer-app .pr-xl-2,
- .pxer-app .px-xl-2 {
- padding-right: 0.5rem !important; }
- .pxer-app .pb-xl-2,
- .pxer-app .py-xl-2 {
- padding-bottom: 0.5rem !important; }
- .pxer-app .pl-xl-2,
- .pxer-app .px-xl-2 {
- padding-left: 0.5rem !important; }
- .pxer-app .p-xl-3 {
- padding: 1rem !important; }
- .pxer-app .pt-xl-3,
- .pxer-app .py-xl-3 {
- padding-top: 1rem !important; }
- .pxer-app .pr-xl-3,
- .pxer-app .px-xl-3 {
- padding-right: 1rem !important; }
- .pxer-app .pb-xl-3,
- .pxer-app .py-xl-3 {
- padding-bottom: 1rem !important; }
- .pxer-app .pl-xl-3,
- .pxer-app .px-xl-3 {
- padding-left: 1rem !important; }
- .pxer-app .p-xl-4 {
- padding: 1.5rem !important; }
- .pxer-app .pt-xl-4,
- .pxer-app .py-xl-4 {
- padding-top: 1.5rem !important; }
- .pxer-app .pr-xl-4,
- .pxer-app .px-xl-4 {
- padding-right: 1.5rem !important; }
- .pxer-app .pb-xl-4,
- .pxer-app .py-xl-4 {
- padding-bottom: 1.5rem !important; }
- .pxer-app .pl-xl-4,
- .pxer-app .px-xl-4 {
- padding-left: 1.5rem !important; }
- .pxer-app .p-xl-5 {
- padding: 3rem !important; }
- .pxer-app .pt-xl-5,
- .pxer-app .py-xl-5 {
- padding-top: 3rem !important; }
- .pxer-app .pr-xl-5,
- .pxer-app .px-xl-5 {
- padding-right: 3rem !important; }
- .pxer-app .pb-xl-5,
- .pxer-app .py-xl-5 {
- padding-bottom: 3rem !important; }
- .pxer-app .pl-xl-5,
- .pxer-app .px-xl-5 {
- padding-left: 3rem !important; }
- .pxer-app .m-xl-n1 {
- margin: -0.25rem !important; }
- .pxer-app .mt-xl-n1,
- .pxer-app .my-xl-n1 {
- margin-top: -0.25rem !important; }
- .pxer-app .mr-xl-n1,
- .pxer-app .mx-xl-n1 {
- margin-right: -0.25rem !important; }
- .pxer-app .mb-xl-n1,
- .pxer-app .my-xl-n1 {
- margin-bottom: -0.25rem !important; }
- .pxer-app .ml-xl-n1,
- .pxer-app .mx-xl-n1 {
- margin-left: -0.25rem !important; }
- .pxer-app .m-xl-n2 {
- margin: -0.5rem !important; }
- .pxer-app .mt-xl-n2,
- .pxer-app .my-xl-n2 {
- margin-top: -0.5rem !important; }
- .pxer-app .mr-xl-n2,
- .pxer-app .mx-xl-n2 {
- margin-right: -0.5rem !important; }
- .pxer-app .mb-xl-n2,
- .pxer-app .my-xl-n2 {
- margin-bottom: -0.5rem !important; }
- .pxer-app .ml-xl-n2,
- .pxer-app .mx-xl-n2 {
- margin-left: -0.5rem !important; }
- .pxer-app .m-xl-n3 {
- margin: -1rem !important; }
- .pxer-app .mt-xl-n3,
- .pxer-app .my-xl-n3 {
- margin-top: -1rem !important; }
- .pxer-app .mr-xl-n3,
- .pxer-app .mx-xl-n3 {
- margin-right: -1rem !important; }
- .pxer-app .mb-xl-n3,
- .pxer-app .my-xl-n3 {
- margin-bottom: -1rem !important; }
- .pxer-app .ml-xl-n3,
- .pxer-app .mx-xl-n3 {
- margin-left: -1rem !important; }
- .pxer-app .m-xl-n4 {
- margin: -1.5rem !important; }
- .pxer-app .mt-xl-n4,
- .pxer-app .my-xl-n4 {
- margin-top: -1.5rem !important; }
- .pxer-app .mr-xl-n4,
- .pxer-app .mx-xl-n4 {
- margin-right: -1.5rem !important; }
- .pxer-app .mb-xl-n4,
- .pxer-app .my-xl-n4 {
- margin-bottom: -1.5rem !important; }
- .pxer-app .ml-xl-n4,
- .pxer-app .mx-xl-n4 {
- margin-left: -1.5rem !important; }
- .pxer-app .m-xl-n5 {
- margin: -3rem !important; }
- .pxer-app .mt-xl-n5,
- .pxer-app .my-xl-n5 {
- margin-top: -3rem !important; }
- .pxer-app .mr-xl-n5,
- .pxer-app .mx-xl-n5 {
- margin-right: -3rem !important; }
- .pxer-app .mb-xl-n5,
- .pxer-app .my-xl-n5 {
- margin-bottom: -3rem !important; }
- .pxer-app .ml-xl-n5,
- .pxer-app .mx-xl-n5 {
- margin-left: -3rem !important; }
- .pxer-app .m-xl-auto {
- margin: auto !important; }
- .pxer-app .mt-xl-auto,
- .pxer-app .my-xl-auto {
- margin-top: auto !important; }
- .pxer-app .mr-xl-auto,
- .pxer-app .mx-xl-auto {
- margin-right: auto !important; }
- .pxer-app .mb-xl-auto,
- .pxer-app .my-xl-auto {
- margin-bottom: auto !important; }
- .pxer-app .ml-xl-auto,
- .pxer-app .mx-xl-auto {
- margin-left: auto !important; } }
- .pxer-app .text-monospace {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; }
- .pxer-app .text-justify {
- text-align: justify !important; }
- .pxer-app .text-wrap {
- white-space: normal !important; }
- .pxer-app .text-nowrap {
- white-space: nowrap !important; }
- .pxer-app .text-truncate {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap; }
- .pxer-app .text-left {
- text-align: left !important; }
- .pxer-app .text-right {
- text-align: right !important; }
- .pxer-app .text-center {
- text-align: center !important; }
- @media (min-width: 576px) {
- .pxer-app .text-sm-left {
- text-align: left !important; }
- .pxer-app .text-sm-right {
- text-align: right !important; }
- .pxer-app .text-sm-center {
- text-align: center !important; } }
- @media (min-width: 768px) {
- .pxer-app .text-md-left {
- text-align: left !important; }
- .pxer-app .text-md-right {
- text-align: right !important; }
- .pxer-app .text-md-center {
- text-align: center !important; } }
- @media (min-width: 992px) {
- .pxer-app .text-lg-left {
- text-align: left !important; }
- .pxer-app .text-lg-right {
- text-align: right !important; }
- .pxer-app .text-lg-center {
- text-align: center !important; } }
- @media (min-width: 1200px) {
- .pxer-app .text-xl-left {
- text-align: left !important; }
- .pxer-app .text-xl-right {
- text-align: right !important; }
- .pxer-app .text-xl-center {
- text-align: center !important; } }
- .pxer-app .text-lowercase {
- text-transform: lowercase !important; }
- .pxer-app .text-uppercase {
- text-transform: uppercase !important; }
- .pxer-app .text-capitalize {
- text-transform: capitalize !important; }
- .pxer-app .font-weight-light {
- font-weight: 300 !important; }
- .pxer-app .font-weight-lighter {
- font-weight: lighter !important; }
- .pxer-app .font-weight-normal {
- font-weight: 400 !important; }
- .pxer-app .font-weight-bold {
- font-weight: 700 !important; }
- .pxer-app .font-weight-bolder {
- font-weight: bolder !important; }
- .pxer-app .font-italic {
- font-style: italic !important; }
- .pxer-app .text-white {
- color: #fff !important; }
- .pxer-app .text-primary {
- color: #007bff !important; }
- .pxer-app a.text-primary:hover, .pxer-app a.text-primary:focus {
- color: #0056b3 !important; }
- .pxer-app .text-secondary {
- color: #6c757d !important; }
- .pxer-app a.text-secondary:hover, .pxer-app a.text-secondary:focus {
- color: #494f54 !important; }
- .pxer-app .text-success {
- color: #28a745 !important; }
- .pxer-app a.text-success:hover, .pxer-app a.text-success:focus {
- color: #19692c !important; }
- .pxer-app .text-info {
- color: #17a2b8 !important; }
- .pxer-app a.text-info:hover, .pxer-app a.text-info:focus {
- color: #0f6674 !important; }
- .pxer-app .text-warning {
- color: #ffc107 !important; }
- .pxer-app a.text-warning:hover, .pxer-app a.text-warning:focus {
- color: #ba8b00 !important; }
- .pxer-app .text-danger {
- color: #dc3545 !important; }
- .pxer-app a.text-danger:hover, .pxer-app a.text-danger:focus {
- color: #a71d2a !important; }
- .pxer-app .text-light {
- color: #f8f9fa !important; }
- .pxer-app a.text-light:hover, .pxer-app a.text-light:focus {
- color: #cbd3da !important; }
- .pxer-app .text-dark {
- color: #343a40 !important; }
- .pxer-app a.text-dark:hover, .pxer-app a.text-dark:focus {
- color: #121416 !important; }
- .pxer-app .text-body {
- color: #212529 !important; }
- .pxer-app .text-muted {
- color: #6c757d !important; }
- .pxer-app .text-black-50 {
- color: rgba(0, 0, 0, 0.5) !important; }
- .pxer-app .text-white-50 {
- color: rgba(255, 255, 255, 0.5) !important; }
- .pxer-app .text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0; }
- .pxer-app .text-decoration-none {
- text-decoration: none !important; }
- .pxer-app .text-break {
- word-break: break-word !important;
- overflow-wrap: break-word !important; }
- .pxer-app .text-reset {
- color: inherit !important; }
- .pxer-app .visible {
- visibility: visible !important; }
- .pxer-app .invisible {
- visibility: hidden !important; }
- .pxer-app .card {
- position: relative;
- display: flex;
- flex-direction: column;
- min-width: 0;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: border-box;
- border: 1px solid rgba(0, 0, 0, 0.125);
- border-radius: 0.25rem; }
- .pxer-app .card > hr {
- margin-right: 0;
- margin-left: 0; }
- .pxer-app .card > .list-group:first-child .list-group-item:first-child {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem; }
- .pxer-app .card > .list-group:last-child .list-group-item:last-child {
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem; }
- .pxer-app .card-body {
- flex: 1 1 auto;
- padding: 1.25rem; }
- .pxer-app .card-title {
- margin-bottom: 0.75rem; }
- .pxer-app .card-subtitle {
- margin-top: -0.375rem;
- margin-bottom: 0; }
- .pxer-app .card-text:last-child {
- margin-bottom: 0; }
- .pxer-app .card-link:hover {
- text-decoration: none; }
- .pxer-app .card-link + .card-link {
- margin-left: 1.25rem; }
- .pxer-app .card-header {
- padding: 0.75rem 1.25rem;
- margin-bottom: 0;
- background-color: rgba(0, 0, 0, 0.03);
- border-bottom: 1px solid rgba(0, 0, 0, 0.125); }
- .pxer-app .card-header:first-child {
- border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; }
- .pxer-app .card-header + .list-group .list-group-item:first-child {
- border-top: 0; }
- .pxer-app .card-footer {
- padding: 0.75rem 1.25rem;
- background-color: rgba(0, 0, 0, 0.03);
- border-top: 1px solid rgba(0, 0, 0, 0.125); }
- .pxer-app .card-footer:last-child {
- border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); }
- .pxer-app .card-header-tabs {
- margin-right: -0.625rem;
- margin-bottom: -0.75rem;
- margin-left: -0.625rem;
- border-bottom: 0; }
- .pxer-app .card-header-pills {
- margin-right: -0.625rem;
- margin-left: -0.625rem; }
- .pxer-app .card-img-overlay {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1.25rem; }
- .pxer-app .card-img {
- width: 100%;
- border-radius: calc(0.25rem - 1px); }
- .pxer-app .card-img-top {
- width: 100%;
- border-top-left-radius: calc(0.25rem - 1px);
- border-top-right-radius: calc(0.25rem - 1px); }
- .pxer-app .card-img-bottom {
- width: 100%;
- border-bottom-right-radius: calc(0.25rem - 1px);
- border-bottom-left-radius: calc(0.25rem - 1px); }
- .pxer-app .card-deck {
- display: flex;
- flex-direction: column; }
- .pxer-app .card-deck .card {
- margin-bottom: 15px; }
- @media (min-width: 576px) {
- .pxer-app .card-deck {
- flex-flow: row wrap;
- margin-right: -15px;
- margin-left: -15px; }
- .pxer-app .card-deck .card {
- display: flex;
- flex: 1 0 0%;
- flex-direction: column;
- margin-right: 15px;
- margin-bottom: 0;
- margin-left: 15px; } }
- .pxer-app .card-group {
- display: flex;
- flex-direction: column; }
- .pxer-app .card-group > .card {
- margin-bottom: 15px; }
- @media (min-width: 576px) {
- .pxer-app .card-group {
- flex-flow: row wrap; }
- .pxer-app .card-group > .card {
- flex: 1 0 0%;
- margin-bottom: 0; }
- .pxer-app .card-group > .card + .card {
- margin-left: 0;
- border-left: 0; }
- .pxer-app .card-group > .card:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0; }
- .pxer-app .card-group > .card:not(:last-child) .card-img-top,
- .pxer-app .card-group > .card:not(:last-child) .card-header {
- border-top-right-radius: 0; }
- .pxer-app .card-group > .card:not(:last-child) .card-img-bottom,
- .pxer-app .card-group > .card:not(:last-child) .card-footer {
- border-bottom-right-radius: 0; }
- .pxer-app .card-group > .card:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0; }
- .pxer-app .card-group > .card:not(:first-child) .card-img-top,
- .pxer-app .card-group > .card:not(:first-child) .card-header {
- border-top-left-radius: 0; }
- .pxer-app .card-group > .card:not(:first-child) .card-img-bottom,
- .pxer-app .card-group > .card:not(:first-child) .card-footer {
- border-bottom-left-radius: 0; } }
- .pxer-app .card-columns .card {
- margin-bottom: 0.75rem; }
- @media (min-width: 576px) {
- .pxer-app .card-columns {
- column-count: 3;
- column-gap: 1.25rem;
- orphans: 1;
- widows: 1; }
- .pxer-app .card-columns .card {
- display: inline-block;
- width: 100%; } }
- .pxer-app .accordion > .card {
- overflow: hidden; }
- .pxer-app .accordion > .card:not(:first-of-type) .card-header:first-child {
- border-radius: 0; }
- .pxer-app .accordion > .card:not(:first-of-type):not(:last-of-type) {
- border-bottom: 0;
- border-radius: 0; }
- .pxer-app .accordion > .card:first-of-type {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0; }
- .pxer-app .accordion > .card:last-of-type {
- border-top-left-radius: 0;
- border-top-right-radius: 0; }
- .pxer-app .accordion > .card .card-header {
- margin-bottom: -1px; }
- .pxer-app > * {
- background-color: #fff;
- border: 1px solid #d6dee5;
- border-radius: 5px;
- margin-top: 10px;
- margin-bottom: 10px;
- min-height: 40px;
- display: flex; }
- .pxer-app .pxer-nav {
- background-color: #fff;
- justify-content: space-between;
- padding: 5px 12px;
- align-items: center; }
- .pxer-app .pxer-nav .pn-header a, .pxer-app .pxer-nav .pn-header a:active, .pxer-app .pxer-nav .pn-header a:hover {
- text-decoration: none;
- color: #258fb8;
- font-family: sans-serif;
- font-size: 24px; }
- .pxer-app .pxer-nav .pn-header a small, .pxer-app .pxer-nav .pn-header a:active small, .pxer-app .pxer-nav .pn-header a:hover small {
- font-size: 0.3em; }
- .pxer-app .pxer-nav .pn-header a:hover {
- color: #24749c; }
- .pxer-app .pxer-nav .pn-buttons {
- display: flex;
- align-items: center; }
- .pxer-app .pxer-nav .pn-buttons .btn {
- margin-left: 10px; }
- .pxer-app .pxer-nav .pn-buttons .pnb-warn-number {
- background-color: #fd7e14;
- font-family: sans-serif;
- width: 20px;
- height: 20px;
- font-size: 14px;
- transform: scale(0.7);
- line-height: 20px;
- color: #fff;
- border-radius: 1000px;
- display: inline-block;
- text-align: center;
- margin-left: -20px;
- position: relative;
- top: -10px;
- left: 8px; }
- .pxer-app .pxer-fail > table thead tr td {
- padding: 3px 12px;
- vertical-align: middle;
- font-size: 16px; }
- .pxer-app .pxer-task-option {
- padding: 5px 0; }
- .pxer-app .pxer-task-option > * {
- margin-left: 12px; }
- .pxer-app .pxer-task-option .ptp-buttons {
- margin-left: auto;
- margin-right: 12px; }
- .pxer-app .pxer-task-option .ptp-buttons button {
- margin-left: 10px; }
- .pxer-app .pxer-print > * {
- flex-grow: 1;
- margin: 12px; }
- .pxer-app .pxer-print .pp-filter, .pxer-app .pxer-print .pp-print {
- margin-top: 1.5em;
- padding: 12px; }
- .pxer-app .pxer-print .pp-print {
- width: 35%; }
- .pxer-app .pxer-print .pp-print .pppf-buttons {
- text-align: right; }
- .pxer-app .pxer-print .pp-print .pppf-buttons .pppfb-msg {
- padding: 5px;
- text-align: left;
- border: 1px solid #e9ecef;
- color: #6c757d;
- border-radius: 1px; }
- .pxer-app .pxer-print .pp-filter {
- width: 55%; }
- .pxer-app .pxer-print .pp-filter .ppf-tag-card .card-body {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- padding: 5px;
- position: relative;
- overflow: hidden; }
- .pxer-app .pxer-print .pp-filter .ppf-tag-card .ppf-show-all-tag {
- position: absolute;
- bottom: 0;
- width: 100%;
- display: block;
- padding: 20px 0 5px;
- text-align: center;
- cursor: pointer;
- color: #258fb8;
- background: linear-gradient(rgba(255, 255, 255, 0), white 50%); }
- .pxer-app .pxer-print .pp-filter .ppf-tag-card .ppf-tag {
- margin: 5px 2px;
- cursor: pointer; }
- .pxer-app .pxer-print .pp-filter .ppf-tag-card .ppf-tag:last-child {
- margin-right: auto; }
- .pxer-app input.form-control, .pxer-app select.form-control {
- height: 24px;
- padding-top: 1px;
- padding-bottom: 1px;
- line-height: 1em; }
- .pxer-app .pxer-class-fieldset {
- border: 1px solid #ccc;
- position: relative;
- padding-top: 1em;
- margin-top: 1em; }
- .pxer-app .pxer-class-fieldset .pcf-title {
- background-color: #fff;
- display: inline-block;
- position: absolute;
- top: -0.75em;
- left: 0.45em;
- font-size: 16px; }
- .pxer-app .text-right {
- text-align: right; }
-
- div#wave {
- position: relative;
- margin-left: auto;
- margin-right: auto; }
- div#wave .dot {
- display: inline-block;
- width: 9px;
- height: 9px;
- border-radius: 50%;
- margin-right: 3px;
- background: #303131;
- animation: wave 1.3s linear infinite; }
- div#wave .dot:nth-child(2) {
- animation-delay: -1.1s; }
- div#wave .dot:nth-child(3) {
- animation-delay: -0.9s; }
-
- @keyframes wave {
- 0%, 60%, 100% {
- transform: initial; }
- 30% {
- transform: translateY(-8px); } }
- `;
-
- ;
-
-
- // public/favicon.ico
- pxer.util.addFile('public/favicon.ico')
- ;
-
-
- // https://point.pea3nut.org/sdk/1.0/browser.js
- "use strict";
- var EventSender = /** @class */ (function () {
- function EventSender(remoteUrl, userOptions) {
- this.remoteUrl = remoteUrl;
- this.userOptions = userOptions;
- this.startTime = new Date;
- this.content = {};
- var that = this;
- this.defaultOptions = {
- sdk_version: '1.0',
- get time() { return new Date; },
- get duration() { return new Date().getTime() - that.startTime.getTime(); },
- };
- }
- EventSender.prototype.setContent = function (content) {
- Object.assign(this.content, content);
- };
- EventSender.prototype.send = function (eventFlag, content) {
- var mergedContent = Object.assign({}, this.content, content);
- var body = Object.assign({}, this.defaultOptions, this.userOptions, {
- content: JSON.stringify(mergedContent),
- event_flag: eventFlag,
- });
- this.sendRequest(body);
- };
- EventSender.prototype.sendRequest = function (body) {
- var xhr = new XMLHttpRequest();
- xhr.open('POST', this.remoteUrl);
- xhr.onload = function () {
- if (['2', '3'].includes(xhr.status.toString()[0])) {
- var res = JSON.parse(xhr.responseText);
- if (res.errcode) {
- console.error("Error in point sent! Server response " + xhr.responseText);
- }
- }
- else {
- console.error("Error in point sent! Server response HTTP code " + xhr.status);
- }
- };
- xhr.send(JSON.stringify(body));
- };
- return EventSender;
- }());
- //# sourceMappingURL=browser.js.map
- ;
-
-
- // src/app/util.js
- 'use strict';
-
- pxer.util = pxer.util || {};
-
- // 全局函数
- pxer.util.blinkTitle =function(addMsg ,spaceMsg){
- var addMsg =addMsg ||'[ OK ] ';
- var spaceMsg =spaceMsg ||'[ ] ';
- var timer =setInterval(()=>{
- if(document.title.indexOf(addMsg) !==-1){
- document.title =document.title.replace(addMsg ,spaceMsg);
- }else if(document.title.indexOf(spaceMsg) !==-1){
- document.title =document.title.replace(spaceMsg ,addMsg);
- }else{
- document.title =addMsg+document.title;
- };
- },500);
- window.addEventListener('mousemove' ,function _self(){
- window.addEventListener('mousemove' ,_self);
- clearInterval(timer);
- document.title =document.title.replace(spaceMsg ,"").replace(addMsg ,"");
- });
- };
- pxer.util.parseURL =function(url=document.URL){
- var arr =url.match(/^(?:(https?):)?\/\/([\w_\d.:\-]+?)((?:\/[^\/?]*)*)\/?(?:\?(.+))?$/);
- var data ={
- protocol:arr[1],
- domain:arr[2],
- path:arr[3],
- query:arr[4],
- };
- if(data.query && data.query.indexOf('=')!==-1){
- data.query ={};
- for(let item of arr[4].split('&')){
- let tmp =item.split('=');
- data.query[tmp[0]]=tmp[1];
- };
- }
- return data;
- };
- pxer.util.createScript =function(url){
- if(!/^(https?:)?\/\//.test(url))url =window['PXER_URL']+url;
- var elt =document.createElement('script');
- elt.charset='utf-8';
- return function(resolve,reject){
- elt.addEventListener('load',resolve);
- elt.addEventListener('load',function(){
- if(window['PXER_MODE']==='dev') console.log('Loaded '+url);
- });
- elt.addEventListener('error',reject);
- elt.src =url;
- document.documentElement.appendChild(elt);
- return elt;
- };
- };
- pxer.util.createResource =function(url){
- if(!/^(https?:)?\/\//.test(url))url =window['PXER_URL']+url;
- let fx =url.match(/\.([^\.]+?)$/)[1];
- let elt =document.createElement('link');
- switch(fx){
- case 'css':
- elt.rel ='stylesheet';
- break;
- case 'ico':
- elt.rel ='shortcut icon';
- elt.type ='image/x-icon';
- break;
- default:
- throw new Error(`unknown filename extension "${fx}"`)
- }
- return function(resolve,reject){
- elt.href =url;
- document.documentElement.appendChild(elt);
- if(window['PXER_MODE']==='dev') console.log('Linked '+url);
- resolve();
- };
- };
- pxer.util.execPromise =function(taskList,call){
- var promise =Promise.resolve();
- if(Array.isArray(taskList)&&Array.isArray(taskList[0])){
- for(let array of taskList){
- promise =promise.then(()=>Promise.all(array.map(item=>new Promise(call(item)))));
- }
- }else if(Array.isArray(taskList)){
- for(let item of taskList){
- promise =promise.then(()=>new Promise(call(item)));
- }
- }else{
- promise =promise.then(()=>new Promise(call(taskList)));
- };
- return promise;
- };
-
- /**
- * 当前页面类型。可能的值
- * - bookmark_user 自己/其他人关注的用户列表
- * - bookmark_works 自己/其他人收藏的作品
- * - member_info 自己/其他人的主页
- * - works_medium 查看某个作品
- * - works_manga 查看某个多张作品的多张页
- * - works_big 查看某个作品的某张图片的大图
- * - member_works 自己/其他人作品列表页
- * - member_works_new 自己/其他人作品列表页
- * - search 检索页
- * - index 首页
- * - discovery 探索
- * - rank 排行榜
- * - bookmark_new 关注的新作品
- * - unknown 未知
- * @param {Document} doc
- * @return {string} - 页面类型
- * */
- pxer.util.getPageType =function(doc = document){
- const url = doc.URL;
- var URLData = pxer.util.parseURL(url);
-
- switch (true) {
- case pxer.regexp.urlWorkDetail.test(URLData.path): return 'works_medium';
- }
-
-
- var type =null;
- var isnew =!(Boolean(document.querySelector(".count-badge"))||Boolean(document.querySelector(".profile")));
- if(URLData.domain !=='www.pixiv.net')return 'unknown';
-
- if (pxer.regexp.isBookmarksUrl.test(URLData.path)) {
- type = 'bookmark_works'
- } else if (URLData.path.startsWith('/users/')) {
- type = 'member_works_new'
- } else if (URLData.path.startsWith('/tags/')) {
- type = 'search_tag'
- } else if(URLData.path==='/bookmark.php'){
- if(URLData.query &&URLData.query.type){
- switch(URLData.query.type){
- case 'user':
- type ='bookmark_user';
- break;
- default:
- type ='unknown';
- };
- }else{
- type ='bookmark_works';
- }
- }else if(URLData.path==='/bookmark_new_illust.php'){
- type ='bookmark_new';
- }else if(URLData.path==='/member.php'){
- type =isnew?'member_works_new':"member_info";
- }else if(URLData.path==='/ranking.php'){
- type ='rank';
- }else if(URLData.path==='/member_illust.php'){
- if(URLData.query&&URLData.query.mode){
- switch(URLData.query.mode){
- case 'medium':
- type ='works_medium';
- break;
- case 'manga':
- type ='works_manga';
- break;
- case 'manga_big':
- type ='works_big';
- break;
- default:
- type ='unknown';
- };
- }else{
- type =isnew?'member_works_new':"member_works";
- }
- }else if(URLData.path==='/search.php'){
- // TODO: Not all of search is carried in SPA
- // But new version seems batter?
- type ='search_spa';
- }else if(URLData.path==='/discovery'){
- type ='discovery';
- }else if(URLData.path==='/'){
- type ='index';
- }else{
- type ='unknown';
- }
- return type;
- };
- /**
- * 查询对应页面类型每页作品数量
- * @param {string} type - 作品类型
- * @return {number} - 每页作品数
- */
- pxer.util.getOnePageWorkCount =function(type) {
- switch (type) {
- case "search_spa":return 48
- case "search_tag":return 60
- case "search":return 40
- case "rank":return 50
- case "discovery":return 3000
- case "bookmark_works":return 48
- case "bookmark_new":return 60
- case "member_works_new": return Number.MAX_SAFE_INTEGER
- default:return 20
- };
- }
- pxer.util.getIDfromURL =function(key='id', url=document.URL) {
- const urlInfo = new URL(url, document.URL);
- var query = urlInfo.search;
- var params = new URLSearchParams(query);
-
- const result = params.get(key);
-
- if (result) return result;
-
- // read id from url
- const matchResult = url.match(/\d{4,}/);
-
- return matchResult ? matchResult[0] : null;
- };
- pxer.util.fetchPixivApi = async function(url) {
- return (
- await (
- await fetch(
- url,
- { credentials: 'include' },
- )
- ).json()
- ).body;
- };
-
- Object.assign(window, pxer.util);
- ;
-
-
- // src/app/regexp.js
- pxer.regexp = pxer.regexp || {};
- pxer.regexp.urlWorkDetail = /\/artworks\/(\d+)/;
- pxer.regexp.parseKeyword = /\/tags\/([^\/]+?)\//;
- pxer.regexp.isBookmarksUrl = /users\/\d+\/bookmarks\/artworks/;
- ;
-
-
- // src/app/PxerData.js
- 'use strict';
-
- /**
- * Pxer任务队列中的任务对象
- * @constructor
- * @abstract
- * */
- class PxerRequest{
- constructor({url ,html}={}){
- this.url=url;
- this.html =html;
- this.completed =false;
- };
- }
- /**
- * 页面任务对象
- * @constructor
- * @extends {PxerRequest}
- * */
- class PxerPageRequest extends PxerRequest{
- constructor(...argn){
- super(...argn);
- this.type = argn[0].type;
- }
- }
- /**
- * 作品任务对象
- * @constructor
- * @extends {PxerRequest}
- * */
- class PxerWorksRequest extends PxerRequest{
- constructor({url=[] ,html={} ,type ,isMultiple ,id}={}){
- super({url ,html});
- this.type =type;//[manga|ugoira|illust]
- this.isMultiple =isMultiple;//[true|false]
- this.id =id;
- }
- }
-
-
- /**
- * 作品任务对象
- * @constructor
- * @extends {PxerRequest}
- * */
- class PxerFailInfo{
- constructor({url,type,task}={}){
- this.url =url;
- this.type =type;
- this.task =task;
- }
- }
-
-
-
- /**
- * 抓取到的作品对象
- * @constructor
- * */
- class PxerWorks{
- constructor({id ,type ,date ,domain ,tagList ,viewCount ,ratedCount ,fileFormat}={},strict=true){
- /**作品ID*/
- this.id =id;
- /**
- * 投稿日期,格式:Y/m/d/h/m/s
- * @type {string}
- * */
- this.date =date;
- this.type =type;//[manga|ugoira|illust]
- /**作品存放的域名*/
- this.domain =domain;
- /**
- * 作品标签列表
- * @type {Array}
- * */
- this.tagList =tagList;
- /**作品被浏览的次数*/
- this.viewCount =viewCount;
- /**作品被赞的次数*/
- this.ratedCount =ratedCount;
- /**作品的图片文件扩展名*/
- this.fileFormat =fileFormat;
- }
- }
- /**
- * 抓取到的多张插画/漫画作品对象
- * @extends {PxerWorks}
- * @constructor
- * */
- class PxerMultipleWorks extends PxerWorks{
- constructor(data={}){
- super(data,false);
- /**作品的图片张数*/
- this.isMultiple =true;
- this.multiple =data.multiple;
- }
- };
- /**
- * 抓取到的动图作品对象
- * @extends {PxerWorks}
- * @constructor
- * */
- class PxerUgoiraWorks extends PxerWorks{
- constructor(data={}){
- super(data,false);
- this.type ='ugoira';
- this.fileFormat='zip';
- /**动图动画参数*/
- this.frames =data.frames;
- }
- };
-
- ;
-
-
- // src/app/PxerEvent.js
- 'use strict';
-
- class PxerEvent{
- constructor(eventList=[] ,shortName =true){
- this._pe_eventList =eventList;
-
- this._pe_event ={};
- this._pe_oneEvent ={};
-
-
- if(!shortName||typeof Proxy==='undefined') return this
- else return new Proxy(this ,{
- get(target ,property){
- if(property in target){
- return target[property];
- }else if(target._pe_eventList.indexOf(property) !==-1){
- return target.dispatch.bind(target ,property);
- }else{
- return target[property];
- };
- },
- });
-
- };
- on(type, listener){
- if(!PxerEvent.check(this ,type ,listener))return false;
- if(!this._pe_event[type]) this._pe_event[type]=[];
- this._pe_event[type].push(listener);
- return true;
- };
- one(type, listener){
- if(!PxerEvent.check(this ,type ,listener))return false;
- if(!this._pe_oneEvent[type]) this._pe_oneEvent[type]=[];
- this._pe_oneEvent[type].push(listener);
- return true;
- };
- dispatch(type ,...data){
- if(this._pe_eventList.indexOf(type) ===-1) return false;
- if(this._pe_event[type]) this._pe_event[type].forEach(fn=>fn(...data));
- if(this._pe_oneEvent[type]){
- this._pe_oneEvent[type].forEach(fn=>fn(...data));
- delete this._pe_oneEvent[type];
- }
- if(this._pe_event['*']) this._pe_event['*'].forEach(fn=>fn(...data));
- if(this._pe_oneEvent['*']){
- this._pe_oneEvent['*'].forEach(fn=>fn(...data));
- delete this._pe_oneEvent['*'];
- }
- return true;
- };
- off(eventType, listener){
- if(!PxerEvent.checkEvent(this ,eventType)) return false;
- if(listener &&!PxerEvent.checkListener(listener)) return false;
-
- if(eventType ===true){
- this._pe_event ={};
- this._pe_oneEvent ={};
- return true;
- };
-
- if(listener===true || listener==='*'){
- delete this._pe_event[eventType];
- delete this._pe_oneEvent[eventType];
- return true;
- };
-
- let index1 = this._pe_event[type].lastIndexOf(listener);
- if (index1 !== -1) {
- this._pe_event[type].splice(index1, 1);
- };
-
- let index2 =this._pe_oneEvent[type].lastIndexOf(listener);
- if(index2 !== -1){
- this._pe_oneEvent[type].splice(index2 ,1);
- };
-
- return true;
-
- };
- };
-
- PxerEvent.check =function(pe ,eventType ,listener){
- return PxerEvent.checkEvent(pe ,eventType)&&PxerEvent.checkListener(listener);
- };
- PxerEvent.checkEvent =function(pe ,eventType){
- if(eventType !=='*' &&pe._pe_eventList.indexOf(eventType) ===-1){
- console.warn(`PxerEvent : "${eventType}" is not in eventList[${pe._pe_eventList}]`);
- return false;
- };
- return true;
- };
- PxerEvent.checkListener =function(listener){
- if(!(listener instanceof Function || listener===true || listener==='*')){
- console.warn(`PxerEvent: "${listener}" is not a function`);
- return false;
- };
- return true;
- };
-
-
-
- ;
-
-
- // src/view/i18n.js
- pxer.t = function (key) {
- const defaultLang = 'en';
-
- return (
- pxer.util.get(pxer.i18nMap[pxer.lang], key)
- || pxer.util.get(pxer.i18nMap[defaultLang], key)
- || key
- );
- };
-
- ;
-
-
- // public/i18n/en.json
- pxer.util.set(pxer, 'i18nMap.en', {
- "phrase": {
- "taskInfo": "`There are ${worksNum} works and ${address} picture address.<br />The single works is ${(single/worksNum*100).toFixed(1)}%<br /> and the multiple works ${(multiple/worksNum*100).toFixed(1)}%<br />`",
- "blockOpen": "Pxer:\nThe browser blocked Pup-up window. Please check the hint of browser and allow it.",
- "likeProportion": "Input a number less than 1",
- "pointPage": "There is a page to show url of pictures. <strong>Don't</strong> openning in the browser. You can copy them to the downloader tools for download picture.<br />Have no idea? Look at <a href=\"https://github.com/FoXZilla/Pxer/issues/166\" target=\"_blank\">there</a> for what does the senior .<br />"
- },
- "button": {
- "selectAll": "Select All",
- "retryTheSelected": "Retry Selected",
- "preview": "Preview",
- "print": "Print",
- "showAll": "Show All",
- "crawl": "Get",
- "load": "Load",
- "stop": "Stop",
- "option": "Option",
- "apply": "Apply",
- "successBut": "Trouble"
- },
- "option": {
- "ugoiraMax": "Max ZIP",
- "ugoira600p": "600p ZIP",
- "ugoiraConfig": "config",
- "max": "MAX",
- "cover600p": "Cover Only(600p)",
- "no": "No"
- },
- "label": {
- "pictureId": "ID",
- "reason": "Reason",
- "way": "Way",
- "onlyGetTop": "Only get top:",
- "onlyGetBeforeId": "Only get the picture before id (newer than that):",
- "likeCount": "Like Count",
- "viewCount": "View Count",
- "singleIllust": "Single Illust",
- "multipleIllust": "Multiple Illust",
- "singleManga": "Single Manga",
- "multipleManga": "Multiple Manga",
- "ugoira": "Ugoira",
- "likeProportion": "Like Proportion",
- "whatever": "Whatever",
- "exclude": "Exclude",
- "mustInclude": "Must Include"
- },
- "title": {
- "printOptions": "Print Options",
- "filterByTag": "Filter by tag",
- "filterOptions": "Filter Options"
- },
- "pageType": {
- "member_works": "List of Works",
- "member_works_new": "SPA List of Works",
- "search": "Search",
- "search_spa": "SPA Tag Search",
- "search_tag": "Tag Search",
- "bookmark_works": "List of bookmark",
- "rank": "Rank",
- "bookmark_new": "New Works",
- "discovery": "Discovery",
- "unknown": "Unknown"
- },
- "hello": "yahello"
- })
- ;
-
-
- // public/i18n/zh.json
- pxer.util.set(pxer, 'i18nMap.zh', {
- "phrase": {
- "taskInfo": "`共计${worksNum}个作品,${address}个下载地址。<br />单张图片作品占 ${(single/worksNum*100).toFixed(1)}%<br />多张图片作品占 ${(multiple/worksNum*100).toFixed(1)}%<br />`",
- "blockOpen": "Pxer:\n浏览器拦截了弹出窗口,请检查浏览器提示,设置允许此站点的弹出式窗口。",
- "likeProportion": "若输入,则必须为一个小于1的数字",
- "pointPage": "这个页面是抓取到的下载地址,<strong>不要</strong>直接在浏览器打开,你可以将它们复制到第三方下载工具中下载<br />不知道用什么工具?<a href=\"https://github.com/FoXZilla/Pxer/issues/8\" target=\"_blank\">访问这里</a>来看看大家都在用什么工具下载<br />"
- },
- "button": {
- "selectAll": "全选",
- "retryTheSelected": "重试选中",
- "preview": "预览",
- "print": "输出",
- "showAll": "展开全部",
- "crawl": "抓取",
- "load": "载入",
- "stop": "停止",
- "option": "设置",
- "apply": "保存",
- "successBut": "部分成功"
- },
- "option": {
- "ugoiraMax": "最大压缩包",
- "ugoira600p": "600p压缩包",
- "ugoiraConfig": "参数",
- "max": "最大",
- "cover600p": "仅封面(600p)",
- "no": "不输出"
- },
- "label": {
- "pictureId": "图片ID",
- "reason": "失败原因",
- "way": "解决方案",
- "onlyGetTop": "仅抓取前x副:",
- "onlyGetBeforeId": "仅抓取id为x之前的(比x更加新的):",
- "likeCount": "点赞数",
- "viewCount": "浏览数",
- "singleIllust": "单张插画",
- "multipleIllust": "多张插画",
- "singleManga": "单张漫画",
- "multipleManga": "多张漫画",
- "ugoira": "动图",
- "likeProportion": "点赞率",
- "whatever": "无所谓",
- "exclude": "不能包含",
- "mustInclude": "必须包含"
- },
- "title": {
- "printOptions": "输出选项",
- "filterByTag": "按标签过滤",
- "filterOptions": "过滤选项"
- },
- "pageType": {
- "member_works": "作品列表页",
- "member_works_new": "作品列表页_",
- "search": "检索页",
- "search_spa": "SPA检索页",
- "search_tag": "标签搜索页",
- "bookmark_works": "收藏列表页",
- "rank": "排行榜",
- "bookmark_new": "关注的新作品",
- "discovery": "探索",
- "unknown": "未知"
- },
- "hello": "你好"
- })
- ;
-
-
- // public/i18n/ja.json
- pxer.util.set(pxer, 'i18nMap.ja', {
- "phrase": {
- "taskInfo": "`小計${worksNum}個作品,${address}個ダウンロードアドレス。<br />シングル画像作品割合 ${(single/worksNum*100).toFixed(1)}%<br />複数画像作品割合 ${(multiple/worksNum*100).toFixed(1)}%<br />`",
- "blockOpen": "Pxer:\nブラウザでポップアップがブロックされています。ブラウザのプロンプトを確認して、このサイトのポップアップブロックを許可する操作を行ってください。",
- "likeProportion": "1 未満の数値を入力してください。",
- "pointPage": "このページはクロールされたダウンロードアドレスです。ブラウザで直接<strong>開かないで下さい</strong>。サードパーティのダウンロードツールにコピーして実行します。<br />適用ツールが分からない場合<a href=\"https://github.com/FoXZilla/Pxer/issues/8\" target=\"_blank\">こちら</a>皆さんはどんなツールが使用していますか<br />"
- },
- "button": {
- "selectAll": "全て選択",
- "retryTheSelected": "選択を再試行",
- "preview": "プレビュー",
- "print": "プリント",
- "showAll": "全て表示",
- "crawl": "クロール",
- "load": "ロード",
- "stop": "ストップ",
- "option": "設定",
- "apply": "適用",
- "successBut": "トラブル"
- },
- "option": {
- "ugoiraMax": "Max ZIP",
- "ugoira600p": "600p ZIP",
- "ugoiraConfig": "config",
- "max": "Max",
- "cover600p": "カバーのみ(600p)",
- "no": "プリント不要"
- },
- "label": {
- "pictureId": "画像ID",
- "reason": "失敗原因",
- "way": "解決方法",
- "onlyGetTop": "Top X 枚のみ:",
- "onlyGetBeforeId": "ID<Xの画像のみ:",
- "likeCount": "いいね!数",
- "viewCount": "ビュー数",
- "singleIllust": "シングルイラスト",
- "multipleIllust": "複数のイラスト",
- "singleManga": "シングル漫画",
- "multipleManga": "複数の漫画",
- "ugoira": "うごイラ",
- "likeProportion": "いいね!割合",
- "whatever": "何でもOK",
- "exclude": "含まない",
- "mustInclude": "含む必要"
- },
- "title": {
- "printOptions": "プリントオプション",
- "filterByTag": "タグでフィルター",
- "filterOptions": "フィルターオプション"
- },
- "pageType": {
- "member_works": "作品リスト",
- "member_works_new": "SPA 作品リスト",
- "search": "検索",
- "search_spa": "SPA タグ検索",
- "search_tag": "タグ検索",
- "bookmark_works": "お気に入りリスト",
- "rank": "ランク",
- "bookmark_new": "お気に入り新作品",
- "discovery": "発見",
- "unknown": "アンノウン"
- },
- "hello": "ようこそ"
- })
- ;
-
-
- // src/app/PxerFilter.js
- 'use strict';
-
- class PxerFilter{
- /**
- * @param {Object} config - 过滤参数
- * @see PxerFilter.filterInfo
- * @see PxerFilter.filterTag
- * */
- constructor(config){
- /**
- * 每次过滤后得到的累计的作品集合
- * @type {PxerWorks[]}
- * */
- this.passWorks =[];
-
- /**
- * 过滤的配置信息
- * @see PxerFilter.filterInfo
- * @see PxerFilter.filterTag
- * */
- this.config =Object.assign(PxerFilter.defaultConfig(),config);
- };
-
- /**
- * 对作品进行过滤
- * @param {PxerWorks[]} worksList - 要过滤的作品数组
- * @return {PxerWorks[]} - 过滤后的结果
- * */
- filter(worksList){
- var resultSet =PxerFilter.filterInfo(PxerFilter.filterTag(worksList,this.config) ,this.config);
- this.passWorks.push(...resultSet);
- return resultSet;
- };
- };
-
- /**
- * 返回PxerFilter的默认配置参数
- * @see PxerFilter.filterInfo
- * @see PxerFilter.filterTag
- * */
- PxerFilter.defaultConfig =function(){
- return{
- "rated" :0,//赞的数量
- "rated_pro" :0,//点赞率
- "view" :0,//浏览数
- "has_tag_every" :[], // 作品中不能含有以下任意一个标签
- "has_tag_some" :[], // 作品中不能同时含有以下所有标签
- "no_tag_any" :[], // 作品中必须含有以下任意一个标签
- "no_tag_every" :[], // 作品中必须同时含有以下所有标签
- };
- };
-
- /**
- * 根据标签作品信息过滤作品
- * @param {PxerWorks[]} worksList
- * @param {number} rated - 作品不小于的赞的数量
- * @param {number} rated_pro - 作品不小于的点赞率,小于0的数字
- * @param {number} view - 作品不小于的浏览数
- * @return {PxerWorks[]}
- * */
- PxerFilter.filterInfo =function(worksList ,{rated=0,rated_pro=0,view=0}){
- return worksList.filter(function(works){
- return works.ratedCount >= rated
- && works.viewCount >= view
- && (works.ratedCount/works.viewCount) >= rated_pro
- });
- };
-
- /**
- * 根据标签过滤作品
- * @param {PxerWorks[]} worksList
- * @param {string[]} no_tag_any - 作品中不能含有里面的任意一个标签
- * @param {string[]} no_tag_every - 作品中不能同时含有里面的所有标签
- * @param {string[]} has_tag_some - 作品中必须含有有里面的任意一个标签
- * @param {string[]} has_tag_every - 作品中必须同时含有里面的所有标签
- * @return {PxerWorks[]}
- * */
- PxerFilter.filterTag =function(worksList ,{has_tag_every,has_tag_some,no_tag_any,no_tag_every}){
- var passWorks =worksList;
-
- if(has_tag_every && has_tag_every.length !==0){
- passWorks =passWorks.filter(function(works){
- return has_tag_every.every(tag=>works.tagList.indexOf(tag)!==-1);
- });
- };
-
- if(has_tag_some && has_tag_some.length !==0){
- passWorks =passWorks.filter(function(works){
- return has_tag_some.some(tag=>works.tagList.indexOf(tag)!==-1);
- });
- };
-
- if(no_tag_any && no_tag_any.length !==0){
- passWorks =passWorks.filter(function(works){
- return !no_tag_any.some(tag=>works.tagList.indexOf(tag)!==-1);
- });
- };
-
- if(no_tag_every && no_tag_every.length !==0){
- passWorks =passWorks.filter(function(works){
- return !no_tag_every.every(tag=>works.tagList.indexOf(tag)!==-1);
- });
- };
-
- return passWorks;
-
- };
-
-
- ;
-
-
- // src/app/PxerHtmlParser.js
- 'use strict';
-
- class PxerHtmlParser{
- constructor(){
- throw new Error('PxerHtmlParse could not construct');
- };
- };
-
-
- /**
- * 解析页码任务对象
- * @param {PxerPageRequest} task - 抓取后的页码任务对象
- * @return {PxerWorksRequest[]|false} - 解析得到的作品任务对象
- * */
- PxerHtmlParser.parsePage = function (task) {
- if (!(task instanceof PxerPageRequest)) {
- window['PXER_ERROR'] = 'PxerHtmlParser.parsePage: task is not PxerPageRequest';
- return false;
- }
- if (!task.url || !task.html) {
- window['PXER_ERROR'] = 'PxerHtmlParser.parsePage: task illegal';
- return false;
- }
-
- const parseList = function (elt) {
- return JSON.parse(elt.getAttribute('data-items'))
- .filter(i => !i.isAdContainer) // skip AD
- ;
- };
-
- var taskList = [];
- switch (task.type) {
- case "userprofile_manga":
- case "userprofile_illust":
- case "userprofile_all":
- var response = JSON.parse(task.html).body
- if (task.type!=="userprofile_illust") {
- for (let elt in response.manga) {
- let tsk = new PxerWorksRequest({
- html: {},
- type: null,
- isMultiple: null,
- id: elt,
- })
- tsk.url = PxerHtmlParser.getUrlList(tsk)
- taskList.push(tsk)
- }
- }
-
- if (task.type!=="userprofile_manga") {
- for (let elt in response.illusts) {
- var tsk = new PxerWorksRequest({
- html: {},
- type: null,
- isMultiple: null,
- id: elt,
- })
- tsk.url = PxerHtmlParser.getUrlList(tsk)
- taskList.push(tsk)
- }
- }
- break;
-
- case "bookmark_works":
- var response = JSON.parse(task.html).body
- for (let worki in response.works) {
- let work = response.works[worki];
- let tsk = new PxerWorksRequest({
- html: {},
- type: this.parseIllustType(work.illustType),
- isMultiple: work.pageCount>1,
- id: work.id,
- })
- tsk.url = PxerHtmlParser.getUrlList(tsk)
- taskList.push(tsk)
- }
- break;
- case "member_works":
- var dom = PxerHtmlParser.HTMLParser(task.html);
- var elts = dom.body.querySelectorAll('a.work._work');
- for (let elt of elts) {
- var task = new PxerWorksRequest({
- html: {},
- type: function(elt) {
- switch (true) {
- case elt.matches('.ugoku-illust'): return "ugoira";
- case elt.matches('.manga'): return "manga";
- default: return "illust";
- }
- }(elt),
- isMultiple: elt.matches(".multiple"),
- id: elt.getAttribute('href').match(/illust_id=(\d+)/)[1]
- });
-
- task.url = PxerHtmlParser.getUrlList(task);
-
- taskList.push(task);
- };
- break;
- case "rank":
- var data = JSON.parse(task.html);
- for (var task of data['contents']) {
-
- var task = new PxerWorksRequest({
- html: {},
- type: this.parseIllustType(task['illust_type']),
- isMultiple: task['illust_page_count'] > 1,
- id: task['illust_id'].toString(),
- });
- task.url = PxerHtmlParser.getUrlList(task);
-
- taskList.push(task);
- };
- break;
- case "discovery":
- var data =JSON.parse(task.html);
- for (var id of data.recommendations) {
- var task = new PxerWorksRequest({
- html: {},
- type: null,
- isMultiple: null,
- id : id.toString(),
- });
- task.url = PxerHtmlParser.getUrlList(task);
-
- taskList.push(task);
- };
- break;
- case "search":
- var dom = PxerHtmlParser.HTMLParser(task.html);
- var searchData = parseList(dom.body.querySelector("input#js-mount-point-search-result-list"));
- for (var searchItem of searchData) {
- var task = new PxerWorksRequest({
- html: {},
- type: this.parseIllustType(searchItem.illustType),
- isMultiple: searchItem.pageCount > 1,
- id: searchItem.illustId
- });
- task.url = PxerHtmlParser.getUrlList(task);
- taskList.push(task);
- };
- break;
- case "bookmark_new":
- var data = JSON.parse(task.html);
- for (var task of data.body.thumbnails.illust) {
-
- var task = new PxerWorksRequest({
- html : {},
- type : this.parseIllustType(task.illustType),
- isMultiple: task.pageCount > 1,
- id : task.id,
- });
- task.url = PxerHtmlParser.getUrlList(task);
-
- taskList.push(task);
- };
- break;
- case "search_spa":
- case "search_tag":
- var response = JSON.parse(task.html).body;
- for (let illust of response.illustManga.data) {
- var tsk = new PxerWorksRequest({
- html: {},
- type: null,
- isMultiple: null,
- id: illust.id,
- });
- tsk.url = PxerHtmlParser.getUrlList(tsk)
- taskList.push(tsk)
- }
- break;
- default:
- const msg = `Unknown PageWorks type ${task.type}`;
- pxer.log(msg);
- throw new Error(msg);
- };
-
- if (taskList.length<1) {
- window['PXER_ERROR'] = 'PxerHtmlParser.parsePage: result empty';
- return false;
- };
-
- return taskList;
-
- };
-
- /**
- * 解析作品任务对象
- * @param {PxerWorksRequest} task - 抓取后的页码任务对象
- * @return {PxerWorks} - 解析得到的作品任务对象
- * */
- PxerHtmlParser.parseWorks =function(task){
- if(!(task instanceof PxerWorksRequest)){
- window['PXER_ERROR'] ='PxerHtmlParser.parseWorks: task is not PxerWorksRequest';
- return false;
- }
- if(!task.url.every(item=>task.html[item])){
- window['PXER_ERROR'] ='PxerHtmlParser.parseWorks: task illegal';
- return false;
- }
-
- for(let url in task.html){
- let data ={
- dom :PxerHtmlParser.HTMLParser(task.html[url]),
- task: task,
- };
- try{
- var pw= PxerHtmlParser.parseMediumHtml(data);
- }catch(e){
- pxer.log(`Error in parsing task of`, task);
- pxer.log(e);
- window['PXER_ERROR'] =`${task.id}:${e.message}`;
- if(window['PXER_MODE']==='dev')console.error(task ,e);
- return false;
- }
- };
- return pw;
-
- };
-
-
-
- /**
- * @param {PxerWorksRequest} task
- * @return {Array}
- * */
- PxerHtmlParser.getUrlList =function(task){
-
- return ["https://www.pixiv.net/member_illust.php?mode=medium&illust_id="+task.id];
-
- };
-
-
- PxerHtmlParser.parseMediumHtml =function({task,dom}){
- var illustData = JSON.parse(task.html[pxer.URLGetter.illustInfoById(task.id)]).body;
-
- var pw;
- switch (true) {
- case illustData.illustType===2: pw = new PxerUgoiraWorks(); break;
- case illustData.pageCount>1: pw = new PxerMultipleWorks(); break;
- default: pw = new PxerWorks(); break;
- }
-
- pw.id = task.id;
- pw.type = this.parseIllustType(illustData.illustType);
- pw.tagList = illustData.tags.tags.map(e=>e.tag);
- pw.viewCount = illustData.viewCount;
- pw.ratedCount = illustData.bookmarkCount;
- if (pw instanceof PxerMultipleWorks) {
- pw.multiple = illustData.pageCount;
- }
-
-
- if (pw.type ==="ugoira"){
- var xhr = new XMLHttpRequest();
- xhr.open("GET", "https://www.pixiv.net/ajax/illust/"+ task.id + "/ugoira_meta", false);
- xhr.send();
- var meta = JSON.parse(xhr.responseText);
- let src = meta['body']['originalSrc'];
- let URLObj = parseURL(src);
-
- pw.domain = URLObj.domain;
- pw.date =src.match(PxerHtmlParser.REGEXP['getDate'])[1];
- pw.frames ={
- framedef:meta['body']['frames'],
- height:illustData.height,
- width:illustData.width,
- };
- } else {
- let src = illustData.urls.original;
- let URLObj = parseURL(src);
-
- pw.domain = URLObj.domain;
- pw.date = src.match(PxerHtmlParser.REGEXP['getDate'])[1];
- pw.fileFormat =src.match(/\.(jpg|gif|png)$/)[1];
- };
- return pw;
- };
-
- PxerHtmlParser.parseIllustType =function(type){
- switch (type.toString()) {
- case "0":
- case "illust":
- return "illust";
- case "1":
- case "manga":
- return "manga";
- case "2":
- case "ugoira":
- return "ugoira";
- }
- return null;
- }
-
- PxerHtmlParser.REGEXP ={
- 'getDate':/img\/((?:\d+\/){5}\d+)/,
- 'getInitData':/\{token:.*\}(?=\);)/
- };
-
- PxerHtmlParser.HTMLParser =function(aHTMLString){
- var dom =document.implementation.createHTMLDocument('');
- dom.documentElement.innerHTML =aHTMLString;
- return dom;
- };
-
- /**@param {Element} img*/
- PxerHtmlParser.getImageUrl =function(img){
- return img.getAttribute('src')||img.getAttribute('data-src');
- };
-
- PxerHtmlParser.parseObjectLiteral = function() {
- // Javascript object literal parser
- // Splits an object literal string into a set of top-level key-value pairs
- // (c) Michael Best (https://github.com/mbest)
- // License: MIT (http://www.opensource.org/licenses/mit-license.php)
- // Version 2.1.0
- // https://github.com/mbest/js-object-literal-parse
- // This parser is inspired by json-sans-eval by Mike Samuel (http://code.google.com/p/json-sans-eval/)
-
- // These two match strings, either with double quotes or single quotes
- var stringDouble = '"(?:[^"\\\\]|\\\\.)*"',
- stringSingle = "'(?:[^'\\\\]|\\\\.)*'",
- // Matches a regular expression (text enclosed by slashes), but will also match sets of divisions
- // as a regular expression (this is handled by the parsing loop below).
- stringRegexp = '/(?:[^/\\\\]|\\\\.)*/\w*',
- // These characters have special meaning to the parser and must not appear in the middle of a
- // token, except as part of a string.
- specials = ',"\'{}()/:[\\]',
- // Match text (at least two characters) that does not contain any of the above special characters,
- // although some of the special characters are allowed to start it (all but the colon and comma).
- // The text can contain spaces, but leading or trailing spaces are skipped.
- everyThingElse = '[^\\s:,/][^' + specials + ']*[^\\s' + specials + ']',
- // Match any non-space character not matched already. This will match colons and commas, since they're
- // not matched by "everyThingElse", but will also match any other single character that wasn't already
- // matched (for example: in "a: 1, b: 2", each of the non-space characters will be matched by oneNotSpace).
- oneNotSpace = '[^\\s]',
-
- // Create the actual regular expression by or-ing the above strings. The order is important.
- token = RegExp(stringDouble + '|' + stringSingle + '|' + stringRegexp + '|' + everyThingElse + '|' + oneNotSpace, 'g'),
-
- // Match end of previous token to determine whether a slash is a division or regex.
- divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/,
- keywordRegexLookBehind = {'in':1,'return':1,'typeof':1};
-
- function trim(string) {
- return string == null ? '' :
- string.trim ?
- string.trim() :
- string.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g, '');
- }
-
- return function(objectLiteralString) {
- // Trim leading and trailing spaces from the string
- var str = trim(objectLiteralString);
-
- // Trim braces '{' surrounding the whole object literal
- if (str.charCodeAt(0) === 123)
- str = str.slice(1, -1);
-
- // Split into tokens
- var result = [],
- toks = str.match(token),
- key, values = [], depth = 0;
-
- if (toks) {
- // Append a comma so that we don't need a separate code block to deal with the last item
- toks.push(',');
-
- for (var i = 0, tok; tok = toks[i]; ++i) {
- var c = tok.charCodeAt(0);
- // A comma signals the end of a key/value pair if depth is zero
- if (c === 44) { // ","
- if (depth <= 0) {
- if (!key && values.length === 1) {
- key = values.pop();
- }
- result.push([key, values.length ? values.join('') : undefined]);
- key = undefined;
- values = [];
- depth = 0;
- continue;
- }
- // Simply skip the colon that separates the name and value
- } else if (c === 58) { // ":"
- if (!depth && !key && values.length === 1) {
- key = values.pop();
- continue;
- }
- // A set of slashes is initially matched as a regular expression, but could be division
- } else if (c === 47 && i && tok.length > 1) { // "/"
- // Look at the end of the previous token to determine if the slash is actually division
- var match = toks[i-1].match(divisionLookBehind);
- if (match && !keywordRegexLookBehind[match[0]]) {
- // The slash is actually a division punctuator; re-parse the remainder of the string (not including the slash)
- str = str.substr(str.indexOf(tok) + 1);
- toks = str.match(token);
- toks.push(',');
- i = -1;
- // Continue with just the slash
- tok = '/';
- }
- // Increment depth for parentheses, braces, and brackets so that interior commas are ignored
- } else if (c === 40 || c === 123 || c === 91) { // '(', '{', '['
- ++depth;
- } else if (c === 41 || c === 125 || c === 93) { // ')', '}', ']'
- --depth;
- // The key will be the first token; if it's a string, trim the quotes
- } else if (!key && !values.length && (c === 34 || c === 39)) { // '"', "'"
- tok = tok.slice(1, -1);
- }
- values.push(tok);
- }
- }
- return result;
- }
- }()
-
- PxerHtmlParser.getKeyFromStringObjectLiteral =function(s, key) {
- var resolvedpairs = this.parseObjectLiteral(s);
- for (var pair of resolvedpairs) {
- if (pair[0] ===key) return pair[1];
- }
- return false;
- };
-
- pxer.URLGetter = {
- illustInfoById(id) {
- return 'https://www.pixiv.net/ajax/illust/' + id;
- },
- search({ url = document.URL, page = 0 } = {}){
- const defaultQueryString = 's_mode=s_tag_full';
- const queryString = url.split('?')[1];
- const query = new URLSearchParams(queryString);
- const tagsMatch = url.match(pxer.regexp.parseKeyword);
-
- let word = null;
- if (tagsMatch) {
- word = tagsMatch[1];
- } else {
- word = encodeURIComponent(query.get('word'));
- }
-
- return `https://www.pixiv.net/ajax/search/artworks/${word}?${defaultQueryString}&${queryString}&p=${page + 1}`;
- },
- bookmarkNew({ page = 0 }) {
- return "https://www.pixiv.net/ajax/follow_latest/illust?mode=all&lang=zh&p=" + (page + 1)
- },
- };
-
- ;
-
-
- // src/app/PxerPrinter.js
- class PxerPrinter{
- constructor(config){
-
- /**
- * 计算得到的下载地址
- * @type {string[]}
- * */
- this.address =[];
- /**计算得到的任务信息*/
- this.taskInfo ='';
- /**剥离的动图参数*/
- this.ugoiraFrames ={};
-
- /**配置信息*/
- this.config =PxerPrinter.defaultConfig();
- config &&this.setConfig(config);
-
- };
-
- /**
- * 设置配置信息
- * @param {string|Object} key - 要设置的key或是一个将被遍历合并的对象
- * @param {string} [value] - 要设置的value
- * */
- setConfig(key ,value){
- if(arguments.length ===1 && typeof key ==='object'){
- let obj =key;
- for(let objKey in obj){
- if(objKey in this.config) this.config[objKey] =obj[objKey];
- else console.warn(`PxerPrinter.setConfig: skip key "${objKey}"`);
- };
- }else{
- if(!(key in this.config)) throw new Error(`PxerPrinter.setConfig: ${key} is not in config`);
- this.config[key]=value;
- }
- return this;
- };
- };
-
- /**
- * 根据作品列表将下载地址填充到PxerPrinter#address
- * @param {PxerWorks[]} worksList
- * @return {void}
- * */
- PxerPrinter.prototype['fillAddress'] =function(worksList){
- for(let works of worksList){
- let configKey =PxerPrinter.getWorksKey(works);
- if(configKey==='ugoira_zip' &&this.config['ugoira_frames']==='yes'){
- this.ugoiraFrames[works.id] =works.frames
- }
- if(!(configKey in this.config)) throw new Error(`PxerPrinter.fillAddress: ${configKey} in not in config`);
- if(this.config[configKey]==='no') continue;
- this.address.push(...PxerPrinter.countAddress(works,this.config[configKey]));
- }
- };
-
- /**
- * 根据作品将可读的下载信息填充到PxerPrinter#taskInfo
- * @param {PxerWorks[]} worksList
- * @return {void}
- * */
- PxerPrinter.prototype['fillTaskInfo'] =function(worksList){
- var [manga,ugoira,illust,multiple,single,worksNum,address] =new Array(20).fill(0);
- for(let works of worksList){
- let configKey =PxerPrinter.getWorksKey(works);
- if(this.config[configKey]==='no') continue;
-
- worksNum++;
-
- switch(works.type){
- case 'manga':
- manga++;
- break;
- case 'ugoira':
- ugoira++;
- break;
- case 'illust':
- illust++;
- break;
- default:
- console.error(works);
- throw new Error(`PxerPrinter.fillTaskInfo: works.type illegal`);
- break;
- };
-
- if(works.isMultiple){
- multiple++;
- address +=works.multiple;
- }else{
- address++;
- single++;
- }
- }
-
-
- this.taskInfo =eval(pxer.t('phrase.taskInfo'));
- };
- /**
- * 将结果输出
- * 确保下载地址和任务信息已被填充
- * */
- PxerPrinter.prototype['print'] =function(){
-
- /**判断输出动图参数*/
- if((this.config['ugoira_frames'] ==="yes")&&(Object.keys(this.ugoiraFrames).length !==0)){
- let win =window.open(document.URL ,'_blank');
- if(!win){
- alert(pxer.t('phrase.blockOpen'));
- return;
- };
-
- var scriptname="";
- switch (navigator.platform) {
- case "Win32":scriptname="bat批处理"; break;
- default:scriptname="bash"; break;
- }
- let str =[
- '<p>/** 这个页面是自动生成的使用FFmpeg自行合成动图的'+scriptname+'脚本,详细使用教程见<a href="http://pxer.pea3nut.org/md/ugoira_concat" target="_blank" >http://pxer.pea3nut.org/md/ugoira_concat</a> */</p>',
- '<textarea style="height:100%; width:100%" readonly>',
- ...this.generateUgoiraScript(this.ugoiraFrames),
- '</textarea>',
- ];
- win.document.write(str.join('\n'));
- };
-
- {/**输出下载地址*/
- let win = window.open(document.URL ,'_blank');
- if(!win){
- alert(pxer.t('phrase.blockOpen'));
- return;
- };
- let str = [
- `<p>${pxer.t('phrase.pointPage')}</p>`,
- `<p>${this.taskInfo}</p>`,
- '<textarea style="height:100%; width:100%" readonly>' ,
- this.address.join('\n') ,
- '</textarea>' ,
- ];
- win.document.write(str.join('\n'));
- }
-
-
- };
-
- /**
- * 根据作品类型,生成配置信息的key
- * @param {PxerWorks} works
- * @return {string}
- * @see PxerPrinter.defaultConfig
- * */
- PxerPrinter.getWorksKey =function(works){
- var configKey =null;
- if(works.type === 'ugoira'){
- configKey ='ugoira_zip';
- }else{
- configKey =works.type+(
- works.isMultiple
- ?'_multiple'
- :'_single'
- );
- };
- return configKey;
- };
-
- /**
- * 根据动图参数,生成ffmpeg脚本
- * @param 动图参数
- * @return {String[]} 生成的脚本行
- * @see PxerPrinter.prototype['print']
- */
- PxerPrinter.prototype['generateUgoiraScript'] =function(frames) {
- var lines=[];
- var resstring;
- var ffmpeg;
- var isWindows = ['Win32', 'Win64', 'Windows', 'WinCE'].indexOf(navigator.platform)!==-1;
- switch (this.config.ugoira_zip) {
- case "max": resstring = "1920x1080"; break;
- case "600p": resstring = "600x338"; break;
- }
- var slashstr = "";
- if (isWindows) {
- slashstr="^";
- ffmpeg="ffmpeg";
- lines.push("@echo off");
- lines.push("set /p ext=请输入输出文件扩展名(mp4/gif/...):");
- } else {
- slashstr="\\";
- ffmpeg="$ffmpeg";
- lines.push("#!/bin/bash");
- lines.push("");
- lines.push("{ hash ffmpeg 2>/dev/null && ffmpeg=ffmpeg;} || { [ -x ./ffmpeg ] && ffmpeg=./ffmpeg;} || { echo >&2 \"Failed to locate ffmpeg executable. Aborting.\"; exit 1;}");
- lines.push("read -p '请输入输出文件扩展名(mp4/gif/...):' ext");
- }
- for (let key in frames) {
- var foldername = key + "_ugoira" + resstring;
- var confpath = foldername + "/config.txt";
- var height = frames[key].height;
- var width = frames[key].width;
- if (this.config.ugoira_zip==="600p") {
- var scale = Math.max(height, width)/600;
- height = parseInt(height/scale);
- width = parseInt(width/scale);
- }
- lines.push(isWindows?("del "+ foldername + "\\config.txt >nul 2>nul"):("rm "+ foldername + "/config.txt &> /dev/null"));
- for (let frame of frames[key].framedef) {
- lines.push("echo file "+slashstr+"'" + frame['file']+ slashstr +"' >> "+confpath);
- lines.push("echo duration " + frame['delay']/1000 + " >> "+ confpath);
- }
- lines.push("echo file "+ slashstr + "'" +frames[key].framedef[frames[key].framedef.length-1]['file'] + slashstr + "' >> "+confpath);
- lines.push(isWindows? "if %ext%==gif (":"if [ $ext == \"gif\"]; then");
- lines.push(ffmpeg+" -f concat -i "+confpath+" -vf palettegen "+foldername+"/palette.png");
- lines.push(ffmpeg+" -f concat -i "+confpath+" -i "+foldername+"/palette.png -lavfi paletteuse -framerate 30 -vsync -1 -s "+width+"x"+height+" "+foldername+"/remux." + (isWindows? "%ext%":"$ext"));
- lines.push(isWindows? ") else (":"else");
- lines.push(ffmpeg+" -f concat -i "+confpath+" -framerate 30 -vsync -1 -s "+width+"x"+height+" "+foldername+"/remux." + (isWindows? "%ext%":"$ext"));
- lines.push(isWindows? ")":"fi");
- }
- if (isWindows) {
- lines.push("echo 完成 & pause");
- } else {
- lines.push("read -n 1 -p \"完成,按任意键退出\" m && echo");
- }
- return lines;
- }
-
- /**返回默认的配置对象*/
- PxerPrinter.defaultConfig =function(){
- return{
- "manga_single" :"max",//[max|600p|no]
- "manga_multiple" :"max",//[max|1200p|cover_600p|no]
- "illust_single" :"max",//[max|600p|no]
- "illust_multiple" :"max",//[max|1200p|cover_600p|no]
- "ugoira_zip" :"no",//[max|600p|no]
- "ugoira_frames" :"no",//[yes|no]
- };
- };
- /**作品页跳过过滤 */
- PxerPrinter.printAllConfig =function(){
- return{
- "manga_single" :"max",//[max|600p|no]
- "manga_multiple" :"max",//[max|1200p|cover_600p|no]
- "illust_single" :"max",//[max|600p|no]
- "illust_multiple" :"max",//[max|1200p|cover_600p|no]
- "ugoira_zip" :"max",//[max|600p|no]
- "ugoira_frames" :"yes",//[yes|no]
- };
- }
-
-
-
-
-
-
- /**
- * 拼装动图原始地址
- * @param {PxerUgoiraWorks} works - 作品
- * @param {string} [type] - 拼装类型 [max|600p]
- * @return {Array}
- * */
- PxerPrinter.getUgoira =function(works ,type='max'){
- const tpl ={
- "max" :"https://#domain#/img-zip-ugoira/img/#date#/#id#_ugoira1920x1080.zip",
- "600p" :"https://#domain#/img-zip-ugoira/img/#date#/#id#_ugoira600x600.zip",
- };
-
- var address =tpl[type];
- if(!address) throw new Error(`PxerPrint.getUgoira: unknown type "${type}"`);
-
- for(let key in works){
- address =address.replace(`#${key}#` ,works[key]);
- };
-
- return [address];
-
- };
- /**
- * 拼装多副原始地址
- * @param {PxerMultipleWorks} works - 作品
- * @param {string} [type] - 拼装类型 [max|1200p|cover_600p]
- * @return {Array}
- * */
- PxerPrinter.getMultiple =function(works ,type='max'){
- const tpl ={
- "max" :"https://#domain#/img-original/img/#date#/#id#_p#index#.#fileFormat#",
- "1200p" :"https://#domain#/c/1200x1200/img-master/img/#date#/#id#_p#index#_master1200.jpg",
- "cover_600p" :"https://#domain#/c/600x600/img-master/img/#date#/#id#_p0_master1200.jpg",
- };
-
- var address =tpl[type];
- if(!address) throw new Error(`PxerPrint.getMultiple: unknown type "${type}"`);
-
- for(let key in works){
- address =address.replace(`#${key}#` ,works[key]);
- };
-
- //渲染多张
- var addressList =[];
- for(let i=0 ;i<works.multiple ;i++){
- addressList.push(address.replace('#index#' ,i));
- };
-
- return addressList;
-
- };
- /**
- * 拼装单副原始地址
- * @param {PxerWorks} works - 作品
- * @param {string=max} [type] - 拼装类型 [max|600p]
- * @return {Array}
- * */
- PxerPrinter.getWorks =function (works ,type='max'){
- const tpl ={
- "max" :"https://#domain#/img-original/img/#date#/#id#_p0.#fileFormat#",
- "600p" :"https://#domain#/c/600x600/img-master/img/#date#/#id#_p0_master1200.jpg",
- };
-
- var address =tpl[type];
- if(!address) throw new Error(`PxerPrint.getWorks: unknown type "${type}"`);
-
- for(let key in works){
- address =address.replace(`#${key}#` ,works[key]);
- }
-
- return [address];
-
- };
- /**
- * 智能拼装原始地址,对上述的简单封装
- * @param {PxerWorks} [works]
- * @param {...arguments} [argn]
- * @return {Array}
- * */
- PxerPrinter.countAddress =function(works,argn){
- switch(true){
- case works.type === 'ugoira':
- return PxerPrinter.getUgoira(...arguments);
- case works.isMultiple:
- return PxerPrinter.getMultiple(...arguments);
- default:
- return PxerPrinter.getWorks(...arguments);
- };
- };
-
- ;
-
-
- // src/app/PxerThread.js
- class PxerThread extends PxerEvent{
- /**
- * @param id {string} 线程的ID,便于调试
- * @param {Object} config 线程的配置信息
- * */
- constructor({id ,config}={}){
- super(['load','error','fail']);
- /**当前线程的ID*/
- this.id =id;
- /**
- * 当前线程的状态
- * - free
- * - ready
- * - error
- * - fail
- * - running
- * */
- this.state='free';
- /**线程执行的任务*/
- this.task =null;
-
- /**
- *
- * */
- this.config =config ||{
- /**ajax超时重试时间*/
- timeout:8000,
- /**最多重试次数*/
- retry:5,
- };
-
- /**运行时参数*/
- this.runtime ={};
-
- /**使用的xhr对象*/
- this.xhr =null;
-
- };
- };
-
- /**
- * 对抓取到的URL和HTML进行校验
- * @param {string} url
- * @param {string} html
- * @return {string|true} 返回字符串表示失败
- * */
- PxerThread.checkRequest =function(url ,html){
- if(!html) return 'empty';
- if(html.indexOf("_no-item _error") !==-1){
- if(html.indexOf("sprites-r-18g-badge") !==-1) return 'r-18g';
- if(html.indexOf("sprites-r-18-badge") !==-1) return 'r-18';
- };
- if(html.indexOf("sprites-mypixiv-badge") !==-1) return 'mypixiv';
- return true;
- };
-
- /**终止线程的执行*/
- PxerThread.prototype['stop'] =function(){
- this.xhr.abort();
- };
-
- /**
- * 初始化线程
- * @param {PxerRequest} task
- * */
- PxerThread.prototype['init'] =function(task){
- this.task=task;
-
- this.runtime ={};
- this.state ='ready';
-
- // 必要的检查
- if(Number.isNaN(+this.config.timeout)||Number.isNaN(+this.config.retry)){
- throw new Error(`PxerThread#init: ${this.id} config illegal`);
- }
-
- //判断行为,读取要请求的URL
- if(this.task instanceof PxerWorksRequest){
- this.runtime.urlList =this.task.url.slice();
- this.runtime.urlList.push(pxer.URLGetter.illustInfoById(this.task.id));
- }else if(this.task instanceof PxerPageRequest){
- this.runtime.urlList =[this.task.url];
- }else{
- this.dispatch('error' ,`PxerThread#${this.id}.init: unknown task`);
- return false;
- };
-
- };
-
- /**
- * 使用PxerThread#xhr发送请求
- * @param {string} url
- * */
- PxerThread.prototype['sendRequest'] =function(url){
- this.state ='running';
- this.xhr.open('GET' ,url ,true);
- // 单副漫画请求需要更改Referer头信息
- if(
- this.task instanceof PxerWorksRequest
- && this.task.type ==='manga'
- && this.task.isMultiple===false
- && /mode=big/.test(url)
- ){
- var referer =this.task.url.find(item=>item.indexOf('mode=medium')!==-1);
- var origin =document.URL;
- if(!referer){
- this.dispatch('error','PxerThread.sendRequest: cannot find referer');
- };
- history.replaceState({} ,null ,referer);
- this.xhr.send();
- history.replaceState({} ,null ,origin);
- }else{
- this.xhr.send();
- };
- };
- /**运行线程*/
- PxerThread.prototype['run'] =function _self(){
- const URL =this.runtime.urlList.shift();
- if(!URL){
- this.state ='free';
- this.task.completed =true;
- this.dispatch("load" ,this.task);
- return true;
- }
-
- const XHR =new XMLHttpRequest();
-
- this.xhr =XHR;
- XHR.timeout =this.config.timeout;
- XHR.responseType ='text';
-
-
- var retry=0;
- XHR.addEventListener('timeout',()=>{
- if(++retry > this.config.retry){
- this.state ='fail';
- this.dispatch('fail' ,new PxerFailInfo({
- task :this.task,
- url :URL,
- type :'timeout',
- xhr :XHR,
- }));
- return false;
- }else{
- this.sendRequest(URL);
- }
- });
- XHR.addEventListener("load" ,()=>{
- if(XHR.status.toString()[0]!=='2' &&XHR.status!==304){
- this.state ='fail';
- this.dispatch('fail' ,new PxerFailInfo({
- task :this.task,
- url :URL,
- type :'http:'+XHR.status,
- }));
- return false;
- };
- // 判断是否真的请求成功
- var msg =PxerThread.checkRequest(URL ,XHR.responseText);
- if(msg !==true){
- this.state ='fail';
- this.dispatch('fail' ,{
- task :this.task,
- url :URL,
- type :msg,
- });
- return false;
- };
-
- // 执行成功回调
- if(this.task instanceof PxerWorksRequest){
- this.task.html[URL] =XHR.responseText;
- }else{
- this.task.html =XHR.responseText;
- };
- _self.call(this);//递归
- return true;
- });
- XHR.addEventListener("error" ,()=>{
- this.state ='error';
- this.dispatch('error' ,{
- task :this.task,
- url :URL,
- });
- });
-
- this.sendRequest(URL);
-
- };
-
-
- ;
-
-
- // src/app/PxerThreadManager.js
- class PxerThreadManager extends PxerEvent{
- /**
- * @param {number} timeout - 超时时间
- * @param {number} retry - 重试次数
- * @param {number} thread - 线程数
- * */
- constructor({timeout=5000,retry=3,thread=8}={}){
- super(['load' ,'error' ,'fail' ,'warn']);
-
- this.config ={timeout,retry,thread};
-
- /**
- * 任务列表
- * @type {PxerRequest[]}
- * */
- this.taskList =[];
- /**执行的任务列表的指针,指派了下一条要执行的任务*/
- this.pointer =0;
- /**
- * 存放的线程对象
- * @type {PxerThread[]}
- * */
- this.threads =[];
- /**
- * 每当执行任务开始前调用的中间件
- * @type {Function[]} 返回true继续执行,false终止执行
- * */
- this.middleware =[function(task){
- return !!task;
- }];
-
- /**运行时用到的变量*/
- this.runtime ={};
-
- };
- };
-
- /**
- * 停止线程的执行,实际上假装任务都执行完了
- * 停止后还会触发load事件,需要一段时间
- * */
- PxerThreadManager.prototype['stop'] =function(){
- this.pointer =this.taskList.length+1;
- };
-
- /**
- * 初始化线程管理器
- * @param {PxerRequest[]} taskList
- * */
- PxerThreadManager.prototype['init'] =function(taskList){
- if(! this.taskList.every(request=>request instanceof PxerRequest)){
- this.dispatch('error' ,'PxerThreadManager.init: taskList is illegal');
- return false;
- }
-
-
- // 初始任务与结果
- this.taskList=taskList;
- this.runtime ={};
- this.pointer =0;
-
- // 建立线程对象
- this.threads =[];
- for(let i=0 ;i<this.config.thread ;i++){
- this.threads.push(new PxerThread({
- id:i,
- config:{
- timeout :this.config.timeout,
- retry :this.config.retry,
- },
- }));
- };
-
- return this;
- };
- /**
- * 运行线程管理器
- * */
- PxerThreadManager.prototype['run'] =function(){
- if(this.taskList.length ===0){
- this.dispatch('warn','PxerApp#run: taskList.length is 0');
- this.dispatch('load',[]);
- return false;
- };
-
-
-
- for(let thread of this.threads){
-
- thread.on('load' ,data=>{
- next(this,thread);
- });
- thread.on('fail' ,(pfi)=>{
- this.dispatch('fail',pfi);
- next(this,thread);
- });
- thread.on('error' ,this.dispatch.bind(this ,'error'));
-
-
- next(this,thread);
-
- };
-
- function next(ptm ,thread){
- if(ptm.middleware.every(fn=>fn(ptm.taskList[ptm.pointer]))){
- thread.init(ptm.taskList[ptm.pointer++]);
- thread.run();
- }else if(ptm.threads.every(thread=>['free','fail','error'].indexOf(thread.state)!==-1)){
- ptm.dispatch('load' ,ptm.taskList);
- };
- }
-
- };
-
-
-
-
-
-
-
-
-
-
-
- ;
-
-
- // src/app/PxerApp.js
- 'use strict';
-
- /**
- * Pxer主程序对象,与所有模块都是强耦合关系
- * 若你想阅读源码,建议不要从这个类开始
- * @class
- * */
- class PxerApp extends PxerEvent{
- constructor(){
- /**
- * 可能被触发的事件
- * - stop 被终止时
- * - error 出错时
- * - executeWroksTask 执行作品抓取时
- * - finishWorksTask 完成作品抓取时
- * - executePageTask 执行页码抓取时
- * - finishPageTask 完成页码抓取时
- * - finishTask 完成所有任务
- * */
- super([
- 'executeWroksTask','executePageTask',
- 'finishWorksTask','finishPageTask',
- 'error','stop',
- ]);
-
- /**
- * 当前页面类型。可能的值
- * @type {string}
- * */
- this.pageType = getPageType(document);
- /**
- * 页面的作品数量
- * @type {number|null}
- * @see PxerApp.init
- * */
- this.worksNum =null;
-
-
- /**
- * 任务队列
- * @type {PxerRequest[]}
- * */
- this.taskList=[];
- /**
- * 失败的任务信息
- * @type {PxerFailInfo[]}
- * */
- this.failList=[];
- /**
- * 抓取到的结果集
- * @type {PxerWorks[]}
- * */
- this.resultSet=[];
- /**
- * 过滤得到的结果集
- * @type {PxerWorks[]}
- * */
- this.filterResult=[];
-
- /**
- * 任务配置选项,用来指派任务执行过程中的一些逻辑
- * 必须在PxerApp#initPageTask调用前配置
- * */
- this.taskOption={
- /**仅抓取前几副作品*/
- limit :null,
- /**遇到id为x的作品停止后续,不包括本id*/
- stopId :null,
- };
-
- // 其他对象的配置参数
- this.ptmConfig ={//PxerThreadManager
- timeout:5000,
- retry:3,
- thread:8,
- };
- this.ppConfig =this.pageType.startsWith("works_")? PxerPrinter.printAllConfig() : PxerPrinter.defaultConfig();//PxerPrinter
- this.pfConfig =PxerFilter.defaultConfig();//PxerFilter
-
- // 使用的PxerThreadManager实例
- this.ptm =null;
-
- pxer.app = this;
- };
-
- static canCrawl(doc = document) { return ['search', 'search_spa', 'search_tag', 'works_medium', 'rank', 'bookmark_new', 'discovery', 'bookmark_works', 'member_works_new'].includes(pxer.util.getPageType(doc)); }
-
- /**
- * 初始化时的耗时任务
- */
- async init(){
- this.worksNum = await PxerApp.getWorksNum(document);
- }
-
- /**
- * 停止执行当前任务
- * 调用后仍会触发对应的finish*事件
- * */
- stop(){
- this.dispatch('stop');
- this.ptm.stop();
- };
-
- /**初始化批量任务*/
- initPageTask(){
- if(typeof this.pageType !=='string' || typeof this.worksNum!=='number'){
- this.dispatch('error','PxerApp.initPageTask: pageType or number illegal');
- return false;
- };
-
- let onePageWorksNumber = getOnePageWorkCount(this.pageType);
-
- var pageNum =Math.ceil(
- this.taskOption.limit
- ? this.taskOption.limit
- : this.worksNum
- )/onePageWorksNumber;
-
- if (this.pageType==="discovery") {
- var mode;
- switch (true) {
- case document.URL.match(/mode=(r18|safe|all)/)===null: mode = "all"; break;
- default: mode = document.URL.match(/mode=(r18|safe|all)/)[1]; break;
- }
- var recomCount = (this.taskOption.limit? this.taskOption.limit: this.worksNum);
- this.taskList.push(new PxerPageRequest({
- url : `https://www.pixiv.net/rpc/recommender.php?type=illust&sample_illusts=auto&num_recommendations=${recomCount}&page=discovery&mode=${mode}&tt=${pixiv.context.token}`,
- type:this.pageType,
- }));
- } else if (this.pageType==="member_works_new"){
- var uid = getIDfromURL()
- var type = document.URL.match(/type=(\w+)/)?document.URL.match(/type=(\w+)/)[1]:"all"
- this.taskList.push(new PxerPageRequest({
- url: `https://www.pixiv.net/ajax/user/${uid}/profile/all`,
- type: type?`userprofile_${type}`:"userprofile_all",
- }))
- } else if (this.pageType==="bookmark_works"){
- const queryInfo = new URLSearchParams(location.search);
- for (let offset =0;offset<48*pageNum;offset+=48) {
- let id = getIDfromURL() || getIDfromURL("id", document.querySelector("a.user-name").getAttribute("href")) // old bookmark page
- this.taskList.push(new PxerPageRequest({
- type:this.pageType,
- url: `https://www.pixiv.net/ajax/user/${id}/illusts/bookmarks?tag=&offset=${offset}&limit=48&rest=${queryInfo.get('rest') || 'show'}`
- }))
- }
- } else if (['search_spa', 'search_tag'].includes(this.pageType)){
- for (let page = 0; page < pageNum; page++) {
- this.taskList.push(new PxerPageRequest({
- url: pxer.URLGetter.search({ page }),
- type: this.pageType,
- }));
- }
- } else if (this.pageType === 'bookmark_new'){
- for (let page = 0; page < pageNum; page++) {
- this.taskList.push(new PxerPageRequest({
- url: pxer.URLGetter.bookmarkNew({ page }),
- type: this.pageType,
- }));
- }
- } else {
- var separator =document.URL.includes("?")?"&":"?";
- var extraparam = this.pageType==='rank'? "&format=json" : "";
- for(var i=0 ;i<pageNum ;i++){
- this.taskList.push(new PxerPageRequest({
- type:this.pageType,
- url :document.URL+separator+"p="+(i+1)+extraparam,
- }));
- };
- };
- };
- /**抓取页码*/
- executePageTask(){
- if(this.taskList.length ===0){
- this.dispatch('error','PxerApp.executePageTask: taskList is empty');
- return false;
- };
- if(! this.taskList.every(request=>request instanceof PxerPageRequest)){
- this.dispatch('error' ,'PxerApp.executePageTask: taskList is illegal');
- return false;
- };
-
- this.dispatch('executePageTask');
-
- var ptm =this.ptm =new PxerThreadManager(this.ptmConfig);
- ptm.on('error' ,(...argn)=>this.dispatch('error',argn));
- ptm.on('warn' ,(...argn)=>this.dispatch('error',argn));
- ptm.on('load',()=>{
- var parseResult =[];
- for(let result of this.taskList){
- result =PxerHtmlParser.parsePage(result);
- if(!result){
- this.dispatch('error',window['PXER_ERROR']);
- continue;
- }
- parseResult.push(...result);
- };
- this.resultSet =parseResult;
- this.dispatch('finishPageTask' ,parseResult);
- });
- ptm.on('fail',(pfi)=>{
- ptm.pointer--;//失败就不停的尝试
- });
- ptm.init(this.taskList);
- ptm.run();
-
- };
- /**
- * 抓取作品
- * @param {PxerWorksRequest[]} tasks - 要执行的作品请求数组
- * */
- executeWroksTask(tasks=this.taskList){
- if(tasks.length ===0){
- this.dispatch('error','PxerApp.executeWroksTask: taskList is empty');
- return false;
- };
- if(! tasks.every(request=>request instanceof PxerWorksRequest)){
- this.dispatch('error' ,'PxerApp.executeWroksTask: taskList is illegal');
- return false;
- };
-
- // 任务按ID降序排列(#133)
- if (['member_info', 'member_works_new', 'member_works'].includes(this.pageType)) {
- tasks.sort((a,b)=>Number(b.id)-Number(a.id));
- }
-
- this.dispatch('executeWroksTask');
-
- var ptm =this.ptm =new PxerThreadManager(this.ptmConfig);
- ptm.on('error' ,(...argn)=>this.dispatch('error',argn));
- ptm.on('warn' ,(...argn)=>this.dispatch('error',argn));
- // 根据taskOption添加ptm中间件
- if(this.taskOption.limit){
- ptm.middleware.push((task)=>{
- return ptm.pointer<this.taskOption.limit;
- });
- }
- if(this.taskOption.stopId){
- ptm.middleware.push((task)=>{
- if(task.id==this.taskOption.stopId){
- ptm.stop();
- return false;
- }
- return true;
- });
- }
-
- ptm.on('load',()=>{
- this.resultSet =[];
- var tl =this.taskList.slice(//限制结果集条数
- 0,
- this.taskOption.limit
- ? this.taskOption.limit
- : undefined
- );
- for(let pwr of tl){
- if(!pwr.completed)continue;//跳过未完成的任务
- let pw =PxerHtmlParser.parseWorks(pwr);
- if(!pw){
- pwr.completed=false;
- ptm.dispatch('fail',new PxerFailInfo({
- type :'parse',
- task :pwr,
- url :pwr.url[0],
- }));
- this.dispatch('error',window['PXER_ERROR']);
- continue;
- }
- this.resultSet.push(pw);
- }
- this.dispatch('finishWorksTask' ,this.resultSet);
- });
- ptm.on('fail' ,pfi=>{
- this.failList.push(pfi);
- });
- ptm.init(tasks);
- ptm.run();
-
- return true;
-
- };
- /**对失败的作品进行再抓取*/
- executeFailWroks(list=this.failList){
- // 把重试的任务从失败列表中减去
- this.failList =this.failList.filter(pfi=>list.indexOf(pfi)===-1);
- // 执行抓取
- this.executeWroksTask(list.map(pfi=>pfi.task))
- };
- /**抓取页码完成后,初始化,准备抓取作品*/
- switchPage2Works(len=this.resultSet.length){
- this.taskList =this.resultSet.slice(0 ,len);
- this.resultSet =[];
- };
- /**
- * 获取当前抓取到的可读的任务信息
- * @return {string}
- * */
- getWorksInfo(){
- var pp =new PxerPrinter(this.ppConfig);
- var pf =new PxerFilter(this.pfConfig);
- pp.fillTaskInfo(pf.filter(this.resultSet));
- return pp.taskInfo;
- };
- /**
- * 输出抓取到的作品
- * */
- printWorks(){
- var pp =new PxerPrinter(this.ppConfig);
- var pf =new PxerFilter(this.pfConfig);
- var works =pf.filter(this.resultSet);
- pp.fillTaskInfo(works);
- pp.fillAddress(works);
- pp.print();
- };
- };
-
- /**直接抓取本页面的作品*/
- PxerApp.prototype['getThis'] =async function(){
- // 生成任务对象
- var id = pxer.util.getIDfromURL("illust_id") || document.URL.match(pxer.regexp.urlWorkDetail)[1];
- var initdata = await pxer.util.fetchPixivApi(pxer.URLGetter.illustInfoById(id));
-
-
- var type = initdata.illustType;
- var pageCount = initdata.pageCount;
- var pwr =new PxerWorksRequest({
- isMultiple :pageCount>1,
- id :id,
- });//[manga|ugoira|illust]
- switch (type) {
- case 2: pwr.type ='ugoira'; break;
- case 1: pwr.type ='illust'; break;
- case 0: pwr.type ='manga'; break;
- default:throw new Error("Unknown work type. id:" +id);
- }
- pwr.url =PxerHtmlParser.getUrlList(pwr);
- // 添加执行
- this.taskList = [pwr];
- this.one('finishWorksTask',()=>this.printWorks());
- this.executeWroksTask();
- return true;
- };
-
- /**
- * 获取当前页面的总作品数
- * @param {Document=document} dom - 页面的document对象
- * @return {number} - 作品数
- * */
- PxerApp.getWorksNum =function(dom=document){
- return new Promise((resolve, reject)=>{
- const pageType = pxer.util.getPageType(dom);
-
- if (pageType === "rank") {
- let queryurl = dom.URL + "&format=json";
- let xhr = new XMLHttpRequest();
- xhr.open("GET", queryurl);
- xhr.onload = (e) => resolve(JSON.parse(xhr.responseText)['rank_total']);
- xhr.send();
- } else if (pageType === "bookmark_new") {
- // 关注的新作品页数最多100页
- // 因为一般用户关注的用户数作品都足够填满100页,所以从100开始尝试页数
- // 如果没有100页进行一次二分查找
- this.getFollowingBookmarkWorksNum(0, 100).then((res) => resolve(res));
- } else if (pageType === "discovery"){
- resolve(3000);
- } else if (pageType === "bookmark_works"){
- const queryInfo = new URLSearchParams(location.search);
- let id = getIDfromURL("id", dom.URL) || getIDfromURL("id", dom.querySelector("a.user-name").getAttribute("href")) // old bookmark page
- let queryurl = `https://www.pixiv.net/ajax/user/${id}/illusts/bookmarks?tag=&offset=0&limit=48&rest=${queryInfo.get('rest') || 'show'}`;
- let xhr = new XMLHttpRequest();
- xhr.open("GET", queryurl);
- xhr.onload = (e) => {
- resolve(JSON.parse(xhr.responseText).body.total)
- };
- xhr.send();
- } else if (pageType === "member_works_new") {
- let queryurl = `https://www.pixiv.net/ajax/user/${getIDfromURL()}/profile/all`;
- let xhr = new XMLHttpRequest();
- xhr.open("GET", queryurl);
- xhr.onload = (e) => {
- var resp = JSON.parse(xhr.responseText).body;
- var type = dom.URL.match(/type=(manga|illust)/);
- var getKeyCount = function(obj) {
- return Object.keys(obj).length
- }
- if (!type) {
- resolve(getKeyCount(resp.illusts)+getKeyCount(resp.manga))
- } else if (type[1]==="illust") {
- resolve(getKeyCount(resp.illusts))
- } else {
- resolve(getKeyCount(resp.manga))
- }
- };
- xhr.send();
- } else if (['search_spa', 'search_tag'].includes(pageType)) {
- pxer.util.fetchPixivApi(pxer.URLGetter.search()).then(data => {
- resolve(data.illustManga.total);
- });
- } else {
- let elt = dom.querySelector(".count-badge");
- if (!elt) resolve(null);
- resolve(parseInt(elt.innerHTML));
- }
- })
- };
-
- /**
- * 获取关注的新作品页的总作品数
- * @param {number} startPage - 最小页数
- * @param {number} maxPage - 最大页数
- * @return {number} - 作品数
- */
- PxerApp.getFollowingBookmarkWorksNum = async function(startPage, maxPage){
- const requestForCount = async (page = 0) => {
- const data = await fetch(pxer.URLGetter.bookmarkNew({ page }));
- return (await data.json()).body.page.ids.length;
- };
-
- // count how many item per page
- const pageSize = await requestForCount();
-
- // dichotomy search for the last page
- const [lastPage, lastPageSize] = await (async () => {
- const maxPageSize = await requestForCount(maxPage);
- if (maxPageSize > 0) return [maxPage, maxPageSize];
-
- let currentMinPage = startPage;
- let currentMaxPage = maxPage;
- let currentPage = ~~(maxPage / 2);
- while (true) {
- const currentPageSize = await requestForCount(currentPage);
- if (currentPageSize > 0 && currentPageSize < pageSize) {
- return [currentPage, currentPageSize];
- }
- if (currentPage === startPage || currentPage === maxPage) {
- return [currentPage, pageSize];
- }
- if (currentPageSize === 0) {
- currentMaxPage = currentPage;
- currentPage -= Math.ceil((currentPage - currentMinPage - 1) / 2);
- } else if (currentPageSize === pageSize) {
- currentMinPage = currentPage;
- currentPage += Math.ceil((currentMaxPage - currentPage) / 2);
- }
- }
- })();
-
-
- return (lastPage - startPage) * pageSize + lastPageSize;
- }
-
- ;
-
-
- // src/view/analytics.js
- (function () {
- let uid = localStorage.getItem('pxer_uid');
- if (!uid) {
- uid = Number(Math.random().toString().split('.')[1]).toString(36);
- localStorage.setItem('pxer_uid', uid);
- }
-
- const eventSender = new EventSender('https://point.pea3nut.org/events', {
- uid,
- app_name: 'pxer-app',
- get event_page() { return pxer.util.getPageType(); },
- get referer() { return location.href; },
- });
- eventSender.setContent({
- mode: PXER_MODE,
- url: PXER_URL,
- lang: pxer.lang,
- });
- pxer.sendEvent = eventSender.send.bind(eventSender);
- })();
- ;
-
-
- // src/view/AutoSuggestControl.js
- 'use strict';
- /*!
- * Copyright (c) 2013 Profoundis Labs Pvt. Ltd., and individual contributors.
- *
- * All rights reserved.
- */
- /*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of autojs nor the names of its contributors may be used
- * to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * reuses a lot of code from Nicholas C. Zakas textfield autocomplete example found here
- * http://oak.cs.ucla.edu/cs144/projects/javascript/suggest1.html
- *
- */
-
- /*
- * An autosuggest textbox control.
- * @class
- * @scope public
- */
- class AutoSuggestControl {
- constructor(id_or_element, provider) {
- this.provider = provider;
- /**
- * The textbox to capture, specified by element_id.
- * @scope private
- */
- this.textbox /*:HTMLInputElement*/ = typeof id_or_element == "string" ? document.getElementById(id_or_element) : id_or_element;
-
- //initialize the control
- this.init();
- }
- }
-
- /**
- * Autosuggests one or more suggestions for what the user has typed.
- * If no suggestions are passed in, then no autosuggest occurs.
- * @scope private
- * @param aSuggestions An array of suggestion strings.
- */
- AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/) {
-
- //make sure there's at least one suggestion
-
- if (aSuggestions.length > 0) {
- this.typeAhead(aSuggestions[0]);
- }
- };
-
-
- /**
- * Handles keyup events.
- * @scope private
- * @param oEvent The event object for the keyup event.
- */
- AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
-
- var iKeyCode = oEvent.keyCode;
- var evtobj = oEvent;
- window.eventobj = evtobj;
- if ((iKeyCode != 16 && iKeyCode < 32) || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123) || (iKeyCode == 65 && evtobj.ctrlKey) || (iKeyCode == 90 && evtobj.ctrlKey)) {
- //ignore
- if (iKeyCode == 90 && evtobj.ctrlKey) {
- // window.getSelection().deleteFromDocument();
- // TODO: need to find a way to select the rest of the text and delete.
- }
- } else {
- //request suggestions from the suggestion provider
- this.requestSuggestions(this)
- }
- };
-
- /**
- * Initializes the textarea with event handlers for
- * auto suggest functionality.
- * @scope private
- */
- AutoSuggestControl.prototype.init = function () {
-
- //save a reference to this object
- var oThis = this;
- //assign the onkeyup event handler
- var lastDate = new Date();
- oThis.textbox.onkeyup = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
- var newDate = new Date();
- if (newDate.getTime() > lastDate.getTime() + 200) {
- oThis.handleKeyUp(oEvent);
- lastDate = newDate;
- }
- };
-
- };
-
- /**
- * Selects a range of text in the textarea.
- * @scope public
- * @param iStart The start index (base 0) of the selection.
- * @param iLength The number of characters to select.
- */
- AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
- //use text ranges for Internet Explorer
- if (this.textbox.createTextRange) {
- var oRange = this.textbox.createTextRange();
- oRange.moveStart("character", iStart);
- oRange.moveEnd("character", iLength);
- oRange.select();
-
- //use setSelectionRange() for Mozilla
- } else if (this.textbox.setSelectionRange) {
- this.textbox.setSelectionRange(iStart, iLength);
- }
-
- //set focus back to the textbox
- this.textbox.focus();
- };
-
- /**
- * Inserts a suggestion into the textbox, highlighting the
- * suggested part of the text.
- * @scope private
- * @param sSuggestion The suggestion for the textbox.
- */
- AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
-
- //check for support of typeahead functionality
- if (this.textbox.createTextRange || this.textbox.setSelectionRange){
- var lastSpace = this.textbox.value.lastIndexOf(" ");
- var lastQuote = this.textbox.value.lastIndexOf("'");
- var lastHypen = this.textbox.value.lastIndexOf("-");
- var lastDoubleQuote = this.textbox.value.lastIndexOf('"');
- var lastEnter = this.textbox.value.lastIndexOf("\n");
- var lastIndex = Math.max(lastSpace, lastEnter, lastQuote, lastHypen, lastDoubleQuote) + 1;
- var contentStripped = this.textbox.value.substring(0, lastIndex);
- var lastWord = this.textbox.value.substring(lastIndex, this.textbox.value.length);
- this.textbox.value = contentStripped + sSuggestion; //.replace(lastWord,"");
- var start = this.textbox.value.length - sSuggestion.replace(lastWord,"").length;
- var end = this.textbox.value.length;
- this.selectRange(start, end);
- }
- };
-
-
-
- /**
- * Request suggestions for the given autosuggest control.
- */
- AutoSuggestControl.prototype.requestSuggestions = function () {
- this.words = this.provider();
- var aSuggestions = [];
- var sTextbox = this.textbox.value;
- var sTextboxSplit = sTextbox.split(/\s+/);
- var sTextboxLast = sTextboxSplit[sTextboxSplit.length-1];
- var sTextboxValue = sTextboxLast;
- if (sTextboxValue.length > 0){
- //search for matching words
- for (var i=0; i < this.words.length; i++) {
- if (this.words[i].indexOf(sTextboxValue.toLowerCase()) == 0) {
- if (this.words[i].indexOf(sTextboxValue) == 0){
- aSuggestions.push(this.words[i]);
- }
- else if (this.words[i].indexOf(sTextboxValue.charAt(0).toLowerCase() + sTextboxValue.slice(1)) == 0) {
- aSuggestions.push(this.words[i].charAt(0).toUpperCase() + this.words[i].slice(1));
- }
- }
- }
- }
-
- //provide suggestions to the control
- this.autosuggest(aSuggestions);
- };
- ;
-
-
- // src/view/vm.js
- pxer.util.afterLoad(function(){
- const el = document.createElement('div');
- const component = {
- template: pxer.uiTemplate,
- watch:{
- currentUrl(){
- this.state = 'standby';
- this.taskInfo = '';
- this.errmsg = '';
- this.pageType = pxer.util.getPageType();
- pxer.sendEvent('pv');
- },
- isRunning(value){
- if(value&&this.runTimeTimer===null){
- this.runTimeTimer = setInterval(()=>this.runTimeTimestamp++ ,1000);
- }else{
- clearInterval(this.runTimeTimer);
- this.runTimeTimer =null;
- }
- },
- tagFilterInfo: {
- deep: true,
- handler: 'onTagFilterInfoChange'
- },
- },
- data(){return {
- pxer: null,
- showAll:false,
- state:'standby',//[standby|init|ready|page|works|finish|re-ready|stop|error]
- stateMap:{
- standby:'待命',
- init :'初始化',
- ready :'就绪',
- page :'抓取页码中',
- works :'抓取作品中',
- finish:'完成',
- 're-ready':'再抓取就绪',
- stop :'用户手动停止',
- error :'出错',
- },
- pxerVersion: pxer.package.version,
- showPxerFailWindow:false,
- runTimeTimestamp:0,
- runTimeTimer:null,
- checkedFailWorksList:[],
- taskInfo:'',
- tryFailWroksList:[],
- showTaskOption:false,
- taskOption:{
- limit:'',
- stopId:'',
- },
- showLoadBtn:true,
- errmsg:'',
-
- pageType: pxer.util.getPageType(),
- currentUrl: document.URL,
- showAllTagFilter: false,
- showLoadingButton: false,
- /**
- * @property {'NECESSARY' | 'EXCLUDE' | 'WHATEVER'} [tagName] - default by WHATEVER
- * */
- tagFilterInfo: {},
- }},
- computed:{
- isRunning(){
- var runState =['page','works'];
- return runState.indexOf(this.state)!==-1;
- },
- worksNum(){
- return this.pxer.taskOption.limit ||this.pxer.worksNum;
- },
- taskCount(){
- if (!this.pxer) return null;
- var pageWorkCount = getOnePageWorkCount(this.pxer.pageType);
- return Math.ceil(this.worksNum/pageWorkCount)+ +this.worksNum;
- },
- finishCount(){
- if(this.state==='page'){
- return this.pxer.taskList.filter(pr=>pr.completed).length;
- }else if(this.state==='works'){
- return (
- this.pxer.taskList.filter(pr=>pr.completed).length
- +~~(this.worksNum/20)
- +this.pxer.failList.length
- );
- }else{
- return -1;
- };
- },
- forecastTime(){
- if(this.isRunning&&this.finishCount){
- return Math.ceil(
- (this.runTimeTimestamp/this.finishCount)*this.taskCount
- -this.runTimeTimestamp
- );
- }else{
- return -1;
- };
- },
- printConfigUgoira:{
- get(){
- return this.pxer.ppConfig.ugoira_zip+'-'+this.pxer.ppConfig.ugoira_frames;
- },
- set(value){
- var arr =value.split('-');
- this.pxer.ppConfig.ugoira_zip=arr[0];
- this.pxer.ppConfig.ugoira_frames=arr[1];
- }
- },
- no_tag_any:{
- get(){
- return this.pxer.pfConfig.no_tag_any.join(' ');
- },
- set(value){
- this.pxer.pfConfig.no_tag_any =value.split(' ');
- },
- },
- no_tag_every:{
- get(){
- return this.pxer.pfConfig.no_tag_every.join(' ');
- },
- set(value){
- this.pxer.pfConfig.no_tag_every =value.split(' ');
- },
- },
- has_tag_some:{
- get(){
- return this.pxer.pfConfig.has_tag_some.join(' ');
- },
- set(value){
- this.pxer.pfConfig.has_tag_some =value.split(' ');
- },
- },
- has_tag_every:{
- get(){
- return this.pxer.pfConfig.has_tag_every.join(' ');
- },
- set(value){
- this.pxer.pfConfig.has_tag_every =value.split(' ');
- },
- },
- showFailTaskList(){
- if (!this.pxer) return [];
- return this.pxer.failList
- .filter((pfi)=>{
- return this.tryFailWroksList.indexOf(pfi)===-1;
- })
- ;
- },
-
- canCrawlDirectly() {
- this.currentUrl;
- return this.pageType === 'works_medium';
- },
- canCrawl() {
- this.currentUrl;
- return PxerApp.canCrawl();
- },
-
- /**
- * @return {TagInfo}
- *
- * @typedef TagInfo
- * @property {Array.<string>} tags - all tags without repeat
- * @property {Object.<string, number>} count - The times of tag included in works
- * */
- tagInfo() {
- const allTags = this.pxer.resultSet.reduce((result, works) => result.concat(works.tagList), []);
- const countMap = {};
- const noRepeatTags = [];
-
- allTags.forEach(tag => {
- if (!noRepeatTags.includes(tag)) {
- noRepeatTags.push(tag);
- }
- countMap[tag] = countMap[tag] || 0;
- countMap[tag]++;
- });
-
- noRepeatTags.sort((tag1, tag2) => countMap[tag2] - countMap[tag1]);
-
- return {
- tags: noRepeatTags,
- count: countMap,
- }
- },
- needFoldTagFilter() {
- return this.tagInfo.tags.length > 60;
- },
- tagFilterFolded() {
- return this.needFoldTagFilter && !this.showAllTagFilter;
- },
- },
- methods:{
- createPxerApp() {
- this.pxer = new PxerApp();
- this.pxer.on('error',(error)=>{
- this.errmsg = error;
- pxer.sendEvent('error', {
- error,
- PXER_ERROR: typeof PXER_ERROR !== 'undefined' ? PXER_ERROR : null,
- });
- });
- this.pxer.on('finishWorksTask',(result) =>{
- pxer.sendEvent('finish', {
- result_count: result.length,
- ptm_config: this.pxer.ptmConfig,
- task_option: this.pxer.taskOption,
- error_count: this.pxer.failList.length,
- });
- });
- },
- crawlDirectly() {
- this.createPxerApp();
- this.showLoadingButton = true;
- this.pxer.one('finishWorksTask',()=>{
- this.showLoadingButton = false;
- this.state='standby';
- });
- this.pxer.getThis();
- pxer.sendEvent('get-this', {
- page_type:this.pxer.pageType,
- });
- },
-
- load(){
- this.createPxerApp();
- this.state='init';
- this.pxer.init().then(()=>this.state='ready');
- this.pxer.on('finishWorksTask',()=>{
- window.blinkTitle();
- });
- pxer.sendEvent('load', {
- page_type:this.pxer.pageType,
- });
- },
- run(){
- pxer.sendEvent("start", {
- ptm_config:this.pxer.ptmConfig,
- task_option:this.pxer.taskOption,
- vm_state:this.state,
- });
- if(this.state==='ready'){
- this.state='page';
- this.pxer.initPageTask();
- this.pxer.one('finishPageTask',()=>{
- this.state='works';
- this.pxer.switchPage2Works();
- this.pxer.executeWroksTask();
- });
- this.pxer.one('finishWorksTask',()=>{
- this.state='finish';
- });
- this.pxer.executePageTask();
- }else if(this.state==='re-ready'){
- this.state='works';
- this.pxer.one('finishWorksTask',()=>{
- this.state='finish';
- });
- this.pxer.executeFailWroks(this.tryFailWroksList);
- this.tryFailWroksList=[];
- }
- },
- stop(){
- this.state='stop';
- this.pxer.stop();
- pxer.sendEvent("halt", {
- task_count:this.taskCount,
- finish_count:this.finishCount,
- });
- },
- count(){
- this.taskInfo =this.pxer.getWorksInfo()
- },
- printWorks(){
- this.pxer.printWorks();
- var sanitizedpfConfig = {};
- for (let key in this.pxer.pfConfig) {
- sanitizedpfConfig[key] = this.pxer.pfConfig[key].length?this.pxer.pfConfig[key].length:this.pxer.pfConfig[key];
- }
- pxer.sendEvent("print", {
- pp_config:this.pxer.ppConfig,
- pf_config:sanitizedpfConfig,
- task_option:this.pxer.taskOption,
- });
- },
- useTaskOption(){
- this.showTaskOption=false;
- pxer.sendEvent("setTaskOption", {
- task_option: this.taskOption,
- });
- Object.assign(this.pxer.taskOption ,this.taskOption);
- },
- formatFailType(type){
- return{
- 'empty':'获取内容失败',
- 'timeout':'获取超时',
- 'r-18':'限制级作品(R-18)',
- 'r-18g':'怪诞作品(R-18G)',
- 'mypixiv':'仅好P友可见的作品',
- 'parse':'解析错误',
- }[type]||type;
- },
- formatFailSolution(type){
- return{
- 'empty':'点击左侧链接确认内容正确,再试一次~',
- 'timeout':'增加最大等待时间再试一次~',
- 'r-18':'开启账号R-18选项',
- 'r-18g':'开启账号R-18G选项',
- 'mypixiv':'添加画师好友再尝试',
- 'parse':'再试一次,若问题依旧,请<a href="https://github.com/pea3nut/Pxer/issues/5" target="_blank">反馈</a>给花生',
- }[type]||'要不。。。再试一次?';
- },
- tryCheckedPfi(){
- this.tryFailWroksList.push(...this.checkedFailWorksList);
- pxer.sendEvent("reready", {
- checked_works:this.checkedFailWorksList,
- });
- this.checkedFailWorksList=[];
- this.state='re-ready';
- },
- formatTime(s){
- return `${~~(s/60)}:${(s%60>=10)?s%60:'0'+s%60}`
- },
-
- t: pxer.t,
- listenUrlChange(){
- const vm = this;
- const historyPushState = history.pushState;
- const historyReplaceState = history.replaceState;
-
- history.pushState = function (...args) {
- historyPushState.apply(history, args);
- setTimeout(() => vm.currentUrl = document.URL, 0);
- };
- history.replaceState = function (...args) {
- historyReplaceState.apply(history, args);
- setTimeout(() => vm.currentUrl = document.URL, 0);
- };
- },
-
- // about filter by tag
- countTagTheme(tagName) {
- switch (this.tagFilterInfo[tagName]) {
- default:
- case 'WHATEVER': return 'btn-secondary';
- case 'EXCLUDE': return 'btn-danger';
- case 'NECESSARY': return 'btn-success';
- }
- },
- onTagFilterInfoChange(value){
- this.pxer.pfConfig.no_tag_any = [];
- this.pxer.pfConfig.has_tag_some = [];
- for(let [tagName, filterOption] of Object.entries(value)) {
- switch (filterOption) {
- case 'EXCLUDE':
- this.pxer.pfConfig.no_tag_any.push(tagName);
- break;
- case 'NECESSARY':
- this.pxer.pfConfig.has_tag_some.push(tagName);
- break;
- }
- }
- },
- onTagClick(tagName) {
- switch (this.tagFilterInfo[tagName]) {
- default:
- case 'WHATEVER':
- this.$set(this.tagFilterInfo, tagName, 'EXCLUDE');
- break;
- case 'EXCLUDE':
- this.$set(this.tagFilterInfo, tagName, 'NECESSARY');
- break;
- case 'NECESSARY':
- this.$set(this.tagFilterInfo, tagName, 'WHATEVER');
- break;
- }
- },
- },
- mounted(){
- this.listenUrlChange();
- pxer.loaded = true;
- pxer.sendEvent('pv');
- },
- };
-
- // find a element as anchor
- [
- elt => {
- const target = document.querySelector('#root > header');
- if (!target) return false;
-
- target.appendChild(elt);
- return true;
- },
- elt => {
- const target = document.querySelector('._global-header');
- if (!target) return false;
-
- target.appendChild(elt);
- return true;
- },
- elt => {
- const target = document.getElementById('wrapper');
- if (!target) return false;
-
- target.insertBefore(elt, target.firstChild);
-
- return true;
- },
- elt => {
- document.body.insertBefore(elt, document.body.firstChild);
- return true;
- },
- ].some(fn => fn(el));
-
- // mount UI
- pxer.vm = new Vue(component).$mount(el);
- });
- ;
-
-
- }());