;
export type IReactComponent =
| React.StatelessComponent
| React.ComponentClass
| React.ClassicComponentClass
;
interface Secured {
(authority: authority, error?: React.ReactNode): (target: T) => T;
}
export interface AuthorizedRouteProps extends RouteProps {
authority: authority;
}
export class AuthorizedRoute extends React.Component {}
interface check {
(
authority: authority,
target: T,
Exception: S
): T | S;
}
interface AuthorizedProps {
authority: authority;
noMatch?: React.ReactNode;
}
export class Authorized extends React.Component {
static Secured: Secured;
static AuthorizedRoute: typeof AuthorizedRoute;
static check: check;
}
declare function renderAuthorize(currentAuthority: string): typeof Authorized;
export default renderAuthorize;
================================================
FILE: app/assets/components/Authorized/index.js
================================================
import Authorized from './Authorized';
import AuthorizedRoute from './AuthorizedRoute';
import Secured from './Secured';
import check from './CheckPermissions.js';
/* eslint-disable import/no-mutable-exports */
let CURRENT = 'NULL';
Authorized.Secured = Secured;
Authorized.AuthorizedRoute = AuthorizedRoute;
Authorized.check = check;
/**
* use authority or getAuthority
* @param {string|()=>String} currentAuthority
*/
const renderAuthorize = currentAuthority => {
if (currentAuthority) {
if (currentAuthority.constructor.name === 'Function') {
CURRENT = currentAuthority();
}
if (currentAuthority.constructor.name === 'String') {
CURRENT = currentAuthority;
}
} else {
CURRENT = 'NULL';
}
return Authorized;
};
export { CURRENT };
export default renderAuthorize;
================================================
FILE: app/assets/components/Authorized/index.md
================================================
---
title:
en-US: Authorized
zh-CN: Authorized
subtitle: 权限
cols: 1
order: 15
---
权限组件,通过比对现有权限与准入权限,决定相关元素的展示。
## API
### RenderAuthorized
`RenderAuthorized: (currentAuthority: string | () => string) => Authorized`
权限组件默认 export RenderAuthorized 函数,它接收当前权限作为参数,返回一个权限对象,该对象提供以下几种使用方式。
### Authorized
最基础的权限控制。
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| children | 正常渲染的元素,权限判断通过时展示 | ReactNode | - |
| authority | 准入权限/权限判断 | `string | array | Promise | (currentAuthority) => boolean` | - |
| noMatch | 权限异常渲染元素,权限判断不通过时展示 | ReactNode | - |
### Authorized.AuthorizedRoute
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| authority | 准入权限/权限判断 | `string | array | Promise | (currentAuthority) => boolean` | - |
| redirectPath | 权限异常时重定向的页面路由 | string | - |
其余参数与 `Route` 相同。
### Authorized.Secured
注解方式,`@Authorized.Secured(authority, error)`
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| authority | 准入权限/权限判断 | `string | Promise | (currentAuthority) => boolean` | - |
| error | 权限异常时渲染元素 | ReactNode | |
### Authorized.check
函数形式的 Authorized,用于某些不能被 HOC 包裹的组件。 `Authorized.check(authority, target, Exception)`
注意:传入一个 Promise 时,无论正确还是错误返回的都是一个 ReactClass。
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| authority | 准入权限/权限判断 | `string | Promise | (currentAuthority) => boolean` | - |
| target | 权限判断通过时渲染的元素 | ReactNode | - |
| Exception | 权限异常时渲染元素 | ReactNode | - |
================================================
FILE: app/assets/components/AvatarList/AvatarItem.d.ts
================================================
import * as React from 'react';
export interface IAvatarItemProps {
tips: React.ReactNode;
src: string;
style?: React.CSSProperties;
}
export default class AvatarItem extends React.Component {
constructor(props: IAvatarItemProps);
}
================================================
FILE: app/assets/components/AvatarList/demo/simple.md
================================================
---
order: 0
title:
zh-CN: 基础样例
en-US: Basic Usage
---
Simplest of usage.
````jsx
import AvatarList from 'ant-design-pro/lib/AvatarList';
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/AvatarList/index.d.ts
================================================
import * as React from 'react';
import AvatarItem from './AvatarItem';
export interface IAvatarListProps {
size?: 'large' | 'small' | 'mini' | 'default';
style?: React.CSSProperties;
children: React.ReactElement | Array>;
}
export default class AvatarList extends React.Component {
public static Item: typeof AvatarItem;
}
================================================
FILE: app/assets/components/AvatarList/index.en-US.md
================================================
---
title: AvatarList
order: 1
cols: 1
---
A list of user's avatar for project or group member list frequently. If a large or small AvatarList is desired, set the `size` property to either `large` or `small` and `mini` respectively. Omit the `size` property for a AvatarList with the default size.
## API
### AvatarList
| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| size | size of list | `large`、`small` 、`mini`, `default` | `default` |
### AvatarList.Item
| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| tips | title tips for avatar item | ReactNode\/string | - |
| src | the address of the image for an image avatar | string | - |
================================================
FILE: app/assets/components/AvatarList/index.js
================================================
import React from 'react';
import { Tooltip, Avatar } from 'antd';
import classNames from 'classnames';
import styles from './index.less';
const AvatarList = ({ children, size, ...other }) => {
const childrenWithProps = React.Children.map(children, child =>
React.cloneElement(child, {
size,
})
);
return (
);
};
const Item = ({ src, size, tips, onClick = () => {} }) => {
const cls = classNames(styles.avatarItem, {
[styles.avatarItemLarge]: size === 'large',
[styles.avatarItemSmall]: size === 'small',
[styles.avatarItemMini]: size === 'mini',
});
return (
{tips ? (
) : (
)}
);
};
AvatarList.Item = Item;
export default AvatarList;
================================================
FILE: app/assets/components/AvatarList/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.avatarList {
display: inline-block;
ul {
display: inline-block;
margin-left: 8px;
font-size: 0;
}
}
.avatarItem {
display: inline-block;
font-size: @font-size-base;
margin-left: -8px;
width: @avatar-size-base;
height: @avatar-size-base;
:global {
.ant-avatar {
border: 1px solid #fff;
}
}
}
.avatarItemLarge {
width: @avatar-size-lg;
height: @avatar-size-lg;
}
.avatarItemSmall {
width: @avatar-size-sm;
height: @avatar-size-sm;
}
.avatarItemMini {
width: 20px;
height: 20px;
:global {
.ant-avatar {
width: 20px;
height: 20px;
line-height: 20px;
}
}
}
================================================
FILE: app/assets/components/AvatarList/index.zh-CN.md
================================================
---
title: AvatarList
subtitle: 用户头像列表
order: 1
cols: 1
---
一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。
## API
### AvatarList
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| size | 头像大小 | `large`、`small` 、`mini`, `default` | `default` |
### AvatarList.Item
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| tips | 头像展示文案 | ReactNode\/string | - |
| src | 头像图片连接 | string | - |
================================================
FILE: app/assets/components/Charts/Bar/index.d.ts
================================================
import * as React from 'react';
export interface IBarProps {
title: React.ReactNode;
color?: string;
padding?: [number, number, number, number];
height: number;
data: Array<{
x: string;
y: number;
}>;
autoLabel?: boolean;
style?: React.CSSProperties;
}
export default class Bar extends React.Component {}
================================================
FILE: app/assets/components/Charts/Bar/index.js
================================================
import React, { Component } from 'react';
import { Chart, Axis, Tooltip, Geom } from 'bizcharts';
import Debounce from 'lodash-decorators/debounce';
import Bind from 'lodash-decorators/bind';
import autoHeight from '../autoHeight';
import styles from '../index.less';
@autoHeight()
class Bar extends Component {
state = {
autoHideXLabels: false,
};
componentDidMount() {
window.addEventListener('resize', this.resize);
}
componentWillUnmount() {
window.removeEventListener('resize', this.resize);
}
@Bind()
@Debounce(400)
resize() {
if (!this.node) {
return;
}
const canvasWidth = this.node.parentNode.clientWidth;
const { data = [], autoLabel = true } = this.props;
if (!autoLabel) {
return;
}
const minWidth = data.length * 30;
const { autoHideXLabels } = this.state;
if (canvasWidth <= minWidth) {
if (!autoHideXLabels) {
this.setState({
autoHideXLabels: true,
});
}
} else if (autoHideXLabels) {
this.setState({
autoHideXLabels: false,
});
}
}
handleRoot = n => {
this.root = n;
};
handleRef = n => {
this.node = n;
};
render() {
const {
height,
title,
forceFit = true,
data,
color = 'rgba(24, 144, 255, 0.85)',
padding,
} = this.props;
const { autoHideXLabels } = this.state;
const scale = {
x: {
type: 'cat',
},
y: {
min: 0,
},
};
const tooltip = [
'x*y',
(x, y) => ({
name: x,
value: y,
}),
];
return (
);
}
}
export default Bar;
================================================
FILE: app/assets/components/Charts/ChartCard/index.d.ts
================================================
import * as React from 'react';
export interface IChartCardProps {
title: React.ReactNode;
action?: React.ReactNode;
total?: React.ReactNode | number | (() => React.ReactNode | number);
footer?: React.ReactNode;
contentHeight?: number;
avatar?: React.ReactNode;
style?: React.CSSProperties;
}
export default class ChartCard extends React.Component {}
================================================
FILE: app/assets/components/Charts/ChartCard/index.js
================================================
import React from 'react';
import { Card, Spin } from 'antd';
import classNames from 'classnames';
import styles from './index.less';
const renderTotal = total => {
let totalDom;
switch (typeof total) {
case 'undefined':
totalDom = null;
break;
case 'function':
totalDom = {total()}
;
break;
default:
totalDom = {total}
;
}
return totalDom;
};
const ChartCard = ({
loading = false,
contentHeight,
title,
avatar,
action,
total,
footer,
children,
...rest
}) => {
const content = (
{avatar}
{title}
{action}
{renderTotal(total)}
{children && (
)}
{footer && (
{footer}
)}
);
return (
{
{content}
}
);
};
export default ChartCard;
================================================
FILE: app/assets/components/Charts/ChartCard/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.chartCard {
position: relative;
.chartTop {
position: relative;
overflow: hidden;
width: 100%;
}
.chartTopMargin {
margin-bottom: 12px;
}
.chartTopHasMargin {
margin-bottom: 20px;
}
.metaWrap {
float: left;
}
.avatar {
position: relative;
top: 4px;
float: left;
margin-right: 20px;
img {
border-radius: 100%;
}
}
.meta {
color: @text-color-secondary;
font-size: @font-size-base;
line-height: 22px;
height: 22px;
}
.action {
cursor: pointer;
position: absolute;
top: 0;
right: 0;
}
.total {
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
white-space: nowrap;
color: @heading-color;
margin-top: 4px;
margin-bottom: 0;
font-size: 30px;
line-height: 38px;
height: 38px;
}
.content {
margin-bottom: 12px;
position: relative;
width: 100%;
}
.contentFixed {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
}
.footer {
border-top: 1px solid @border-color-split;
padding-top: 9px;
margin-top: 8px;
& > * {
position: relative;
}
}
.footerMargin {
margin-top: 20px;
}
}
.spin :global(.ant-spin-container) {
overflow: visible;
}
================================================
FILE: app/assets/components/Charts/Field/index.d.ts
================================================
import * as React from 'react';
export interface IFieldProps {
label: React.ReactNode;
value: React.ReactNode;
style?: React.CSSProperties;
}
export default class Field extends React.Component {}
================================================
FILE: app/assets/components/Charts/Field/index.js
================================================
import React from 'react';
import styles from './index.less';
const Field = ({ label, value, ...rest }) => (
{label}
{value}
);
export default Field;
================================================
FILE: app/assets/components/Charts/Field/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.field {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin: 0;
span {
font-size: @font-size-base;
line-height: 22px;
}
span:last-child {
margin-left: 8px;
color: @heading-color;
}
}
================================================
FILE: app/assets/components/Charts/Gauge/index.d.ts
================================================
import * as React from 'react';
export interface IGaugeProps {
title: React.ReactNode;
color?: string;
height: number;
bgColor?: number;
percent: number;
style?: React.CSSProperties;
}
export default class Gauge extends React.Component {}
================================================
FILE: app/assets/components/Charts/Gauge/index.js
================================================
import React from 'react';
import { Chart, Geom, Axis, Coord, Guide, Shape } from 'bizcharts';
import autoHeight from '../autoHeight';
const { Arc, Html, Line } = Guide;
const defaultFormatter = val => {
switch (val) {
case '2':
return '差';
case '4':
return '中';
case '6':
return '良';
case '8':
return '优';
default:
return '';
}
};
Shape.registerShape('point', 'pointer', {
drawShape(cfg, group) {
let point = cfg.points[0];
point = this.parsePoint(point);
const center = this.parsePoint({
x: 0,
y: 0,
});
group.addShape('line', {
attrs: {
x1: center.x,
y1: center.y,
x2: point.x,
y2: point.y,
stroke: cfg.color,
lineWidth: 2,
lineCap: 'round',
},
});
return group.addShape('circle', {
attrs: {
x: center.x,
y: center.y,
r: 6,
stroke: cfg.color,
lineWidth: 3,
fill: '#fff',
},
});
},
});
@autoHeight()
export default class Gauge extends React.Component {
render() {
const {
title,
height,
percent,
forceFit = true,
formatter = defaultFormatter,
color = '#2F9CFF',
bgColor = '#F0F2F5',
} = this.props;
const cols = {
value: {
type: 'linear',
min: 0,
max: 10,
tickCount: 6,
nice: true,
},
};
const data = [{ value: percent / 10 }];
return (
{
return `
${title}
${data[0].value * 10}%
`;
}}
/>
);
}
}
================================================
FILE: app/assets/components/Charts/MiniArea/index.d.ts
================================================
import * as React from 'react';
// g2已经更新到3.0
// 不带的写了
export interface IAxis {
title: any;
line: any;
gridAlign: any;
labels: any;
tickLine: any;
grid: any;
}
export interface IMiniAreaProps {
color?: string;
height: number;
borderColor?: string;
line?: boolean;
animate?: boolean;
xAxis?: IAxis;
yAxis?: IAxis;
data: Array<{
x: number;
y: number;
}>;
}
export default class MiniArea extends React.Component {}
================================================
FILE: app/assets/components/Charts/MiniArea/index.js
================================================
import React from 'react';
import { Chart, Axis, Tooltip, Geom } from 'bizcharts';
import autoHeight from '../autoHeight';
import styles from '../index.less';
@autoHeight()
export default class MiniArea extends React.Component {
render() {
const {
height,
data = [],
forceFit = true,
color = 'rgba(24, 144, 255, 0.2)',
borderColor = '#1089ff',
scale = {},
borderWidth = 2,
line,
xAxis,
yAxis,
animate = true,
} = this.props;
const padding = [36, 5, 30, 5];
const scaleProps = {
x: {
type: 'cat',
range: [0, 1],
...scale.x,
},
y: {
min: 0,
...scale.y,
},
};
const tooltip = [
'x*y',
(x, y) => ({
name: x,
value: y,
}),
];
const chartHeight = height + 54;
return (
{height > 0 && (
{line ? (
) : (
)}
)}
);
}
}
================================================
FILE: app/assets/components/Charts/MiniBar/index.d.ts
================================================
import * as React from 'react';
export interface IMiniBarProps {
color?: string;
height: number;
data: Array<{
x: number | string;
y: number;
}>;
style?: React.CSSProperties;
}
export default class MiniBar extends React.Component {}
================================================
FILE: app/assets/components/Charts/MiniBar/index.js
================================================
import React from 'react';
import { Chart, Tooltip, Geom } from 'bizcharts';
import autoHeight from '../autoHeight';
import styles from '../index.less';
@autoHeight()
export default class MiniBar extends React.Component {
render() {
const { height, forceFit = true, color = '#1890FF', data = [] } = this.props;
const scale = {
x: {
type: 'cat',
},
y: {
min: 0,
},
};
const padding = [36, 5, 30, 5];
const tooltip = [
'x*y',
(x, y) => ({
name: x,
value: y,
}),
];
// for tooltip not to be hide
const chartHeight = height + 54;
return (
);
}
}
================================================
FILE: app/assets/components/Charts/MiniProgress/index.d.ts
================================================
import * as React from 'react';
export interface IMiniProgressProps {
target: number;
color?: string;
strokeWidth?: number;
percent?: number;
style?: React.CSSProperties;
}
export default class MiniProgress extends React.Component {}
================================================
FILE: app/assets/components/Charts/MiniProgress/index.js
================================================
import React from 'react';
import { Tooltip } from 'antd';
import styles from './index.less';
const MiniProgress = ({ target, color = 'rgb(19, 194, 194)', strokeWidth, percent }) => (
);
export default MiniProgress;
================================================
FILE: app/assets/components/Charts/MiniProgress/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.miniProgress {
padding: 5px 0;
position: relative;
width: 100%;
.progressWrap {
background-color: @background-color-base;
position: relative;
}
.progress {
transition: all 0.4s cubic-bezier(0.08, 0.82, 0.17, 1) 0s;
border-radius: 1px 0 0 1px;
background-color: @primary-color;
width: 0;
height: 100%;
}
.target {
position: absolute;
top: 0;
bottom: 0;
span {
border-radius: 100px;
position: absolute;
top: 0;
left: 0;
height: 4px;
width: 2px;
}
span:last-child {
top: auto;
bottom: 0;
}
}
}
================================================
FILE: app/assets/components/Charts/Pie/index.d.ts
================================================
import * as React from 'react';
export interface IPieProps {
animate?: boolean;
color?: string;
height: number;
hasLegend?: boolean;
padding?: [number, number, number, number];
percent?: number;
data?: Array<{
x: string | string;
y: number;
}>;
total?: React.ReactNode | number | (() => React.ReactNode | number);
title?: React.ReactNode;
tooltip?: boolean;
valueFormat?: (value: string) => string | React.ReactNode;
subTitle?: React.ReactNode;
}
export default class Pie extends React.Component {}
================================================
FILE: app/assets/components/Charts/Pie/index.js
================================================
import React, { Component } from 'react';
import { Chart, Tooltip, Geom, Coord } from 'bizcharts';
import { DataView } from '@antv/data-set';
import { Divider } from 'antd';
import classNames from 'classnames';
import ReactFitText from 'react-fittext';
import Debounce from 'lodash-decorators/debounce';
import Bind from 'lodash-decorators/bind';
import autoHeight from '../autoHeight';
import styles from './index.less';
/* eslint react/no-danger:0 */
@autoHeight()
export default class Pie extends Component {
state = {
legendData: [],
legendBlock: false,
};
componentDidMount() {
this.getLegendData();
this.resize();
window.addEventListener('resize', this.resize);
}
componentWillReceiveProps(nextProps) {
if (this.props.data !== nextProps.data) {
// because of charts data create when rendered
// so there is a trick for get rendered time
this.setState(
{
legendData: [...this.state.legendData],
},
() => {
this.getLegendData();
}
);
}
}
componentWillUnmount() {
window.removeEventListener('resize', this.resize);
this.resize.cancel();
}
getG2Instance = chart => {
this.chart = chart;
};
// for custom lengend view
getLegendData = () => {
if (!this.chart) return;
const geom = this.chart.getAllGeoms()[0]; // 获取所有的图形
const items = geom.get('dataArray') || []; // 获取图形对应的
const legendData = items.map(item => {
/* eslint no-underscore-dangle:0 */
const origin = item[0]._origin;
origin.color = item[0].color;
origin.checked = true;
return origin;
});
this.setState({
legendData,
});
};
// for window resize auto responsive legend
@Bind()
@Debounce(300)
resize() {
const { hasLegend } = this.props;
if (!hasLegend || !this.root) {
window.removeEventListener('resize', this.resize);
return;
}
if (this.root.parentNode.clientWidth <= 380) {
if (!this.state.legendBlock) {
this.setState({
legendBlock: true,
});
}
} else if (this.state.legendBlock) {
this.setState({
legendBlock: false,
});
}
}
handleRoot = n => {
this.root = n;
};
handleLegendClick = (item, i) => {
const newItem = item;
newItem.checked = !newItem.checked;
const { legendData } = this.state;
legendData[i] = newItem;
const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x);
if (this.chart) {
this.chart.filter('x', val => filteredLegendData.indexOf(val) > -1);
}
this.setState({
legendData,
});
};
render() {
const {
valueFormat,
subTitle,
total,
hasLegend = false,
className,
style,
height,
forceFit = true,
percent = 0,
color,
inner = 0.75,
animate = true,
colors,
lineWidth = 1,
} = this.props;
const { legendData, legendBlock } = this.state;
const pieClassName = classNames(styles.pie, className, {
[styles.hasLegend]: !!hasLegend,
[styles.legendBlock]: legendBlock,
});
const defaultColors = colors;
let data = this.props.data || [];
let selected = this.props.selected || true;
let tooltip = this.props.tooltip || true;
let formatColor;
const scale = {
x: {
type: 'cat',
range: [0, 1],
},
y: {
min: 0,
},
};
if (percent) {
selected = false;
tooltip = false;
formatColor = value => {
if (value === '占比') {
return color || 'rgba(24, 144, 255, 0.85)';
} else {
return '#F0F2F5';
}
};
data = [
{
x: '占比',
y: parseFloat(percent),
},
{
x: '反比',
y: 100 - parseFloat(percent),
},
];
}
const tooltipFormat = [
'x*percent',
(x, p) => ({
name: x,
value: `${(p * 100).toFixed(2)}%`,
}),
];
const padding = [12, 0, 12, 0];
const dv = new DataView();
dv.source(data).transform({
type: 'percent',
field: 'y',
dimension: 'x',
as: 'percent',
});
return (
{!!tooltip && }
{(subTitle || total) && (
{subTitle &&
{subTitle} }
{/* eslint-disable-next-line */}
{total && (
{typeof total === 'function' ? total() : total}
)}
)}
{hasLegend && (
{legendData.map((item, i) => (
this.handleLegendClick(item, i)}>
{item.x}
{`${(isNaN(item.percent) ? 0 : item.percent * 100).toFixed(2)}%`}
{valueFormat ? valueFormat(item.y) : item.y}
))}
)}
);
}
}
================================================
FILE: app/assets/components/Charts/Pie/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.pie {
position: relative;
.chart {
position: relative;
}
&.hasLegend .chart {
width: ~'calc(100% - 240px)';
}
.legend {
position: absolute;
right: 0;
min-width: 200px;
top: 50%;
transform: translateY(-50%);
margin: 0 20px;
list-style: none;
padding: 0;
li {
cursor: pointer;
margin-bottom: 16px;
height: 22px;
line-height: 22px;
&:last-child {
margin-bottom: 0;
}
}
}
.dot {
border-radius: 8px;
display: inline-block;
margin-right: 8px;
position: relative;
top: -1px;
height: 8px;
width: 8px;
}
.line {
background-color: @border-color-split;
display: inline-block;
margin-right: 8px;
width: 1px;
height: 16px;
}
.legendTitle {
color: @text-color;
}
.percent {
color: @text-color-secondary;
}
.value {
position: absolute;
right: 0;
}
.title {
margin-bottom: 8px;
}
.total {
position: absolute;
left: 50%;
top: 50%;
text-align: center;
height: 62px;
transform: translate(-50%, -50%);
& > h4 {
color: @text-color-secondary;
font-size: 14px;
line-height: 22px;
height: 22px;
margin-bottom: 8px;
font-weight: normal;
}
& > p {
color: @heading-color;
display: block;
font-size: 1.2em;
height: 32px;
line-height: 32px;
white-space: nowrap;
}
}
}
.legendBlock {
&.hasLegend .chart {
width: 100%;
margin: 0 0 32px 0;
}
.legend {
position: relative;
transform: none;
}
}
================================================
FILE: app/assets/components/Charts/Radar/index.d.ts
================================================
import * as React from 'react';
export interface IRadarProps {
title?: React.ReactNode;
height: number;
padding?: [number, number, number, number];
hasLegend?: boolean;
data: Array<{
name: string;
label: string;
value: string;
}>;
style?: React.CSSProperties;
}
export default class Radar extends React.Component {}
================================================
FILE: app/assets/components/Charts/Radar/index.js
================================================
import React, { Component } from 'react';
import { Chart, Tooltip, Geom, Coord, Axis } from 'bizcharts';
import { Row, Col } from 'antd';
import autoHeight from '../autoHeight';
import styles from './index.less';
/* eslint react/no-danger:0 */
@autoHeight()
export default class Radar extends Component {
state = {
legendData: [],
};
componentDidMount() {
this.getLengendData();
}
componentWillReceiveProps(nextProps) {
if (this.props.data !== nextProps.data) {
this.getLengendData();
}
}
getG2Instance = chart => {
this.chart = chart;
};
// for custom lengend view
getLengendData = () => {
if (!this.chart) return;
const geom = this.chart.getAllGeoms()[0]; // 获取所有的图形
const items = geom.get('dataArray') || []; // 获取图形对应的
const legendData = items.map(item => {
// eslint-disable-next-line
const origins = item.map(t => t._origin);
const result = {
name: origins[0].name,
color: item[0].color,
checked: true,
value: origins.reduce((p, n) => p + n.value, 0),
};
return result;
});
this.setState({
legendData,
});
};
handleRef = n => {
this.node = n;
};
handleLegendClick = (item, i) => {
const newItem = item;
newItem.checked = !newItem.checked;
const { legendData } = this.state;
legendData[i] = newItem;
const filteredLegendData = legendData.filter(l => l.checked).map(l => l.name);
if (this.chart) {
this.chart.filter('name', val => filteredLegendData.indexOf(val) > -1);
this.chart.repaint();
}
this.setState({
legendData,
});
};
render() {
const defaultColors = [
'#1890FF',
'#FACC14',
'#2FC25B',
'#8543E0',
'#F04864',
'#13C2C2',
'#fa8c16',
'#a0d911',
];
const {
data = [],
height = 0,
title,
hasLegend = false,
forceFit = true,
tickCount = 4,
padding = [35, 30, 16, 30],
animate = true,
colors = defaultColors,
} = this.props;
const { legendData } = this.state;
const scale = {
value: {
min: 0,
tickCount,
},
};
const chartHeight = height - (hasLegend ? 80 : 22);
return (
{title &&
{title} }
{hasLegend && (
{legendData.map((item, i) => (
this.handleLegendClick(item, i)}
>
))}
)}
);
}
}
================================================
FILE: app/assets/components/Charts/Radar/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.radar {
.legend {
margin-top: 16px;
.legendItem {
position: relative;
text-align: center;
cursor: pointer;
color: @text-color-secondary;
line-height: 22px;
p {
margin: 0;
}
h6 {
color: @heading-color;
padding-left: 16px;
font-size: 24px;
line-height: 32px;
margin-top: 4px;
margin-bottom: 0;
}
&:after {
background-color: @border-color-split;
position: absolute;
top: 8px;
right: 0;
height: 40px;
width: 1px;
content: '';
}
}
> :last-child .legendItem:after {
display: none;
}
.dot {
border-radius: 6px;
display: inline-block;
margin-right: 6px;
position: relative;
top: -1px;
height: 6px;
width: 6px;
}
}
}
================================================
FILE: app/assets/components/Charts/TagCloud/index.d.ts
================================================
import * as React from 'react';
export interface ITagCloudProps {
data: Array<{
name: string;
value: number;
}>;
height: number;
style?: React.CSSProperties;
}
export default class TagCloud extends React.Component {}
================================================
FILE: app/assets/components/Charts/TagCloud/index.js
================================================
import React, { Component } from 'react';
import { Chart, Geom, Coord, Shape } from 'bizcharts';
import DataSet from '@antv/data-set';
import Debounce from 'lodash-decorators/debounce';
import Bind from 'lodash-decorators/bind';
import classNames from 'classnames';
import autoHeight from '../autoHeight';
import styles from './index.less';
/* eslint no-underscore-dangle: 0 */
/* eslint no-param-reassign: 0 */
const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png';
@autoHeight()
class TagCloud extends Component {
state = {
dv: null,
};
componentDidMount() {
this.initTagCloud();
this.renderChart();
window.addEventListener('resize', this.resize);
}
componentWillReceiveProps(nextProps) {
if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data)) {
this.renderChart(nextProps);
}
}
componentWillUnmount() {
this.isUnmount = true;
window.removeEventListener('resize', this.resize);
}
resize = () => {
this.renderChart();
};
saveRootRef = node => {
this.root = node;
};
initTagCloud = () => {
function getTextAttrs(cfg) {
return Object.assign(
{},
{
fillOpacity: cfg.opacity,
fontSize: cfg.origin._origin.size,
rotate: cfg.origin._origin.rotate,
text: cfg.origin._origin.text,
textAlign: 'center',
fontFamily: cfg.origin._origin.font,
fill: cfg.color,
textBaseline: 'Alphabetic',
},
cfg.style
);
}
// 给point注册一个词云的shape
Shape.registerShape('point', 'cloud', {
drawShape(cfg, container) {
const attrs = getTextAttrs(cfg);
return container.addShape('text', {
attrs: Object.assign(attrs, {
x: cfg.x,
y: cfg.y,
}),
});
},
});
};
@Bind()
@Debounce(500)
renderChart(nextProps) {
// const colors = ['#1890FF', '#41D9C7', '#2FC25B', '#FACC14', '#9AE65C'];
const { data, height } = nextProps || this.props;
if (data.length < 1 || !this.root) {
return;
}
const h = height * 4;
const w = this.root.offsetWidth * 4;
const onload = () => {
const dv = new DataSet.View().source(data);
const range = dv.range('value');
const [min, max] = range;
dv.transform({
type: 'tag-cloud',
fields: ['name', 'value'],
imageMask: this.imageMask,
font: 'Verdana',
size: [w, h], // 宽高设置最好根据 imageMask 做调整
padding: 5,
timeInterval: 5000, // max execute time
rotate() {
return 0;
},
fontSize(d) {
// eslint-disable-next-line
return Math.pow((d.value - min) / (max - min), 2) * (70 - 20) + 20;
},
});
if (this.isUnmount) {
return;
}
this.setState({
dv,
w,
h,
});
};
if (!this.imageMask) {
this.imageMask = new Image();
this.imageMask.crossOrigin = '';
this.imageMask.src = imgUrl;
this.imageMask.onload = onload;
} else {
onload();
}
}
render() {
const { className, height } = this.props;
const { dv, w, h } = this.state;
return (
{dv && (
)}
);
}
}
export default TagCloud;
================================================
FILE: app/assets/components/Charts/TagCloud/index.less
================================================
.tagCloud {
overflow: hidden;
canvas {
transform: scale(0.25);
transform-origin: 0 0;
}
}
================================================
FILE: app/assets/components/Charts/TimelineChart/index.d.ts
================================================
import * as React from 'react';
export interface ITimelineChartProps {
data: Array<{
x: string;
y1: string;
y2: string;
}>;
titleMap: { y1: string; y2: string };
padding?: [number, number, number, number];
height?: number;
style?: React.CSSProperties;
}
export default class TimelineChart extends React.Component {}
================================================
FILE: app/assets/components/Charts/TimelineChart/index.js
================================================
import React from 'react';
import { Chart, Tooltip, Geom, Legend, Axis } from 'bizcharts';
import DataSet from '@antv/data-set';
import Slider from 'bizcharts-plugin-slider';
import autoHeight from '../autoHeight';
import styles from './index.less';
@autoHeight()
export default class TimelineChart extends React.Component {
render() {
const {
title,
height = 400,
padding = [60, 20, 40, 40],
titleMap = {
y1: 'y1',
y2: 'y2',
},
borderWidth = 2,
data = [
{
x: 0,
y1: 0,
y2: 0,
},
],
} = this.props;
data.sort((a, b) => a.x - b.x);
let max;
if (data[0] && data[0].y1 && data[0].y2) {
max = Math.max(
[...data].sort((a, b) => b.y1 - a.y1)[0].y1,
[...data].sort((a, b) => b.y2 - a.y2)[0].y2
);
}
const ds = new DataSet({
state: {
start: data[0].x,
end: data[data.length - 1].x,
},
});
const dv = ds.createView();
dv
.source(data)
.transform({
type: 'filter',
callback: obj => {
const date = obj.x;
return date <= ds.state.end && date >= ds.state.start;
},
})
.transform({
type: 'map',
callback(row) {
const newRow = { ...row };
newRow[titleMap.y1] = row.y1;
newRow[titleMap.y2] = row.y2;
return newRow;
},
})
.transform({
type: 'fold',
fields: [titleMap.y1, titleMap.y2], // 展开字段集
key: 'key', // key字段
value: 'value', // value字段
});
const timeScale = {
type: 'time',
tickInterval: 60 * 60 * 1000,
mask: 'HH:mm',
range: [0, 1],
};
const cols = {
x: timeScale,
value: {
max,
min: 0,
},
};
const SliderGen = () => (
{
ds.setState('start', startValue);
ds.setState('end', endValue);
}}
/>
);
return (
);
}
}
================================================
FILE: app/assets/components/Charts/TimelineChart/index.less
================================================
.timelineChart {
background: #fff;
}
================================================
FILE: app/assets/components/Charts/WaterWave/index.d.ts
================================================
import * as React from 'react';
export interface IWaterWaveProps {
title: React.ReactNode;
color?: string;
height: number;
percent: number;
style?: React.CSSProperties;
}
export default class WaterWave extends React.Component {}
================================================
FILE: app/assets/components/Charts/WaterWave/index.js
================================================
import React, { PureComponent } from 'react';
import autoHeight from '../autoHeight';
import styles from './index.less';
/* eslint no-return-assign: 0 */
/* eslint no-mixed-operators: 0 */
// riddle: https://riddle.alibaba-inc.com/riddles/2d9a4b90
@autoHeight()
export default class WaterWave extends PureComponent {
state = {
radio: 1,
};
componentDidMount() {
this.renderChart();
this.resize();
window.addEventListener('resize', this.resize);
}
componentWillUnmount() {
cancelAnimationFrame(this.timer);
if (this.node) {
this.node.innerHTML = '';
}
window.removeEventListener('resize', this.resize);
}
resize = () => {
const { height } = this.props;
const { offsetWidth } = this.root.parentNode;
this.setState({
radio: offsetWidth < height ? offsetWidth / height : 1,
});
};
renderChart() {
const { percent, color = '#1890FF' } = this.props;
const data = percent / 100;
const self = this;
if (!this.node || !data) {
return;
}
const canvas = this.node;
const ctx = canvas.getContext('2d');
const canvasWidth = canvas.width;
const canvasHeight = canvas.height;
const radius = canvasWidth / 2;
const lineWidth = 2;
const cR = radius - lineWidth;
ctx.beginPath();
ctx.lineWidth = lineWidth * 2;
const axisLength = canvasWidth - lineWidth;
const unit = axisLength / 8;
const range = 0.2; // 振幅
let currRange = range;
const xOffset = lineWidth;
let sp = 0; // 周期偏移量
let currData = 0;
const waveupsp = 0.005; // 水波上涨速度
let arcStack = [];
const bR = radius - lineWidth;
const circleOffset = -(Math.PI / 2);
let circleLock = true;
for (let i = circleOffset; i < circleOffset + 2 * Math.PI; i += 1 / (8 * Math.PI)) {
arcStack.push([radius + bR * Math.cos(i), radius + bR * Math.sin(i)]);
}
const cStartPoint = arcStack.shift();
ctx.strokeStyle = color;
ctx.moveTo(cStartPoint[0], cStartPoint[1]);
function drawSin() {
ctx.beginPath();
ctx.save();
const sinStack = [];
for (let i = xOffset; i <= xOffset + axisLength; i += 20 / axisLength) {
const x = sp + (xOffset + i) / unit;
const y = Math.sin(x) * currRange;
const dx = i;
const dy = 2 * cR * (1 - currData) + (radius - cR) - unit * y;
ctx.lineTo(dx, dy);
sinStack.push([dx, dy]);
}
const startPoint = sinStack.shift();
ctx.lineTo(xOffset + axisLength, canvasHeight);
ctx.lineTo(xOffset, canvasHeight);
ctx.lineTo(startPoint[0], startPoint[1]);
const gradient = ctx.createLinearGradient(0, 0, 0, canvasHeight);
gradient.addColorStop(0, '#ffffff');
gradient.addColorStop(1, '#1890FF');
ctx.fillStyle = gradient;
ctx.fill();
ctx.restore();
}
function render() {
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
if (circleLock) {
if (arcStack.length) {
const temp = arcStack.shift();
ctx.lineTo(temp[0], temp[1]);
ctx.stroke();
} else {
circleLock = false;
ctx.lineTo(cStartPoint[0], cStartPoint[1]);
ctx.stroke();
arcStack = null;
ctx.globalCompositeOperation = 'destination-over';
ctx.beginPath();
ctx.lineWidth = lineWidth;
ctx.arc(radius, radius, bR, 0, 2 * Math.PI, 1);
ctx.beginPath();
ctx.save();
ctx.arc(radius, radius, radius - 3 * lineWidth, 0, 2 * Math.PI, 1);
ctx.restore();
ctx.clip();
ctx.fillStyle = '#1890FF';
}
} else {
if (data >= 0.85) {
if (currRange > range / 4) {
const t = range * 0.01;
currRange -= t;
}
} else if (data <= 0.1) {
if (currRange < range * 1.5) {
const t = range * 0.01;
currRange += t;
}
} else {
if (currRange <= range) {
const t = range * 0.01;
currRange += t;
}
if (currRange >= range) {
const t = range * 0.01;
currRange -= t;
}
}
if (data - currData > 0) {
currData += waveupsp;
}
if (data - currData < 0) {
currData -= waveupsp;
}
sp += 0.07;
drawSin();
}
self.timer = requestAnimationFrame(render);
}
render();
}
render() {
const { radio } = this.state;
const { percent, title, height } = this.props;
return (
(this.root = n)}
style={{ transform: `scale(${radio})` }}
>
(this.node = n)}
width={height * 2}
height={height * 2}
/>
{title && {title} }
{percent}%
);
}
}
================================================
FILE: app/assets/components/Charts/WaterWave/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.waterWave {
display: inline-block;
position: relative;
transform-origin: left;
.text {
position: absolute;
left: 0;
top: 32px;
text-align: center;
width: 100%;
span {
color: @text-color-secondary;
font-size: 14px;
line-height: 22px;
}
h4 {
color: @heading-color;
line-height: 32px;
font-size: 24px;
}
}
.waterWaveCanvasWrapper {
transform: scale(0.5);
transform-origin: 0 0;
}
}
================================================
FILE: app/assets/components/Charts/autoHeight.js
================================================
/* eslint eqeqeq: 0 */
import React from 'react';
function computeHeight(node) {
const totalHeight = parseInt(getComputedStyle(node).height, 10);
const padding =
parseInt(getComputedStyle(node).paddingTop, 10) +
parseInt(getComputedStyle(node).paddingBottom, 10);
return totalHeight - padding;
}
function getAutoHeight(n) {
if (!n) {
return 0;
}
let node = n;
let height = computeHeight(node);
while (!height) {
node = node.parentNode;
if (node) {
height = computeHeight(node);
} else {
break;
}
}
return height;
}
const autoHeight = () => WrappedComponent => {
return class extends React.Component {
state = {
computedHeight: 0,
};
componentDidMount() {
const { height } = this.props;
if (!height) {
const h = getAutoHeight(this.root);
// eslint-disable-next-line
this.setState({ computedHeight: h });
}
}
handleRoot = node => {
this.root = node;
};
render() {
const { height } = this.props;
const { computedHeight } = this.state;
const h = height || computedHeight;
return (
{h > 0 && }
);
}
};
};
export default autoHeight;
================================================
FILE: app/assets/components/Charts/demo/bar.md
================================================
---
order: 4
title: 柱状图
---
通过设置 `x`,`y` 属性,可以快速的构建出一个漂亮的柱状图,各种纬度的关系则是通过自定义的数据展现。
````jsx
import { Bar } from 'ant-design-pro/lib/Charts';
const salesData = [];
for (let i = 0; i < 12; i += 1) {
salesData.push({
x: `${i + 1}月`,
y: Math.floor(Math.random() * 1000) + 200,
});
}
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/chart-card.md
================================================
---
order: 1
title: 图表卡片
---
用于展示图表的卡片容器,可以方便的配合其它图表套件展示丰富信息。
```jsx
import { ChartCard, yuan, Field } from 'ant-design-pro/lib/Charts';
import Trend from 'ant-design-pro/lib/Trend';
import { Row, Col, Icon, Tooltip } from 'antd';
import numeral from 'numeral';
ReactDOM.render(
}
total={() => (
)}
footer={
}
contentHeight={46}
>
周同比
12%
日环比
11%
}
action={
}
total={() => (
)}
footer={
}
/>
}
action={
}
total={() => (
)}
/>
,
mountNode,
);
```
================================================
FILE: app/assets/components/Charts/demo/gauge.md
================================================
---
order: 7
title: 仪表盘
---
仪表盘是一种进度展示方式,可以更直观的展示当前的进展情况,通常也可表示占比。
````jsx
import { Gauge } from 'ant-design-pro/lib/Charts';
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/mini-area.md
================================================
---
order: 2
col: 2
title: 迷你区域图
---
````jsx
import { MiniArea } from 'ant-design-pro/lib/Charts';
import moment from 'moment';
const visitData = [];
const beginDay = new Date().getTime();
for (let i = 0; i < 20; i += 1) {
visitData.push({
x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
y: Math.floor(Math.random() * 100) + 10,
});
}
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/mini-bar.md
================================================
---
order: 2
col: 2
title: 迷你柱状图
---
迷你柱状图更适合展示简单的区间数据,简洁的表现方式可以很好的减少大数据量的视觉展现压力。
````jsx
import { MiniBar } from 'ant-design-pro/lib/Charts';
import moment from 'moment';
const visitData = [];
const beginDay = new Date().getTime();
for (let i = 0; i < 20; i += 1) {
visitData.push({
x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
y: Math.floor(Math.random() * 100) + 10,
});
}
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/mini-pie.md
================================================
---
order: 6
title: 迷你饼状图
---
通过简化 `Pie` 属性的设置,可以快速的实现极简的饼状图,可配合 `ChartCard` 组合展
现更多业务场景。
```jsx
import { Pie } from 'ant-design-pro/lib/Charts';
ReactDOM.render(
,
mountNode
);
```
================================================
FILE: app/assets/components/Charts/demo/mini-progress.md
================================================
---
order: 3
title: 迷你进度条
---
````jsx
import { MiniProgress } from 'ant-design-pro/lib/Charts';
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/mix.md
================================================
---
order: 0
title: 图表套件组合展示
---
利用 Ant Design Pro 提供的图表套件,可以灵活组合符合设计规范的图表来满足复杂的业务需求。
````jsx
import { ChartCard, Field, MiniArea, MiniBar, MiniProgress } from 'ant-design-pro/lib/Charts';
import Trend from 'ant-design-pro/lib/Trend';
import NumberInfo from 'ant-design-pro/lib/NumberInfo';
import { Row, Col, Icon, Tooltip } from 'antd';
import numeral from 'numeral';
import moment from 'moment';
const visitData = [];
const beginDay = new Date().getTime();
for (let i = 0; i < 20; i += 1) {
visitData.push({
x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
y: Math.floor(Math.random() * 100) + 10,
});
}
ReactDOM.render(
本周访问}
total={numeral(12321).format('0,0')}
status="up"
subTotal={17.1}
/>
}
total={numeral(8846).format('0,0')}
footer={ }
contentHeight={46}
>
}
total="78%"
footer={
周同比
12%
日环比
11%
}
contentHeight={46}
>
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/pie.md
================================================
---
order: 5
title: 饼状图
---
```jsx
import { Pie, yuan } from 'ant-design-pro/lib/Charts';
const salesPieData = [
{
x: '家用电器',
y: 4544,
},
{
x: '食用酒水',
y: 3321,
},
{
x: '个护健康',
y: 3113,
},
{
x: '服饰箱包',
y: 2341,
},
{
x: '母婴产品',
y: 1231,
},
{
x: '其他',
y: 1231,
},
];
ReactDOM.render(
(
now.y + pre, 0))
}}
/>
)}
data={salesPieData}
valueFormat={val => }
height={294}
/>,
mountNode,
);
```
================================================
FILE: app/assets/components/Charts/demo/radar.md
================================================
---
order: 7
title: 雷达图
---
````jsx
import { Radar, ChartCard } from 'ant-design-pro/lib/Charts';
const radarOriginData = [
{
name: '个人',
ref: 10,
koubei: 8,
output: 4,
contribute: 5,
hot: 7,
},
{
name: '团队',
ref: 3,
koubei: 9,
output: 6,
contribute: 3,
hot: 1,
},
{
name: '部门',
ref: 4,
koubei: 1,
output: 6,
contribute: 5,
hot: 7,
},
];
const radarData = [];
const radarTitleMap = {
ref: '引用',
koubei: '口碑',
output: '产量',
contribute: '贡献',
hot: '热度',
};
radarOriginData.forEach((item) => {
Object.keys(item).forEach((key) => {
if (key !== 'name') {
radarData.push({
name: item.name,
label: radarTitleMap[key],
value: item[key],
});
}
});
});
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/tag-cloud.md
================================================
---
order: 9
title: 标签云
---
标签云是一套相关的标签以及与此相应的权重展示方式,一般典型的标签云有 30 至 150 个标签,而权重影响使用的字体大小或其他视觉效果。
````jsx
import { TagCloud } from 'ant-design-pro/lib/Charts';
const tags = [];
for (let i = 0; i < 50; i += 1) {
tags.push({
name: `TagClout-Title-${i}`,
value: Math.floor((Math.random() * 50)) + 20,
});
}
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/timeline-chart.md
================================================
---
order: 9
title: 带有时间轴的图表
---
使用 `TimelineChart` 组件可以实现带有时间轴的柱状图展现,而其中的 `x` 属性,则是时间值的指向,默认最多支持同时展现两个指标,分别是 `y1` 和 `y2`。
````jsx
import { TimelineChart } from 'ant-design-pro/lib/Charts';
const chartData = [];
for (let i = 0; i < 20; i += 1) {
chartData.push({
x: (new Date().getTime()) + (1000 * 60 * 30 * i),
y1: Math.floor(Math.random() * 100) + 1000,
y2: Math.floor(Math.random() * 100) + 10,
});
}
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/demo/waterwave.md
================================================
---
order: 8
title: 水波图
---
水波图是一种比例的展示方式,可以更直观的展示关键值的占比。
````jsx
import { WaterWave } from 'ant-design-pro/lib/Charts';
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Charts/g2.js
================================================
// 全局 G2 设置
import { track, setTheme } from 'bizcharts';
track(false);
const config = {
defaultColor: '#1089ff',
shape: {
interval: {
fillOpacity: 1,
},
},
};
setTheme(config);
================================================
FILE: app/assets/components/Charts/index.d.ts
================================================
import * as numeral from 'numeral';
export { default as ChartCard } from './ChartCard';
export { default as Bar } from './Bar';
export { default as Pie } from './Pie';
export { default as Radar } from './Radar';
export { default as Gauge } from './Gauge';
export { default as MiniArea } from './MiniArea';
export { default as MiniBar } from './MiniBar';
export { default as MiniProgress } from './MiniProgress';
export { default as Field } from './Field';
export { default as WaterWave } from './WaterWave';
export { default as TagCloud } from './TagCloud';
export { default as TimelineChart } from './TimelineChart';
declare const yuan: (value: number | string) => string;
export { yuan };
================================================
FILE: app/assets/components/Charts/index.js
================================================
import numeral from 'numeral';
import './g2';
import ChartCard from './ChartCard';
import Bar from './Bar';
import Pie from './Pie';
import Radar from './Radar';
import Gauge from './Gauge';
import MiniArea from './MiniArea';
import MiniBar from './MiniBar';
import MiniProgress from './MiniProgress';
import Field from './Field';
import WaterWave from './WaterWave';
import TagCloud from './TagCloud';
import TimelineChart from './TimelineChart';
const yuan = val => `¥ ${numeral(val).format('0,0')}`;
const Charts = {
yuan,
Bar,
Pie,
Gauge,
Radar,
MiniBar,
MiniArea,
MiniProgress,
ChartCard,
Field,
WaterWave,
TagCloud,
TimelineChart,
};
export {
Charts as default,
yuan,
Bar,
Pie,
Gauge,
Radar,
MiniBar,
MiniArea,
MiniProgress,
ChartCard,
Field,
WaterWave,
TagCloud,
TimelineChart,
};
================================================
FILE: app/assets/components/Charts/index.less
================================================
.miniChart {
position: relative;
width: 100%;
.chartContent {
position: absolute;
bottom: -28px;
width: 100%;
> div {
margin: 0 -5px;
overflow: hidden;
}
}
.chartLoading {
position: absolute;
top: 16px;
left: 50%;
margin-left: -7px;
}
}
================================================
FILE: app/assets/components/Charts/index.md
================================================
---
title:
en-US: Charts
zh-CN: Charts
subtitle: 图表
order: 2
cols: 2
---
Ant Design Pro 提供的业务中常用的图表类型,都是基于 [G2](https://antv.alipay.com/g2/doc/index.html) 按照 Ant Design 图表规范封装,需要注意的是 Ant Design Pro 的图表组件以套件形式提供,可以任意组合实现复杂的业务需求。
因为结合了 Ant Design 的标准设计,本着极简的设计思想以及开箱即用的理念,简化了大量 API 配置,所以如果需要灵活定制图表,可以参考 Ant Design Pro 图表实现,自行基于 [G2](https://antv.alipay.com/g2/doc/index.html) 封装图表组件使用。
## API
### ChartCard
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 卡片标题 | ReactNode\|string | - |
| action | 卡片操作 | ReactNode | - |
| total | 数据总量 | ReactNode \| number \| function | - |
| footer | 卡片底部 | ReactNode | - |
| contentHeight | 内容区域高度 | number | - |
| avatar | 右侧图标 | React.ReactNode | - |
### MiniBar
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| color | 图表颜色 | string | `#1890FF` |
| height | 图表高度 | number | - |
| data | 数据 | array<{x, y}> | - |
### MiniArea
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| color | 图表颜色 | string | `rgba(24, 144, 255, 0.2)` |
| borderColor | 图表边颜色 | string | `#1890FF` |
| height | 图表高度 | number | - |
| line | 是否显示描边 | boolean | false |
| animate | 是否显示动画 | boolean | true |
| xAxis | [x 轴配置](http://antvis.github.io/g2/doc/tutorial/start/axis.html) | object | - |
| yAxis | [y 轴配置](http://antvis.github.io/g2/doc/tutorial/start/axis.html) | object | - |
| data | 数据 | array<{x, y}> | - |
### MiniProgress
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| target | 目标比例 | number | - |
| color | 进度条颜色 | string | - |
| strokeWidth | 进度条高度 | number | - |
| percent | 进度比例 | number | - |
### Bar
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| color | 图表颜色 | string | `rgba(24, 144, 255, 0.85)` |
| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
| height | 图表高度 | number | - |
| data | 数据 | array<{x, y}> | - |
| autoLabel | 在宽度不足时,自动隐藏 x 轴的 label | boolean | `true` |
### Pie
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| animate | 是否显示动画 | boolean | true |
| color | 图表颜色 | string | `rgba(24, 144, 255, 0.85)` |
| height | 图表高度 | number | - |
| hasLegend | 是否显示 legend | boolean | `false` |
| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
| percent | 占比 | number | - |
| tooltip | 是否显示 tooltip | boolean | true |
| valueFormat | 显示值的格式化函数 | function | - |
| title | 图表标题 | ReactNode\|string | - |
| subTitle | 图表子标题 | ReactNode\|string | - |
| total | 图标中央的总数 | string | function | - |
### Radar
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| height | 图表高度 | number | - |
| hasLegend | 是否显示 legend | boolean | `false` |
| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
| data | 图标数据 | array<{name,label,value}> | - |
### Gauge
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| height | 图表高度 | number | - |
| color | 图表颜色 | string | `#2F9CFF` |
| bgColor | 图表背景颜色 | string | `#F0F2F5` |
| percent | 进度比例 | number | - |
### WaterWave
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| height | 图表高度 | number | - |
| color | 图表颜色 | string | `#1890FF` |
| percent | 进度比例 | number | - |
### TagCloud
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| data | 标题 | Array | - |
| height | 高度值 | number | - |
### TimelineChart
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| data | 标题 | Array | - |
| titleMap | 指标别名 | Object{y1: '客流量', y2: '支付笔数'} | - |
| height | 高度值 | number | 400 |
### Field
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| label | 标题 | ReactNode\|string | - |
| value | 值 | ReactNode\|string | - |
================================================
FILE: app/assets/components/CountDown/demo/simple.md
================================================
---
order: 0
title:
zh-CN: 基本
en-US: Basic
---
## zh-CN
简单的倒计时组件使用。
## en-US
The simplest usage.
````jsx
import CountDown from 'ant-design-pro/lib/CountDown';
const targetTime = new Date().getTime() + 3900000;
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/CountDown/index.d.ts
================================================
import * as React from 'react';
export interface ICountDownProps {
format?: (time: number) => void;
target: Date | number;
onEnd?: () => void;
style?: React.CSSProperties;
}
export default class CountDown extends React.Component {}
================================================
FILE: app/assets/components/CountDown/index.en-US.md
================================================
---
title: CountDown
cols: 1
order: 3
---
Simple CountDown Component.
## API
| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| format | Formatter of time | Function(time) | |
| target | Target time | Date | - |
| onEnd | Countdown to the end callback | funtion | -|
================================================
FILE: app/assets/components/CountDown/index.js
================================================
import React, { Component } from 'react';
function fixedZero(val) {
return val * 1 < 10 ? `0${val}` : val;
}
class CountDown extends Component {
constructor(props) {
super(props);
const { lastTime } = this.initTime(props);
this.state = {
lastTime,
};
}
componentDidMount() {
this.tick();
}
componentWillReceiveProps(nextProps) {
if (this.props.target !== nextProps.target) {
clearTimeout(this.timer);
const { lastTime } = this.initTime(nextProps);
this.setState(
{
lastTime,
},
() => {
this.tick();
}
);
}
}
componentWillUnmount() {
clearTimeout(this.timer);
}
timer = 0;
interval = 1000;
initTime = props => {
let lastTime = 0;
let targetTime = 0;
try {
if (Object.prototype.toString.call(props.target) === '[object Date]') {
targetTime = props.target.getTime();
} else {
targetTime = new Date(props.target).getTime();
}
} catch (e) {
throw new Error('invalid target prop', e);
}
lastTime = targetTime - new Date().getTime();
return {
lastTime: lastTime < 0 ? 0 : lastTime,
};
};
// defaultFormat = time => (
// {moment(time).format('hh:mm:ss')}
// );
defaultFormat = time => {
const hours = 60 * 60 * 1000;
const minutes = 60 * 1000;
const h = Math.floor(time / hours);
const m = Math.floor((time - h * hours) / minutes);
const s = Math.floor((time - h * hours - m * minutes) / 1000);
return (
{fixedZero(h)}:{fixedZero(m)}:{fixedZero(s)}
);
};
tick = () => {
const { onEnd } = this.props;
let { lastTime } = this.state;
this.timer = setTimeout(() => {
if (lastTime < this.interval) {
clearTimeout(this.timer);
this.setState(
{
lastTime: 0,
},
() => {
if (onEnd) {
onEnd();
}
}
);
} else {
lastTime -= this.interval;
this.setState(
{
lastTime,
},
() => {
this.tick();
}
);
}
}, this.interval);
};
render() {
const { format = this.defaultFormat, onEnd, ...rest } = this.props;
const { lastTime } = this.state;
const result = format(lastTime);
return {result} ;
}
}
export default CountDown;
================================================
FILE: app/assets/components/CountDown/index.zh-CN.md
================================================
---
title: CountDown
subtitle: 倒计时
cols: 1
order: 3
---
倒计时组件。
## API
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| format | 时间格式化显示 | Function(time) | |
| target | 目标时间 | Date | - |
| onEnd | 倒计时结束回调 | funtion | -|
================================================
FILE: app/assets/components/DescriptionList/Description.d.ts
================================================
import * as React from 'react';
export default class Description extends React.Component<
{
term: React.ReactNode;
style?: React.CSSProperties;
},
any
> {}
================================================
FILE: app/assets/components/DescriptionList/Description.js
================================================
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { Col } from 'antd';
import styles from './index.less';
import responsive from './responsive';
const Description = ({ term, column, className, children, ...restProps }) => {
const clsString = classNames(styles.description, className);
return (
{term && {term}
}
{children && {children}
}
);
};
Description.defaultProps = {
term: '',
};
Description.propTypes = {
term: PropTypes.node,
};
export default Description;
================================================
FILE: app/assets/components/DescriptionList/DescriptionList.js
================================================
import React from 'react';
import classNames from 'classnames';
import { Row } from 'antd';
import styles from './index.less';
const DescriptionList = ({
className,
title,
col = 3,
layout = 'horizontal',
gutter = 32,
children,
size,
...restProps
}) => {
const clsString = classNames(styles.descriptionList, styles[layout], className, {
[styles.small]: size === 'small',
[styles.large]: size === 'large',
});
const column = col > 4 ? 4 : col;
return (
{title ?
{title}
: null}
{React.Children.map(children, child => child ? React.cloneElement(child, { column }) : child)}
);
};
export default DescriptionList;
================================================
FILE: app/assets/components/DescriptionList/demo/basic.md
================================================
---
order: 0
title:
zh-CN: 基本
en-US: Basic
---
## zh-CN
基本描述列表。
## en-US
Basic DescriptionList.
````jsx
import DescriptionList from 'ant-design-pro/lib/DescriptionList';
const { Description } = DescriptionList;
ReactDOM.render(
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
, mountNode);
````
================================================
FILE: app/assets/components/DescriptionList/demo/vertical.md
================================================
---
order: 1
title:
zh-CN: 垂直型
en-US: Vertical
---
## zh-CN
垂直布局。
## en-US
Vertical layout.
````jsx
import DescriptionList from 'ant-design-pro/lib/DescriptionList';
const { Description } = DescriptionList;
ReactDOM.render(
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
, mountNode);
````
================================================
FILE: app/assets/components/DescriptionList/index.d.ts
================================================
import * as React from 'react';
import Description from './Description';
export interface IDescriptionListProps {
layout?: 'horizontal' | 'vertical';
col?: number;
title: React.ReactNode;
gutter?: number;
size?: 'large' | 'small';
style?: React.CSSProperties;
}
export default class DescriptionList extends React.Component {
public static Description: typeof Description;
}
================================================
FILE: app/assets/components/DescriptionList/index.en-US.md
================================================
---
title: DescriptionList
cols: 1
order: 4
---
Groups display multiple read-only fields, which are common to informational displays on detail pages.
## API
### DescriptionList
| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|---------|
| layout | type of layout | Enum{'horizontal', 'vertical'} | 'horizontal' |
| col | specify the maximum number of columns to display, the final columns number is determined by col setting combined with [Responsive Rules](/components/DescriptionList#Responsive-Rules) | number(0 < col <= 4) | 3 |
| title | title | ReactNode | - |
| gutter | specify the distance between two items, unit is `px` | number | 32 |
| size | size of list | Enum{'large', 'small'} | - |
#### Responsive Rules
| Window Width | Columns Number |
|---------------------|---------------------------------------------|
| `≥768px` | `col` |
| `≥576px` | `col < 2 ? col : 2` |
| `<576px` | `1` |
### DescriptionList.Description
| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| term | item title | ReactNode | - |
================================================
FILE: app/assets/components/DescriptionList/index.js
================================================
import DescriptionList from './DescriptionList';
import Description from './Description';
DescriptionList.Description = Description;
export default DescriptionList;
================================================
FILE: app/assets/components/DescriptionList/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.descriptionList {
// offset the padding-bottom of last row
:global {
.ant-row {
margin-bottom: -16px;
overflow: hidden;
}
}
.title {
font-size: 14px;
color: @heading-color;
font-weight: 500;
margin-bottom: 16px;
}
.term {
// Line-height is 22px IE dom height will calculate error
line-height: 20px;
padding-bottom: 16px;
margin-right: 8px;
color: @heading-color;
white-space: nowrap;
display: table-cell;
&:after {
content: ':';
margin: 0 8px 0 2px;
position: relative;
top: -0.5px;
}
}
.detail {
line-height: 22px;
width: 100%;
padding-bottom: 16px;
color: @text-color;
display: table-cell;
}
&.small {
// offset the padding-bottom of last row
:global {
.ant-row {
margin-bottom: -8px;
}
}
.title {
margin-bottom: 12px;
color: @text-color;
}
.term,
.detail {
padding-bottom: 8px;
}
}
&.large {
.title {
font-size: 16px;
}
}
&.vertical {
.term {
padding-bottom: 8px;
display: block;
}
.detail {
display: block;
}
}
}
================================================
FILE: app/assets/components/DescriptionList/index.zh-CN.md
================================================
---
title: DescriptionList
subtitle: 描述列表
cols: 1
order: 4
---
成组展示多个只读字段,常见于详情页的信息展示。
## API
### DescriptionList
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| layout | 布局方式 | Enum{'horizontal', 'vertical'} | 'horizontal' |
| col | 指定信息最多分几列展示,最终一行几列由 col 配置结合[响应式规则](/components/DescriptionList#响应式规则)决定 | number(0 < col <= 4) | 3 |
| title | 列表标题 | ReactNode | - |
| gutter | 列表项间距,单位为 `px` | number | 32 |
| size | 列表型号 | Enum{'large', 'small'} | - |
#### 响应式规则
| 窗口宽度 | 展示列数 |
|---------------------|---------------------------------------------|
| `≥768px` | `col` |
| `≥576px` | `col < 2 ? col : 2` |
| `<576px` | `1` |
### DescriptionList.Description
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| term | 列表项标题 | ReactNode | - |
================================================
FILE: app/assets/components/DescriptionList/responsive.js
================================================
export default {
1: { xs: 24 },
2: { xs: 24, sm: 12 },
3: { xs: 24, sm: 12, md: 8 },
4: { xs: 24, sm: 12, md: 6 },
};
================================================
FILE: app/assets/components/EditableItem/index.js
================================================
import React, { PureComponent } from 'react';
import { Input, Icon } from 'antd';
import styles from './index.less';
export default class EditableItem extends PureComponent {
state = {
value: this.props.value,
editable: false,
};
handleChange = e => {
const { value } = e.target;
this.setState({ value });
};
check = () => {
this.setState({ editable: false });
if (this.props.onChange) {
this.props.onChange(this.state.value);
}
};
edit = () => {
this.setState({ editable: true });
};
render() {
const { value, editable } = this.state;
return (
{editable ? (
) : (
{value || ' '}
)}
);
}
}
================================================
FILE: app/assets/components/EditableItem/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.editableItem {
line-height: @input-height-base;
display: table;
width: 100%;
margin-top: (@font-size-base * @line-height-base - @input-height-base) / 2;
.wrapper {
display: table-row;
& > * {
display: table-cell;
}
& > *:first-child {
width: 85%;
}
.icon {
cursor: pointer;
text-align: right;
}
}
}
================================================
FILE: app/assets/components/EditableLinkGroup/index.js
================================================
import React, { PureComponent, createElement } from 'react';
import PropTypes from 'prop-types';
import { Button } from 'antd';
import styles from './index.less';
// TODO: 添加逻辑
class EditableLinkGroup extends PureComponent {
static defaultProps = {
links: [],
onAdd: () => {},
linkElement: 'a',
};
static propTypes = {
links: PropTypes.array,
onAdd: PropTypes.func,
linkElement: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
};
render() {
const { links, linkElement, onAdd } = this.props;
return (
{links.map(link =>
createElement(
linkElement,
{
key: `linkGroup-item-${link.id || link.title}`,
to: link.href,
href: link.href,
},
link.title
)
)}
{
添加
}
);
}
}
export default EditableLinkGroup;
================================================
FILE: app/assets/components/EditableLinkGroup/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.linkGroup {
padding: 20px 0 8px 24px;
font-size: 0;
& > a {
color: @text-color;
display: inline-block;
font-size: @font-size-base;
margin-bottom: 13px;
width: 25%;
&:hover {
color: @primary-color;
}
}
}
================================================
FILE: app/assets/components/Ellipsis/demo/line.md
================================================
---
order: 1
title:
zh-CN: 按照行数省略
en-US: Truncate according to the number of rows
---
## zh-CN
通过设置 `lines` 属性指定最大行数,如果超过这个行数的文本会自动截取。但是在这种模式下所有 `children` 将会被转换成纯文本。
并且注意在这种模式下,外容器需要有指定的宽度(或设置自身宽度)。
## en-US
`lines` attribute specifies the maximum number of rows where the text will automatically be truncated when exceeded. In this mode, all children will be converted to plain text.
Also note that, in this mode, the outer container needs to have a specified width (or set its own width).
````jsx
import Ellipsis from 'ant-design-pro/lib/Ellipsis';
const article = There were injuries alleged in three cases in 2015 , and a fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.
;
ReactDOM.render(
{article}
, mountNode);
````
================================================
FILE: app/assets/components/Ellipsis/demo/number.md
================================================
---
order: 0
title:
zh-CN: 按照字符数省略
en-US: Truncate according to the number of character
---
## zh-CN
通过设置 `length` 属性指定文本最长长度,如果超过这个长度会自动截取。
## en-US
`length` attribute specifies the maximum length where the text will automatically be truncated when exceeded.
````jsx
import Ellipsis from 'ant-design-pro/lib/Ellipsis';
const article = 'There were injuries alleged in three cases in 2015, and a fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.';
ReactDOM.render(
{article}
Show Tooltip
{article}
, mountNode);
````
================================================
FILE: app/assets/components/Ellipsis/index.d.ts
================================================
import * as React from 'react';
export interface IEllipsisProps {
tooltip?: boolean;
length?: number;
lines?: number;
style?: React.CSSProperties;
className?: string;
}
export default class Ellipsis extends React.Component {}
================================================
FILE: app/assets/components/Ellipsis/index.en-US.md
================================================
---
title: Ellipsis
cols: 1
order: 10
---
When the text is too long, the Ellipsis automatically shortens it according to its length or the maximum number of lines.
## API
Property | Description | Type | Default
----|------|-----|------
tooltip | tooltip for showing the full text content when hovering over | boolean | -
length | maximum number of characters in the text before being truncated | number | -
lines | maximum number of rows in the text before being truncated | number | `1`
================================================
FILE: app/assets/components/Ellipsis/index.js
================================================
import React, { Component } from 'react';
import { Tooltip } from 'antd';
import classNames from 'classnames';
import styles from './index.less';
/* eslint react/no-did-mount-set-state: 0 */
/* eslint no-param-reassign: 0 */
const isSupportLineClamp = document.body.style.webkitLineClamp !== undefined;
const EllipsisText = ({ text, length, tooltip, ...other }) => {
if (typeof text !== 'string') {
throw new Error('Ellipsis children must be string.');
}
if (text.length <= length || length < 0) {
return {text} ;
}
const tail = '...';
let displayText;
if (length - tail.length <= 0) {
displayText = '';
} else {
displayText = text.slice(0, length - tail.length);
}
if (tooltip) {
return (
{displayText}
{tail}
);
}
return (
{displayText}
{tail}
);
};
export default class Ellipsis extends Component {
state = {
text: '',
targetCount: 0,
};
componentDidMount() {
if (this.node) {
this.computeLine();
}
}
componentWillReceiveProps(nextProps) {
if (this.props.lines !== nextProps.lines) {
this.computeLine();
}
}
computeLine = () => {
const { lines } = this.props;
if (lines && !isSupportLineClamp) {
const text = this.shadowChildren.innerText;
const lineHeight = parseInt(getComputedStyle(this.root).lineHeight, 10);
const targetHeight = lines * lineHeight;
this.content.style.height = `${targetHeight}px`;
const totalHeight = this.shadowChildren.offsetHeight;
const shadowNode = this.shadow.firstChild;
if (totalHeight <= targetHeight) {
this.setState({
text,
targetCount: text.length,
});
return;
}
// bisection
const len = text.length;
const mid = Math.floor(len / 2);
const count = this.bisection(targetHeight, mid, 0, len, text, shadowNode);
this.setState({
text,
targetCount: count,
});
}
};
bisection = (th, m, b, e, text, shadowNode) => {
const suffix = '...';
let mid = m;
let end = e;
let begin = b;
shadowNode.innerHTML = text.substring(0, mid) + suffix;
let sh = shadowNode.offsetHeight;
if (sh <= th) {
shadowNode.innerHTML = text.substring(0, mid + 1) + suffix;
sh = shadowNode.offsetHeight;
if (sh > th) {
return mid;
} else {
begin = mid;
mid = Math.floor((end - begin) / 2) + begin;
return this.bisection(th, mid, begin, end, text, shadowNode);
}
} else {
if (mid - 1 < 0) {
return mid;
}
shadowNode.innerHTML = text.substring(0, mid - 1) + suffix;
sh = shadowNode.offsetHeight;
if (sh <= th) {
return mid - 1;
} else {
end = mid;
mid = Math.floor((end - begin) / 2) + begin;
return this.bisection(th, mid, begin, end, text, shadowNode);
}
}
};
handleRoot = n => {
this.root = n;
};
handleContent = n => {
this.content = n;
};
handleNode = n => {
this.node = n;
};
handleShadow = n => {
this.shadow = n;
};
handleShadowChildren = n => {
this.shadowChildren = n;
};
render() {
const { text, targetCount } = this.state;
const { children, lines, length, className, tooltip, ...restProps } = this.props;
const cls = classNames(styles.ellipsis, className, {
[styles.lines]: lines && !isSupportLineClamp,
[styles.lineClamp]: lines && isSupportLineClamp,
});
if (!lines && !length) {
return (
{children}
);
}
// length
if (!lines) {
return (
);
}
const id = `antd-pro-ellipsis-${`${new Date().getTime()}${Math.floor(Math.random() * 100)}`}`;
// support document.body.style.webkitLineClamp
if (isSupportLineClamp) {
const style = `#${id}{-webkit-line-clamp:${lines};-webkit-box-orient: vertical;}`;
return (
{tooltip ? (
{children}
) : (
children
)}
);
}
const childNode = (
{targetCount > 0 && text.substring(0, targetCount)}
{targetCount > 0 && targetCount < text.length && '...'}
);
return (
{tooltip ? (
{childNode}
) : (
childNode
)}
{children}
{text}
);
}
}
================================================
FILE: app/assets/components/Ellipsis/index.less
================================================
.ellipsis {
overflow: hidden;
display: inline-block;
word-break: break-all;
width: 100%;
}
.lines {
position: relative;
.shadow {
display: block;
position: relative;
color: transparent;
opacity: 0;
z-index: -999;
}
}
.lineClamp {
position: relative;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
}
================================================
FILE: app/assets/components/Ellipsis/index.zh-CN.md
================================================
---
title: Ellipsis
subtitle: 文本自动省略号
cols: 1
order: 10
---
文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。
## API
参数 | 说明 | 类型 | 默认值
----|------|-----|------
tooltip | 移动到文本展示完整内容的提示 | boolean | -
length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | -
lines | 在按照行数截取下最大的行数,超过则截取省略 | number | `1`
================================================
FILE: app/assets/components/Exception/demo/403.md
================================================
---
order: 2
title:
zh-CN: 403
en-US: 403
---
## zh-CN
403 页面,配合自定义操作。
## en-US
403 page with custom operations.
````jsx
import Exception from 'ant-design-pro/lib/Exception';
import { Button } from 'antd';
const actions = (
Home
Detail
);
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Exception/demo/404.md
================================================
---
order: 0
title:
zh-CN: 404
en-US: 404
---
## zh-CN
404 页面。
## en-US
404 page.
````jsx
import Exception from 'ant-design-pro/lib/Exception';
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Exception/demo/500.md
================================================
---
order: 1
title:
zh-CN: 500
en-US: 500
---
## zh-CN
500 页面。
## en-US
500 page.
````jsx
import Exception from 'ant-design-pro/lib/Exception';
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/Exception/index.d.ts
================================================
import * as React from 'react';
export interface IExceptionProps {
type?: '403' | '404' | '500';
title?: React.ReactNode;
desc?: React.ReactNode;
img?: string;
actions?: React.ReactNode;
linkElement?: React.ReactNode;
style?: React.CSSProperties;
}
export default class Exception extends React.Component {}
================================================
FILE: app/assets/components/Exception/index.en-US.md
================================================
---
title: Exception
cols: 1
order: 5
---
Exceptions page is used to provide feedback on specific abnormal state. Usually, it contains an explanation of the error status, and provides users with suggestions or operations, to prevent users from feeling lost and confused.
## API
Property | Description | Type | Default
---------|-------------|------|--------
type | type of exception, the corresponding default `title`, `desc`, `img` will be given if set, which can be overridden by explicit setting of `title`, `desc`, `img` | Enum {'403', '404', '500'} | -
title | title | ReactNode | -
desc | supplementary description | ReactNode | -
img | the url of background image | string | -
actions | suggested operations, a default 'Home' link will show if not set | ReactNode | -
linkElement | to specify the element of link | string\|ReactElement | 'a'
================================================
FILE: app/assets/components/Exception/index.js
================================================
import React, { createElement } from 'react';
import classNames from 'classnames';
import { Button } from 'antd';
import config from './typeConfig';
import styles from './index.less';
const Exception = ({ className, linkElement = 'a', type, title, desc, img, actions, ...rest }) => {
const pageType = type in config ? type : '404';
const clsString = classNames(styles.exception, className);
return (
{title || config[pageType].title}
{desc || config[pageType].desc}
{actions ||
createElement(
linkElement,
{
to: '/',
href: '/',
},
返回首页
)}
);
};
export default Exception;
================================================
FILE: app/assets/components/Exception/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.exception {
display: flex;
align-items: center;
height: 100%;
.imgBlock {
flex: 0 0 62.5%;
width: 62.5%;
padding-right: 152px;
zoom: 1;
&:before,
&:after {
content: ' ';
display: table;
}
&:after {
clear: both;
visibility: hidden;
font-size: 0;
height: 0;
}
}
.imgEle {
height: 360px;
width: 100%;
max-width: 430px;
float: right;
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: contain;
}
.content {
flex: auto;
h1 {
color: #434e59;
font-size: 72px;
font-weight: 600;
line-height: 72px;
margin-bottom: 24px;
}
.desc {
color: @text-color-secondary;
font-size: 20px;
line-height: 28px;
margin-bottom: 16px;
}
.actions {
button:not(:last-child) {
margin-right: 8px;
}
}
}
}
@media screen and (max-width: @screen-xl) {
.exception {
.imgBlock {
padding-right: 88px;
}
}
}
@media screen and (max-width: @screen-sm) {
.exception {
display: block;
text-align: center;
.imgBlock {
padding-right: 0;
margin: 0 auto 24px;
}
}
}
@media screen and (max-width: @screen-xs) {
.exception {
.imgBlock {
margin-bottom: -24px;
overflow: hidden;
}
}
}
================================================
FILE: app/assets/components/Exception/index.zh-CN.md
================================================
---
title: Exception
subtitle: 异常
cols: 1
order: 5
---
异常页用于对页面特定的异常状态进行反馈。通常,它包含对错误状态的阐述,并向用户提供建议或操作,避免用户感到迷失和困惑。
## API
| 参数 | 说明 | 类型 | 默认值 |
|-------------|------------------------------------------|-------------|-------|
| type | 页面类型,若配置,则自带对应类型默认的 `title`,`desc`,`img`,此默认设置可以被 `title`,`desc`,`img` 覆盖 | Enum {'403', '404', '500'} | - |
| title | 标题 | ReactNode | - |
| desc | 补充描述 | ReactNode | - |
| img | 背景图片地址 | string | - |
| actions | 建议操作,配置此属性时默认的『返回首页』按钮不生效 | ReactNode | - |
| linkElement | 定义链接的元素 | string\|ReactElement | 'a' |
================================================
FILE: app/assets/components/Exception/typeConfig.js
================================================
const config = {
403: {
img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg',
title: '403',
desc: '抱歉,你无权访问该页面',
},
404: {
img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg',
title: '404',
desc: '抱歉,你访问的页面不存在',
},
500: {
img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg',
title: '500',
desc: '抱歉,服务器出错了',
},
};
export default config;
================================================
FILE: app/assets/components/FooterToolbar/demo/basic.md
================================================
---
order: 0
title:
zh-CN: 演示
en-US: demo
iframe: 400
---
## zh-CN
浮动固定页脚。
## en-US
Fixed to the footer.
````jsx
import FooterToolbar from 'ant-design-pro/lib/FooterToolbar';
import { Button } from 'antd';
ReactDOM.render(
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Content Content Content Content
Cancel
Submit
, mountNode);
````
================================================
FILE: app/assets/components/FooterToolbar/index.d.ts
================================================
import * as React from 'react';
export interface IFooterToolbarProps {
extra: React.ReactNode;
style?: React.CSSProperties;
}
export default class FooterToolbar extends React.Component {}
================================================
FILE: app/assets/components/FooterToolbar/index.en-US.md
================================================
---
title: FooterToolbar
cols: 1
order: 6
---
A toolbar fixed at the bottom.
## Usage
It is fixed at the bottom of the content area and does not move along with the scroll bar, which is usually used for data collection and submission for long pages.
## API
Property | Description | Type | Default
---------|-------------|------|--------
children | toolbar content, align to the right | ReactNode | -
extra | extra information, align to the left | ReactNode | -
================================================
FILE: app/assets/components/FooterToolbar/index.js
================================================
import React, { Component } from 'react';
import classNames from 'classnames';
import styles from './index.less';
export default class FooterToolbar extends Component {
render() {
const { children, className, extra, ...restProps } = this.props;
return (
);
}
}
================================================
FILE: app/assets/components/FooterToolbar/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.toolbar {
position: fixed;
width: 100%;
bottom: 0;
right: 0;
height: 56px;
line-height: 56px;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
background: #fff;
border-top: 1px solid @border-color-split;
padding: 0 24px;
z-index: 9;
&:after {
content: '';
display: block;
clear: both;
}
.left {
float: left;
}
.right {
float: right;
}
button + button {
margin-left: 8px;
}
}
================================================
FILE: app/assets/components/FooterToolbar/index.zh-CN.md
================================================
---
title: FooterToolbar
subtitle: 底部工具栏
cols: 1
order: 6
---
固定在底部的工具栏。
## 何时使用
固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。
## API
参数 | 说明 | 类型 | 默认值
----|------|-----|------
children | 工具栏内容,向右对齐 | ReactNode | -
extra | 额外信息,向左对齐 | ReactNode | -
================================================
FILE: app/assets/components/GlobalFooter/demo/basic.md
================================================
---
order: 0
title: 演示
iframe: 400
---
基本页脚。
````jsx
import GlobalFooter from 'ant-design-pro/lib/GlobalFooter';
import { Icon } from 'antd';
const links = [{
key: '帮助',
title: '帮助',
href: '',
}, {
key: 'github',
title: ,
href: 'https://github.com/ant-design/ant-design-pro',
blankTarget: true,
}, {
key: '条款',
title: '条款',
href: '',
blankTarget: true,
}];
const copyright = Copyright 2017 蚂蚁金服体验技术部出品
;
ReactDOM.render(
, mountNode);
````
================================================
FILE: app/assets/components/GlobalFooter/index.d.ts
================================================
import * as React from 'react';
export interface IGlobalFooterProps {
links?: Array<{
key?: string;
title: React.ReactNode;
href: string;
blankTarget?: boolean;
}>;
copyright?: React.ReactNode;
style?: React.CSSProperties;
}
export default class GlobalFooter extends React.Component {}
================================================
FILE: app/assets/components/GlobalFooter/index.js
================================================
import React from 'react';
import classNames from 'classnames';
import styles from './index.less';
const GlobalFooter = ({ className, links, copyright }) => {
const clsString = classNames(styles.globalFooter, className);
return (
{links && (
)}
{copyright &&
{copyright}
}
);
};
export default GlobalFooter;
================================================
FILE: app/assets/components/GlobalFooter/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.globalFooter {
padding: 0 16px;
margin: 48px 0 24px 0;
text-align: center;
.links {
margin-bottom: 8px;
a {
color: @text-color-secondary;
transition: all 0.3s;
&:not(:last-child) {
margin-right: 40px;
}
&:hover {
color: @text-color;
}
}
}
.copyright {
color: @text-color-secondary;
font-size: @font-size-base;
}
}
================================================
FILE: app/assets/components/GlobalFooter/index.md
================================================
---
title:
en-US: GlobalFooter
zh-CN: GlobalFooter
subtitle: 全局页脚
cols: 1
order: 7
---
页脚属于全局导航的一部分,作为对顶部导航的补充,通过传递数据控制展示内容。
## API
参数 | 说明 | 类型 | 默认值
----|------|-----|------
links | 链接数据 | array<{ title: ReactNode, href: string, blankTarget?: boolean }> | -
copyright | 版权信息 | ReactNode | -
================================================
FILE: app/assets/components/GlobalHeader/index.js
================================================
import React, { PureComponent } from 'react';
import { Icon, Divider, Tooltip } from 'antd';
import Debounce from 'lodash-decorators/debounce';
import {Link, routerRedux} from 'dva/router';
import ca from '../../utils/ca';
import styles from './index.less';
import { connect } from "dva/index";
@connect()
export default class GlobalHeader extends PureComponent {
componentWillUnmount() {
this.triggerResizeEvent.cancel();
}
toggle = () => {
const { collapsed, onCollapse } = this.props;
onCollapse(!collapsed);
this.triggerResizeEvent();
};
/* eslint-disable*/
@Debounce(600)
triggerResizeEvent() {
const event = document.createEvent('HTMLEvents');
event.initEvent('resize', true, false);
window.dispatchEvent(event);
}
handleLogout = async () => {
const res = await ca.get('/api/userLogout');
if (!res) return;
const { dispatch } = this.props;
dispatch(routerRedux.push('/user/login'));
};
render() {
const {
collapsed,
isMobile,
logo,
currentUser,
} = this.props;
return (
{isMobile && [
,
,
]}
欢迎 {currentUser.real_name}
);
}
}
================================================
FILE: app/assets/components/GlobalHeader/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.header {
height: 64px;
padding: 0 12px 0 0;
background: #fff;
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
position: relative;
}
:global {
.ant-layout {
min-height: 100vh;
overflow-x: hidden;
}
}
.logo {
height: 64px;
line-height: 58px;
vertical-align: top;
display: inline-block;
padding: 0 0 0 24px;
cursor: pointer;
font-size: 20px;
img {
display: inline-block;
vertical-align: middle;
}
}
.menu {
:global(.anticon) {
margin-right: 8px;
}
:global(.ant-dropdown-menu-item) {
width: 160px;
}
}
i.trigger {
font-size: 20px;
line-height: 64px;
cursor: pointer;
transition: all 0.3s, padding 0s;
padding: 0 24px;
&:hover {
background: @primary-1;
}
}
.right {
float: right;
height: 100%;
.action {
cursor: pointer;
padding: 0 12px;
display: inline-block;
transition: all 0.3s;
height: 100%;
> i {
font-size: 16px;
vertical-align: middle;
color: @text-color;
}
&:hover,
&:global(.ant-popover-open) {
background: @primary-1;
}
}
.search {
padding: 0;
margin: 0 12px;
&:hover {
background: transparent;
}
}
.account {
.avatar {
margin: 20px 8px 20px 0;
color: @primary-color;
background: rgba(255, 255, 255, 0.85);
vertical-align: middle;
}
}
}
@media only screen and (max-width: @screen-md) {
.header {
:global(.ant-divider-vertical) {
vertical-align: unset;
}
.name {
display: none;
}
i.trigger {
padding: 0 12px;
}
.logo {
padding-right: 12px;
position: relative;
}
.right {
position: absolute;
right: 12px;
top: 0;
background: #fff;
.account {
.avatar {
margin-right: 0;
}
}
}
}
}
================================================
FILE: app/assets/components/HeaderSearch/demo/basic.md
================================================
---
order: 0
title: 全局搜索
---
通常放置在导航工具条右侧。(点击搜索图标预览效果)
````jsx
import HeaderSearch from 'ant-design-pro/lib/HeaderSearch';
ReactDOM.render(
{
console.log('input', value); // eslint-disable-line
}}
onPressEnter={(value) => {
console.log('enter', value); // eslint-disable-line
}}
/>
, mountNode);
````
================================================
FILE: app/assets/components/HeaderSearch/index.d.ts
================================================
import * as React from 'react';
export interface IHeaderSearchProps {
placeholder?: string;
dataSource?: string[];
onSearch?: (value: string) => void;
onChange?: (value: string) => void;
onPressEnter?: (value: string) => void;
style?: React.CSSProperties;
}
export default class HeaderSearch extends React.Component {}
================================================
FILE: app/assets/components/HeaderSearch/index.js
================================================
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import { Input, Icon, AutoComplete } from 'antd';
import classNames from 'classnames';
import styles from './index.less';
export default class HeaderSearch extends PureComponent {
static defaultProps = {
defaultActiveFirstOption: false,
onPressEnter: () => {},
onSearch: () => {},
className: '',
placeholder: '',
dataSource: [],
defaultOpen: false,
};
static propTypes = {
className: PropTypes.string,
placeholder: PropTypes.string,
onSearch: PropTypes.func,
onPressEnter: PropTypes.func,
defaultActiveFirstOption: PropTypes.bool,
dataSource: PropTypes.array,
defaultOpen: PropTypes.bool,
};
state = {
searchMode: this.props.defaultOpen,
value: '',
};
componentWillUnmount() {
clearTimeout(this.timeout);
}
onKeyDown = e => {
if (e.key === 'Enter') {
this.timeout = setTimeout(() => {
this.props.onPressEnter(this.state.value); // Fix duplicate onPressEnter
}, 0);
}
};
onChange = value => {
this.setState({ value });
if (this.props.onChange) {
this.props.onChange();
}
};
enterSearchMode = () => {
this.setState({ searchMode: true }, () => {
if (this.state.searchMode) {
this.input.focus();
}
});
};
leaveSearchMode = () => {
this.setState({
searchMode: false,
value: '',
});
};
render() {
const { className, placeholder, ...restProps } = this.props;
delete restProps.defaultOpen; // for rc-select not affected
const inputClass = classNames(styles.input, {
[styles.show]: this.state.searchMode,
});
return (
{
this.input = node;
}}
onKeyDown={this.onKeyDown}
onBlur={this.leaveSearchMode}
/>
);
}
}
================================================
FILE: app/assets/components/HeaderSearch/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.headerSearch {
:global(.anticon-search) {
cursor: pointer;
font-size: 16px;
}
.input {
transition: width 0.3s, margin-left 0.3s;
width: 0;
background: transparent;
border-radius: 0;
:global(.ant-select-selection) {
background: transparent;
}
input {
border: 0;
padding-left: 0;
padding-right: 0;
box-shadow: none !important;
}
&,
&:hover,
&:focus {
border-bottom: 1px solid @border-color-base;
}
&.show {
width: 210px;
margin-left: 8px;
}
}
}
================================================
FILE: app/assets/components/HeaderSearch/index.md
================================================
---
title:
en-US: HeaderSearch
zh-CN: HeaderSearch
subtitle: 顶部搜索框
cols: 1
order: 8
---
通常作为全局搜索的入口,放置在导航工具条右侧。
## API
参数 | 说明 | 类型 | 默认值
----|------|-----|------
placeholder | 占位文字 | string | -
dataSource | 当前提示内容列表 | string[] | -
onSearch | 选择某项或按下回车时的回调 | function(value) | -
onChange | 输入搜索字符的回调 | function(value) | -
onPressEnter | 按下回车时的回调 | function(value) | -
defaultOpen | 输入框首次显示是否打开 | boolean | false
================================================
FILE: app/assets/components/JsonSchemaForm/components/AddButton.js
================================================
import React from "react";
import IconButton from "./IconButton";
export default function AddButton({ className, onClick, disabled }) {
return (
);
}
================================================
FILE: app/assets/components/JsonSchemaForm/components/ErrorList.js
================================================
import React from "react";
export default function ErrorList(props) {
const { errors } = props;
return (
Errors
{errors.map((error, i) => {
return (
{error.stack}
);
})}
);
}
================================================
FILE: app/assets/components/JsonSchemaForm/components/Form.js
================================================
import React, { Component } from "react";
import PropTypes from "prop-types";
import { default as DefaultErrorList } from "./ErrorList";
import {
getDefaultFormState,
retrieveSchema,
shouldRender,
toIdSchema,
setState,
getDefaultRegistry,
deepEquals,
} from "../utils";
import validateFormData, { toErrorList } from "../validate";
export default class Form extends Component {
static defaultProps = {
uiSchema: {},
noValidate: false,
liveValidate: false,
disabled: false,
safeRenderCompletion: false,
noHtml5Validate: false,
ErrorList: DefaultErrorList,
};
constructor(props) {
super(props);
this.state = this.getStateFromProps(props);
if (
this.props.onChange &&
!deepEquals(this.state.formData, this.props.formData)
) {
this.props.onChange(this.state);
}
this.formElement = null;
}
componentWillReceiveProps(nextProps) {
const nextState = this.getStateFromProps(nextProps);
if (
!deepEquals(nextState.formData, nextProps.formData) &&
!deepEquals(nextState.formData, this.state.formData) &&
this.props.onChange
) {
this.props.onChange(nextState);
}
this.setState(nextState);
}
getStateFromProps(props) {
const state = this.state || {};
const schema = "schema" in props ? props.schema : this.props.schema;
const uiSchema = "uiSchema" in props ? props.uiSchema : this.props.uiSchema;
const edit = typeof props.formData !== "undefined";
const liveValidate = props.liveValidate || this.props.liveValidate;
const mustValidate = edit && !props.noValidate && liveValidate;
const { definitions } = schema;
const formData = getDefaultFormState(schema, props.formData, definitions);
const retrievedSchema = retrieveSchema(schema, definitions, formData);
const additionalMetaSchemas = props.additionalMetaSchemas;
const { errors, errorSchema } = mustValidate
? this.validate(formData, schema, additionalMetaSchemas)
: {
errors: state.errors || [],
errorSchema: state.errorSchema || {},
};
const idSchema = toIdSchema(
retrievedSchema,
uiSchema["ui:rootFieldId"],
definitions,
formData,
props.idPrefix
);
return {
schema,
uiSchema,
idSchema,
formData,
edit,
errors,
errorSchema,
additionalMetaSchemas,
};
}
shouldComponentUpdate(nextProps, nextState) {
return shouldRender(this, nextProps, nextState);
}
validate(
formData,
schema = this.props.schema,
additionalMetaSchemas = this.props.additionalMetaSchemas
) {
const { validate, transformErrors } = this.props;
const { definitions } = this.getRegistry();
const resolvedSchema = retrieveSchema(schema, definitions, formData);
return validateFormData(
formData,
resolvedSchema,
validate,
transformErrors,
additionalMetaSchemas
);
}
renderErrors() {
const { errors, errorSchema, schema, uiSchema } = this.state;
const { ErrorList, showErrorList, formContext } = this.props;
if (errors.length && showErrorList != false) {
return (
);
}
return null;
}
onChange = (formData, newErrorSchema) => {
const mustValidate = !this.props.noValidate && this.props.liveValidate;
let state = { formData };
if (mustValidate) {
const { errors, errorSchema } = this.validate(formData);
state = { ...state, errors, errorSchema };
} else if (!this.props.noValidate && newErrorSchema) {
state = {
...state,
errorSchema: newErrorSchema,
errors: toErrorList(newErrorSchema),
};
}
setState(this, state, () => {
if (this.props.onChange) {
this.props.onChange(this.state);
}
});
};
onBlur = (...args) => {
if (this.props.onBlur) {
this.props.onBlur(...args);
}
};
onFocus = (...args) => {
if (this.props.onFocus) {
this.props.onFocus(...args);
}
};
onSubmit = event => {
event.preventDefault();
event.persist();
if (!this.props.noValidate) {
const { errors, errorSchema } = this.validate(this.state.formData);
if (Object.keys(errors).length > 0) {
setState(this, { errors, errorSchema }, () => {
if (this.props.onError) {
this.props.onError(errors);
} else {
console.error("Form validation failed", errors);
}
});
return;
}
}
this.setState({ errors: [], errorSchema: {} }, () => {
if (this.props.onSubmit) {
this.props.onSubmit({ ...this.state, status: "submitted" }, event);
}
});
};
getRegistry() {
// For BC, accept passed SchemaField and TitleField props and pass them to
// the "fields" registry one.
const { fields, widgets } = getDefaultRegistry();
return {
fields: { ...fields, ...this.props.fields },
widgets: { ...widgets, ...this.props.widgets },
ArrayFieldTemplate: this.props.ArrayFieldTemplate,
ObjectFieldTemplate: this.props.ObjectFieldTemplate,
FieldTemplate: this.props.FieldTemplate,
definitions: this.props.schema.definitions || {},
formContext: this.props.formContext || {},
};
}
submit() {
if (this.formElement) {
this.formElement.dispatchEvent(new Event("submit", { cancelable: true }));
}
}
render() {
const {
children,
safeRenderCompletion,
id,
idPrefix,
className,
name,
method,
target,
action,
autocomplete,
enctype,
acceptcharset,
noHtml5Validate,
disabled,
} = this.props;
const { schema, uiSchema, formData, errorSchema, idSchema } = this.state;
const registry = this.getRegistry();
const _SchemaField = registry.fields.SchemaField;
return (
);
}
}
if (process.env.NODE_ENV !== "production") {
Form.propTypes = {
schema: PropTypes.object.isRequired,
uiSchema: PropTypes.object,
formData: PropTypes.any,
widgets: PropTypes.objectOf(
PropTypes.oneOfType([PropTypes.func, PropTypes.object])
),
fields: PropTypes.objectOf(PropTypes.func),
ArrayFieldTemplate: PropTypes.func,
ObjectFieldTemplate: PropTypes.func,
FieldTemplate: PropTypes.func,
ErrorList: PropTypes.func,
onChange: PropTypes.func,
onError: PropTypes.func,
showErrorList: PropTypes.bool,
onSubmit: PropTypes.func,
id: PropTypes.string,
className: PropTypes.string,
name: PropTypes.string,
method: PropTypes.string,
target: PropTypes.string,
action: PropTypes.string,
autocomplete: PropTypes.string,
enctype: PropTypes.string,
acceptcharset: PropTypes.string,
noValidate: PropTypes.bool,
noHtml5Validate: PropTypes.bool,
liveValidate: PropTypes.bool,
validate: PropTypes.func,
transformErrors: PropTypes.func,
safeRenderCompletion: PropTypes.bool,
formContext: PropTypes.object,
additionalMetaSchemas: PropTypes.arrayOf(PropTypes.object),
};
}
================================================
FILE: app/assets/components/JsonSchemaForm/components/IconButton.js
================================================
import React from "react";
export default function IconButton(props) {
const { type = "default", icon, className, ...otherProps } = props;
return (
);
}
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/ArrayField.js
================================================
import AddButton from "../AddButton";
import IconButton from "../IconButton";
import React, { Component } from "react";
import includes from "core-js/library/fn/array/includes";
import * as types from "../../types";
import UnsupportedField from "./UnsupportedField";
import {
getWidget,
getDefaultFormState,
getUiOptions,
isMultiSelect,
isFilesArray,
isFixedItems,
allowAdditionalItems,
optionsList,
retrieveSchema,
toIdSchema,
getDefaultRegistry,
} from "../../utils";
function ArrayFieldTitle({ TitleField, idSchema, title, required }) {
if (!title) {
return null;
}
const id = `${idSchema.$id}__title`;
return ;
}
function ArrayFieldDescription({ DescriptionField, idSchema, description }) {
if (!description) {
return null;
}
const id = `${idSchema.$id}__description`;
return ;
}
// Used in the two templates
function DefaultArrayItem(props) {
const btnStyle = {
flex: 1,
paddingLeft: 6,
paddingRight: 6,
fontWeight: "bold",
};
return (
{props.children}
{props.hasToolbar && (
{(props.hasMoveUp || props.hasMoveDown) && (
)}
{(props.hasMoveUp || props.hasMoveDown) && (
)}
{props.hasRemove && (
)}
)}
);
}
function DefaultFixedArrayFieldTemplate(props) {
return (
{(props.uiSchema["ui:description"] || props.schema.description) && (
{props.uiSchema["ui:description"] || props.schema.description}
)}
{props.items && props.items.map(DefaultArrayItem)}
{props.canAdd && (
)}
);
}
function DefaultNormalArrayFieldTemplate(props) {
return (
{(props.uiSchema["ui:description"] || props.schema.description) && (
)}
{props.items && props.items.map(p => DefaultArrayItem(p))}
{props.canAdd && (
)}
);
}
class ArrayField extends Component {
static defaultProps = {
uiSchema: {},
formData: [],
idSchema: {},
required: false,
disabled: false,
readonly: false,
autofocus: false,
};
get itemTitle() {
const { schema } = this.props;
return schema.items.title || schema.items.description || "Item";
}
isItemRequired(itemSchema) {
if (Array.isArray(itemSchema.type)) {
// While we don't yet support composite/nullable jsonschema types, it's
// future-proof to check for requirement against these.
return !includes(itemSchema.type, "null");
}
// All non-null array item types are inherently required by design
return itemSchema.type !== "null";
}
canAddItem(formItems) {
const { schema, uiSchema } = this.props;
let { addable } = getUiOptions(uiSchema);
if (addable !== false) {
// if ui:options.addable was not explicitly set to false, we can add
// another item if we have not exceeded maxItems yet
if (schema.maxItems !== undefined) {
addable = formItems.length < schema.maxItems;
} else {
addable = true;
}
}
return addable;
}
onAddClick = event => {
event.preventDefault();
const { schema, formData, registry = getDefaultRegistry() } = this.props;
const { definitions } = registry;
let itemSchema = schema.items;
if (isFixedItems(schema) && allowAdditionalItems(schema)) {
itemSchema = schema.additionalItems;
}
this.props.onChange([
...formData,
getDefaultFormState(itemSchema, undefined, definitions),
]);
};
onDropIndexClick = index => {
return event => {
if (event) {
event.preventDefault();
}
const { formData, onChange } = this.props;
// refs #195: revalidate to ensure properly reindexing errors
let newErrorSchema;
if (this.props.errorSchema) {
newErrorSchema = {};
const errorSchema = this.props.errorSchema;
for (let i in errorSchema) {
i = parseInt(i);
if (i < index) {
newErrorSchema[i] = errorSchema[i];
} else if (i > index) {
newErrorSchema[i - 1] = errorSchema[i];
}
}
}
onChange(formData.filter((_, i) => i !== index), newErrorSchema);
};
};
onReorderClick = (index, newIndex) => {
return event => {
if (event) {
event.preventDefault();
event.target.blur();
}
const { formData, onChange } = this.props;
let newErrorSchema;
if (this.props.errorSchema) {
newErrorSchema = {};
const errorSchema = this.props.errorSchema;
for (let i in errorSchema) {
if (i == index) {
newErrorSchema[newIndex] = errorSchema[index];
} else if (i == newIndex) {
newErrorSchema[index] = errorSchema[newIndex];
} else {
newErrorSchema[i] = errorSchema[i];
}
}
}
function reOrderArray() {
// Copy item
let newFormData = formData.slice();
// Moves item from index to newIndex
newFormData.splice(index, 1);
newFormData.splice(newIndex, 0, formData[index]);
return newFormData;
}
onChange(reOrderArray(), newErrorSchema);
};
};
onChangeForIndex = index => {
return (value, errorSchema) => {
const { formData, onChange } = this.props;
const newFormData = formData.map((item, i) => {
// We need to treat undefined items as nulls to have validation.
// See https://github.com/tdegrunt/jsonschema/issues/206
const jsonValue = typeof value === "undefined" ? null : value;
return index === i ? jsonValue : item;
});
onChange(
newFormData,
errorSchema &&
this.props.errorSchema && {
...this.props.errorSchema,
[index]: errorSchema,
}
);
};
};
onSelectChange = value => {
this.props.onChange(value);
};
render() {
const {
schema,
uiSchema,
idSchema,
registry = getDefaultRegistry(),
} = this.props;
const { definitions } = registry;
if (!schema.hasOwnProperty("items")) {
return (
);
}
if (isFixedItems(schema)) {
return this.renderFixedArray();
}
if (isFilesArray(schema, uiSchema, definitions)) {
return this.renderFiles();
}
if (isMultiSelect(schema, definitions)) {
return this.renderMultiSelect();
}
return this.renderNormalArray();
}
renderNormalArray() {
const {
schema,
uiSchema,
formData,
errorSchema,
idSchema,
name,
required,
disabled,
readonly,
autofocus,
registry = getDefaultRegistry(),
onBlur,
onFocus,
idPrefix,
rawErrors,
} = this.props;
const title = schema.title === undefined ? name : schema.title;
const { ArrayFieldTemplate, definitions, fields, formContext } = registry;
const { TitleField, DescriptionField } = fields;
const itemsSchema = retrieveSchema(schema.items, definitions);
const arrayProps = {
canAdd: this.canAddItem(formData),
items: Array.isArray(formData) && formData.map((item, index) => {
const itemSchema = retrieveSchema(schema.items, definitions, item);
const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;
const itemIdPrefix = idSchema.$id + "_" + index;
const itemIdSchema = toIdSchema(
itemSchema,
itemIdPrefix,
definitions,
item,
idPrefix
);
return this.renderArrayFieldItem({
index,
canMoveUp: index > 0,
canMoveDown: index < formData.length - 1,
itemSchema: itemSchema,
itemIdSchema,
itemErrorSchema,
itemData: item,
itemUiSchema: uiSchema.items,
autofocus: autofocus && index === 0,
onBlur,
onFocus,
});
}),
className: `field field-array field-array-of-${itemsSchema.type}`,
DescriptionField,
disabled,
idSchema,
uiSchema,
onAddClick: this.onAddClick,
readonly,
required,
schema,
title,
TitleField,
formContext,
formData,
rawErrors,
};
// Check if a custom render function was passed in
const Component = ArrayFieldTemplate || DefaultNormalArrayFieldTemplate;
return ;
}
renderMultiSelect() {
const {
schema,
idSchema,
uiSchema,
formData,
disabled,
readonly,
autofocus,
onBlur,
onFocus,
registry = getDefaultRegistry(),
rawErrors,
} = this.props;
const items = this.props.formData;
const { widgets, definitions, formContext } = registry;
const itemsSchema = retrieveSchema(schema.items, definitions, formData);
const enumOptions = optionsList(itemsSchema);
const { widget = "select", ...options } = {
...getUiOptions(uiSchema),
enumOptions,
};
const Widget = getWidget(schema, widget, widgets);
if (!Widget) return null;
return (
);
}
renderFiles() {
const {
schema,
uiSchema,
idSchema,
name,
disabled,
readonly,
autofocus,
onBlur,
onFocus,
registry = getDefaultRegistry(),
rawErrors,
} = this.props;
const title = schema.title || name;
const items = this.props.formData;
const { widgets, formContext } = registry;
const { widget = "files", ...options } = getUiOptions(uiSchema);
const Widget = getWidget(schema, widget, widgets);
if (!Widget) return null;
return (
);
}
renderFixedArray() {
const {
schema,
uiSchema,
formData,
errorSchema,
idPrefix,
idSchema,
name,
required,
disabled,
readonly,
autofocus,
registry = getDefaultRegistry(),
onBlur,
onFocus,
rawErrors,
} = this.props;
const title = schema.title || name;
let items = this.props.formData;
const { ArrayFieldTemplate, definitions, fields, formContext } = registry;
const { TitleField } = fields;
const itemSchemas = schema.items.map((item, index) =>
retrieveSchema(item, definitions, formData[index])
);
const additionalSchema = allowAdditionalItems(schema)
? retrieveSchema(schema.additionalItems, definitions, formData)
: null;
if (!items || items.length < itemSchemas.length) {
// to make sure at least all fixed items are generated
items = items || [];
items = items.concat(new Array(itemSchemas.length - items.length));
}
// These are the props passed into the render function
const arrayProps = {
canAdd: this.canAddItem(items) && additionalSchema,
className: "field field-array field-array-fixed-items",
disabled,
idSchema,
formData,
items: items.map((item, index) => {
const additional = index >= itemSchemas.length;
const itemSchema = additional
? retrieveSchema(schema.additionalItems, definitions, item)
: itemSchemas[index];
const itemIdPrefix = idSchema.$id + "_" + index;
const itemIdSchema = toIdSchema(
itemSchema,
itemIdPrefix,
definitions,
item,
idPrefix
);
const itemUiSchema = additional
? uiSchema.additionalItems || {}
: Array.isArray(uiSchema.items)
? uiSchema.items[index]
: uiSchema.items || {};
const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;
return this.renderArrayFieldItem({
index,
canRemove: additional,
canMoveUp: index >= itemSchemas.length + 1,
canMoveDown: additional && index < items.length - 1,
itemSchema,
itemData: item,
itemUiSchema,
itemIdSchema,
itemErrorSchema,
autofocus: autofocus && index === 0,
onBlur,
onFocus,
});
}),
onAddClick: this.onAddClick,
readonly,
required,
schema,
uiSchema,
title,
TitleField,
formContext,
rawErrors,
};
// Check if a custom template template was passed in
const Template = ArrayFieldTemplate || DefaultFixedArrayFieldTemplate;
return ;
}
renderArrayFieldItem(props) {
const {
index,
canRemove = true,
canMoveUp = true,
canMoveDown = true,
itemSchema,
itemData,
itemUiSchema,
itemIdSchema,
itemErrorSchema,
autofocus,
onBlur,
onFocus,
rawErrors,
} = props;
const {
disabled,
readonly,
uiSchema,
registry = getDefaultRegistry(),
} = this.props;
const {
fields: { SchemaField },
} = registry;
const { orderable, removable } = {
orderable: true,
removable: true,
...uiSchema["ui:options"],
};
const has = {
moveUp: orderable && canMoveUp,
moveDown: orderable && canMoveDown,
remove: removable && canRemove,
};
has.toolbar = Object.keys(has).some(key => has[key]);
return {
children: (
),
className: "array-item",
disabled,
hasToolbar: has.toolbar,
hasMoveUp: has.moveUp,
hasMoveDown: has.moveDown,
hasRemove: has.remove,
index,
onDropIndexClick: this.onDropIndexClick,
onReorderClick: this.onReorderClick,
readonly,
};
}
}
if (process.env.NODE_ENV !== "production") {
ArrayField.propTypes = types.fieldProps;
}
export default ArrayField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/BooleanField.js
================================================
import React from "react";
import * as types from "../../types";
import {
getWidget,
getUiOptions,
optionsList,
getDefaultRegistry,
} from "../../utils";
function BooleanField(props) {
const {
schema,
name,
uiSchema,
idSchema,
formData,
registry = getDefaultRegistry(),
required,
disabled,
readonly,
autofocus,
onChange,
onFocus,
onBlur,
rawErrors,
} = props;
const { title } = schema;
const { widgets, formContext } = registry;
const { widget = "checkbox", ...options } = getUiOptions(uiSchema);
const Widget = getWidget(schema, widget, widgets);
if (!Widget) return null;
let enumOptions;
if (Array.isArray(schema.oneOf)) {
enumOptions = optionsList({
oneOf: schema.oneOf.map(option => ({
...option,
title: option.title || (option.const === true ? "yes" : "no"),
})),
});
} else {
enumOptions = optionsList({
enum: schema.enum || [true, false],
enumNames:
schema.enumNames ||
(schema.enum && schema.enum[0] === false
? ["no", "yes"]
: ["yes", "no"]),
});
}
return (
);
}
if (process.env.NODE_ENV !== "production") {
BooleanField.propTypes = types.fieldProps;
}
BooleanField.defaultProps = {
uiSchema: {},
disabled: false,
readonly: false,
autofocus: false,
};
export default BooleanField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/DescriptionField.js
================================================
import React from "react";
import PropTypes from "prop-types";
function DescriptionField(props) {
const { id, description } = props;
if (!description) {
return null;
}
if (typeof description === "string") {
return (
{description}
);
} else {
return (
{description}
);
}
}
if (process.env.NODE_ENV !== "production") {
DescriptionField.propTypes = {
id: PropTypes.string,
description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
};
}
export default DescriptionField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/MultiSchemaField.js
================================================
import React, { Component } from "react";
import PropTypes from "prop-types";
import * as types from "../../types";
import { guessType } from "../../utils";
import { isValid } from "../../validate";
class AnyOfField extends Component {
constructor(props) {
super(props);
const { formData, options } = this.props;
this.state = {
selectedOption: this.getMatchingOption(formData, options),
};
}
componentWillReceiveProps(nextProps) {
const matchingOption = this.getMatchingOption(
nextProps.formData,
nextProps.options
);
if (matchingOption === this.state.selectedOption) {
return;
}
this.setState({ selectedOption: matchingOption });
}
getMatchingOption(formData, options) {
for (let i = 0; i < options.length; i++) {
const option = options[i];
// If the schema describes an object then we need to add slightly more
// strict matching to the schema, because unless the schema uses the
// "requires" keyword, an object will match the schema as long as it
// doesn't have matching keys with a conflicting type. To do this we use an
// "anyOf" with an array of requires. This augmentation expresses that the
// schema should match if any of the keys in the schema are present on the
// object and pass validation.
if (option.properties) {
// Create an "anyOf" schema that requires at least one of the keys in the
// "properties" object
const requiresAnyOf = {
anyOf: Object.keys(option.properties).map(key => ({
required: [key],
})),
};
let augmentedSchema;
// If the "anyOf" keyword already exists, wrap the augmentation in an "allOf"
if (option.anyOf) {
// Create a shallow clone of the option
const { ...shallowClone } = option;
if (!shallowClone.allOf) {
shallowClone.allOf = [];
} else {
// If "allOf" already exists, shallow clone the array
shallowClone.allOf = shallowClone.allOf.slice();
}
shallowClone.allOf.push(requiresAnyOf);
augmentedSchema = shallowClone;
} else {
augmentedSchema = Object.assign({}, option, requiresAnyOf);
}
// Remove the "required" field as it's likely that not all fields have
// been filled in yet, which will mean that the schema is not valid
delete augmentedSchema.required;
if (isValid(augmentedSchema, formData)) {
return i;
}
} else if (isValid(options[i], formData)) {
return i;
}
}
// If the form data matches none of the options, use the first option
return 0;
}
onOptionChange = event => {
const selectedOption = parseInt(event.target.value, 10);
const { formData, onChange, options } = this.props;
const newOption = options[selectedOption];
// If the new option is of type object and the current data is an object,
// discard properties added using the old option.
if (
guessType(formData) === "object" &&
(newOption.type === "object" || newOption.properties)
) {
const newFormData = Object.assign({}, formData);
const optionsToDiscard = options.slice();
optionsToDiscard.splice(selectedOption, 1);
// Discard any data added using other options
for (const option of optionsToDiscard) {
if (option.properties) {
for (const key in option.properties) {
if (newFormData.hasOwnProperty(key)) {
delete newFormData[key];
}
}
}
}
onChange(newFormData);
} else {
onChange(undefined);
}
this.setState({
selectedOption: parseInt(event.target.value, 10),
});
};
render() {
const {
baseType,
disabled,
errorSchema,
formData,
idPrefix,
idSchema,
onBlur,
onChange,
onFocus,
options,
registry,
safeRenderCompletion,
uiSchema,
} = this.props;
const _SchemaField = registry.fields.SchemaField;
const { selectedOption } = this.state;
const option = options[selectedOption] || null;
let optionSchema;
if (option) {
// If the subschema doesn't declare a type, infer the type from the
// parent schema
optionSchema = option.type
? option
: Object.assign({}, option, { type: baseType });
}
return (
{options.map((option, index) => {
return (
{option.title || `Option ${index + 1}`}
);
})}
{option !== null && (
<_SchemaField
schema={optionSchema}
uiSchema={uiSchema}
errorSchema={errorSchema}
idSchema={idSchema}
idPrefix={idPrefix}
formData={formData}
onChange={onChange}
onBlur={onBlur}
onFocus={onFocus}
registry={registry}
safeRenderCompletion={safeRenderCompletion}
disabled={disabled}
/>
)}
);
}
}
AnyOfField.defaultProps = {
disabled: false,
errorSchema: {},
idSchema: {},
uiSchema: {},
};
if (process.env.NODE_ENV !== "production") {
AnyOfField.propTypes = {
options: PropTypes.arrayOf(PropTypes.object).isRequired,
baseType: PropTypes.string,
uiSchema: PropTypes.object,
idSchema: PropTypes.object,
formData: PropTypes.any,
errorSchema: PropTypes.object,
registry: types.registry.isRequired,
};
}
export default AnyOfField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/NumberField.js
================================================
import React from "react";
import * as types from "../../types";
import { asNumber } from "../../utils";
// Matches a string that ends in a . character, optionally followed by a sequence of
// digits followed by any number of 0 characters up until the end of the line.
// Ensuring that there is at least one prefixed character is important so that
// you don't incorrectly match against "0".
const trailingCharMatcherWithPrefix = /\.([0-9]*0)*$/;
// This is used for trimming the trailing 0 and . characters without affecting
// the rest of the string. Its possible to use one RegEx with groups for this
// functionality, but it is fairly complex compared to simply defining two
// different matchers.
const trailingCharMatcher = /[0.]0*$/;
/**
* The NumberField class has some special handling for dealing with trailing
* decimal points and/or zeroes. This logic is designed to allow trailing values
* to be visible in the input element, but not be represented in the
* corresponding form data.
*
* The algorithm is as follows:
*
* 1. When the input value changes the value is cached in the component state
*
* 2. The value is then normalized, removing trailing decimal points and zeros,
* then passed to the "onChange" callback
*
* 3. When the component is rendered, the formData value is checked against the
* value cached in the state. If it matches the cached value, the cached
* value is passed to the input instead of the formData value
*/
class NumberField extends React.Component {
constructor(props) {
super(props);
this.state = {
lastValue: props.value,
};
}
handleChange = value => {
// Cache the original value in component state
this.setState({ lastValue: value });
// Normalize decimals that don't start with a zero character in advance so
// that the rest of the normalization logic is simpler
if (`${value}`.charAt(0) === ".") {
value = `0${value}`;
}
// Check that the value is a string (this can happen if the widget used is a
// , due to an enum declaration etc) then, if the value ends in a
// trailing decimal point or multiple zeroes, strip the trailing values
let processed =
typeof value === "string" && value.match(trailingCharMatcherWithPrefix)
? asNumber(value.replace(trailingCharMatcher, ""))
: asNumber(value);
this.props.onChange(processed);
};
render() {
const { StringField } = this.props.registry.fields;
const { formData, ...props } = this.props;
const { lastValue } = this.state;
let value = formData;
if (typeof lastValue === "string" && value) {
// Construct a regular expression that checks for a string that consists
// of the formData value suffixed with zero or one '.' characters and zero
// or more '0' characters
const re = new RegExp(`${value}`.replace(".", "\\.") + "\\.?0*$");
// If the cached "lastValue" is a match, use that instead of the formData
// value to prevent the input value from changing in the UI
if (lastValue.match(re)) {
value = lastValue;
}
}
return (
);
}
}
if (process.env.NODE_ENV !== "production") {
NumberField.propTypes = types.fieldProps;
}
NumberField.defaultProps = {
uiSchema: {},
};
export default NumberField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/ObjectField.js
================================================
import AddButton from "../AddButton";
import React, { Component } from "react";
import * as types from "../../types";
import {
orderProperties,
retrieveSchema,
getDefaultRegistry,
getUiOptions,
ADDITIONAL_PROPERTY_FLAG,
} from "../../utils";
function DefaultObjectFieldTemplate(props) {
const canExpand = function canExpand() {
const { formData, schema, uiSchema } = props;
if (!schema.additionalProperties) {
return false;
}
const { expandable } = getUiOptions(uiSchema);
if (expandable === false) {
return expandable;
}
// if ui:options.expandable was not explicitly set to false, we can add
// another property if we have not exceeded maxProperties yet
if (schema.maxProperties !== undefined) {
return Object.keys(formData).length < schema.maxProperties;
}
return true;
};
const { TitleField, DescriptionField } = props;
return (
{(props.uiSchema["ui:title"] || props.title) && (
)}
{props.description && (
)}
{props.properties.map(prop => prop.content)}
{canExpand() && (
)}
);
}
class ObjectField extends Component {
static defaultProps = {
uiSchema: {},
formData: {},
errorSchema: {},
idSchema: {},
required: false,
disabled: false,
readonly: false,
};
state = {
additionalProperties: {},
};
isRequired(name) {
const schema = this.props.schema;
return (
Array.isArray(schema.required) && schema.required.indexOf(name) !== -1
);
}
onPropertyChange = (name, addedByAdditionalProperties = false) => {
return (value, errorSchema) => {
if (!value && addedByAdditionalProperties) {
// Don't set value = undefined for fields added by
// additionalProperties. Doing so removes them from the
// formData, which causes them to completely disappear
// (including the input field for the property name). Unlike
// fields which are "mandated" by the schema, these fields can
// be set to undefined by clicking a "delete field" button, so
// set empty values to the empty string.
value = "";
}
const newFormData = { ...this.props.formData, [name]: value };
this.props.onChange(
newFormData,
errorSchema &&
this.props.errorSchema && {
...this.props.errorSchema,
[name]: errorSchema,
}
);
};
};
onDropPropertyClick = key => {
return event => {
event.preventDefault();
const { onChange, formData } = this.props;
const copiedFormData = { ...formData };
delete copiedFormData[key];
onChange(copiedFormData);
};
};
getAvailableKey = (preferredKey, formData) => {
var index = 0;
var newKey = preferredKey;
while (formData.hasOwnProperty(newKey)) {
newKey = `${preferredKey}-${++index}`;
}
return newKey;
};
onKeyChange = oldValue => {
return (value, errorSchema) => {
if (oldValue === value) {
return;
}
value = this.getAvailableKey(value, this.props.formData);
const newFormData = { ...this.props.formData };
const newKeys = { [oldValue]: value };
const keyValues = Object.keys(newFormData).map(key => {
const newKey = newKeys[key] || key;
return { [newKey]: newFormData[key] };
});
const renamedObj = Object.assign({}, ...keyValues);
this.props.onChange(
renamedObj,
errorSchema &&
this.props.errorSchema && {
...this.props.errorSchema,
[value]: errorSchema,
}
);
};
};
getDefaultValue(type) {
switch (type) {
case "string":
return "New Value";
case "array":
return [];
case "boolean":
return false;
case "null":
return null;
case "number":
return 0;
case "object":
return {};
default:
// We don't have a datatype for some reason (perhaps additionalProperties was true)
return "New Value";
}
}
handleAddClick = schema => () => {
const type = schema.additionalProperties.type;
const newFormData = { ...this.props.formData };
newFormData[
this.getAvailableKey("newKey", newFormData)
] = this.getDefaultValue(type);
this.props.onChange(newFormData);
};
render() {
const {
uiSchema,
formData,
errorSchema,
idSchema,
name,
required,
disabled,
readonly,
idPrefix,
onBlur,
onFocus,
registry = getDefaultRegistry(),
} = this.props;
const { definitions, fields, formContext } = registry;
const { SchemaField, TitleField, DescriptionField } = fields;
const schema = retrieveSchema(this.props.schema, definitions, formData);
const title = schema.title === undefined ? name : schema.title;
const description = uiSchema["ui:description"] || schema.description;
let orderedProperties;
try {
const properties = Object.keys(schema.properties || {});
orderedProperties = orderProperties(properties, uiSchema["ui:order"]);
} catch (err) {
return (
Invalid {name || "root"} object field configuration:
{err.message} .
{JSON.stringify(schema)}
);
}
const Template = registry.ObjectFieldTemplate || DefaultObjectFieldTemplate;
const templateProps = {
title: uiSchema["ui:title"] || title,
description,
TitleField,
DescriptionField,
properties: orderedProperties.map(name => {
const addedByAdditionalProperties = schema.properties[
name
].hasOwnProperty(ADDITIONAL_PROPERTY_FLAG);
return {
content: (
),
name,
readonly,
disabled,
required,
};
}),
readonly,
disabled,
required,
idSchema,
uiSchema,
schema,
formData,
formContext,
};
return ;
}
}
if (process.env.NODE_ENV !== "production") {
ObjectField.propTypes = types.fieldProps;
}
export default ObjectField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/SchemaField.js
================================================
import { ADDITIONAL_PROPERTY_FLAG } from "../../utils";
import IconButton from "../IconButton";
import React from "react";
import PropTypes from "prop-types";
import * as types from "../../types";
import {
isMultiSelect,
isSelect,
retrieveSchema,
toIdSchema,
getDefaultRegistry,
mergeObjects,
getUiOptions,
isFilesArray,
deepEquals,
getSchemaType,
} from "../../utils";
import UnsupportedField from "./UnsupportedField";
const REQUIRED_FIELD_SYMBOL = "*";
const COMPONENT_TYPES = {
array: "ArrayField",
boolean: "BooleanField",
integer: "NumberField",
number: "NumberField",
object: "ObjectField",
string: "StringField",
};
function getFieldComponent(schema, uiSchema, idSchema, fields) {
const field = uiSchema["ui:field"];
if (typeof field === "function") {
return field;
}
if (typeof field === "string" && field in fields) {
return fields[field];
}
const componentName = COMPONENT_TYPES[getSchemaType(schema)];
// If the type is not defined and the schema uses 'anyOf' or 'oneOf', don't
// render a field and let the MultiSchemaField component handle the form display
if (!componentName && (schema.anyOf || schema.oneOf)) {
return () => null;
}
return componentName in fields
? fields[componentName]
: () => {
return (
);
};
}
function Label(props) {
const { label, required, id } = props;
if (!label) {
return null;
}
return (
{label}
{required && {REQUIRED_FIELD_SYMBOL} }
);
}
function LabelInput(props) {
const { id, label, onChange } = props;
return (
onChange(event.target.value)}
defaultValue={label}
/>
);
}
function Help(props) {
const { help } = props;
if (!help) {
return null;
}
if (typeof help === "string") {
return {help}
;
}
return {help}
;
}
function ErrorList(props) {
const { errors = [] } = props;
if (errors.length === 0) {
return null;
}
return (
{errors
.filter(elem => !!elem)
.map((error, index) => {
return (
{error}
);
})}
);
}
function DefaultTemplate(props) {
const {
id,
label,
children,
errors,
help,
description,
hidden,
required,
displayLabel,
} = props;
if (hidden) {
return {children}
;
}
return (
{displayLabel && }
{displayLabel && description ? description : null}
{children}
{errors}
{help}
);
}
if (process.env.NODE_ENV !== "production") {
DefaultTemplate.propTypes = {
id: PropTypes.string,
classNames: PropTypes.string,
label: PropTypes.string,
children: PropTypes.node.isRequired,
errors: PropTypes.element,
rawErrors: PropTypes.arrayOf(PropTypes.string),
help: PropTypes.element,
rawHelp: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
description: PropTypes.element,
rawDescription: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
hidden: PropTypes.bool,
required: PropTypes.bool,
readonly: PropTypes.bool,
displayLabel: PropTypes.bool,
fields: PropTypes.object,
formContext: PropTypes.object,
};
}
DefaultTemplate.defaultProps = {
hidden: false,
readonly: false,
required: false,
displayLabel: true,
};
function WrapIfAdditional(props) {
const {
id,
classNames,
disabled,
label,
onKeyChange,
onDropPropertyClick,
readonly,
required,
schema,
} = props;
const keyLabel = `${label} Key`; // i18n ?
const additional = schema.hasOwnProperty(ADDITIONAL_PROPERTY_FLAG);
if (!additional) {
return {props.children}
;
}
return (
);
}
function SchemaFieldRender(props) {
const {
uiSchema,
formData,
errorSchema,
idPrefix,
name,
onKeyChange,
onDropPropertyClick,
required,
registry = getDefaultRegistry(),
} = props;
const {
definitions,
fields,
formContext,
FieldTemplate = DefaultTemplate,
} = registry;
let idSchema = props.idSchema;
const schema = retrieveSchema(props.schema, definitions, formData);
idSchema = mergeObjects(
toIdSchema(schema, null, definitions, formData, idPrefix),
idSchema
);
const FieldComponent = getFieldComponent(schema, uiSchema, idSchema, fields);
const { DescriptionField } = fields;
const disabled = Boolean(props.disabled || uiSchema["ui:disabled"]);
const readonly = Boolean(props.readonly || uiSchema["ui:readonly"]);
const autofocus = Boolean(props.autofocus || uiSchema["ui:autofocus"]);
if (Object.keys(schema).length === 0) {
return null;
}
const uiOptions = getUiOptions(uiSchema);
let { label: displayLabel = true } = uiOptions;
if (schema.type === "array") {
displayLabel =
isMultiSelect(schema, definitions) ||
isFilesArray(schema, uiSchema, definitions);
}
if (schema.type === "object") {
displayLabel = false;
}
if (schema.type === "boolean" && !uiSchema["ui:widget"]) {
displayLabel = false;
}
if (uiSchema["ui:field"]) {
displayLabel = false;
}
const { __errors, ...fieldErrorSchema } = errorSchema;
// See #439: uiSchema: Don't pass consumed class names to child components
const field = (
);
const { type } = schema;
const id = idSchema.$id;
const label =
uiSchema["ui:title"] || props.schema.title || schema.title || name;
const description =
uiSchema["ui:description"] ||
props.schema.description ||
schema.description;
const errors = __errors;
const help = uiSchema["ui:help"];
const hidden = uiSchema["ui:widget"] === "hidden";
const classNames = [
"form-group",
"field",
`field-${type}`,
errors && errors.length > 0 ? "field-error has-error has-danger" : "",
uiSchema.classNames,
]
.join(" ")
.trim();
const fieldProps = {
description: (
),
rawDescription: description,
help: ,
rawHelp: typeof help === "string" ? help : undefined,
errors: ,
rawErrors: errors,
id,
label,
hidden,
onKeyChange,
onDropPropertyClick,
required,
disabled,
readonly,
displayLabel,
classNames,
formContext,
fields,
schema,
uiSchema,
};
const _AnyOfField = registry.fields.AnyOfField;
const _OneOfField = registry.fields.OneOfField;
return (
{field}
{/*
If the schema `anyOf` or 'oneOf' can be rendered as a select control, don't
render the selection and let `StringField` component handle
rendering
*/}
{schema.anyOf && !isSelect(schema) && (
<_AnyOfField
disabled={disabled}
errorSchema={errorSchema}
formData={formData}
idPrefix={idPrefix}
idSchema={idSchema}
onBlur={props.onBlur}
onChange={props.onChange}
onFocus={props.onFocus}
options={schema.anyOf}
baseType={schema.type}
registry={registry}
safeRenderCompletion={props.safeRenderCompletion}
uiSchema={uiSchema}
/>
)}
{schema.oneOf && !isSelect(schema) && (
<_OneOfField
disabled={disabled}
errorSchema={errorSchema}
formData={formData}
idPrefix={idPrefix}
idSchema={idSchema}
onBlur={props.onBlur}
onChange={props.onChange}
onFocus={props.onFocus}
options={schema.oneOf}
baseType={schema.type}
registry={registry}
safeRenderCompletion={props.safeRenderCompletion}
uiSchema={uiSchema}
/>
)}
);
}
class SchemaField extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
// if schemas are equal idSchemas will be equal as well,
// so it is not necessary to compare
return !deepEquals(
{ ...this.props, idSchema: undefined },
{ ...nextProps, idSchema: undefined }
);
}
render() {
return SchemaFieldRender(this.props);
}
}
SchemaField.defaultProps = {
uiSchema: {},
errorSchema: {},
idSchema: {},
disabled: false,
readonly: false,
autofocus: false,
};
if (process.env.NODE_ENV !== "production") {
SchemaField.propTypes = {
schema: PropTypes.object.isRequired,
uiSchema: PropTypes.object,
idSchema: PropTypes.object,
formData: PropTypes.any,
errorSchema: PropTypes.object,
registry: types.registry.isRequired,
};
}
export default SchemaField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/StringField.js
================================================
import React from "react";
import * as types from "../../types";
import {
getWidget,
getUiOptions,
isSelect,
optionsList,
getDefaultRegistry,
} from "../../utils";
function StringField(props) {
const {
schema,
name,
uiSchema,
idSchema,
formData,
required,
disabled,
readonly,
autofocus,
onChange,
onBlur,
onFocus,
registry = getDefaultRegistry(),
rawErrors,
} = props;
const { title, format } = schema;
const { widgets, formContext } = registry;
const enumOptions = isSelect(schema) && optionsList(schema);
const defaultWidget = format || (enumOptions ? "select" : "text");
const { widget = defaultWidget, placeholder = "", ...options } = getUiOptions(
uiSchema
);
const Widget = getWidget(schema, widget, widgets);
if (!Widget) return null;
return (
);
}
if (process.env.NODE_ENV !== "production") {
StringField.propTypes = types.fieldProps;
}
StringField.defaultProps = {
uiSchema: {},
disabled: false,
readonly: false,
autofocus: false,
};
export default StringField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/TitleField.js
================================================
import React from "react";
import PropTypes from "prop-types";
const REQUIRED_FIELD_SYMBOL = "*";
function TitleField(props) {
const { id, title, required } = props;
return (
{title}
{required && {REQUIRED_FIELD_SYMBOL} }
);
}
if (process.env.NODE_ENV !== "production") {
TitleField.propTypes = {
id: PropTypes.string,
title: PropTypes.string,
required: PropTypes.bool,
};
}
export default TitleField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/UnsupportedField.js
================================================
import React from "react";
import PropTypes from "prop-types";
function UnsupportedField({ schema, idSchema, reason }) {
return (
Unsupported field schema
{idSchema && idSchema.$id && (
{" for"} field {idSchema.$id}
)}
{reason && : {reason} }.
{schema &&
{JSON.stringify(schema, null, 2)} }
);
}
if (process.env.NODE_ENV !== "production") {
UnsupportedField.propTypes = {
schema: PropTypes.object.isRequired,
idSchema: PropTypes.object,
reason: PropTypes.string,
};
}
export default UnsupportedField;
================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/index.js
================================================
import ArrayField from "./ArrayField";
import BooleanField from "./BooleanField";
import DescriptionField from "./DescriptionField";
import MultiSchemaField from "./MultiSchemaField";
import NumberField from "./NumberField";
import ObjectField from "./ObjectField";
import SchemaField from "./SchemaField";
import StringField from "./StringField";
import TitleField from "./TitleField";
import UnsupportedField from "./UnsupportedField";
export default {
AnyOfField: MultiSchemaField,
ArrayField,
BooleanField,
DescriptionField,
NumberField,
ObjectField,
OneOfField: MultiSchemaField,
SchemaField,
StringField,
TitleField,
UnsupportedField,
};
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/AltDateTimeWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
import AltDateWidget from "./AltDateWidget";
function AltDateTimeWidget(props) {
const { AltDateWidget } = props.registry.widgets;
return ;
}
if (process.env.NODE_ENV !== "production") {
AltDateTimeWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
value: PropTypes.string,
required: PropTypes.bool,
onChange: PropTypes.func,
options: PropTypes.object,
};
}
AltDateTimeWidget.defaultProps = {
...AltDateWidget.defaultProps,
time: true,
};
export default AltDateTimeWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/AltDateWidget.js
================================================
import React, { Component } from "react";
import PropTypes from "prop-types";
import { shouldRender, parseDateString, toDateString, pad } from "../../utils";
function rangeOptions(start, stop) {
let options = [];
for (let i = start; i <= stop; i++) {
options.push({ value: i, label: pad(i, 2) });
}
return options;
}
function readyForChange(state) {
return Object.keys(state).every(key => state[key] !== -1);
}
function DateElement(props) {
const {
type,
range,
value,
select,
rootId,
disabled,
readonly,
autofocus,
registry,
onBlur,
} = props;
const id = rootId + "_" + type;
const { SelectWidget } = registry.widgets;
return (
select(type, value)}
onBlur={onBlur}
/>
);
}
class AltDateWidget extends Component {
static defaultProps = {
time: false,
disabled: false,
readonly: false,
autofocus: false,
options: {
yearsRange: [1900, new Date().getFullYear() + 2],
},
};
constructor(props) {
super(props);
this.state = parseDateString(props.value, props.time);
}
componentWillReceiveProps(nextProps) {
this.setState(parseDateString(nextProps.value, nextProps.time));
}
shouldComponentUpdate(nextProps, nextState) {
return shouldRender(this, nextProps, nextState);
}
onChange = (property, value) => {
this.setState(
{ [property]: typeof value === "undefined" ? -1 : value },
() => {
// Only propagate to parent state if we have a complete date{time}
if (readyForChange(this.state)) {
this.props.onChange(toDateString(this.state, this.props.time));
}
}
);
};
setNow = event => {
event.preventDefault();
const { time, disabled, readonly, onChange } = this.props;
if (disabled || readonly) {
return;
}
const nowDateObj = parseDateString(new Date().toJSON(), time);
this.setState(nowDateObj, () => onChange(toDateString(this.state, time)));
};
clear = event => {
event.preventDefault();
const { time, disabled, readonly, onChange } = this.props;
if (disabled || readonly) {
return;
}
this.setState(parseDateString("", time), () => onChange(undefined));
};
get dateElementProps() {
const { time, options } = this.props;
const { year, month, day, hour, minute, second } = this.state;
const data = [
{
type: "year",
range: options.yearsRange,
value: year,
},
{ type: "month", range: [1, 12], value: month },
{ type: "day", range: [1, 31], value: day },
];
if (time) {
data.push(
{ type: "hour", range: [0, 23], value: hour },
{ type: "minute", range: [0, 59], value: minute },
{ type: "second", range: [0, 59], value: second }
);
}
return data;
}
render() {
const {
id,
disabled,
readonly,
autofocus,
registry,
onBlur,
options,
} = this.props;
return (
{this.dateElementProps.map((elemProps, i) => (
))}
{(options.hideNowButton !== "undefined"
? !options.hideNowButton
: true) && (
Now
)}
{(options.hideClearButton !== "undefined"
? !options.hideClearButton
: true) && (
Clear
)}
);
}
}
if (process.env.NODE_ENV !== "production") {
AltDateWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
value: PropTypes.string,
required: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
onBlur: PropTypes.func,
time: PropTypes.bool,
options: PropTypes.object,
};
}
export default AltDateWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/BaseInput.js
================================================
import React from "react";
import PropTypes from "prop-types";
function BaseInput(props) {
// Note: since React 15.2.0 we can't forward unknown element attributes, so we
// exclude the "options" and "schema" ones here.
if (!props.id) {
console.log("No id for", props);
throw new Error(`no id for props ${JSON.stringify(props)}`);
}
const {
value,
readonly,
disabled,
autofocus,
onBlur,
onFocus,
options,
schema,
formContext,
registry,
rawErrors,
...inputProps
} = props;
// If options.inputType is set use that as the input type
if (options.inputType) {
inputProps.type = options.inputType;
} else if (!inputProps.type) {
// If the schema is of type number or integer, set the input type to number
if (schema.type === "number") {
inputProps.type = "number";
// Setting step to 'any' fixes a bug in Safari where decimals are not
// allowed in number inputs
inputProps.step = "any";
} else if (schema.type === "integer") {
inputProps.type = "number";
// Since this is integer, you always want to step up or down in multiples
// of 1
inputProps.step = "1";
} else {
inputProps.type = "text";
}
}
// If multipleOf is defined, use this as the step value. This mainly improves
// the experience for keyboard users (who can use the up/down KB arrows).
if (schema.multipleOf) {
inputProps.step = schema.multipleOf;
}
const _onChange = ({ target: { value } }) => {
return props.onChange(value === "" ? options.emptyValue : value);
};
return (
onBlur(inputProps.id, event.target.value))}
onFocus={onFocus && (event => onFocus(inputProps.id, event.target.value))}
/>
);
}
BaseInput.defaultProps = {
required: false,
disabled: false,
readonly: false,
autofocus: false,
};
if (process.env.NODE_ENV !== "production") {
BaseInput.propTypes = {
id: PropTypes.string.isRequired,
placeholder: PropTypes.string,
value: PropTypes.any,
required: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
onBlur: PropTypes.func,
onFocus: PropTypes.func,
};
}
export default BaseInput;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/CheckboxWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
import DescriptionField from "../fields/DescriptionField.js";
// Check to see if a schema specifies that a value must be true
function schemaRequiresTrueValue(schema) {
// Check if const is a truthy value
if (schema.const) {
return true;
}
// Check if an enum has a single value of true
if (schema.enum && schema.enum.length === 1 && schema.enum[0] === true) {
return true;
}
// If anyOf has a single value, evaluate the subschema
if (schema.anyOf && schema.anyOf.length === 1) {
return schemaRequiresTrueValue(schema.anyOf[0]);
}
// If oneOf has a single value, evaluate the subschema
if (schema.oneOf && schema.oneOf.length === 1) {
return schemaRequiresTrueValue(schema.oneOf[0]);
}
// Evaluate each subschema in allOf, to see if one of them requires a true
// value
if (schema.allOf) {
return schema.allOf.some(schemaRequiresTrueValue);
}
}
function CheckboxWidget(props) {
const {
schema,
id,
value,
disabled,
readonly,
label,
autofocus,
onBlur,
onFocus,
onChange,
} = props;
// Because an unchecked checkbox will cause html5 validation to fail, only add
// the "required" attribute if the field value must be "true", due to the
// "const" or "enum" keywords
const required = schemaRequiresTrueValue(schema);
return (
{schema.description && (
)}
onChange(event.target.checked)}
onBlur={onBlur && (event => onBlur(id, event.target.checked))}
onFocus={onFocus && (event => onFocus(id, event.target.checked))}
/>
{label}
);
}
CheckboxWidget.defaultProps = {
autofocus: false,
};
if (process.env.NODE_ENV !== "production") {
CheckboxWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
value: PropTypes.bool,
required: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
};
}
export default CheckboxWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/CheckboxesWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function selectValue(value, selected, all) {
const at = all.indexOf(value);
const updated = selected.slice(0, at).concat(value, selected.slice(at));
// As inserting values at predefined index positions doesn't work with empty
// arrays, we need to reorder the updated selection to match the initial order
return updated.sort((a, b) => all.indexOf(a) > all.indexOf(b));
}
function deselectValue(value, selected) {
return selected.filter(v => v !== value);
}
function CheckboxesWidget(props) {
const { id, disabled, options, value, autofocus, readonly, onChange } = props;
const { enumOptions, enumDisabled, inline } = options;
return (
{enumOptions.map((option, index) => {
const checked = value.indexOf(option.value) !== -1;
const itemDisabled =
enumDisabled && enumDisabled.indexOf(option.value) != -1;
const disabledCls =
disabled || itemDisabled || readonly ? "disabled" : "";
const checkbox = (
{
const all = enumOptions.map(({ value }) => value);
if (event.target.checked) {
onChange(selectValue(option.value, value, all));
} else {
onChange(deselectValue(option.value, value));
}
}}
/>
{option.label}
);
return inline ? (
{checkbox}
) : (
{checkbox}
);
})}
);
}
CheckboxesWidget.defaultProps = {
autofocus: false,
options: {
inline: false,
},
};
if (process.env.NODE_ENV !== "production") {
CheckboxesWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
options: PropTypes.shape({
enumOptions: PropTypes.array,
inline: PropTypes.bool,
}).isRequired,
value: PropTypes.any,
required: PropTypes.bool,
readonly: PropTypes.bool,
disabled: PropTypes.bool,
multiple: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
};
}
export default CheckboxesWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/ColorWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function ColorWidget(props) {
const {
disabled,
readonly,
registry: {
widgets: { BaseInput },
},
} = props;
return ;
}
if (process.env.NODE_ENV !== "production") {
ColorWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
value: PropTypes.string,
required: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
};
}
export default ColorWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/DateTimeWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
import { pad } from "../../utils";
export function utcToLocal(jsonDate) {
if (!jsonDate) {
return "";
}
// required format of `"yyyy-MM-ddThh:mm" followed by optional ":ss" or ":ss.SSS"
// https://html.spec.whatwg.org/multipage/input.html#local-date-and-time-state-(type%3Ddatetime-local)
// > should be a _valid local date and time string_ (not GMT)
// Note - date constructor passed local ISO-8601 does not correctly
// change time to UTC in node pre-8
const date = new Date(jsonDate);
const yyyy = pad(date.getFullYear(), 4);
const MM = pad(date.getMonth() + 1, 2);
const dd = pad(date.getDate(), 2);
const hh = pad(date.getHours(), 2);
const mm = pad(date.getMinutes(), 2);
const ss = pad(date.getSeconds(), 2);
const SSS = pad(date.getMilliseconds(), 3);
return `${yyyy}-${MM}-${dd}T${hh}:${mm}:${ss}.${SSS}`;
}
export function localToUTC(dateString) {
if (dateString) {
return new Date(dateString).toJSON();
}
}
function DateTimeWidget(props) {
const {
value,
onChange,
registry: {
widgets: { BaseInput },
},
} = props;
return (
onChange(localToUTC(value))}
/>
);
}
if (process.env.NODE_ENV !== "production") {
DateTimeWidget.propTypes = {
value: PropTypes.string,
};
}
export default DateTimeWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/DateWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function DateWidget(props) {
const {
onChange,
registry: {
widgets: { BaseInput },
},
} = props;
return (
onChange(value || undefined)}
/>
);
}
if (process.env.NODE_ENV !== "production") {
DateWidget.propTypes = {
value: PropTypes.string,
};
}
export default DateWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/EmailWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function EmailWidget(props) {
const { BaseInput } = props.registry.widgets;
return ;
}
if (process.env.NODE_ENV !== "production") {
EmailWidget.propTypes = {
value: PropTypes.string,
};
}
export default EmailWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/FileWidget.js
================================================
import React, { Component } from "react";
import PropTypes from "prop-types";
import ImageZoom from "react-medium-image-zoom";
import ca from '../../../../utils/ca';
import { shouldRender, setState } from "../../utils";
import constants from "../../constants";
function addNameToDataURL(dataURL, name) {
return dataURL.replace(";base64", `;name=${name};base64`);
}
function processFile(file) {
const { name, size, type } = file;
return new Promise((resolve, reject) => {
const reader = new window.FileReader();
reader.onerror = reject;
reader.onload = event => {
resolve({
dataURL: addNameToDataURL(event.target.result, name),
name,
size,
type,
});
};
reader.readAsDataURL(file);
});
}
function processFiles(files) {
return Promise.all([].map.call(files, processFile));
}
class FilesInfo extends Component {
render() {
const { filesInfo, values, value, id } = this.props;
const arrayData = values[0] ? values : filesInfo;
return (
{arrayData.map((val) => {
// val = val ? val.replace(/https:\/\/8\.yingyinglicai\.com\/lyfe\/dms\/res/, 'http://10.100.8.30:5000/lyfe/dms/res') : val;
// const newVal = value ? value.replace(/https:\/\/8\.yingyinglicai\.com\/lyfe\/dms\/res/, 'http://10.100.8.30:5000/lyfe/dms/res') : val;
const newVal = val
return (
);
})}
);
}
}
class FileWidget extends Component {
constructor(props) {
super(props);
const { value } = props;
const values = Array.isArray(value) ? value : [value];
// 直接使用url地址
this.state = { values, filesInfo: values };
}
shouldComponentUpdate(nextProps, nextState) {
return shouldRender(this, nextProps, nextState);
}
onChange = async event => {
const { multiple, onChange } = this.props;
const files = event.target.files;
const filesInfo = await processFiles(event.target.files);
const fileValue = await Promise.all(
await filesInfo.map(async (fileInfo, i) => {
const form = new FormData();
form.append("resource", files[i]);
const res = await ca({
method: "POST",
url: '/api/putFileByPath',
data: form,
});
return res;
})
);
const state = {
values: fileValue,
filesInfo,
};
setState(this, state, () => {
if (multiple) {
onChange(state.values);
} else {
onChange(state.values[0]);
}
});
};
render() {
const { multiple, id, readonly, disabled, autofocus, value } = this.props;
const { filesInfo, values } = this.state;
return (
);
}
}
FileWidget.defaultProps = {
autofocus: false,
};
if (process.env.NODE_ENV !== "production") {
FileWidget.propTypes = {
multiple: PropTypes.bool,
value: PropTypes.oneOfType([
PropTypes.string,
PropTypes.arrayOf(PropTypes.string),
]),
autofocus: PropTypes.bool,
};
}
export default FileWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/HiddenWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function HiddenWidget({ id, value }) {
return (
);
}
if (process.env.NODE_ENV !== "production") {
HiddenWidget.propTypes = {
id: PropTypes.string.isRequired,
value: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.bool,
]),
};
}
export default HiddenWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/PasswordWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function PasswordWidget(props) {
const { BaseInput } = props.registry.widgets;
return ;
}
if (process.env.NODE_ENV !== "production") {
PasswordWidget.propTypes = {
value: PropTypes.string,
};
}
export default PasswordWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/RadioWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function RadioWidget(props) {
const {
options,
value,
required,
disabled,
readonly,
autofocus,
onBlur,
onFocus,
onChange,
id,
} = props;
// Generating a unique field name to identify this set of radio buttons
const name = Math.random().toString();
const { enumOptions, enumDisabled, inline } = options;
// checked={checked} has been moved above name={name}, As mentioned in #349;
// this is a temporary fix for radio button rendering bug in React, facebook/react#7630.
return (
{enumOptions.map((option, i) => {
const checked = option.value === value;
const itemDisabled =
enumDisabled && enumDisabled.indexOf(option.value) != -1;
const disabledCls =
disabled || itemDisabled || readonly ? "disabled" : "";
const radio = (
onChange(option.value)}
onBlur={onBlur && (event => onBlur(id, event.target.value))}
onFocus={onFocus && (event => onFocus(id, event.target.value))}
/>
{option.label}
);
return inline ? (
{radio}
) : (
{radio}
);
})}
);
}
RadioWidget.defaultProps = {
autofocus: false,
};
if (process.env.NODE_ENV !== "production") {
RadioWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
options: PropTypes.shape({
enumOptions: PropTypes.array,
inline: PropTypes.bool,
}).isRequired,
value: PropTypes.any,
required: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
};
}
export default RadioWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/RangeWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
import { rangeSpec } from "../../utils";
function RangeWidget(props) {
const {
schema,
value,
registry: {
widgets: { BaseInput },
},
} = props;
return (
{value}
);
}
if (process.env.NODE_ENV !== "production") {
RangeWidget.propTypes = {
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
};
}
export default RangeWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/SelectWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
import { asNumber, guessType } from "../../utils";
const nums = new Set(["number", "integer"]);
/**
* This is a silly limitation in the DOM where option change event values are
* always retrieved as strings.
*/
function processValue(schema, value) {
// "enum" is a reserved word, so only "type" and "items" can be destructured
const { type, items } = schema;
if (value === "") {
return undefined;
} else if (type === "array" && items && nums.has(items.type)) {
return value.map(asNumber);
} else if (type === "boolean") {
return value === "true";
} else if (type === "number") {
return asNumber(value);
}
// If type is undefined, but an enum is present, try and infer the type from
// the enum values
if (schema.enum) {
if (schema.enum.every(x => guessType(x) === "number")) {
return asNumber(value);
} else if (schema.enum.every(x => guessType(x) === "boolean")) {
return value === "true";
}
}
return value;
}
function getValue(event, multiple) {
if (multiple) {
return [].slice
.call(event.target.options)
.filter(o => o.selected)
.map(o => o.value);
} else {
return event.target.value;
}
}
function SelectWidget(props) {
const {
schema,
id,
options,
value,
required,
disabled,
readonly,
multiple,
autofocus,
onChange,
onBlur,
onFocus,
placeholder,
} = props;
const { enumOptions, enumDisabled } = options;
const emptyValue = multiple ? [] : "";
return (
{
const newValue = getValue(event, multiple);
onBlur(id, processValue(schema, newValue));
})
}
onFocus={
onFocus &&
(event => {
const newValue = getValue(event, multiple);
onFocus(id, processValue(schema, newValue));
})
}
onChange={event => {
const newValue = getValue(event, multiple);
onChange(processValue(schema, newValue));
}}>
{!multiple && schema.default === undefined && (
{placeholder}
)}
{enumOptions.map(({ value, label }, i) => {
const disabled = enumDisabled && enumDisabled.indexOf(value) != -1;
return (
{label}
);
})}
);
}
SelectWidget.defaultProps = {
autofocus: false,
};
if (process.env.NODE_ENV !== "production") {
SelectWidget.propTypes = {
schema: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
options: PropTypes.shape({
enumOptions: PropTypes.array,
}).isRequired,
value: PropTypes.any,
required: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
multiple: PropTypes.bool,
autofocus: PropTypes.bool,
onChange: PropTypes.func,
onBlur: PropTypes.func,
onFocus: PropTypes.func,
};
}
export default SelectWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/TextWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function TextWidget(props) {
const { BaseInput } = props.registry.widgets;
return ;
}
if (process.env.NODE_ENV !== "production") {
TextWidget.propTypes = {
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
id: PropTypes.string,
};
}
export default TextWidget;
================================================
FILE: app/assets/components/JsonSchemaForm/components/widgets/TextareaWidget.js
================================================
import React from "react";
import PropTypes from "prop-types";
function TextareaWidget(props) {
const {
id,
options,
placeholder,
value,
required,
disabled,
readonly,
autofocus,
onChange,
onBlur,
onFocus,
} = props;
const _onChange = ({ target: { value } }) => {
return onChange(value === "" ? options.emptyValue : value);
};
return (
) : (
item.name
)
}
key={item.path}
>
{childrenItems}
);
}
return null;
} else {
return {this.getMenuItemPath(item)} ;
}
};
/**
* 获得菜单子节点
* @memberof SiderMenu
*/
getNavMenuItems = menusData => {
if (!menusData) {
return [];
}
return menusData
.filter(item => item.name && !item.hideInMenu)
.map(item => {
// make dom
const ItemDom = this.getSubMenuOrItem(item);
return this.checkPermissionItem(item.authority, ItemDom);
})
.filter(item => item);
};
// Get the currently selected menu
getSelectedMenuKeys = () => {
const { location: { pathname } } = this.props;
return getMenuMatchKeys(this.flatMenuKeys, urlToList(pathname));
};
// conversion Path
// 转化路径
conversionPath = path => {
if (path && path.indexOf('http') === 0) {
return path;
} else {
return `/${path || ''}`.replace(/\/+/g, '/');
}
};
// permission to check
checkPermissionItem = (authority, ItemDom) => {
if (this.props.Authorized && this.props.Authorized.check) {
const { check } = this.props.Authorized;
return check(authority, ItemDom);
}
return ItemDom;
};
isMainMenu = key => {
return this.menus.some(item => key && (item.key === key || item.path === key));
};
handleOpenChange = openKeys => {
const lastOpenKey = openKeys[openKeys.length - 1];
const moreThanOne = openKeys.filter(openKey => this.isMainMenu(openKey)).length > 1;
this.setState({
openKeys: moreThanOne ? [lastOpenKey] : [...openKeys],
});
};
render() {
const { logo, collapsed, onCollapse } = this.props;
const { openKeys } = this.state;
// Don't show popup menu when it is been collapsed
const menuProps = collapsed
? {}
: {
openKeys,
};
// if pathname can't match, use the nearest parent's key
let selectedKeys = this.getSelectedMenuKeys();
if (!selectedKeys.length) {
selectedKeys = [openKeys[openKeys.length - 1]];
}
return (
{this.getNavMenuItems(this.menus)}
);
}
}
================================================
FILE: app/assets/components/SiderMenu/SilderMenu.test.js
================================================
import { urlToList } from '../_utils/pathTools';
import { getFlatMenuKeys, getMenuMatchKeys } from './SiderMenu';
const menu = [
{
path: '/dashboard',
children: [
{
path: '/dashboard/name',
},
],
},
{
path: '/userinfo',
children: [
{
path: '/userinfo/:id',
children: [
{
path: '/userinfo/:id/info',
},
],
},
],
},
];
const flatMenuKeys = getFlatMenuKeys(menu);
describe('test convert nested menu to flat menu', () => {
it('simple menu', () => {
expect(flatMenuKeys).toEqual([
'/dashboard',
'/dashboard/name',
'/userinfo',
'/userinfo/:id',
'/userinfo/:id/info',
]);
});
});
describe('test menu match', () => {
it('simple path', () => {
expect(getMenuMatchKeys(flatMenuKeys, urlToList('/dashboard'))).toEqual(['/dashboard']);
});
it('error path', () => {
expect(getMenuMatchKeys(flatMenuKeys, urlToList('/dashboardname'))).toEqual([]);
});
it('Secondary path', () => {
expect(getMenuMatchKeys(flatMenuKeys, urlToList('/dashboard/name'))).toEqual([
'/dashboard',
'/dashboard/name',
]);
});
it('Parameter path', () => {
expect(getMenuMatchKeys(flatMenuKeys, urlToList('/userinfo/2144'))).toEqual([
'/userinfo',
'/userinfo/:id',
]);
});
it('three parameter path', () => {
expect(getMenuMatchKeys(flatMenuKeys, urlToList('/userinfo/2144/info'))).toEqual([
'/userinfo',
'/userinfo/:id',
'/userinfo/:id/info',
]);
});
});
================================================
FILE: app/assets/components/SiderMenu/index.js
================================================
import 'rc-drawer-menu/assets/index.css';
import React from 'react';
import DrawerMenu from 'rc-drawer-menu';
import SiderMenu from './SiderMenu';
const SiderMenuWrapper = props =>
props.isMobile ? (
{
props.onCollapse(true);
}}
width="256px"
>
) : (
);
export default SiderMenuWrapper;
================================================
FILE: app/assets/components/SiderMenu/index.less
================================================
@import '~antd/lib/style/themes/default.less';
@ease-in-out-circ: cubic-bezier(0.78, 0.14, 0.15, 0.86);
.logo {
height: 64px;
position: relative;
line-height: 64px;
padding-left: (@menu-collapsed-width - 32px) / 2;
transition: all 0.3s;
background: #002140;
overflow: hidden;
img {
display: inline-block;
vertical-align: middle;
height: 32px;
}
h1 {
color: white;
display: inline-block;
vertical-align: middle;
font-size: 20px;
margin: 0 0 0 12px;
font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
font-weight: 600;
}
}
.sider {
min-height: 100vh;
box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
position: relative;
z-index: 10;
&.ligth {
background-color: white;
.logo {
background: white;
h1 {
color: #002140;
}
}
}
}
.icon {
width: 14px;
margin-right: 10px;
}
:global {
.drawer .drawer-content {
background: #001529;
}
.ant-menu-inline-collapsed {
& > .ant-menu-item .sider-menu-item-img + span,
&
> .ant-menu-item-group
> .ant-menu-item-group-list
> .ant-menu-item
.sider-menu-item-img
+ span,
& > .ant-menu-submenu > .ant-menu-submenu-title .sider-menu-item-img + span {
max-width: 0;
display: inline-block;
opacity: 0;
}
}
.ant-menu-item .sider-menu-item-img + span,
.ant-menu-submenu-title .sider-menu-item-img + span {
transition: opacity 0.3s @ease-in-out, width 0.3s @ease-in-out;
opacity: 1;
}
}
================================================
FILE: app/assets/components/StandardFormRow/index.js
================================================
import React from 'react';
import classNames from 'classnames';
import styles from './index.less';
const StandardFormRow = ({ title, children, last, block, grid, ...rest }) => {
const cls = classNames(styles.standardFormRow, {
[styles.standardFormRowBlock]: block,
[styles.standardFormRowLast]: last,
[styles.standardFormRowGrid]: grid,
});
return (
{title && (
{title}
)}
{children}
);
};
export default StandardFormRow;
================================================
FILE: app/assets/components/StandardFormRow/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.standardFormRow {
border-bottom: 1px dashed @border-color-split;
padding-bottom: 16px;
margin-bottom: 16px;
display: flex;
:global {
.ant-form-item {
margin-right: 24px;
}
.ant-form-item-label label {
color: @text-color;
margin-right: 0;
}
.ant-form-item-label,
.ant-form-item-control {
padding: 0;
line-height: 32px;
}
}
.label {
color: @heading-color;
font-size: @font-size-base;
margin-right: 24px;
flex: 0 0 auto;
text-align: right;
& > span {
display: inline-block;
height: 32px;
line-height: 32px;
&:after {
content: ':';
}
}
}
.content {
flex: 1 1 0;
:global {
.ant-form-item:last-child {
margin-right: 0;
}
}
}
}
.standardFormRowLast {
border: none;
padding-bottom: 0;
margin-bottom: 0;
}
.standardFormRowBlock {
:global {
.ant-form-item,
div.ant-form-item-control-wrapper {
display: block;
}
}
}
.standardFormRowGrid {
:global {
.ant-form-item,
div.ant-form-item-control-wrapper {
display: block;
}
.ant-form-item-label {
float: left;
}
}
}
================================================
FILE: app/assets/components/StandardTable/index.js
================================================
import React, { PureComponent, Fragment } from 'react';
import { Table, Alert } from 'antd';
import styles from './index.less';
function initTotalList(columns) {
const totalList = [];
columns.forEach(column => {
if (column.needTotal) {
totalList.push({ ...column, total: 0 });
}
});
return totalList;
}
class StandardTable extends PureComponent {
constructor(props) {
super(props);
const { columns } = props;
const needTotalList = initTotalList(columns);
this.state = {
selectedRowKeys: [],
needTotalList,
};
}
componentWillReceiveProps(nextProps) {
// clean state
if (nextProps.selectedRows.length === 0) {
const needTotalList = initTotalList(nextProps.columns);
this.setState({
selectedRowKeys: [],
needTotalList,
});
}
}
handleRowSelectChange = (selectedRowKeys, selectedRows) => {
let needTotalList = [...this.state.needTotalList];
needTotalList = needTotalList.map(item => {
return {
...item,
total: selectedRows.reduce((sum, val) => {
return sum + parseFloat(val[item.dataIndex], 10);
}, 0),
};
});
if (this.props.onSelectRow) {
this.props.onSelectRow(selectedRows);
}
this.setState({ selectedRowKeys, needTotalList });
};
handleTableChange = (pagination, filters, sorter) => {
this.props.onChange(pagination, filters, sorter);
};
cleanSelectedKeys = () => {
this.handleRowSelectChange([], []);
};
render() {
const { selectedRowKeys, needTotalList } = this.state;
const { data: { list, pagination }, loading, columns, rowKey } = this.props;
const paginationProps = {
showSizeChanger: true,
showQuickJumper: true,
...pagination,
};
const rowSelection = {
selectedRowKeys,
onChange: this.handleRowSelectChange,
getCheckboxProps: record => ({
disabled: record.disabled,
}),
};
return (
已选择 {selectedRowKeys.length} 项
{needTotalList.map(item => (
{item.title}总计
{item.render ? item.render(item.total) : item.total}
))}
清空
}
type="info"
showIcon
/>
);
}
}
export default StandardTable;
================================================
FILE: app/assets/components/StandardTable/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.standardTable {
:global {
.ant-table-pagination {
margin-top: 24px;
}
}
.tableAlert {
margin-bottom: 16px;
}
}
================================================
FILE: app/assets/components/TagSelect/TagSelectOption.d.ts
================================================
import * as React from 'react';
export interface ITagSelectOptionProps {
value: string | number;
style?: React.CSSProperties;
}
export default class TagSelectOption extends React.Component {}
================================================
FILE: app/assets/components/TagSelect/demo/expandable.md
================================================
---
order: 1
title: 可展开和收起
---
使用 `expandable` 属性,让标签组可以收起,避免过高。
````jsx
import TagSelect from 'ant-design-pro/lib/TagSelect';
function handleFormSubmit(checkedValue) {
console.log(checkedValue);
}
ReactDOM.render(
类目一
类目二
类目三
类目四
类目五
类目六
类目七
类目八
类目九
类目十
类目十一
类目十二
, mountNode);
````
================================================
FILE: app/assets/components/TagSelect/demo/simple.md
================================================
---
order: 0
title: 基础样例
---
结合 `Tag` 的 `TagSelect` 组件,方便的应用于筛选类目的业务场景中。
````jsx
import TagSelect from 'ant-design-pro/lib/TagSelect';
function handleFormSubmit(checkedValue) {
console.log(checkedValue);
}
ReactDOM.render(
类目一
类目二
类目三
类目四
类目五
类目六
, mountNode);
````
================================================
FILE: app/assets/components/TagSelect/index.d.ts
================================================
import * as React from 'react';
import TagSelectOption from './TagSelectOption';
export interface ITagSelectProps {
onChange?: (value: string[]) => void;
expandable?: boolean;
value?: string[] | number[];
style?: React.CSSProperties;
}
export default class TagSelect extends React.Component {
public static Option: typeof TagSelectOption;
private children:
| React.ReactElement
| Array>;
}
================================================
FILE: app/assets/components/TagSelect/index.js
================================================
import React, { Component } from 'react';
import classNames from 'classnames';
import { Tag, Icon } from 'antd';
import styles from './index.less';
const { CheckableTag } = Tag;
const TagSelectOption = ({ children, checked, onChange, value }) => (
onChange(value, state)}>
{children}
);
TagSelectOption.isTagSelectOption = true;
class TagSelect extends Component {
state = {
expand: false,
value: this.props.value || this.props.defaultValue || [],
};
componentWillReceiveProps(nextProps) {
if ('value' in nextProps && nextProps.value) {
this.setState({ value: nextProps.value });
}
}
onChange = value => {
const { onChange } = this.props;
if (!('value' in this.props)) {
this.setState({ value });
}
if (onChange) {
onChange(value);
}
};
onSelectAll = checked => {
let checkedTags = [];
if (checked) {
checkedTags = this.getAllTags();
}
this.onChange(checkedTags);
};
getAllTags() {
let { children } = this.props;
children = React.Children.toArray(children);
const checkedTags = children
.filter(child => this.isTagSelectOption(child))
.map(child => child.props.value);
return checkedTags || [];
}
handleTagChange = (value, checked) => {
const checkedTags = [...this.state.value];
const index = checkedTags.indexOf(value);
if (checked && index === -1) {
checkedTags.push(value);
} else if (!checked && index > -1) {
checkedTags.splice(index, 1);
}
this.onChange(checkedTags);
};
handleExpand = () => {
this.setState({
expand: !this.state.expand,
});
};
isTagSelectOption = node => {
return (
node &&
node.type &&
(node.type.isTagSelectOption || node.type.displayName === 'TagSelectOption')
);
};
render() {
const { value, expand } = this.state;
const { children, className, style, expandable } = this.props;
const checkedAll = this.getAllTags().length === value.length;
const cls = classNames(styles.tagSelect, className, {
[styles.hasExpandTag]: expandable,
[styles.expanded]: expand,
});
return (
全部
{value &&
React.Children.map(children, child => {
if (this.isTagSelectOption(child)) {
return React.cloneElement(child, {
key: `tag-select-${child.props.value}`,
value: child.props.value,
checked: value.indexOf(child.props.value) > -1,
onChange: this.handleTagChange,
});
}
return child;
})}
{expandable && (
{expand ? '收起' : '展开'}
)}
);
}
}
TagSelect.Option = TagSelectOption;
export default TagSelect;
================================================
FILE: app/assets/components/TagSelect/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.tagSelect {
user-select: none;
margin-left: -8px;
position: relative;
overflow: hidden;
max-height: 32px;
line-height: 32px;
transition: all 0.3s;
:global {
.ant-tag {
padding: 0 8px;
margin-right: 24px;
font-size: @font-size-base;
}
}
&.expanded {
transition: all 0.3s;
max-height: 200px;
}
.trigger {
position: absolute;
top: 0;
right: 0;
i {
font-size: 12px;
}
}
&.hasExpandTag {
padding-right: 50px;
}
}
================================================
FILE: app/assets/components/TagSelect/index.md
================================================
---
title:
en-US: TagSelect
zh-CN: TagSelect
subtitle: 标签选择器
cols: 1
order: 13
---
可进行多选,带折叠收起和展开更多功能,常用于对列表进行筛选。
## API
### TagSelect
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| value |选中的项 |string[] \| number[] | |
| defaultValue |默认选中的项 |string[] \| number[] | |
| onChange | 标签选择的回调函数 | Function(checkedTags) | |
| expandable | 是否展示 `展开/收起` 按钮 | Boolean | false |
### TagSelectOption
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| value | TagSelect的值 | string\| number | - |
| children | tag的内容 | string \| ReactNode | - |
================================================
FILE: app/assets/components/Trend/demo/basic.md
================================================
---
order: 0
title: 演示
---
在数值背后添加一个小图标来标识涨跌情况。
````jsx
import Trend from 'ant-design-pro/lib/Trend';
ReactDOM.render(
12%
11%
, mountNode);
````
================================================
FILE: app/assets/components/Trend/demo/reverse.md
================================================
---
order: 0
title: 颜色反转
---
在数值背后添加一个小图标来标识涨跌情况。
````jsx
import Trend from 'ant-design-pro/lib/Trend';
ReactDOM.render(
12%
11%
, mountNode);
````
================================================
FILE: app/assets/components/Trend/index.d.ts
================================================
import * as React from 'react';
export interface ITrendProps {
colorful?: boolean;
flag: 'up' | 'down';
style?: React.CSSProperties;
reverseColor?: boolean;
}
export default class Trend extends React.Component {}
================================================
FILE: app/assets/components/Trend/index.js
================================================
import React from 'react';
import { Icon } from 'antd';
import classNames from 'classnames';
import styles from './index.less';
const Trend = ({ colorful = true, reverseColor = false, flag, children, className, ...rest }) => {
const classString = classNames(
styles.trendItem,
{
[styles.trendItemGrey]: !colorful,
[styles.reverseColor]: reverseColor && colorful,
},
className
);
return (
{children}
{flag && (
)}
);
};
export default Trend;
================================================
FILE: app/assets/components/Trend/index.less
================================================
@import '~antd/lib/style/themes/default.less';
.trendItem {
display: inline-block;
font-size: @font-size-base;
line-height: 22px;
.up,
.down {
margin-left: 4px;
position: relative;
top: 1px;
i {
font-size: 12px;
transform: scale(0.83);
}
}
.up {
color: @red-6;
}
.down {
color: @green-6;
top: -1px;
}
&.trendItemGrey .up,
&.trendItemGrey .down {
color: @text-color;
}
&.reverseColor .up {
color: @green-6;
}
&.reverseColor .down {
color: @red-6;
}
}
================================================
FILE: app/assets/components/Trend/index.md
================================================
---
title:
en-US: Trend
zh-CN: Trend
subtitle: 趋势标记
cols: 1
order: 14
---
趋势符号,标记上升和下降趋势。通常用绿色代表“好”,红色代表“不好”,股票涨跌场景除外。
## API
```html
50%
```
| 参数 | 说明 | 类型 | 默认值 |
|----------|------------------------------------------|-------------|-------|
| colorful | 是否彩色标记 | Boolean | true |
| flag | 上升下降标识:`up|down` | string | - |
| reverseColor | 颜色反转 | Boolean | true |
================================================
FILE: app/assets/components/_utils/pathTools.js
================================================
// /userinfo/2144/id => ['/userinfo','/useinfo/2144,'/userindo/2144/id']
export function urlToList(url) {
const urllist = url.split('/').filter(i => i);
return urllist.map((urlItem, index) => {
return `/${urllist.slice(0, index + 1).join('/')}`;
});
}
================================================
FILE: app/assets/components/_utils/pathTools.test.js
================================================
import { urlToList } from './pathTools';
describe('test urlToList', () => {
it('A path', () => {
expect(urlToList('/userinfo')).toEqual(['/userinfo']);
});
it('Secondary path', () => {
expect(urlToList('/userinfo/2144')).toEqual(['/userinfo', '/userinfo/2144']);
});
it('Three paths', () => {
expect(urlToList('/userinfo/2144/addr')).toEqual([
'/userinfo',
'/userinfo/2144',
'/userinfo/2144/addr',
]);
});
});
================================================
FILE: app/assets/custom/components/Editor.js
================================================
import React, { Component } from "react";
import { UnControlled as CodeMirror } from "react-codemirror2";
import { shouldRender } from "../../utils/utils";
const log = type => console.log.bind(console, type);
const fromJson = json => JSON.parse(json);
const cmOptions = {
theme: "default",
height: "auto",
viewportMargin: Infinity,
mode: {
name: "javascript",
json: true,
statementIndent: 2,
},
lineNumbers: true,
lineWrapping: true,
indentWithTabs: false,
tabSize: 2,
};
export default class Editor extends Component {
constructor(props) {
super(props);
this.state = { valid: true, code: props.code };
}
componentWillReceiveProps(props) {
this.setState({ valid: true, code: props.code });
}
shouldComponentUpdate(nextProps, nextState) {
return shouldRender(this, nextProps, nextState);
}
onCodeChange = (editor, metadata, code) => {
this.setState({ valid: true, code });
setImmediate(() => {
try {
this.props.onChange(fromJson(this.state.code));
} catch (err) {
this.setState({ valid: false, code });
}
});
};
render() {
const { title, theme } = this.props;
const icon = this.state.valid ? "ok" : "remove";
const cls = this.state.valid ? "valid" : "invalid";
return (
);
}
}
================================================
FILE: app/assets/e2e/home.e2e.js
================================================
import puppeteer from 'puppeteer';
describe('Homepage', () => {
it('it should have logo text', async () => {
const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
const page = await browser.newPage();
await page.goto('http://localhost:8000', { waitUntil: 'networkidle2' });
await page.waitForSelector('h1');
const text = await page.evaluate(() => document.body.innerHTML);
expect(text).toContain('Ant Design Pro ');
await page.close();
browser.close();
});
});
================================================
FILE: app/assets/e2e/login.e2e.js
================================================
import puppeteer from 'puppeteer';
describe('Login', () => {
let browser;
let page;
beforeAll(async () => {
browser = await puppeteer.launch({ args: ['--no-sandbox'] });
});
beforeEach(async () => {
page = await browser.newPage();
await page.goto('http://localhost:8000/#/user/login', { waitUntil: 'networkidle2' });
await page.evaluate(() => window.localStorage.setItem('antd-pro-authority', 'guest'));
});
afterEach(() => page.close());
it('should login with failure', async () => {
await page.type('#userName', 'mockuser');
await page.type('#password', 'wrong_password');
await page.click('button[type="submit"]');
await page.waitForSelector('.ant-alert-error'); // should display error
});
it('should login successfully', async () => {
await page.type('#userName', 'admin');
await page.type('#password', '888888');
await page.click('button[type="submit"]');
await page.waitForSelector('.ant-layout-sider h1'); // should display error
const text = await page.evaluate(() => document.body.innerHTML);
expect(text).toContain('Ant Design Pro ');
});
afterAll(() => browser.close());
});
================================================
FILE: app/assets/index.ejs
================================================
Ant Design Pro
================================================
FILE: app/assets/index.js
================================================
import '@babel/polyfill';
import 'url-polyfill';
import dva from 'dva';
import createHistory from 'history/createHashHistory';
// user BrowserHistory
// import createHistory from 'history/createBrowserHistory';
import createLoading from 'dva-loading';
import 'moment/locale/zh-cn';
import './rollbar';
import './index.less';
// 1. Initialize
const app = dva({
history: createHistory(),
});
// 2. Plugins
app.use(createLoading());
// 3. Register global model
app.model(require('./models/global').default);
// 4. Router
app.router(require('./router').default);
// 5. Start
app.start('#root');
export default app._store; // eslint-disable-line
================================================
FILE: app/assets/index.less
================================================
html,
body,
:global(#root) {
height: 100%;
}
:global(.ant-layout) {
min-height: 100%;
}
canvas {
display: block;
}
body {
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.globalSpin {
width: 100%;
margin: 40px 0 !important;
}
// temp fix for https://github.com/ant-design/ant-design/commit/a1fafb5b727b62cb0be29ce6e9eca8f579d4f8b7
:global {
.array-item {
margin: 20px;
}
.ant-spin-container {
overflow: visible !important;
}
.anticon {
vertical-align: 0 !important;
}
//
// Glyphicons for Bootstrap
//
// Since icons are fonts, they can be placed anywhere text is placed and are
// thus automatically sized to match the surrounding child. To use, create an
// inline element with the appropriate classes, like so:
//
// Star
// Import the fonts
@icon-font-path: "/public/assets/fonts/";
@icon-font-name: "glyphicons-halflings-regular";
@icon-font-svg-id: "glyphicons_halflingsregular";
@font-face {
font-family: 'Glyphicons Halflings';
src: url('@{icon-font-path}@{icon-font-name}.eot');
src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),
url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),
url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),
url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),
url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');
}
// Catchall baseclass
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
// Individual icons
.glyphicon-asterisk { &:before { content: "\002a"; } }
.glyphicon-plus { &:before { content: "\002b"; } }
.glyphicon-euro,
.glyphicon-eur { &:before { content: "\20ac"; } }
.glyphicon-minus { &:before { content: "\2212"; } }
.glyphicon-cloud { &:before { content: "\2601"; } }
.glyphicon-envelope { &:before { content: "\2709"; } }
.glyphicon-pencil { &:before { content: "\270f"; } }
.glyphicon-glass { &:before { content: "\e001"; } }
.glyphicon-music { &:before { content: "\e002"; } }
.glyphicon-search { &:before { content: "\e003"; } }
.glyphicon-heart { &:before { content: "\e005"; } }
.glyphicon-star { &:before { content: "\e006"; } }
.glyphicon-star-empty { &:before { content: "\e007"; } }
.glyphicon-user { &:before { content: "\e008"; } }
.glyphicon-film { &:before { content: "\e009"; } }
.glyphicon-th-large { &:before { content: "\e010"; } }
.glyphicon-th { &:before { content: "\e011"; } }
.glyphicon-th-list { &:before { content: "\e012"; } }
.glyphicon-ok { &:before { content: "\e013"; } }
.glyphicon-remove { &:before { content: "\e014"; } }
.glyphicon-zoom-in { &:before { content: "\e015"; } }
.glyphicon-zoom-out { &:before { content: "\e016"; } }
.glyphicon-off { &:before { content: "\e017"; } }
.glyphicon-signal { &:before { content: "\e018"; } }
.glyphicon-cog { &:before { content: "\e019"; } }
.glyphicon-trash { &:before { content: "\e020"; } }
.glyphicon-home { &:before { content: "\e021"; } }
.glyphicon-file { &:before { content: "\e022"; } }
.glyphicon-time { &:before { content: "\e023"; } }
.glyphicon-road { &:before { content: "\e024"; } }
.glyphicon-download-alt { &:before { content: "\e025"; } }
.glyphicon-download { &:before { content: "\e026"; } }
.glyphicon-upload { &:before { content: "\e027"; } }
.glyphicon-inbox { &:before { content: "\e028"; } }
.glyphicon-play-circle { &:before { content: "\e029"; } }
.glyphicon-repeat { &:before { content: "\e030"; } }
.glyphicon-refresh { &:before { content: "\e031"; } }
.glyphicon-list-alt { &:before { content: "\e032"; } }
.glyphicon-lock { &:before { content: "\e033"; } }
.glyphicon-flag { &:before { content: "\e034"; } }
.glyphicon-headphones { &:before { content: "\e035"; } }
.glyphicon-volume-off { &:before { content: "\e036"; } }
.glyphicon-volume-down { &:before { content: "\e037"; } }
.glyphicon-volume-up { &:before { content: "\e038"; } }
.glyphicon-qrcode { &:before { content: "\e039"; } }
.glyphicon-barcode { &:before { content: "\e040"; } }
.glyphicon-tag { &:before { content: "\e041"; } }
.glyphicon-tags { &:before { content: "\e042"; } }
.glyphicon-book { &:before { content: "\e043"; } }
.glyphicon-bookmark { &:before { content: "\e044"; } }
.glyphicon-print { &:before { content: "\e045"; } }
.glyphicon-camera { &:before { content: "\e046"; } }
.glyphicon-font { &:before { content: "\e047"; } }
.glyphicon-bold { &:before { content: "\e048"; } }
.glyphicon-italic { &:before { content: "\e049"; } }
.glyphicon-text-height { &:before { content: "\e050"; } }
.glyphicon-text-width { &:before { content: "\e051"; } }
.glyphicon-align-left { &:before { content: "\e052"; } }
.glyphicon-align-center { &:before { content: "\e053"; } }
.glyphicon-align-right { &:before { content: "\e054"; } }
.glyphicon-align-justify { &:before { content: "\e055"; } }
.glyphicon-list { &:before { content: "\e056"; } }
.glyphicon-indent-left { &:before { content: "\e057"; } }
.glyphicon-indent-right { &:before { content: "\e058"; } }
.glyphicon-facetime-video { &:before { content: "\e059"; } }
.glyphicon-picture { &:before { content: "\e060"; } }
.glyphicon-map-marker { &:before { content: "\e062"; } }
.glyphicon-adjust { &:before { content: "\e063"; } }
.glyphicon-tint { &:before { content: "\e064"; } }
.glyphicon-edit { &:before { content: "\e065"; } }
.glyphicon-share { &:before { content: "\e066"; } }
.glyphicon-check { &:before { content: "\e067"; } }
.glyphicon-move { &:before { content: "\e068"; } }
.glyphicon-step-backward { &:before { content: "\e069"; } }
.glyphicon-fast-backward { &:before { content: "\e070"; } }
.glyphicon-backward { &:before { content: "\e071"; } }
.glyphicon-play { &:before { content: "\e072"; } }
.glyphicon-pause { &:before { content: "\e073"; } }
.glyphicon-stop { &:before { content: "\e074"; } }
.glyphicon-forward { &:before { content: "\e075"; } }
.glyphicon-fast-forward { &:before { content: "\e076"; } }
.glyphicon-step-forward { &:before { content: "\e077"; } }
.glyphicon-eject { &:before { content: "\e078"; } }
.glyphicon-chevron-left { &:before { content: "\e079"; } }
.glyphicon-chevron-right { &:before { content: "\e080"; } }
.glyphicon-plus-sign { &:before { content: "\e081"; } }
.glyphicon-minus-sign { &:before { content: "\e082"; } }
.glyphicon-remove-sign { &:before { content: "\e083"; } }
.glyphicon-ok-sign { &:before { content: "\e084"; } }
.glyphicon-question-sign { &:before { content: "\e085"; } }
.glyphicon-info-sign { &:before { content: "\e086"; } }
.glyphicon-screenshot { &:before { content: "\e087"; } }
.glyphicon-remove-circle { &:before { content: "\e088"; } }
.glyphicon-ok-circle { &:before { content: "\e089"; } }
.glyphicon-ban-circle { &:before { content: "\e090"; } }
.glyphicon-arrow-left { &:before { content: "\e091"; } }
.glyphicon-arrow-right { &:before { content: "\e092"; } }
.glyphicon-arrow-up { &:before { content: "\e093"; } }
.glyphicon-arrow-down { &:before { content: "\e094"; } }
.glyphicon-share-alt { &:before { content: "\e095"; } }
.glyphicon-resize-full { &:before { content: "\e096"; } }
.glyphicon-resize-small { &:before { content: "\e097"; } }
.glyphicon-exclamation-sign { &:before { content: "\e101"; } }
.glyphicon-gift { &:before { content: "\e102"; } }
.glyphicon-leaf { &:before { content: "\e103"; } }
.glyphicon-fire { &:before { content: "\e104"; } }
.glyphicon-eye-open { &:before { content: "\e105"; } }
.glyphicon-eye-close { &:before { content: "\e106"; } }
.glyphicon-warning-sign { &:before { content: "\e107"; } }
.glyphicon-plane { &:before { content: "\e108"; } }
.glyphicon-calendar { &:before { content: "\e109"; } }
.glyphicon-random { &:before { content: "\e110"; } }
.glyphicon-comment { &:before { content: "\e111"; } }
.glyphicon-magnet { &:before { content: "\e112"; } }
.glyphicon-chevron-up { &:before { content: "\e113"; } }
.glyphicon-chevron-down { &:before { content: "\e114"; } }
.glyphicon-retweet { &:before { content: "\e115"; } }
.glyphicon-shopping-cart { &:before { content: "\e116"; } }
.glyphicon-folder-close { &:before { content: "\e117"; } }
.glyphicon-folder-open { &:before { content: "\e118"; } }
.glyphicon-resize-vertical { &:before { content: "\e119"; } }
.glyphicon-resize-horizontal { &:before { content: "\e120"; } }
.glyphicon-hdd { &:before { content: "\e121"; } }
.glyphicon-bullhorn { &:before { content: "\e122"; } }
.glyphicon-bell { &:before { content: "\e123"; } }
.glyphicon-certificate { &:before { content: "\e124"; } }
.glyphicon-thumbs-up { &:before { content: "\e125"; } }
.glyphicon-thumbs-down { &:before { content: "\e126"; } }
.glyphicon-hand-right { &:before { content: "\e127"; } }
.glyphicon-hand-left { &:before { content: "\e128"; } }
.glyphicon-hand-up { &:before { content: "\e129"; } }
.glyphicon-hand-down { &:before { content: "\e130"; } }
.glyphicon-circle-arrow-right { &:before { content: "\e131"; } }
.glyphicon-circle-arrow-left { &:before { content: "\e132"; } }
.glyphicon-circle-arrow-up { &:before { content: "\e133"; } }
.glyphicon-circle-arrow-down { &:before { content: "\e134"; } }
.glyphicon-globe { &:before { content: "\e135"; } }
.glyphicon-wrench { &:before { content: "\e136"; } }
.glyphicon-tasks { &:before { content: "\e137"; } }
.glyphicon-filter { &:before { content: "\e138"; } }
.glyphicon-briefcase { &:before { content: "\e139"; } }
.glyphicon-fullscreen { &:before { content: "\e140"; } }
.glyphicon-dashboard { &:before { content: "\e141"; } }
.glyphicon-paperclip { &:before { content: "\e142"; } }
.glyphicon-heart-empty { &:before { content: "\e143"; } }
.glyphicon-link { &:before { content: "\e144"; } }
.glyphicon-phone { &:before { content: "\e145"; } }
.glyphicon-pushpin { &:before { content: "\e146"; } }
.glyphicon-usd { &:before { content: "\e148"; } }
.glyphicon-gbp { &:before { content: "\e149"; } }
.glyphicon-sort { &:before { content: "\e150"; } }
.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } }
.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } }
.glyphicon-sort-by-order { &:before { content: "\e153"; } }
.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } }
.glyphicon-sort-by-attributes { &:before { content: "\e155"; } }
.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } }
.glyphicon-unchecked { &:before { content: "\e157"; } }
.glyphicon-expand { &:before { content: "\e158"; } }
.glyphicon-collapse-down { &:before { content: "\e159"; } }
.glyphicon-collapse-up { &:before { content: "\e160"; } }
.glyphicon-log-in { &:before { content: "\e161"; } }
.glyphicon-flash { &:before { content: "\e162"; } }
.glyphicon-log-out { &:before { content: "\e163"; } }
.glyphicon-new-window { &:before { content: "\e164"; } }
.glyphicon-record { &:before { content: "\e165"; } }
.glyphicon-save { &:before { content: "\e166"; } }
.glyphicon-open { &:before { content: "\e167"; } }
.glyphicon-saved { &:before { content: "\e168"; } }
.glyphicon-import { &:before { content: "\e169"; } }
.glyphicon-export { &:before { content: "\e170"; } }
.glyphicon-send { &:before { content: "\e171"; } }
.glyphicon-floppy-disk { &:before { content: "\e172"; } }
.glyphicon-floppy-saved { &:before { content: "\e173"; } }
.glyphicon-floppy-remove { &:before { content: "\e174"; } }
.glyphicon-floppy-save { &:before { content: "\e175"; } }
.glyphicon-floppy-open { &:before { content: "\e176"; } }
.glyphicon-credit-card { &:before { content: "\e177"; } }
.glyphicon-transfer { &:before { content: "\e178"; } }
.glyphicon-cutlery { &:before { content: "\e179"; } }
.glyphicon-header { &:before { content: "\e180"; } }
.glyphicon-compressed { &:before { content: "\e181"; } }
.glyphicon-earphone { &:before { content: "\e182"; } }
.glyphicon-phone-alt { &:before { content: "\e183"; } }
.glyphicon-tower { &:before { content: "\e184"; } }
.glyphicon-stats { &:before { content: "\e185"; } }
.glyphicon-sd-video { &:before { content: "\e186"; } }
.glyphicon-hd-video { &:before { content: "\e187"; } }
.glyphicon-subtitles { &:before { content: "\e188"; } }
.glyphicon-sound-stereo { &:before { content: "\e189"; } }
.glyphicon-sound-dolby { &:before { content: "\e190"; } }
.glyphicon-sound-5-1 { &:before { content: "\e191"; } }
.glyphicon-sound-6-1 { &:before { content: "\e192"; } }
.glyphicon-sound-7-1 { &:before { content: "\e193"; } }
.glyphicon-copyright-mark { &:before { content: "\e194"; } }
.glyphicon-registration-mark { &:before { content: "\e195"; } }
.glyphicon-cloud-download { &:before { content: "\e197"; } }
.glyphicon-cloud-upload { &:before { content: "\e198"; } }
.glyphicon-tree-conifer { &:before { content: "\e199"; } }
.glyphicon-tree-deciduous { &:before { content: "\e200"; } }
.glyphicon-cd { &:before { content: "\e201"; } }
.glyphicon-save-file { &:before { content: "\e202"; } }
.glyphicon-open-file { &:before { content: "\e203"; } }
.glyphicon-level-up { &:before { content: "\e204"; } }
.glyphicon-copy { &:before { content: "\e205"; } }
.glyphicon-paste { &:before { content: "\e206"; } }
// The following 2 Glyphicons are omitted for the time being because
// they currently use Unicode codepoints that are outside the
// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle
// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.
// Notably, the bug affects some older versions of the Android Browser.
// More info: https://github.com/twbs/bootstrap/issues/10106
// .glyphicon-door { &:before { content: "\1f6aa"; } }
// .glyphicon-key { &:before { content: "\1f511"; } }
.glyphicon-alert { &:before { content: "\e209"; } }
.glyphicon-equalizer { &:before { content: "\e210"; } }
.glyphicon-king { &:before { content: "\e211"; } }
.glyphicon-queen { &:before { content: "\e212"; } }
.glyphicon-pawn { &:before { content: "\e213"; } }
.glyphicon-bishop { &:before { content: "\e214"; } }
.glyphicon-knight { &:before { content: "\e215"; } }
.glyphicon-baby-formula { &:before { content: "\e216"; } }
.glyphicon-tent { &:before { content: "\26fa"; } }
.glyphicon-blackboard { &:before { content: "\e218"; } }
.glyphicon-bed { &:before { content: "\e219"; } }
.glyphicon-apple { &:before { content: "\f8ff"; } }
.glyphicon-erase { &:before { content: "\e221"; } }
.glyphicon-hourglass { &:before { content: "\231b"; } }
.glyphicon-lamp { &:before { content: "\e223"; } }
.glyphicon-duplicate { &:before { content: "\e224"; } }
.glyphicon-piggy-bank { &:before { content: "\e225"; } }
.glyphicon-scissors { &:before { content: "\e226"; } }
.glyphicon-bitcoin { &:before { content: "\e227"; } }
.glyphicon-btc { &:before { content: "\e227"; } }
.glyphicon-xbt { &:before { content: "\e227"; } }
.glyphicon-yen { &:before { content: "\00a5"; } }
.glyphicon-jpy { &:before { content: "\00a5"; } }
.glyphicon-ruble { &:before { content: "\20bd"; } }
.glyphicon-rub { &:before { content: "\20bd"; } }
.glyphicon-scale { &:before { content: "\e230"; } }
.glyphicon-ice-lolly { &:before { content: "\e231"; } }
.glyphicon-ice-lolly-tasted { &:before { content: "\e232"; } }
.glyphicon-education { &:before { content: "\e233"; } }
.glyphicon-option-horizontal { &:before { content: "\e234"; } }
.glyphicon-option-vertical { &:before { content: "\e235"; } }
.glyphicon-menu-hamburger { &:before { content: "\e236"; } }
.glyphicon-modal-window { &:before { content: "\e237"; } }
.glyphicon-oil { &:before { content: "\e238"; } }
.glyphicon-grain { &:before { content: "\e239"; } }
.glyphicon-sunglasses { &:before { content: "\e240"; } }
.glyphicon-text-size { &:before { content: "\e241"; } }
.glyphicon-text-color { &:before { content: "\e242"; } }
.glyphicon-text-background { &:before { content: "\e243"; } }
.glyphicon-object-align-top { &:before { content: "\e244"; } }
.glyphicon-object-align-bottom { &:before { content: "\e245"; } }
.glyphicon-object-align-horizontal{ &:before { content: "\e246"; } }
.glyphicon-object-align-left { &:before { content: "\e247"; } }
.glyphicon-object-align-vertical { &:before { content: "\e248"; } }
.glyphicon-object-align-right { &:before { content: "\e249"; } }
.glyphicon-triangle-right { &:before { content: "\e250"; } }
.glyphicon-triangle-left { &:before { content: "\e251"; } }
.glyphicon-triangle-bottom { &:before { content: "\e252"; } }
.glyphicon-triangle-top { &:before { content: "\e253"; } }
.glyphicon-console { &:before { content: "\e254"; } }
.glyphicon-superscript { &:before { content: "\e255"; } }
.glyphicon-subscript { &:before { content: "\e256"; } }
.glyphicon-menu-left { &:before { content: "\e257"; } }
.glyphicon-menu-right { &:before { content: "\e258"; } }
.glyphicon-menu-down { &:before { content: "\e259"; } }
.glyphicon-menu-up { &:before { content: "\e260"; } }
:root {
--blue: #2780E3;
--indigo: #6610f2;
--purple: #613d7c;
--pink: #e83e8c;
--red: #FF0039;
--orange: #f0ad4e;
--yellow: #FF7518;
--green: #3FB618;
--teal: #20c997;
--cyan: #9954BB;
--white: #fff;
--gray: #868e96;
--gray-dark: #373a3c;
--primary: #2780E3;
--secondary: #373a3c;
--success: #3FB618;
--info: #9954BB;
--warning: #FF7518;
--danger: #FF0039;
--light: #f8f9fa;
--dark: #373a3c;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: "Segoe UI", "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
}
*, *::before, *::after {
-webkit-box-sizing: border-box;
box-sizing: border-box
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: transparent
}
@-ms-viewport {
width: device-width
}
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block
}
body {
margin: 0;
font-family: "Segoe UI", "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
font-size: 0.9375rem;
font-weight: 400;
line-height: 1.5;
color: #373a3c;
text-align: left;
background-color: #fff
}
[tabindex="-1"]:focus {
outline: 0 !important
}
hr {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 0;
overflow: visible
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem
}
p {
margin-top: 0;
margin-bottom: 1rem
}
abbr[title], abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit
}
ol, ul, dl {
margin-top: 0;
margin-bottom: 1rem
}
ol ol, ul ul, ol ul, ul ol {
margin-bottom: 0
}
dt {
font-weight: 700
}
dd {
margin-bottom: .5rem;
margin-left: 0
}
blockquote {
margin: 0 0 1rem
}
dfn {
font-style: italic
}
b, strong {
font-weight: bolder
}
small {
font-size: 80%
}
sub, sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline
}
sub {
bottom: -.25em
}
sup {
top: -.5em
}
a {
color: #2780E3;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects
}
a:hover {
color: #165ba8;
text-decoration: underline
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none
}
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none
}
a:not([href]):not([tabindex]):focus {
outline: 0
}
pre, code, kbd, samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar
}
figure {
margin: 0 0 1rem
}
img {
vertical-align: middle;
border-style: none
}
svg {
overflow: hidden;
vertical-align: middle
}
table {
border-collapse: collapse
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #868e96;
text-align: left;
caption-side: bottom
}
th {
text-align: inherit
}
label {
display: inline-block;
margin-bottom: 0.5rem
}
button {
border-radius: 0
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color
}
input, button, select, optgroup, textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit
}
button, input {
overflow: visible
}
button, select {
text-transform: none
}
button, html [type="button"], [type="reset"], [type="submit"] {
-webkit-appearance: button
}
button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none
}
input[type="radio"], input[type="checkbox"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0
}
input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] {
-webkit-appearance: listbox
}
textarea {
overflow: auto;
resize: vertical
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0
}
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
}
progress {
vertical-align: baseline
}
[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {
height: auto
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none
}
[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button
}
output {
display: inline-block
}
summary {
display: list-item;
cursor: pointer
}
template {
display: none
}
[hidden] {
display: none !important
}
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
margin-bottom: 0.5rem;
font-family: inherit;
font-weight: 300;
line-height: 1.2;
color: inherit
}
h1, .h1 {
font-size: 2.34375rem
}
h2, .h2 {
font-size: 1.875rem
}
h3, .h3 {
font-size: 1.640625rem
}
h4, .h4 {
font-size: 1.40625rem
}
h5, .h5 {
font-size: 1.171875rem
}
h6, .h6 {
font-size: 0.9375rem
}
.lead {
font-size: 1.171875rem;
font-weight: 300
}
.display-1 {
font-size: 6rem;
font-weight: 300;
line-height: 1.2
}
.display-2 {
font-size: 5.5rem;
font-weight: 300;
line-height: 1.2
}
.display-3 {
font-size: 4.5rem;
font-weight: 300;
line-height: 1.2
}
.display-4 {
font-size: 3.5rem;
font-weight: 300;
line-height: 1.2
}
hr {
margin-top: 1rem;
margin-bottom: 1rem;
border: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1)
}
small, .small {
font-size: 80%;
font-weight: 400
}
mark, .mark {
padding: 0.2em;
background-color: #fcf8e3
}
.list-unstyled {
padding-left: 0;
list-style: none
}
.list-inline {
padding-left: 0;
list-style: none
}
.list-inline-item {
display: inline-block
}
.list-inline-item:not(:last-child) {
margin-right: 0.5rem
}
.initialism {
font-size: 90%;
text-transform: uppercase
}
.blockquote {
margin-bottom: 1rem;
font-size: 1.171875rem
}
.blockquote-footer {
display: block;
font-size: 80%;
color: #868e96
}
.blockquote-footer::before {
content: "\2014 \00A0"
}
.img-fluid {
max-width: 100%;
height: auto
}
.img-thumbnail {
padding: 0.25rem;
background-color: #fff;
border: 1px solid #dee2e6;
max-width: 100%;
height: auto
}
.figure {
display: inline-block
}
.figure-img {
margin-bottom: 0.5rem;
line-height: 1
}
.figure-caption {
font-size: 90%;
color: #868e96
}
code {
font-size: 87.5%;
color: #e83e8c;
word-break: break-word
}
a > code {
color: inherit
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 87.5%;
color: #fff;
background-color: #212529
}
kbd kbd {
padding: 0;
font-size: 100%;
font-weight: 700
}
pre {
display: block;
font-size: 87.5%;
color: #212529
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal
}
.pre-scrollable {
max-height: 340px;
overflow-y: scroll
}
.container {
width: 100%;
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto
}
@media (min-width: 576px) {
.container {
max-width: 540px
}
}
@media (min-width: 768px) {
.container {
max-width: 720px
}
}
@media (min-width: 992px) {
.container {
max-width: 960px
}
}
@media (min-width: 1200px) {
.container {
max-width: 1140px
}
}
.container-fluid {
width: 100%;
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto
}
.row {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px
}
.no-gutters {
margin-right: 0;
margin-left: 0
}
.no-gutters > .col, .no-gutters > [class*="col-"] {
padding-right: 0;
padding-left: 0
}
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto {
position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px
}
.col {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%
}
.col-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: none
}
.col-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.3333333333%;
flex: 0 0 8.3333333333%;
max-width: 8.3333333333%
}
.col-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.6666666667%;
flex: 0 0 16.6666666667%;
max-width: 16.6666666667%
}
.col-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%
}
.col-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.3333333333%;
flex: 0 0 33.3333333333%;
max-width: 33.3333333333%
}
.col-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.6666666667%;
flex: 0 0 41.6666666667%;
max-width: 41.6666666667%
}
.col-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%
}
.col-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.3333333333%;
flex: 0 0 58.3333333333%;
max-width: 58.3333333333%
}
.col-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.6666666667%;
flex: 0 0 66.6666666667%;
max-width: 66.6666666667%
}
.col-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%
}
.col-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.3333333333%;
flex: 0 0 83.3333333333%;
max-width: 83.3333333333%
}
.col-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.6666666667%;
flex: 0 0 91.6666666667%;
max-width: 91.6666666667%
}
.col-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%
}
.order-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1
}
.order-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13
}
.order-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0
}
.order-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1
}
.order-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2
}
.order-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3
}
.order-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4
}
.order-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5
}
.order-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6
}
.order-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7
}
.order-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8
}
.order-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9
}
.order-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10
}
.order-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11
}
.order-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 12;
order: 12
}
.offset-1 {
margin-left: 8.3333333333%
}
.offset-2 {
margin-left: 16.6666666667%
}
.offset-3 {
margin-left: 25%
}
.offset-4 {
margin-left: 33.3333333333%
}
.offset-5 {
margin-left: 41.6666666667%
}
.offset-6 {
margin-left: 50%
}
.offset-7 {
margin-left: 58.3333333333%
}
.offset-8 {
margin-left: 66.6666666667%
}
.offset-9 {
margin-left: 75%
}
.offset-10 {
margin-left: 83.3333333333%
}
.offset-11 {
margin-left: 91.6666666667%
}
@media (min-width: 576px) {
.col-sm {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%
}
.col-sm-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: none
}
.col-sm-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.3333333333%;
flex: 0 0 8.3333333333%;
max-width: 8.3333333333%
}
.col-sm-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.6666666667%;
flex: 0 0 16.6666666667%;
max-width: 16.6666666667%
}
.col-sm-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%
}
.col-sm-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.3333333333%;
flex: 0 0 33.3333333333%;
max-width: 33.3333333333%
}
.col-sm-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.6666666667%;
flex: 0 0 41.6666666667%;
max-width: 41.6666666667%
}
.col-sm-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%
}
.col-sm-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.3333333333%;
flex: 0 0 58.3333333333%;
max-width: 58.3333333333%
}
.col-sm-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.6666666667%;
flex: 0 0 66.6666666667%;
max-width: 66.6666666667%
}
.col-sm-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%
}
.col-sm-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.3333333333%;
flex: 0 0 83.3333333333%;
max-width: 83.3333333333%
}
.col-sm-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.6666666667%;
flex: 0 0 91.6666666667%;
max-width: 91.6666666667%
}
.col-sm-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%
}
.order-sm-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1
}
.order-sm-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13
}
.order-sm-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0
}
.order-sm-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1
}
.order-sm-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2
}
.order-sm-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3
}
.order-sm-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4
}
.order-sm-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5
}
.order-sm-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6
}
.order-sm-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7
}
.order-sm-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8
}
.order-sm-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9
}
.order-sm-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10
}
.order-sm-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11
}
.order-sm-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 12;
order: 12
}
.offset-sm-0 {
margin-left: 0
}
.offset-sm-1 {
margin-left: 8.3333333333%
}
.offset-sm-2 {
margin-left: 16.6666666667%
}
.offset-sm-3 {
margin-left: 25%
}
.offset-sm-4 {
margin-left: 33.3333333333%
}
.offset-sm-5 {
margin-left: 41.6666666667%
}
.offset-sm-6 {
margin-left: 50%
}
.offset-sm-7 {
margin-left: 58.3333333333%
}
.offset-sm-8 {
margin-left: 66.6666666667%
}
.offset-sm-9 {
margin-left: 75%
}
.offset-sm-10 {
margin-left: 83.3333333333%
}
.offset-sm-11 {
margin-left: 91.6666666667%
}
}
@media (min-width: 768px) {
.col-md {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%
}
.col-md-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: none
}
.col-md-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.3333333333%;
flex: 0 0 8.3333333333%;
max-width: 8.3333333333%
}
.col-md-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.6666666667%;
flex: 0 0 16.6666666667%;
max-width: 16.6666666667%
}
.col-md-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%
}
.col-md-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.3333333333%;
flex: 0 0 33.3333333333%;
max-width: 33.3333333333%
}
.col-md-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.6666666667%;
flex: 0 0 41.6666666667%;
max-width: 41.6666666667%
}
.col-md-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%
}
.col-md-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.3333333333%;
flex: 0 0 58.3333333333%;
max-width: 58.3333333333%
}
.col-md-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.6666666667%;
flex: 0 0 66.6666666667%;
max-width: 66.6666666667%
}
.col-md-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%
}
.col-md-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.3333333333%;
flex: 0 0 83.3333333333%;
max-width: 83.3333333333%
}
.col-md-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.6666666667%;
flex: 0 0 91.6666666667%;
max-width: 91.6666666667%
}
.col-md-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%
}
.order-md-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1
}
.order-md-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13
}
.order-md-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0
}
.order-md-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1
}
.order-md-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2
}
.order-md-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3
}
.order-md-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4
}
.order-md-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5
}
.order-md-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6
}
.order-md-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7
}
.order-md-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8
}
.order-md-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9
}
.order-md-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10
}
.order-md-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11
}
.order-md-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 12;
order: 12
}
.offset-md-0 {
margin-left: 0
}
.offset-md-1 {
margin-left: 8.3333333333%
}
.offset-md-2 {
margin-left: 16.6666666667%
}
.offset-md-3 {
margin-left: 25%
}
.offset-md-4 {
margin-left: 33.3333333333%
}
.offset-md-5 {
margin-left: 41.6666666667%
}
.offset-md-6 {
margin-left: 50%
}
.offset-md-7 {
margin-left: 58.3333333333%
}
.offset-md-8 {
margin-left: 66.6666666667%
}
.offset-md-9 {
margin-left: 75%
}
.offset-md-10 {
margin-left: 83.3333333333%
}
.offset-md-11 {
margin-left: 91.6666666667%
}
}
@media (min-width: 992px) {
.col-lg {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%
}
.col-lg-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: none
}
.col-lg-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.3333333333%;
flex: 0 0 8.3333333333%;
max-width: 8.3333333333%
}
.col-lg-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.6666666667%;
flex: 0 0 16.6666666667%;
max-width: 16.6666666667%
}
.col-lg-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%
}
.col-lg-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.3333333333%;
flex: 0 0 33.3333333333%;
max-width: 33.3333333333%
}
.col-lg-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.6666666667%;
flex: 0 0 41.6666666667%;
max-width: 41.6666666667%
}
.col-lg-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%
}
.col-lg-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.3333333333%;
flex: 0 0 58.3333333333%;
max-width: 58.3333333333%
}
.col-lg-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.6666666667%;
flex: 0 0 66.6666666667%;
max-width: 66.6666666667%
}
.col-lg-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%
}
.col-lg-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.3333333333%;
flex: 0 0 83.3333333333%;
max-width: 83.3333333333%
}
.col-lg-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.6666666667%;
flex: 0 0 91.6666666667%;
max-width: 91.6666666667%
}
.col-lg-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%
}
.order-lg-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1
}
.order-lg-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13
}
.order-lg-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0
}
.order-lg-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1
}
.order-lg-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2
}
.order-lg-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3
}
.order-lg-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4
}
.order-lg-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5
}
.order-lg-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6
}
.order-lg-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7
}
.order-lg-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8
}
.order-lg-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9
}
.order-lg-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10
}
.order-lg-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11
}
.order-lg-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 12;
order: 12
}
.offset-lg-0 {
margin-left: 0
}
.offset-lg-1 {
margin-left: 8.3333333333%
}
.offset-lg-2 {
margin-left: 16.6666666667%
}
.offset-lg-3 {
margin-left: 25%
}
.offset-lg-4 {
margin-left: 33.3333333333%
}
.offset-lg-5 {
margin-left: 41.6666666667%
}
.offset-lg-6 {
margin-left: 50%
}
.offset-lg-7 {
margin-left: 58.3333333333%
}
.offset-lg-8 {
margin-left: 66.6666666667%
}
.offset-lg-9 {
margin-left: 75%
}
.offset-lg-10 {
margin-left: 83.3333333333%
}
.offset-lg-11 {
margin-left: 91.6666666667%
}
}
@media (min-width: 1200px) {
.col-xl {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%
}
.col-xl-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: none
}
.col-xl-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.3333333333%;
flex: 0 0 8.3333333333%;
max-width: 8.3333333333%
}
.col-xl-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.6666666667%;
flex: 0 0 16.6666666667%;
max-width: 16.6666666667%
}
.col-xl-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%
}
.col-xl-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.3333333333%;
flex: 0 0 33.3333333333%;
max-width: 33.3333333333%
}
.col-xl-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.6666666667%;
flex: 0 0 41.6666666667%;
max-width: 41.6666666667%
}
.col-xl-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%
}
.col-xl-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.3333333333%;
flex: 0 0 58.3333333333%;
max-width: 58.3333333333%
}
.col-xl-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.6666666667%;
flex: 0 0 66.6666666667%;
max-width: 66.6666666667%
}
.col-xl-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%
}
.col-xl-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.3333333333%;
flex: 0 0 83.3333333333%;
max-width: 83.3333333333%
}
.col-xl-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.6666666667%;
flex: 0 0 91.6666666667%;
max-width: 91.6666666667%
}
.col-xl-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%
}
.order-xl-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1
}
.order-xl-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13
}
.order-xl-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0
}
.order-xl-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1
}
.order-xl-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2
}
.order-xl-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3
}
.order-xl-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4
}
.order-xl-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5
}
.order-xl-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6
}
.order-xl-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7
}
.order-xl-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8
}
.order-xl-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9
}
.order-xl-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10
}
.order-xl-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11
}
.order-xl-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 12;
order: 12
}
.offset-xl-0 {
margin-left: 0
}
.offset-xl-1 {
margin-left: 8.3333333333%
}
.offset-xl-2 {
margin-left: 16.6666666667%
}
.offset-xl-3 {
margin-left: 25%
}
.offset-xl-4 {
margin-left: 33.3333333333%
}
.offset-xl-5 {
margin-left: 41.6666666667%
}
.offset-xl-6 {
margin-left: 50%
}
.offset-xl-7 {
margin-left: 58.3333333333%
}
.offset-xl-8 {
margin-left: 66.6666666667%
}
.offset-xl-9 {
margin-left: 75%
}
.offset-xl-10 {
margin-left: 83.3333333333%
}
.offset-xl-11 {
margin-left: 91.6666666667%
}
}
.table {
width: 100%;
margin-bottom: 1rem;
background-color: transparent
}
.table th, .table td {
padding: 0.75rem;
vertical-align: top;
border-top: 1px solid #dee2e6
}
.table thead th {
vertical-align: bottom;
border-bottom: 2px solid #dee2e6
}
.table tbody + tbody {
border-top: 2px solid #dee2e6
}
.table .table {
background-color: #fff
}
.table-sm th, .table-sm td {
padding: 0.3rem
}
.table-bordered {
border: 1px solid #dee2e6
}
.table-bordered th, .table-bordered td {
border: 1px solid #dee2e6
}
.table-bordered thead th, .table-bordered thead td {
border-bottom-width: 2px
}
.table-borderless th, .table-borderless td, .table-borderless thead th, .table-borderless tbody + tbody {
border: 0
}
.table-striped tbody tr:nth-of-type(odd) {
background-color: rgba(0, 0, 0, 0.05)
}
.table-hover tbody tr:hover {
background-color: rgba(0, 0, 0, 0.075)
}
.table-primary, .table-primary > th, .table-primary > td {
background-color: #c3dbf7
}
.table-hover .table-primary:hover {
background-color: #adcef4
}
.table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th {
background-color: #adcef4
}
.table-secondary, .table-secondary > th, .table-secondary > td {
background-color: #c7c8c8
}
.table-hover .table-secondary:hover {
background-color: #babbbb
}
.table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th {
background-color: #babbbb
}
.table-success, .table-success > th, .table-success > td {
background-color: #c9ebbe
}
.table-hover .table-success:hover {
background-color: #b9e5ab
}
.table-hover .table-success:hover > td, .table-hover .table-success:hover > th {
background-color: #b9e5ab
}
.table-info, .table-info > th, .table-info > td {
background-color: #e2cfec
}
.table-hover .table-info:hover {
background-color: #d7bde5
}
.table-hover .table-info:hover > td, .table-hover .table-info:hover > th {
background-color: #d7bde5
}
.table-warning, .table-warning > th, .table-warning > td {
background-color: #ffd8be
}
.table-hover .table-warning:hover {
background-color: #ffc9a5
}
.table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th {
background-color: #ffc9a5
}
.table-danger, .table-danger > th, .table-danger > td {
background-color: #ffb8c8
}
.table-hover .table-danger:hover {
background-color: #ff9fb4
}
.table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th {
background-color: #ff9fb4
}
.table-light, .table-light > th, .table-light > td {
background-color: #fdfdfe
}
.table-hover .table-light:hover {
background-color: #ececf6
}
.table-hover .table-light:hover > td, .table-hover .table-light:hover > th {
background-color: #ececf6
}
.table-dark, .table-dark > th, .table-dark > td {
background-color: #c7c8c8
}
.table-hover .table-dark:hover {
background-color: #babbbb
}
.table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th {
background-color: #babbbb
}
.table-active, .table-active > th, .table-active > td {
background-color: rgba(0, 0, 0, 0.075)
}
.table-hover .table-active:hover {
background-color: rgba(0, 0, 0, 0.075)
}
.table-hover .table-active:hover > td, .table-hover .table-active:hover > th {
background-color: rgba(0, 0, 0, 0.075)
}
.table .thead-dark th {
color: #fff;
background-color: #212529;
border-color: #32383e
}
.table .thead-light th {
color: #495057;
background-color: #e9ecef;
border-color: #dee2e6
}
.table-dark {
color: #fff;
background-color: #212529
}
.table-dark th, .table-dark td, .table-dark thead th {
border-color: #32383e
}
.table-dark.table-bordered {
border: 0
}
.table-dark.table-striped tbody tr:nth-of-type(odd) {
background-color: rgba(255, 255, 255, 0.05)
}
.table-dark.table-hover tbody tr:hover {
background-color: rgba(255, 255, 255, 0.075)
}
@media (max-width: 575.98px) {
.table-responsive-sm {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar
}
.table-responsive-sm > .table-bordered {
border: 0
}
}
@media (max-width: 767.98px) {
.table-responsive-md {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar
}
.table-responsive-md > .table-bordered {
border: 0
}
}
@media (max-width: 991.98px) {
.table-responsive-lg {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar
}
.table-responsive-lg > .table-bordered {
border: 0
}
}
@media (max-width: 1199.98px) {
.table-responsive-xl {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar
}
.table-responsive-xl > .table-bordered {
border: 0
}
}
.table-responsive {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar
}
.table-responsive > .table-bordered {
border: 0
}
.form-control {
display: block;
width: 100%;
//height: calc(2.15625rem + 2px);
height: 30px;
padding: 0.375rem 0.75rem;
font-size: 0.9375rem;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0;
-webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out
}
@media screen and (prefers-reduced-motion: reduce) {
.form-control {
-webkit-transition: none;
transition: none
}
}
.form-control::-ms-expand {
background-color: transparent;
border: 0
}
.form-control:focus {
color: #495057;
background-color: #fff;
border-color: #98c2f2;
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.form-control::-webkit-input-placeholder {
color: #868e96;
opacity: 1
}
.form-control:-ms-input-placeholder {
color: #868e96;
opacity: 1
}
.form-control::-ms-input-placeholder {
color: #868e96;
opacity: 1
}
.form-control::placeholder {
color: #868e96;
opacity: 1
}
.form-control:disabled, .form-control[readonly] {
background-color: #e9ecef;
opacity: 1
}
select.form-control:focus::-ms-value {
color: #495057;
background-color: #fff
}
.form-control-file, .form-control-range {
display: block;
width: 100%
}
.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
}
.col-form-label-lg {
padding-top: calc(0.5rem + 1px);
padding-bottom: calc(0.5rem + 1px);
font-size: 1.171875rem;
line-height: 1.5
}
.col-form-label-sm {
padding-top: calc(0.25rem + 1px);
padding-bottom: calc(0.25rem + 1px);
font-size: 0.8203125rem;
line-height: 1.5
}
.form-control-plaintext {
display: block;
width: 100%;
padding-top: 0.375rem;
padding-bottom: 0.375rem;
margin-bottom: 0;
line-height: 1.5;
color: #373a3c;
background-color: transparent;
border: solid transparent;
border-width: 1px 0
}
.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
padding-right: 0;
padding-left: 0
}
.form-control-sm {
height: calc(1.73046875rem + 2px);
padding: 0.25rem 0.5rem;
font-size: 0.8203125rem;
line-height: 1.5
}
.form-control-lg {
height: calc(2.7578125rem + 2px);
padding: 0.5rem 1rem;
font-size: 1.171875rem;
line-height: 1.5
}
select.form-control[size], select.form-control[multiple] {
height: auto
}
textarea.form-control {
height: auto
}
.form-group {
margin-bottom: 1rem
}
.form-text {
display: block;
margin-top: 0.25rem
}
.form-row {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: -5px;
margin-left: -5px
}
.form-row > .col, .form-row > [class*="col-"] {
padding-right: 5px;
padding-left: 5px
}
.form-check {
position: relative;
display: block;
padding-left: 1.25rem
}
.form-check-input {
position: absolute;
margin-top: 0.3rem;
margin-left: -1.25rem
}
.form-check-input:disabled ~ .form-check-label {
color: #868e96
}
.form-check-label {
margin-bottom: 0
}
.form-check-inline {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding-left: 0;
margin-right: 0.75rem
}
.form-check-inline .form-check-input {
position: static;
margin-top: 0;
margin-right: 0.3125rem;
margin-left: 0
}
.valid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 80%;
color: #3FB618
}
.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.8203125rem;
line-height: 1.5;
color: #fff;
background-color: rgba(63, 182, 24, 0.9)
}
.was-validated .form-control:valid, .form-control.is-valid, .was-validated .custom-select:valid, .custom-select.is-valid {
border-color: #3FB618
}
.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
border-color: #3FB618;
-webkit-box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.25);
box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.25)
}
.was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, .form-control.is-valid ~ .valid-tooltip, .was-validated .custom-select:valid ~ .valid-feedback, .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip {
display: block
}
.was-validated .form-control-file:valid ~ .valid-feedback, .was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, .form-control-file.is-valid ~ .valid-tooltip {
display: block
}
.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
color: #3FB618
}
.was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip {
display: block
}
.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {
color: #3FB618
}
.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {
background-color: #84ea63
}
.was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, .custom-control-input.is-valid ~ .valid-tooltip {
display: block
}
.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {
background-color: #4fe21f
}
.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {
-webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(63, 182, 24, 0.25);
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(63, 182, 24, 0.25)
}
.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {
border-color: #3FB618
}
.was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after {
border-color: inherit
}
.was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, .custom-file-input.is-valid ~ .valid-tooltip {
display: block
}
.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {
-webkit-box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.25);
box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.25)
}
.invalid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 80%;
color: #FF0039
}
.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.8203125rem;
line-height: 1.5;
color: #fff;
background-color: rgba(255, 0, 57, 0.9)
}
.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated .custom-select:invalid, .custom-select.is-invalid {
border-color: #FF0039
}
.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
border-color: #FF0039;
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.25);
box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.25)
}
.was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, .form-control.is-invalid ~ .invalid-tooltip, .was-validated .custom-select:invalid ~ .invalid-feedback, .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip {
display: block
}
.was-validated .form-control-file:invalid ~ .invalid-feedback, .was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, .form-control-file.is-invalid ~ .invalid-tooltip {
display: block
}
.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
color: #FF0039
}
.was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip {
display: block
}
.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {
color: #FF0039
}
.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {
background-color: #ff809c
}
.was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, .custom-control-input.is-invalid ~ .invalid-tooltip {
display: block
}
.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {
background-color: #ff3361
}
.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {
-webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(255, 0, 57, 0.25);
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(255, 0, 57, 0.25)
}
.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {
border-color: #FF0039
}
.was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after {
border-color: inherit
}
.was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, .custom-file-input.is-invalid ~ .invalid-tooltip {
display: block
}
.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.25);
box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.25)
}
.form-inline {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center
}
.form-inline .form-check {
width: 100%
}
@media (min-width: 576px) {
.form-inline label {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
margin-bottom: 0
}
.form-inline .form-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
margin-bottom: 0
}
.form-inline .form-control {
display: inline-block;
width: auto;
vertical-align: middle
}
.form-inline .form-control-plaintext {
display: inline-block
}
.form-inline .input-group, .form-inline .custom-select {
width: auto
}
.form-inline .form-check {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
width: auto;
padding-left: 0
}
.form-inline .form-check-input {
position: relative;
margin-top: 0;
margin-right: 0.25rem;
margin-left: 0
}
.form-inline .custom-control {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}
.form-inline .custom-control-label {
margin-bottom: 0
}
}
.btn {
display: inline-block;
font-weight: 400;
text-align: center;
white-space: nowrap;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 0.9375rem;
line-height: 1.5;
border-radius: 0;
-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
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;
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, -webkit-box-shadow 0.15s ease-in-out
}
@media screen and (prefers-reduced-motion: reduce) {
.btn {
-webkit-transition: none;
transition: none
}
}
.btn:hover, .btn:focus {
text-decoration: none
}
.btn:focus, .btn.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.btn.disabled, .btn:disabled {
opacity: 0.65
}
.btn:not(:disabled):not(.disabled) {
cursor: pointer
}
a.btn.disabled, fieldset:disabled a.btn {
pointer-events: none
}
.btn-primary {
color: #fff;
background-color: #2780E3;
border-color: #2780E3
}
.btn-primary:hover {
color: #fff;
background-color: #1a6dca;
border-color: #1967be
}
.btn-primary:focus, .btn-primary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5)
}
.btn-primary.disabled, .btn-primary:disabled {
color: #fff;
background-color: #2780E3;
border-color: #2780E3
}
.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle {
color: #fff;
background-color: #1967be;
border-color: #1761b3
}
.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5)
}
.btn-secondary {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-secondary:hover {
color: #fff;
background-color: #252728;
border-color: #1f2021
}
.btn-secondary:focus, .btn-secondary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-secondary.disabled, .btn-secondary:disabled {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle {
color: #fff;
background-color: #1f2021;
border-color: #191a1b
}
.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-success {
color: #fff;
background-color: #3FB618;
border-color: #3FB618
}
.btn-success:hover {
color: #fff;
background-color: #339414;
border-color: #2f8912
}
.btn-success:focus, .btn-success.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5)
}
.btn-success.disabled, .btn-success:disabled {
color: #fff;
background-color: #3FB618;
border-color: #3FB618
}
.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle {
color: #fff;
background-color: #2f8912;
border-color: #2c7e11
}
.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5)
}
.btn-info {
color: #fff;
background-color: #9954BB;
border-color: #9954BB
}
.btn-info:hover {
color: #fff;
background-color: #8542a7;
border-color: #7e3f9d
}
.btn-info:focus, .btn-info.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5);
box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5)
}
.btn-info.disabled, .btn-info:disabled {
color: #fff;
background-color: #9954BB;
border-color: #9954BB
}
.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle {
color: #fff;
background-color: #7e3f9d;
border-color: #773b94
}
.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5);
box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5)
}
.btn-warning {
color: #fff;
background-color: #FF7518;
border-color: #FF7518
}
.btn-warning:hover {
color: #fff;
background-color: #f16100;
border-color: #e45c00
}
.btn-warning:focus, .btn-warning.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5)
}
.btn-warning.disabled, .btn-warning:disabled {
color: #fff;
background-color: #FF7518;
border-color: #FF7518
}
.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle {
color: #fff;
background-color: #e45c00;
border-color: #d75700
}
.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5)
}
.btn-danger {
color: #fff;
background-color: #FF0039;
border-color: #FF0039
}
.btn-danger:hover {
color: #fff;
background-color: #d90030;
border-color: #cc002e
}
.btn-danger:focus, .btn-danger.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5)
}
.btn-danger.disabled, .btn-danger:disabled {
color: #fff;
background-color: #FF0039;
border-color: #FF0039
}
.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle {
color: #fff;
background-color: #cc002e;
border-color: #bf002b
}
.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5)
}
.btn-light {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa
}
.btn-light:hover {
color: #212529;
background-color: #e2e6ea;
border-color: #dae0e5
}
.btn-light:focus, .btn-light.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5)
}
.btn-light.disabled, .btn-light:disabled {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa
}
.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, .show > .btn-light.dropdown-toggle {
color: #212529;
background-color: #dae0e5;
border-color: #d3d9df
}
.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5)
}
.btn-dark {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-dark:hover {
color: #fff;
background-color: #252728;
border-color: #1f2021
}
.btn-dark:focus, .btn-dark.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-dark.disabled, .btn-dark:disabled {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, .show > .btn-dark.dropdown-toggle {
color: #fff;
background-color: #1f2021;
border-color: #191a1b
}
.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-outline-primary {
color: #2780E3;
background-color: transparent;
background-image: none;
border-color: #2780E3
}
.btn-outline-primary:hover {
color: #fff;
background-color: #2780E3;
border-color: #2780E3
}
.btn-outline-primary:focus, .btn-outline-primary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5)
}
.btn-outline-primary.disabled, .btn-outline-primary:disabled {
color: #2780E3;
background-color: transparent
}
.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, .show > .btn-outline-primary.dropdown-toggle {
color: #fff;
background-color: #2780E3;
border-color: #2780E3
}
.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-primary.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.5)
}
.btn-outline-secondary {
color: #373a3c;
background-color: transparent;
background-image: none;
border-color: #373a3c
}
.btn-outline-secondary:hover {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-outline-secondary:focus, .btn-outline-secondary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
color: #373a3c;
background-color: transparent
}
.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, .show > .btn-outline-secondary.dropdown-toggle {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-outline-success {
color: #3FB618;
background-color: transparent;
background-image: none;
border-color: #3FB618
}
.btn-outline-success:hover {
color: #fff;
background-color: #3FB618;
border-color: #3FB618
}
.btn-outline-success:focus, .btn-outline-success.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5)
}
.btn-outline-success.disabled, .btn-outline-success:disabled {
color: #3FB618;
background-color: transparent
}
.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, .show > .btn-outline-success.dropdown-toggle {
color: #fff;
background-color: #3FB618;
border-color: #3FB618
}
.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-success.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(63, 182, 24, 0.5)
}
.btn-outline-info {
color: #9954BB;
background-color: transparent;
background-image: none;
border-color: #9954BB
}
.btn-outline-info:hover {
color: #fff;
background-color: #9954BB;
border-color: #9954BB
}
.btn-outline-info:focus, .btn-outline-info.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5);
box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5)
}
.btn-outline-info.disabled, .btn-outline-info:disabled {
color: #9954BB;
background-color: transparent
}
.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, .show > .btn-outline-info.dropdown-toggle {
color: #fff;
background-color: #9954BB;
border-color: #9954BB
}
.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-info.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5);
box-shadow: 0 0 0 0.2rem rgba(153, 84, 187, 0.5)
}
.btn-outline-warning {
color: #FF7518;
background-color: transparent;
background-image: none;
border-color: #FF7518
}
.btn-outline-warning:hover {
color: #fff;
background-color: #FF7518;
border-color: #FF7518
}
.btn-outline-warning:focus, .btn-outline-warning.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5)
}
.btn-outline-warning.disabled, .btn-outline-warning:disabled {
color: #FF7518;
background-color: transparent
}
.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, .show > .btn-outline-warning.dropdown-toggle {
color: #fff;
background-color: #FF7518;
border-color: #FF7518
}
.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-warning.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 117, 24, 0.5)
}
.btn-outline-danger {
color: #FF0039;
background-color: transparent;
background-image: none;
border-color: #FF0039
}
.btn-outline-danger:hover {
color: #fff;
background-color: #FF0039;
border-color: #FF0039
}
.btn-outline-danger:focus, .btn-outline-danger.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5)
}
.btn-outline-danger.disabled, .btn-outline-danger:disabled {
color: #FF0039;
background-color: transparent
}
.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, .show > .btn-outline-danger.dropdown-toggle {
color: #fff;
background-color: #FF0039;
border-color: #FF0039
}
.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-danger.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 0, 57, 0.5)
}
.btn-outline-light {
color: #f8f9fa;
background-color: transparent;
background-image: none;
border-color: #f8f9fa
}
.btn-outline-light:hover {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa
}
.btn-outline-light:focus, .btn-outline-light.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5)
}
.btn-outline-light.disabled, .btn-outline-light:disabled {
color: #f8f9fa;
background-color: transparent
}
.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, .show > .btn-outline-light.dropdown-toggle {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa
}
.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-light.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5)
}
.btn-outline-dark {
color: #373a3c;
background-color: transparent;
background-image: none;
border-color: #373a3c
}
.btn-outline-dark:hover {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-outline-dark:focus, .btn-outline-dark.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-outline-dark.disabled, .btn-outline-dark:disabled {
color: #373a3c;
background-color: transparent
}
.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, .show > .btn-outline-dark.dropdown-toggle {
color: #fff;
background-color: #373a3c;
border-color: #373a3c
}
.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-dark.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5);
box-shadow: 0 0 0 0.2rem rgba(55, 58, 60, 0.5)
}
.btn-link {
font-weight: 400;
color: #2780E3;
background-color: transparent
}
.btn-link:hover {
color: #165ba8;
text-decoration: underline;
background-color: transparent;
border-color: transparent
}
.btn-link:focus, .btn-link.focus {
text-decoration: underline;
border-color: transparent;
-webkit-box-shadow: none;
box-shadow: none
}
.btn-link:disabled, .btn-link.disabled {
color: #868e96;
pointer-events: none
}
.btn-lg, .btn-group-lg > .btn {
padding: 0.5rem 1rem;
font-size: 1.171875rem;
line-height: 1.5;
border-radius: 0
}
.btn-sm, .btn-group-sm > .btn {
padding: 0.25rem 0.5rem;
font-size: 0.8203125rem;
line-height: 1.5;
border-radius: 0
}
.btn-block {
display: block;
width: 100%
}
.btn-block + .btn-block {
margin-top: 0.5rem
}
input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
width: 100%
}
.fade {
-webkit-transition: opacity 0.15s linear;
transition: opacity 0.15s linear
}
@media screen and (prefers-reduced-motion: reduce) {
.fade {
-webkit-transition: none;
transition: none
}
}
.fade:not(.show) {
opacity: 0
}
.collapse:not(.show) {
display: none
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition: height 0.35s ease;
transition: height 0.35s ease
}
@media screen and (prefers-reduced-motion: reduce) {
.collapsing {
-webkit-transition: none;
transition: none
}
}
.dropup, .dropright, .dropdown, .dropleft {
position: relative
}
.dropdown-toggle::after {
display: inline-block;
width: 0;
height: 0;
margin-left: 0.255em;
vertical-align: 0.255em;
content: "";
border-top: 0.3em solid;
border-right: 0.3em solid transparent;
border-bottom: 0;
border-left: 0.3em solid transparent
}
.dropdown-toggle:empty::after {
margin-left: 0
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 10rem;
padding: 0.5rem 0;
margin: 0.125rem 0 0;
font-size: 0.9375rem;
color: #373a3c;
text-align: left;
list-style: none;
background-color: #fff;
background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.15)
}
.dropdown-menu-right {
right: 0;
left: auto
}
.dropup .dropdown-menu {
top: auto;
bottom: 100%;
margin-top: 0;
margin-bottom: 0.125rem
}
.dropup .dropdown-toggle::after {
display: inline-block;
width: 0;
height: 0;
margin-left: 0.255em;
vertical-align: 0.255em;
content: "";
border-top: 0;
border-right: 0.3em solid transparent;
border-bottom: 0.3em solid;
border-left: 0.3em solid transparent
}
.dropup .dropdown-toggle:empty::after {
margin-left: 0
}
.dropright .dropdown-menu {
top: 0;
right: auto;
left: 100%;
margin-top: 0;
margin-left: 0.125rem
}
.dropright .dropdown-toggle::after {
display: inline-block;
width: 0;
height: 0;
margin-left: 0.255em;
vertical-align: 0.255em;
content: "";
border-top: 0.3em solid transparent;
border-right: 0;
border-bottom: 0.3em solid transparent;
border-left: 0.3em solid
}
.dropright .dropdown-toggle:empty::after {
margin-left: 0
}
.dropright .dropdown-toggle::after {
vertical-align: 0
}
.dropleft .dropdown-menu {
top: 0;
right: 100%;
left: auto;
margin-top: 0;
margin-right: 0.125rem
}
.dropleft .dropdown-toggle::after {
display: inline-block;
width: 0;
height: 0;
margin-left: 0.255em;
vertical-align: 0.255em;
content: ""
}
.dropleft .dropdown-toggle::after {
display: none
}
.dropleft .dropdown-toggle::before {
display: inline-block;
width: 0;
height: 0;
margin-right: 0.255em;
vertical-align: 0.255em;
content: "";
border-top: 0.3em solid transparent;
border-right: 0.3em solid;
border-bottom: 0.3em solid transparent
}
.dropleft .dropdown-toggle:empty::after {
margin-left: 0
}
.dropleft .dropdown-toggle::before {
vertical-align: 0
}
.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] {
right: auto;
bottom: auto
}
.dropdown-divider {
height: 0;
margin: 0.5rem 0;
overflow: hidden;
border-top: 1px solid #e9ecef
}
.dropdown-item {
display: block;
width: 100%;
padding: 0.25rem 1.5rem;
clear: both;
font-weight: 400;
color: #212529;
text-align: inherit;
white-space: nowrap;
background-color: transparent;
border: 0
}
.dropdown-item:hover, .dropdown-item:focus {
color: #16181b;
text-decoration: none;
background-color: #f8f9fa
}
.dropdown-item.active, .dropdown-item:active {
color: #fff;
text-decoration: none;
background-color: #2780E3
}
.dropdown-item.disabled, .dropdown-item:disabled {
color: #868e96;
background-color: transparent
}
.dropdown-menu.show {
display: block
}
.dropdown-header {
display: block;
padding: 0.5rem 1.5rem;
margin-bottom: 0;
font-size: 0.8203125rem;
color: #868e96;
white-space: nowrap
}
.dropdown-item-text {
display: block;
padding: 0.25rem 1.5rem;
color: #212529
}
.btn-group, .btn-group-vertical {
position: relative;
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
vertical-align: middle
}
.btn-group > .btn, .btn-group-vertical > .btn {
position: relative;
-webkit-box-flex: 0;
-ms-flex: 0 1 auto;
flex: 0 1 auto
}
.btn-group > .btn:hover, .btn-group-vertical > .btn:hover {
z-index: 1
}
.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active {
z-index: 1
}
.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .btn-group, .btn-group-vertical .btn-group + .btn, .btn-group-vertical .btn-group + .btn-group {
margin-left: -1px
}
.btn-toolbar {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start
}
.btn-toolbar .input-group {
width: auto
}
.btn-group > .btn:first-child {
margin-left: 0
}
.dropdown-toggle-split {
padding-right: 0.5625rem;
padding-left: 0.5625rem
}
.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropright .dropdown-toggle-split::after {
margin-left: 0
}
.dropleft .dropdown-toggle-split::before {
margin-right: 0
}
.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
padding-right: 0.375rem;
padding-left: 0.375rem
}
.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
padding-right: 0.75rem;
padding-left: 0.75rem
}
.btn-group-vertical {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-ms-flex-align: start;
align-items: flex-start;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}
.btn-group-vertical .btn, .btn-group-vertical .btn-group {
width: 100%
}
.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
margin-top: -1px;
margin-left: 0
}
.btn-group-toggle > .btn, .btn-group-toggle > .btn-group > .btn {
margin-bottom: 0
}
.btn-group-toggle > .btn input[type="radio"], .btn-group-toggle > .btn input[type="checkbox"], .btn-group-toggle > .btn-group > .btn input[type="radio"], .btn-group-toggle > .btn-group > .btn input[type="checkbox"] {
position: absolute;
clip: rect(0, 0, 0, 0);
pointer-events: none
}
.input-group {
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
align-items: stretch;
width: 100%
}
.input-group > .form-control, .input-group > .custom-select, .input-group > .custom-file {
position: relative;
-webkit-box-flex: 1;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 1%;
margin-bottom: 0
}
.input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, .input-group > .custom-file + .form-control, .input-group > .custom-file + .custom-select, .input-group > .custom-file + .custom-file {
margin-left: -1px
}
.input-group > .form-control:focus, .input-group > .custom-select:focus, .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {
z-index: 3
}
.input-group > .custom-file .custom-file-input:focus {
z-index: 4
}
.input-group > .custom-file {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center
}
.input-group-prepend, .input-group-append {
display: -webkit-box;
display: -ms-flexbox;
display: flex
}
.input-group-prepend .btn, .input-group-append .btn {
position: relative;
z-index: 2
}
.input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, .input-group-prepend .input-group-text + .btn, .input-group-append .btn + .btn, .input-group-append .btn + .input-group-text, .input-group-append .input-group-text + .input-group-text, .input-group-append .input-group-text + .btn {
margin-left: -1px
}
.input-group-prepend {
margin-right: -1px
}
.input-group-append {
margin-left: -1px
}
.input-group-text {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding: 0.375rem 0.75rem;
margin-bottom: 0;
font-size: 0.9375rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
text-align: center;
white-space: nowrap;
background-color: #e9ecef;
border: 1px solid #ced4da
}
.input-group-text input[type="radio"], .input-group-text input[type="checkbox"] {
margin-top: 0
}
.input-group-lg > .form-control, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn {
height: calc(2.7578125rem + 2px);
padding: 0.5rem 1rem;
font-size: 1.171875rem;
line-height: 1.5
}
.input-group-sm > .form-control, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn {
height: calc(1.73046875rem + 2px);
padding: 0.25rem 0.5rem;
font-size: 0.8203125rem;
line-height: 1.5
}
.custom-control {
position: relative;
display: block;
min-height: 1.40625rem;
padding-left: 1.5rem
}
.custom-control-inline {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
margin-right: 1rem
}
.custom-control-input {
position: absolute;
z-index: -1;
opacity: 0
}
.custom-control-input:checked ~ .custom-control-label::before {
color: #fff;
background-color: #2780E3
}
.custom-control-input:focus ~ .custom-control-label::before {
-webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(39, 128, 227, 0.25);
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.custom-control-input:active ~ .custom-control-label::before {
color: #fff;
background-color: #c5ddf7
}
.custom-control-input:disabled ~ .custom-control-label {
color: #868e96
}
.custom-control-input:disabled ~ .custom-control-label::before {
background-color: #e9ecef
}
.custom-control-label {
position: relative;
margin-bottom: 0
}
.custom-control-label::before {
position: absolute;
top: 0.203125rem;
left: -1.5rem;
display: block;
width: 1rem;
height: 1rem;
pointer-events: none;
content: "";
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #dee2e6
}
.custom-control-label::after {
position: absolute;
top: 0.203125rem;
left: -1.5rem;
display: block;
width: 1rem;
height: 1rem;
content: "";
background-repeat: no-repeat;
background-position: center center;
background-size: 50% 50%
}
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {
background-color: #2780E3
}
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")
}
.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {
background-color: #2780E3
}
.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")
}
.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {
background-color: rgba(39, 128, 227, 0.5)
}
.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {
background-color: rgba(39, 128, 227, 0.5)
}
.custom-radio .custom-control-label::before {
border-radius: 50%
}
.custom-radio .custom-control-input:checked ~ .custom-control-label::before {
background-color: #2780E3
}
.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")
}
.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {
background-color: rgba(39, 128, 227, 0.5)
}
.custom-select {
display: inline-block;
width: 100%;
height: calc(2.15625rem + 2px);
padding: 0.375rem 1.75rem 0.375rem 0.75rem;
line-height: 1.5;
color: #495057;
vertical-align: middle;
background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23373a3c' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center;
background-size: 8px 10px;
border: 1px solid #ced4da;
border-radius: 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none
}
.custom-select:focus {
border-color: #98c2f2;
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(152, 194, 242, 0.5);
box-shadow: 0 0 0 0.2rem rgba(152, 194, 242, 0.5)
}
.custom-select:focus::-ms-value {
color: #495057;
background-color: #fff
}
.custom-select[multiple], .custom-select[size]:not([size="1"]) {
height: auto;
padding-right: 0.75rem;
background-image: none
}
.custom-select:disabled {
color: #868e96;
background-color: #e9ecef
}
.custom-select::-ms-expand {
opacity: 0
}
.custom-select-sm {
height: calc(1.73046875rem + 2px);
padding-top: 0.375rem;
padding-bottom: 0.375rem;
font-size: 75%
}
.custom-select-lg {
height: calc(2.7578125rem + 2px);
padding-top: 0.375rem;
padding-bottom: 0.375rem;
font-size: 125%
}
.custom-file {
position: relative;
display: inline-block;
width: 100%;
height: calc(2.15625rem + 2px);
margin-bottom: 0
}
.custom-file-input {
position: relative;
z-index: 2;
width: 100%;
height: calc(2.15625rem + 2px);
margin: 0;
opacity: 0
}
.custom-file-input:focus ~ .custom-file-label {
border-color: #98c2f2;
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.custom-file-input:focus ~ .custom-file-label::after {
border-color: #98c2f2
}
.custom-file-input:disabled ~ .custom-file-label {
background-color: #e9ecef
}
.custom-file-input:lang(en) ~ .custom-file-label::after {
content: "Browse"
}
.custom-file-label {
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 1;
height: calc(2.15625rem + 2px);
padding: 0.375rem 0.75rem;
line-height: 1.5;
color: #495057;
background-color: #fff;
border: 1px solid #ced4da
}
.custom-file-label::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
z-index: 3;
display: block;
height: 2.15625rem;
padding: 0.375rem 0.75rem;
line-height: 1.5;
color: #495057;
content: "Browse";
background-color: #e9ecef;
border-left: 1px solid #ced4da
}
.custom-range {
width: 100%;
padding-left: 0;
background-color: transparent;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none
}
.custom-range:focus {
outline: none
}
.custom-range:focus::-webkit-slider-thumb {
-webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(39, 128, 227, 0.25);
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.custom-range:focus::-moz-range-thumb {
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.custom-range:focus::-ms-thumb {
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.custom-range::-moz-focus-outer {
border: 0
}
.custom-range::-webkit-slider-thumb {
width: 1rem;
height: 1rem;
margin-top: -0.25rem;
background-color: #2780E3;
border: 0;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
-webkit-appearance: none;
appearance: none
}
@media screen and (prefers-reduced-motion: reduce) {
.custom-range::-webkit-slider-thumb {
-webkit-transition: none;
transition: none
}
}
.custom-range::-webkit-slider-thumb:active {
background-color: #c5ddf7
}
.custom-range::-webkit-slider-runnable-track {
width: 100%;
height: 0.5rem;
color: transparent;
cursor: pointer;
background-color: #dee2e6;
border-color: transparent
}
.custom-range::-moz-range-thumb {
width: 1rem;
height: 1rem;
background-color: #2780E3;
border: 0;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
-moz-appearance: none;
appearance: none
}
@media screen and (prefers-reduced-motion: reduce) {
.custom-range::-moz-range-thumb {
-webkit-transition: none;
transition: none
}
}
.custom-range::-moz-range-thumb:active {
background-color: #c5ddf7
}
.custom-range::-moz-range-track {
width: 100%;
height: 0.5rem;
color: transparent;
cursor: pointer;
background-color: #dee2e6;
border-color: transparent
}
.custom-range::-ms-thumb {
width: 1rem;
height: 1rem;
margin-top: 0;
margin-right: 0.2rem;
margin-left: 0.2rem;
background-color: #2780E3;
border: 0;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
appearance: none
}
@media screen and (prefers-reduced-motion: reduce) {
.custom-range::-ms-thumb {
-webkit-transition: none;
transition: none
}
}
.custom-range::-ms-thumb:active {
background-color: #c5ddf7
}
.custom-range::-ms-track {
width: 100%;
height: 0.5rem;
color: transparent;
cursor: pointer;
background-color: transparent;
border-color: transparent;
border-width: 0.5rem
}
.custom-range::-ms-fill-lower {
background-color: #dee2e6
}
.custom-range::-ms-fill-upper {
margin-right: 15px;
background-color: #dee2e6
}
.custom-control-label::before, .custom-file-label, .custom-select {
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out
}
@media screen and (prefers-reduced-motion: reduce) {
.custom-control-label::before, .custom-file-label, .custom-select {
-webkit-transition: none;
transition: none
}
}
.nav {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding-left: 0;
margin-bottom: 0;
list-style: none
}
.nav-link {
display: block;
padding: 0.5rem 1rem
}
.nav-link:hover, .nav-link:focus {
text-decoration: none
}
.nav-link.disabled {
color: #868e96
}
.nav-tabs {
border-bottom: 1px solid #dee2e6
}
.nav-tabs .nav-item {
margin-bottom: -1px
}
.nav-tabs .nav-link {
border: 1px solid transparent
}
.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
border-color: #e9ecef #e9ecef #dee2e6
}
.nav-tabs .nav-link.disabled {
color: #868e96;
background-color: transparent;
border-color: transparent
}
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {
color: #495057;
background-color: #fff;
border-color: #dee2e6 #dee2e6 #fff
}
.nav-tabs .dropdown-menu {
margin-top: -1px
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #2780E3
}
.nav-fill .nav-item {
-webkit-box-flex: 1;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
text-align: center
}
.nav-justified .nav-item {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
text-align: center
}
.tab-content > .tab-pane {
display: none
}
.tab-content > .active {
display: block
}
.navbar {
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 0.5rem 1rem
}
.navbar > .container, .navbar > .container-fluid {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between
}
.navbar-brand {
display: inline-block;
padding-top: 0.32421875rem;
padding-bottom: 0.32421875rem;
margin-right: 1rem;
font-size: 1.171875rem;
line-height: inherit;
white-space: nowrap
}
.navbar-brand:hover, .navbar-brand:focus {
text-decoration: none
}
.navbar-nav {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
padding-left: 0;
margin-bottom: 0;
list-style: none
}
.navbar-nav .nav-link {
padding-right: 0;
padding-left: 0
}
.navbar-nav .dropdown-menu {
position: static;
float: none
}
.navbar-text {
display: inline-block;
padding-top: 0.5rem;
padding-bottom: 0.5rem
}
.navbar-collapse {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center
}
.navbar-toggler {
padding: 0.25rem 0.75rem;
font-size: 1.171875rem;
line-height: 1;
background-color: transparent;
border: 1px solid transparent
}
.navbar-toggler:hover, .navbar-toggler:focus {
text-decoration: none
}
.navbar-toggler:not(:disabled):not(.disabled) {
cursor: pointer
}
.navbar-toggler-icon {
display: inline-block;
width: 1.5em;
height: 1.5em;
vertical-align: middle;
content: "";
background: no-repeat center center;
background-size: 100% 100%
}
@media (max-width: 575.98px) {
.navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid {
padding-right: 0;
padding-left: 0
}
}
@media (min-width: 576px) {
.navbar-expand-sm {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start
}
.navbar-expand-sm .navbar-nav {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row
}
.navbar-expand-sm .navbar-nav .dropdown-menu {
position: absolute
}
.navbar-expand-sm .navbar-nav .nav-link {
padding-right: 0.5rem;
padding-left: 0.5rem
}
.navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap
}
.navbar-expand-sm .navbar-collapse {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-ms-flex-preferred-size: auto;
flex-basis: auto
}
.navbar-expand-sm .navbar-toggler {
display: none
}
}
@media (max-width: 767.98px) {
.navbar-expand-md > .container, .navbar-expand-md > .container-fluid {
padding-right: 0;
padding-left: 0
}
}
@media (min-width: 768px) {
.navbar-expand-md {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start
}
.navbar-expand-md .navbar-nav {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row
}
.navbar-expand-md .navbar-nav .dropdown-menu {
position: absolute
}
.navbar-expand-md .navbar-nav .nav-link {
padding-right: 0.5rem;
padding-left: 0.5rem
}
.navbar-expand-md > .container, .navbar-expand-md > .container-fluid {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap
}
.navbar-expand-md .navbar-collapse {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-ms-flex-preferred-size: auto;
flex-basis: auto
}
.navbar-expand-md .navbar-toggler {
display: none
}
}
@media (max-width: 991.98px) {
.navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid {
padding-right: 0;
padding-left: 0
}
}
@media (min-width: 992px) {
.navbar-expand-lg {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start
}
.navbar-expand-lg .navbar-nav {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row
}
.navbar-expand-lg .navbar-nav .dropdown-menu {
position: absolute
}
.navbar-expand-lg .navbar-nav .nav-link {
padding-right: 0.5rem;
padding-left: 0.5rem
}
.navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap
}
.navbar-expand-lg .navbar-collapse {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-ms-flex-preferred-size: auto;
flex-basis: auto
}
.navbar-expand-lg .navbar-toggler {
display: none
}
}
@media (max-width: 1199.98px) {
.navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid {
padding-right: 0;
padding-left: 0
}
}
@media (min-width: 1200px) {
.navbar-expand-xl {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start
}
.navbar-expand-xl .navbar-nav {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row
}
.navbar-expand-xl .navbar-nav .dropdown-menu {
position: absolute
}
.navbar-expand-xl .navbar-nav .nav-link {
padding-right: 0.5rem;
padding-left: 0.5rem
}
.navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap
}
.navbar-expand-xl .navbar-collapse {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-ms-flex-preferred-size: auto;
flex-basis: auto
}
.navbar-expand-xl .navbar-toggler {
display: none
}
}
.navbar-expand {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start
}
.navbar-expand > .container, .navbar-expand > .container-fluid {
padding-right: 0;
padding-left: 0
}
.navbar-expand .navbar-nav {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row
}
.navbar-expand .navbar-nav .dropdown-menu {
position: absolute
}
.navbar-expand .navbar-nav .nav-link {
padding-right: 0.5rem;
padding-left: 0.5rem
}
.navbar-expand > .container, .navbar-expand > .container-fluid {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap
}
.navbar-expand .navbar-collapse {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-ms-flex-preferred-size: auto;
flex-basis: auto
}
.navbar-expand .navbar-toggler {
display: none
}
.navbar-light .navbar-brand {
color: rgba(0, 0, 0, 0.9)
}
.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {
color: rgba(0, 0, 0, 0.9)
}
.navbar-light .navbar-nav .nav-link {
color: rgba(0, 0, 0, 0.5)
}
.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {
color: rgba(0, 0, 0, 0.9)
}
.navbar-light .navbar-nav .nav-link.disabled {
color: rgba(0, 0, 0, 0.3)
}
.navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .nav-link.active {
color: rgba(0, 0, 0, 0.9)
}
.navbar-light .navbar-toggler {
color: rgba(0, 0, 0, 0.5);
border-color: rgba(0, 0, 0, 0.1)
}
.navbar-light .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
}
.navbar-light .navbar-text {
color: rgba(0, 0, 0, 0.5)
}
.navbar-light .navbar-text a {
color: rgba(0, 0, 0, 0.9)
}
.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {
color: rgba(0, 0, 0, 0.9)
}
.navbar-dark .navbar-brand {
color: #fff
}
.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {
color: #fff
}
.navbar-dark .navbar-nav .nav-link {
color: rgba(255, 255, 255, 0.5)
}
.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {
color: white
}
.navbar-dark .navbar-nav .nav-link.disabled {
color: rgba(255, 255, 255, 0.25)
}
.navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .nav-link.active {
color: #fff
}
.navbar-dark .navbar-toggler {
color: rgba(255, 255, 255, 0.5);
border-color: rgba(255, 255, 255, 0.1)
}
.navbar-dark .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
}
.navbar-dark .navbar-text {
color: rgba(255, 255, 255, 0.5)
}
.navbar-dark .navbar-text a {
color: #fff
}
.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {
color: #fff
}
.card {
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
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)
}
.card > hr {
margin-right: 0;
margin-left: 0
}
.card-body {
-webkit-box-flex: 1;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 1.25rem
}
.card-title {
margin-bottom: 0.75rem
}
.card-subtitle {
margin-top: -0.375rem;
margin-bottom: 0
}
.card-text:last-child {
margin-bottom: 0
}
.card-link:hover {
text-decoration: none
}
.card-link + .card-link {
margin-left: 1.25rem
}
.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)
}
.card-header + .list-group .list-group-item:first-child {
border-top: 0
}
.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)
}
.card-header-tabs {
margin-right: -0.625rem;
margin-bottom: -0.75rem;
margin-left: -0.625rem;
border-bottom: 0
}
.card-header-pills {
margin-right: -0.625rem;
margin-left: -0.625rem
}
.card-img-overlay {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 1.25rem
}
.card-img {
width: 100%
}
.card-img-top {
width: 100%
}
.card-img-bottom {
width: 100%
}
.card-deck {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column
}
.card-deck .card {
margin-bottom: 15px
}
@media (min-width: 576px) {
.card-deck {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
margin-right: -15px;
margin-left: -15px
}
.card-deck .card {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 1;
-ms-flex: 1 0 0%;
flex: 1 0 0%;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
margin-right: 15px;
margin-bottom: 0;
margin-left: 15px
}
}
.card-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column
}
.card-group > .card {
margin-bottom: 15px
}
@media (min-width: 576px) {
.card-group {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row wrap;
flex-flow: row wrap
}
.card-group > .card {
-webkit-box-flex: 1;
-ms-flex: 1 0 0%;
flex: 1 0 0%;
margin-bottom: 0
}
.card-group > .card + .card {
margin-left: 0;
border-left: 0
}
}
.card-columns .card {
margin-bottom: 0.75rem
}
@media (min-width: 576px) {
.card-columns {
-webkit-column-count: 3;
column-count: 3;
-webkit-column-gap: 1.25rem;
column-gap: 1.25rem;
orphans: 1;
widows: 1
}
.card-columns .card {
display: inline-block;
width: 100%
}
}
.accordion .card:not(:first-of-type):not(:last-of-type) {
border-bottom: 0;
border-radius: 0
}
.accordion .card:not(:first-of-type) .card-header:first-child {
border-radius: 0
}
.accordion .card:first-of-type {
border-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0
}
.accordion .card:last-of-type {
border-top-left-radius: 0;
border-top-right-radius: 0
}
.breadcrumb {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding: 0.75rem 1rem;
margin-bottom: 1rem;
list-style: none;
background-color: #e9ecef
}
.breadcrumb-item + .breadcrumb-item {
padding-left: 0.5rem
}
.breadcrumb-item + .breadcrumb-item::before {
display: inline-block;
padding-right: 0.5rem;
color: #868e96;
content: "/"
}
.breadcrumb-item + .breadcrumb-item:hover::before {
text-decoration: underline
}
.breadcrumb-item + .breadcrumb-item:hover::before {
text-decoration: none
}
.breadcrumb-item.active {
color: #868e96
}
.pagination {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
padding-left: 0;
list-style: none
}
.page-link {
position: relative;
display: block;
padding: 0.5rem 0.75rem;
margin-left: -1px;
line-height: 1.25;
color: #2780E3;
background-color: #fff;
border: 1px solid #dee2e6
}
.page-link:hover {
z-index: 2;
color: #165ba8;
text-decoration: none;
background-color: #e9ecef;
border-color: #dee2e6
}
.page-link:focus {
z-index: 2;
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25);
box-shadow: 0 0 0 0.2rem rgba(39, 128, 227, 0.25)
}
.page-link:not(:disabled):not(.disabled) {
cursor: pointer
}
.page-item:first-child .page-link {
margin-left: 0
}
.page-item.active .page-link {
z-index: 1;
color: #fff;
background-color: #2780E3;
border-color: #2780E3
}
.page-item.disabled .page-link {
color: #868e96;
pointer-events: none;
cursor: auto;
background-color: #fff;
border-color: #dee2e6
}
.pagination-lg .page-link {
padding: 0.75rem 1.5rem;
font-size: 1.171875rem;
line-height: 1.5
}
.pagination-sm .page-link {
padding: 0.25rem 0.5rem;
font-size: 0.8203125rem;
line-height: 1.5
}
.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
}
.badge:empty {
display: none
}
.btn .badge {
position: relative;
top: -1px
}
.badge-pill {
padding-right: 0.6em;
padding-left: 0.6em
}
.badge-primary {
color: #fff;
background-color: #2780E3
}
.badge-primary[href]:hover, .badge-primary[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1967be
}
.badge-secondary {
color: #fff;
background-color: #373a3c
}
.badge-secondary[href]:hover, .badge-secondary[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1f2021
}
.badge-success {
color: #fff;
background-color: #3FB618
}
.badge-success[href]:hover, .badge-success[href]:focus {
color: #fff;
text-decoration: none;
background-color: #2f8912
}
.badge-info {
color: #fff;
background-color: #9954BB
}
.badge-info[href]:hover, .badge-info[href]:focus {
color: #fff;
text-decoration: none;
background-color: #7e3f9d
}
.badge-warning {
color: #fff;
background-color: #FF7518
}
.badge-warning[href]:hover, .badge-warning[href]:focus {
color: #fff;
text-decoration: none;
background-color: #e45c00
}
.badge-danger {
color: #fff;
background-color: #FF0039
}
.badge-danger[href]:hover, .badge-danger[href]:focus {
color: #fff;
text-decoration: none;
background-color: #cc002e
}
.badge-light {
color: #212529;
background-color: #f8f9fa
}
.badge-light[href]:hover, .badge-light[href]:focus {
color: #212529;
text-decoration: none;
background-color: #dae0e5
}
.badge-dark {
color: #fff;
background-color: #373a3c
}
.badge-dark[href]:hover, .badge-dark[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1f2021
}
.jumbotron {
padding: 2rem 1rem;
margin-bottom: 2rem;
background-color: #e9ecef
}
@media (min-width: 576px) {
.jumbotron {
padding: 4rem 2rem
}
}
.jumbotron-fluid {
padding-right: 0;
padding-left: 0
}
.alert {
position: relative;
padding: 0.75rem 1.25rem;
margin-bottom: 1rem;
border: 0 solid transparent
}
.alert-heading {
color: inherit
}
.alert-link {
font-weight: 700
}
.alert-dismissible {
padding-right: 3.90625rem
}
.alert-dismissible .close {
position: absolute;
top: 0;
right: 0;
padding: 0.75rem 1.25rem;
color: inherit
}
.alert-primary {
color: #144376;
background-color: #d4e6f9;
border-color: #c3dbf7
}
.alert-primary hr {
border-top-color: #adcef4
}
.alert-primary .alert-link {
color: #0d2a4a
}
.alert-secondary {
color: #1d1e1f;
background-color: #d7d8d8;
border-color: #c7c8c8
}
.alert-secondary hr {
border-top-color: #babbbb
}
.alert-secondary .alert-link {
color: #040505
}
.alert-success {
color: #215f0c;
background-color: #d9f0d1;
border-color: #c9ebbe
}
.alert-success hr {
border-top-color: #b9e5ab
}
.alert-success .alert-link {
color: #113206
}
.alert-info {
color: #502c61;
background-color: #ebddf1;
border-color: #e2cfec
}
.alert-info hr {
border-top-color: #d7bde5
}
.alert-info .alert-link {
color: #331c3e
}
.alert-warning {
color: #853d0c;
background-color: #ffe3d1;
border-color: #ffd8be
}
.alert-warning hr {
border-top-color: #ffc9a5
}
.alert-warning .alert-link {
color: #562808
}
.alert-danger {
color: #85001e;
background-color: #ffccd7;
border-color: #ffb8c8
}
.alert-danger hr {
border-top-color: #ff9fb4
}
.alert-danger .alert-link {
color: #520012
}
.alert-light {
color: #818182;
background-color: #fefefe;
border-color: #fdfdfe
}
.alert-light hr {
border-top-color: #ececf6
}
.alert-light .alert-link {
color: #686868
}
.alert-dark {
color: #1d1e1f;
background-color: #d7d8d8;
border-color: #c7c8c8
}
.alert-dark hr {
border-top-color: #babbbb
}
.alert-dark .alert-link {
color: #040505
}
@-webkit-keyframes progress-bar-stripes {
from {
background-position: 0.5rem 0
}
to {
background-position: 0 0
}
}
@keyframes progress-bar-stripes {
from {
background-position: 0.5rem 0
}
to {
background-position: 0 0
}
}
.progress {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
height: 0.5rem;
overflow: hidden;
font-size: 0.703125rem;
background-color: #e9ecef
}
.progress-bar {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
color: #fff;
text-align: center;
white-space: nowrap;
background-color: #2780E3;
-webkit-transition: width 0.6s ease;
transition: width 0.6s ease
}
@media screen and (prefers-reduced-motion: reduce) {
.progress-bar {
-webkit-transition: none;
transition: none
}
}
.progress-bar-striped {
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-size: 0.5rem 0.5rem
}
.progress-bar-animated {
-webkit-animation: progress-bar-stripes 1s linear infinite;
animation: progress-bar-stripes 1s linear infinite
}
.media {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: start;
-ms-flex-align: start;
align-items: flex-start
}
.media-body {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1
}
.list-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
padding-left: 0;
margin-bottom: 0
}
.list-group-item-action {
width: 100%;
color: #495057;
text-align: inherit
}
.list-group-item-action:hover, .list-group-item-action:focus {
color: #495057;
text-decoration: none;
background-color: #f8f9fa
}
.list-group-item-action:active {
color: #373a3c;
background-color: #e9ecef
}
.list-group-item {
position: relative;
display: block;
padding: 0.75rem 1.25rem;
margin-bottom: -1px;
background-color: #fff;
border: 1px solid rgba(0, 0, 0, 0.125)
}
.list-group-item:last-child {
margin-bottom: 0
}
.list-group-item:hover, .list-group-item:focus {
z-index: 1;
text-decoration: none
}
.list-group-item.disabled, .list-group-item:disabled {
color: #868e96;
background-color: #fff
}
.list-group-item.active {
z-index: 2;
color: #fff;
background-color: #2780E3;
border-color: #2780E3
}
.list-group-flush .list-group-item {
border-right: 0;
border-left: 0
}
.list-group-flush:first-child .list-group-item:first-child {
border-top: 0
}
.list-group-flush:last-child .list-group-item:last-child {
border-bottom: 0
}
.list-group-item-primary {
color: #144376;
background-color: #c3dbf7
}
.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
color: #144376;
background-color: #adcef4
}
.list-group-item-primary.list-group-item-action.active {
color: #fff;
background-color: #144376;
border-color: #144376
}
.list-group-item-secondary {
color: #1d1e1f;
background-color: #c7c8c8
}
.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
color: #1d1e1f;
background-color: #babbbb
}
.list-group-item-secondary.list-group-item-action.active {
color: #fff;
background-color: #1d1e1f;
border-color: #1d1e1f
}
.list-group-item-success {
color: #215f0c;
background-color: #c9ebbe
}
.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
color: #215f0c;
background-color: #b9e5ab
}
.list-group-item-success.list-group-item-action.active {
color: #fff;
background-color: #215f0c;
border-color: #215f0c
}
.list-group-item-info {
color: #502c61;
background-color: #e2cfec
}
.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
color: #502c61;
background-color: #d7bde5
}
.list-group-item-info.list-group-item-action.active {
color: #fff;
background-color: #502c61;
border-color: #502c61
}
.list-group-item-warning {
color: #853d0c;
background-color: #ffd8be
}
.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
color: #853d0c;
background-color: #ffc9a5
}
.list-group-item-warning.list-group-item-action.active {
color: #fff;
background-color: #853d0c;
border-color: #853d0c
}
.list-group-item-danger {
color: #85001e;
background-color: #ffb8c8
}
.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
color: #85001e;
background-color: #ff9fb4
}
.list-group-item-danger.list-group-item-action.active {
color: #fff;
background-color: #85001e;
border-color: #85001e
}
.list-group-item-light {
color: #818182;
background-color: #fdfdfe
}
.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
color: #818182;
background-color: #ececf6
}
.list-group-item-light.list-group-item-action.active {
color: #fff;
background-color: #818182;
border-color: #818182
}
.list-group-item-dark {
color: #1d1e1f;
background-color: #c7c8c8
}
.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
color: #1d1e1f;
background-color: #babbbb
}
.list-group-item-dark.list-group-item-action.active {
color: #fff;
background-color: #1d1e1f;
border-color: #1d1e1f
}
.close {
float: right;
font-size: 1.40625rem;
font-weight: 700;
line-height: 1;
color: #000;
text-shadow: 0 1px 0 #fff;
opacity: .5
}
.close:not(:disabled):not(.disabled) {
cursor: pointer
}
.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {
color: #000;
text-decoration: none;
opacity: .75
}
button.close {
padding: 0;
background-color: transparent;
border: 0;
-webkit-appearance: none
}
.modal-open {
overflow: hidden
}
.modal-open .modal {
overflow-x: hidden;
overflow-y: auto
}
.modal {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1050;
display: none;
overflow: hidden;
outline: 0
}
.modal-dialog {
position: relative;
width: auto;
margin: 0.5rem;
pointer-events: none
}
.modal.fade .modal-dialog {
-webkit-transition: -webkit-transform 0.3s ease-out;
transition: -webkit-transform 0.3s ease-out;
transition: transform 0.3s ease-out;
transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
-webkit-transform: translate(0, -25%);
transform: translate(0, -25%)
}
@media screen and (prefers-reduced-motion: reduce) {
.modal.fade .modal-dialog {
-webkit-transition: none;
transition: none
}
}
.modal.show .modal-dialog {
-webkit-transform: translate(0, 0);
transform: translate(0, 0)
}
.modal-dialog-centered {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
min-height: calc(100% - (0.5rem * 2))
}
.modal-dialog-centered::before {
display: block;
height: calc(100vh - (0.5rem * 2));
content: ""
}
.modal-content {
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
width: 100%;
pointer-events: auto;
background-color: #fff;
background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.2);
outline: 0
}
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1040;
background-color: #000
}
.modal-backdrop.fade {
opacity: 0
}
.modal-backdrop.show {
opacity: 0.5
}
.modal-header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: start;
-ms-flex-align: start;
align-items: flex-start;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 1rem;
border-bottom: 1px solid #e9ecef
}
.modal-header .close {
padding: 1rem;
margin: -1rem -1rem -1rem auto
}
.modal-title {
margin-bottom: 0;
line-height: 1.5
}
.modal-body {
position: relative;
-webkit-box-flex: 1;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 1rem
}
.modal-footer {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: end;
-ms-flex-pack: end;
justify-content: flex-end;
padding: 1rem;
border-top: 1px solid #e9ecef
}
.modal-footer > :not(:first-child) {
margin-left: .25rem
}
.modal-footer > :not(:last-child) {
margin-right: .25rem
}
.modal-scrollbar-measure {
position: absolute;
top: -9999px;
width: 50px;
height: 50px;
overflow: scroll
}
@media (min-width: 576px) {
.modal-dialog {
max-width: 500px;
margin: 1.75rem auto
}
.modal-dialog-centered {
min-height: calc(100% - (1.75rem * 2))
}
.modal-dialog-centered::before {
height: calc(100vh - (1.75rem * 2))
}
.modal-sm {
max-width: 300px
}
}
@media (min-width: 992px) {
.modal-lg {
max-width: 800px
}
}
.tooltip {
position: absolute;
z-index: 1070;
display: block;
margin: 0;
font-family: "Segoe UI", "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
font-style: normal;
font-weight: 400;
line-height: 1.5;
text-align: left;
text-align: start;
text-decoration: none;
text-shadow: none;
text-transform: none;
letter-spacing: normal;
word-break: normal;
word-spacing: normal;
white-space: normal;
line-break: auto;
font-size: 0.8203125rem;
word-wrap: break-word;
opacity: 0
}
.tooltip.show {
opacity: 0.9
}
.tooltip .arrow {
position: absolute;
display: block;
width: 0.8rem;
height: 0.4rem
}
.tooltip .arrow::before {
position: absolute;
content: "";
border-color: transparent;
border-style: solid
}
.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] {
padding: 0.4rem 0
}
.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow {
bottom: 0
}
.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before {
top: 0;
border-width: 0.4rem 0.4rem 0;
border-top-color: #000
}
.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] {
padding: 0 0.4rem
}
.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow {
left: 0;
width: 0.4rem;
height: 0.8rem
}
.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before {
right: 0;
border-width: 0.4rem 0.4rem 0.4rem 0;
border-right-color: #000
}
.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] {
padding: 0.4rem 0
}
.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow {
top: 0
}
.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before {
bottom: 0;
border-width: 0 0.4rem 0.4rem;
border-bottom-color: #000
}
.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] {
padding: 0 0.4rem
}
.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow {
right: 0;
width: 0.4rem;
height: 0.8rem
}
.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before {
left: 0;
border-width: 0.4rem 0 0.4rem 0.4rem;
border-left-color: #000
}
.tooltip-inner {
max-width: 200px;
padding: 0.25rem 0.5rem;
color: #fff;
text-align: center;
background-color: #000
}
.popover {
position: absolute;
top: 0;
left: 0;
z-index: 1060;
display: block;
max-width: 276px;
font-family: "Segoe UI", "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
font-style: normal;
font-weight: 400;
line-height: 1.5;
text-align: left;
text-align: start;
text-decoration: none;
text-shadow: none;
text-transform: none;
letter-spacing: normal;
word-break: normal;
word-spacing: normal;
white-space: normal;
line-break: auto;
font-size: 0.8203125rem;
word-wrap: break-word;
background-color: #fff;
background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.2)
}
.popover .arrow {
position: absolute;
display: block;
width: 1rem;
height: 0.5rem;
margin: 0 0.3rem
}
.popover .arrow::before, .popover .arrow::after {
position: absolute;
display: block;
content: "";
border-color: transparent;
border-style: solid
}
.bs-popover-top, .bs-popover-auto[x-placement^="top"] {
margin-bottom: 0.5rem
}
.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow {
bottom: calc((0.5rem + 1px) * -1)
}
.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, .bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after {
border-width: 0.5rem 0.5rem 0
}
.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before {
bottom: 0;
border-top-color: rgba(0, 0, 0, 0.25)
}
.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after {
bottom: 1px;
border-top-color: #fff
}
.bs-popover-right, .bs-popover-auto[x-placement^="right"] {
margin-left: 0.5rem
}
.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow {
left: calc((0.5rem + 1px) * -1);
width: 0.5rem;
height: 1rem;
margin: 0.3rem 0
}
.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, .bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after {
border-width: 0.5rem 0.5rem 0.5rem 0
}
.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before {
left: 0;
border-right-color: rgba(0, 0, 0, 0.25)
}
.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after {
left: 1px;
border-right-color: #fff
}
.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] {
margin-top: 0.5rem
}
.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow {
top: calc((0.5rem + 1px) * -1)
}
.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, .bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after {
border-width: 0 0.5rem 0.5rem 0.5rem
}
.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before {
top: 0;
border-bottom-color: rgba(0, 0, 0, 0.25)
}
.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after {
top: 1px;
border-bottom-color: #fff
}
.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before {
position: absolute;
top: 0;
left: 50%;
display: block;
width: 1rem;
margin-left: -0.5rem;
content: "";
border-bottom: 1px solid #f7f7f7
}
.bs-popover-left, .bs-popover-auto[x-placement^="left"] {
margin-right: 0.5rem
}
.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow {
right: calc((0.5rem + 1px) * -1);
width: 0.5rem;
height: 1rem;
margin: 0.3rem 0
}
.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, .bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after {
border-width: 0.5rem 0 0.5rem 0.5rem
}
.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before {
right: 0;
border-left-color: rgba(0, 0, 0, 0.25)
}
.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after {
right: 1px;
border-left-color: #fff
}
.popover-header {
padding: 0.5rem 0.75rem;
margin-bottom: 0;
font-size: 0.9375rem;
color: inherit;
background-color: #f7f7f7;
border-bottom: 1px solid #ebebeb
}
.popover-header:empty {
display: none
}
.popover-body {
padding: 0.5rem 0.75rem;
color: #373a3c
}
.carousel {
position: relative
}
.carousel-inner {
position: relative;
width: 100%;
overflow: hidden
}
.carousel-item {
position: relative;
display: none;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
width: 100%;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-perspective: 1000px;
perspective: 1000px
}
.carousel-item.active, .carousel-item-next, .carousel-item-prev {
display: block;
-webkit-transition: -webkit-transform 0.6s ease;
transition: -webkit-transform 0.6s ease;
transition: transform 0.6s ease;
transition: transform 0.6s ease, -webkit-transform 0.6s ease
}
@media screen and (prefers-reduced-motion: reduce) {
.carousel-item.active, .carousel-item-next, .carousel-item-prev {
-webkit-transition: none;
transition: none
}
}
.carousel-item-next, .carousel-item-prev {
position: absolute;
top: 0
}
.carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right {
-webkit-transform: translateX(0);
transform: translateX(0)
}
@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d) {
.carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
}
.carousel-item-next, .active.carousel-item-right {
-webkit-transform: translateX(100%);
transform: translateX(100%)
}
@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d) {
.carousel-item-next, .active.carousel-item-right {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0)
}
}
.carousel-item-prev, .active.carousel-item-left {
-webkit-transform: translateX(-100%);
transform: translateX(-100%)
}
@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d) {
.carousel-item-prev, .active.carousel-item-left {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0)
}
}
.carousel-fade .carousel-item {
opacity: 0;
-webkit-transition-duration: .6s;
transition-duration: .6s;
-webkit-transition-property: opacity;
transition-property: opacity
}
.carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right {
opacity: 1
}
.carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right {
opacity: 0
}
.carousel-fade .carousel-item-next, .carousel-fade .carousel-item-prev, .carousel-fade .carousel-item.active, .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-prev {
-webkit-transform: translateX(0);
transform: translateX(0)
}
@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d) {
.carousel-fade .carousel-item-next, .carousel-fade .carousel-item-prev, .carousel-fade .carousel-item.active, .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-prev {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
}
.carousel-control-prev, .carousel-control-next {
position: absolute;
top: 0;
bottom: 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
width: 15%;
color: #fff;
text-align: center;
opacity: 0.5
}
.carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus {
color: #fff;
text-decoration: none;
outline: 0;
opacity: .9
}
.carousel-control-prev {
left: 0
}
.carousel-control-next {
right: 0
}
.carousel-control-prev-icon, .carousel-control-next-icon {
display: inline-block;
width: 20px;
height: 20px;
background: transparent no-repeat center center;
background-size: 100% 100%
}
.carousel-control-prev-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")
}
.carousel-control-next-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")
}
.carousel-indicators {
position: absolute;
right: 0;
bottom: 10px;
left: 0;
z-index: 15;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
padding-left: 0;
margin-right: 15%;
margin-left: 15%;
list-style: none
}
.carousel-indicators li {
position: relative;
-webkit-box-flex: 0;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
width: 30px;
height: 3px;
margin-right: 3px;
margin-left: 3px;
text-indent: -999px;
cursor: pointer;
background-color: rgba(255, 255, 255, 0.5)
}
.carousel-indicators li::before {
position: absolute;
top: -10px;
left: 0;
display: inline-block;
width: 100%;
height: 10px;
content: ""
}
.carousel-indicators li::after {
position: absolute;
bottom: -10px;
left: 0;
display: inline-block;
width: 100%;
height: 10px;
content: ""
}
.carousel-indicators .active {
background-color: #fff
}
.carousel-caption {
position: absolute;
right: 15%;
bottom: 20px;
left: 15%;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: #fff;
text-align: center
}
.align-baseline {
vertical-align: baseline !important
}
.align-top {
vertical-align: top !important
}
.align-middle {
vertical-align: middle !important
}
.align-bottom {
vertical-align: bottom !important
}
.align-text-bottom {
vertical-align: text-bottom !important
}
.align-text-top {
vertical-align: text-top !important
}
.bg-primary {
background-color: #2780E3 !important
}
a.bg-primary:hover, a.bg-primary:focus, button.bg-primary:hover, button.bg-primary:focus {
background-color: #1967be !important
}
.bg-secondary {
background-color: #373a3c !important
}
a.bg-secondary:hover, a.bg-secondary:focus, button.bg-secondary:hover, button.bg-secondary:focus {
background-color: #1f2021 !important
}
.bg-success {
background-color: #3FB618 !important
}
a.bg-success:hover, a.bg-success:focus, button.bg-success:hover, button.bg-success:focus {
background-color: #2f8912 !important
}
.bg-info {
background-color: #9954BB !important
}
a.bg-info:hover, a.bg-info:focus, button.bg-info:hover, button.bg-info:focus {
background-color: #7e3f9d !important
}
.bg-warning {
background-color: #FF7518 !important
}
a.bg-warning:hover, a.bg-warning:focus, button.bg-warning:hover, button.bg-warning:focus {
background-color: #e45c00 !important
}
.bg-danger {
background-color: #FF0039 !important
}
a.bg-danger:hover, a.bg-danger:focus, button.bg-danger:hover, button.bg-danger:focus {
background-color: #cc002e !important
}
.bg-light {
background-color: #f8f9fa !important
}
a.bg-light:hover, a.bg-light:focus, button.bg-light:hover, button.bg-light:focus {
background-color: #dae0e5 !important
}
.bg-dark {
background-color: #373a3c !important
}
a.bg-dark:hover, a.bg-dark:focus, button.bg-dark:hover, button.bg-dark:focus {
background-color: #1f2021 !important
}
.bg-white {
background-color: #fff !important
}
.bg-transparent {
background-color: transparent !important
}
.border {
border: 1px solid #dee2e6 !important
}
.border-top {
border-top: 1px solid #dee2e6 !important
}
.border-right {
border-right: 1px solid #dee2e6 !important
}
.border-bottom {
border-bottom: 1px solid #dee2e6 !important
}
.border-left {
border-left: 1px solid #dee2e6 !important
}
.border-0 {
border: 0 !important
}
.border-top-0 {
border-top: 0 !important
}
.border-right-0 {
border-right: 0 !important
}
.border-bottom-0 {
border-bottom: 0 !important
}
.border-left-0 {
border-left: 0 !important
}
.border-primary {
border-color: #2780E3 !important
}
.border-secondary {
border-color: #373a3c !important
}
.border-success {
border-color: #3FB618 !important
}
.border-info {
border-color: #9954BB !important
}
.border-warning {
border-color: #FF7518 !important
}
.border-danger {
border-color: #FF0039 !important
}
.border-light {
border-color: #f8f9fa !important
}
.border-dark {
border-color: #373a3c !important
}
.border-white {
border-color: #fff !important
}
.rounded {
border-radius: 0.25rem !important
}
.rounded-top {
border-top-left-radius: 0.25rem !important;
border-top-right-radius: 0.25rem !important
}
.rounded-right {
border-top-right-radius: 0.25rem !important;
border-bottom-right-radius: 0.25rem !important
}
.rounded-bottom {
border-bottom-right-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important
}
.rounded-left {
border-top-left-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important
}
.rounded-circle {
border-radius: 50% !important
}
.rounded-0 {
border-radius: 0 !important
}
.clearfix::after {
display: block;
clear: both;
content: ""
}
.d-none {
display: none !important
}
.d-inline {
display: inline !important
}
.d-inline-block {
display: inline-block !important
}
.d-block {
display: block !important
}
.d-table {
display: table !important
}
.d-table-row {
display: table-row !important
}
.d-table-cell {
display: table-cell !important
}
.d-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important
}
.d-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important
}
@media (min-width: 576px) {
.d-sm-none {
display: none !important
}
.d-sm-inline {
display: inline !important
}
.d-sm-inline-block {
display: inline-block !important
}
.d-sm-block {
display: block !important
}
.d-sm-table {
display: table !important
}
.d-sm-table-row {
display: table-row !important
}
.d-sm-table-cell {
display: table-cell !important
}
.d-sm-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important
}
.d-sm-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important
}
}
@media (min-width: 768px) {
.d-md-none {
display: none !important
}
.d-md-inline {
display: inline !important
}
.d-md-inline-block {
display: inline-block !important
}
.d-md-block {
display: block !important
}
.d-md-table {
display: table !important
}
.d-md-table-row {
display: table-row !important
}
.d-md-table-cell {
display: table-cell !important
}
.d-md-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important
}
.d-md-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important
}
}
@media (min-width: 992px) {
.d-lg-none {
display: none !important
}
.d-lg-inline {
display: inline !important
}
.d-lg-inline-block {
display: inline-block !important
}
.d-lg-block {
display: block !important
}
.d-lg-table {
display: table !important
}
.d-lg-table-row {
display: table-row !important
}
.d-lg-table-cell {
display: table-cell !important
}
.d-lg-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important
}
.d-lg-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important
}
}
@media (min-width: 1200px) {
.d-xl-none {
display: none !important
}
.d-xl-inline {
display: inline !important
}
.d-xl-inline-block {
display: inline-block !important
}
.d-xl-block {
display: block !important
}
.d-xl-table {
display: table !important
}
.d-xl-table-row {
display: table-row !important
}
.d-xl-table-cell {
display: table-cell !important
}
.d-xl-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important
}
.d-xl-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important
}
}
@media print {
.d-print-none {
display: none !important
}
.d-print-inline {
display: inline !important
}
.d-print-inline-block {
display: inline-block !important
}
.d-print-block {
display: block !important
}
.d-print-table {
display: table !important
}
.d-print-table-row {
display: table-row !important
}
.d-print-table-cell {
display: table-cell !important
}
.d-print-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important
}
.d-print-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important
}
}
.embed-responsive {
position: relative;
display: block;
width: 100%;
padding: 0;
overflow: hidden
}
.embed-responsive::before {
display: block;
content: ""
}
.embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
border: 0
}
.embed-responsive-21by9::before {
padding-top: 42.8571428571%
}
.embed-responsive-16by9::before {
padding-top: 56.25%
}
.embed-responsive-4by3::before {
padding-top: 75%
}
.embed-responsive-1by1::before {
padding-top: 100%
}
.flex-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important
}
.flex-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important
}
.flex-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important
}
.flex-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important
}
.flex-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important
}
.flex-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important
}
.flex-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important
}
.flex-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important
}
.flex-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important
}
.flex-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important
}
.flex-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important
}
.flex-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important
}
.justify-content-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important
}
.justify-content-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important
}
.justify-content-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important
}
.justify-content-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important
}
.justify-content-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important
}
.align-items-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important
}
.align-items-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important
}
.align-items-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important
}
.align-items-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important
}
.align-items-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important
}
.align-content-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important
}
.align-content-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important
}
.align-content-center {
-ms-flex-line-pack: center !important;
align-content: center !important
}
.align-content-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important
}
.align-content-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important
}
.align-content-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important
}
.align-self-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important
}
.align-self-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important
}
.align-self-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important
}
.align-self-center {
-ms-flex-item-align: center !important;
align-self: center !important
}
.align-self-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important
}
.align-self-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important
}
@media (min-width: 576px) {
.flex-sm-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important
}
.flex-sm-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important
}
.flex-sm-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important
}
.flex-sm-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important
}
.flex-sm-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important
}
.flex-sm-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important
}
.flex-sm-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important
}
.flex-sm-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important
}
.flex-sm-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important
}
.flex-sm-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important
}
.flex-sm-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important
}
.flex-sm-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important
}
.justify-content-sm-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important
}
.justify-content-sm-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important
}
.justify-content-sm-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important
}
.justify-content-sm-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important
}
.justify-content-sm-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important
}
.align-items-sm-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important
}
.align-items-sm-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important
}
.align-items-sm-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important
}
.align-items-sm-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important
}
.align-items-sm-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important
}
.align-content-sm-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important
}
.align-content-sm-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important
}
.align-content-sm-center {
-ms-flex-line-pack: center !important;
align-content: center !important
}
.align-content-sm-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important
}
.align-content-sm-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important
}
.align-content-sm-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important
}
.align-self-sm-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important
}
.align-self-sm-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important
}
.align-self-sm-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important
}
.align-self-sm-center {
-ms-flex-item-align: center !important;
align-self: center !important
}
.align-self-sm-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important
}
.align-self-sm-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important
}
}
@media (min-width: 768px) {
.flex-md-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important
}
.flex-md-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important
}
.flex-md-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important
}
.flex-md-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important
}
.flex-md-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important
}
.flex-md-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important
}
.flex-md-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important
}
.flex-md-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important
}
.flex-md-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important
}
.flex-md-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important
}
.flex-md-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important
}
.flex-md-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important
}
.justify-content-md-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important
}
.justify-content-md-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important
}
.justify-content-md-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important
}
.justify-content-md-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important
}
.justify-content-md-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important
}
.align-items-md-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important
}
.align-items-md-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important
}
.align-items-md-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important
}
.align-items-md-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important
}
.align-items-md-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important
}
.align-content-md-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important
}
.align-content-md-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important
}
.align-content-md-center {
-ms-flex-line-pack: center !important;
align-content: center !important
}
.align-content-md-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important
}
.align-content-md-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important
}
.align-content-md-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important
}
.align-self-md-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important
}
.align-self-md-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important
}
.align-self-md-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important
}
.align-self-md-center {
-ms-flex-item-align: center !important;
align-self: center !important
}
.align-self-md-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important
}
.align-self-md-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important
}
}
@media (min-width: 992px) {
.flex-lg-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important
}
.flex-lg-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important
}
.flex-lg-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important
}
.flex-lg-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important
}
.flex-lg-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important
}
.flex-lg-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important
}
.flex-lg-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important
}
.flex-lg-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important
}
.flex-lg-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important
}
.flex-lg-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important
}
.flex-lg-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important
}
.flex-lg-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important
}
.justify-content-lg-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important
}
.justify-content-lg-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important
}
.justify-content-lg-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important
}
.justify-content-lg-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important
}
.justify-content-lg-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important
}
.align-items-lg-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important
}
.align-items-lg-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important
}
.align-items-lg-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important
}
.align-items-lg-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important
}
.align-items-lg-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important
}
.align-content-lg-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important
}
.align-content-lg-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important
}
.align-content-lg-center {
-ms-flex-line-pack: center !important;
align-content: center !important
}
.align-content-lg-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important
}
.align-content-lg-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important
}
.align-content-lg-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important
}
.align-self-lg-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important
}
.align-self-lg-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important
}
.align-self-lg-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important
}
.align-self-lg-center {
-ms-flex-item-align: center !important;
align-self: center !important
}
.align-self-lg-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important
}
.align-self-lg-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important
}
}
@media (min-width: 1200px) {
.flex-xl-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important
}
.flex-xl-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important
}
.flex-xl-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important
}
.flex-xl-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important
}
.flex-xl-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important
}
.flex-xl-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important
}
.flex-xl-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important
}
.flex-xl-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important
}
.flex-xl-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important
}
.flex-xl-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important
}
.flex-xl-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important
}
.flex-xl-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important
}
.justify-content-xl-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important
}
.justify-content-xl-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important
}
.justify-content-xl-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important
}
.justify-content-xl-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important
}
.justify-content-xl-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important
}
.align-items-xl-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important
}
.align-items-xl-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important
}
.align-items-xl-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important
}
.align-items-xl-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important
}
.align-items-xl-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important
}
.align-content-xl-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important
}
.align-content-xl-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important
}
.align-content-xl-center {
-ms-flex-line-pack: center !important;
align-content: center !important
}
.align-content-xl-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important
}
.align-content-xl-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important
}
.align-content-xl-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important
}
.align-self-xl-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important
}
.align-self-xl-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important
}
.align-self-xl-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important
}
.align-self-xl-center {
-ms-flex-item-align: center !important;
align-self: center !important
}
.align-self-xl-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important
}
.align-self-xl-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important
}
}
.float-left {
float: left !important
}
.float-right {
float: right !important
}
.float-none {
float: none !important
}
@media (min-width: 576px) {
.float-sm-left {
float: left !important
}
.float-sm-right {
float: right !important
}
.float-sm-none {
float: none !important
}
}
@media (min-width: 768px) {
.float-md-left {
float: left !important
}
.float-md-right {
float: right !important
}
.float-md-none {
float: none !important
}
}
@media (min-width: 992px) {
.float-lg-left {
float: left !important
}
.float-lg-right {
float: right !important
}
.float-lg-none {
float: none !important
}
}
@media (min-width: 1200px) {
.float-xl-left {
float: left !important
}
.float-xl-right {
float: right !important
}
.float-xl-none {
float: none !important
}
}
.position-static {
position: static !important
}
.position-relative {
position: relative !important
}
.position-absolute {
position: absolute !important
}
.position-fixed {
position: fixed !important
}
.position-sticky {
position: -webkit-sticky !important;
position: sticky !important
}
.fixed-top {
position: fixed;
top: 0;
right: 0;
left: 0;
z-index: 1030
}
.fixed-bottom {
position: fixed;
right: 0;
bottom: 0;
left: 0;
z-index: 1030
}
@supports (position: -webkit-sticky) or (position: sticky) {
.sticky-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020
}
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0
}
.sr-only-focusable:active, .sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
overflow: visible;
clip: auto;
white-space: normal
}
.shadow-sm {
-webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important
}
.shadow {
-webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important
}
.shadow-lg {
-webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important
}
.shadow-none {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.w-25 {
width: 25% !important
}
.w-50 {
width: 50% !important
}
.w-75 {
width: 75% !important
}
.w-100 {
width: 100% !important
}
.w-auto {
width: auto !important
}
.h-25 {
height: 25% !important
}
.h-50 {
height: 50% !important
}
.h-75 {
height: 75% !important
}
.h-100 {
height: 100% !important
}
.h-auto {
height: auto !important
}
.mw-100 {
max-width: 100% !important
}
.mh-100 {
max-height: 100% !important
}
.m-0 {
margin: 0 !important
}
.mt-0, .my-0 {
margin-top: 0 !important
}
.mr-0, .mx-0 {
margin-right: 0 !important
}
.mb-0, .my-0 {
margin-bottom: 0 !important
}
.ml-0, .mx-0 {
margin-left: 0 !important
}
.m-1 {
margin: 0.25rem !important
}
.mt-1, .my-1 {
margin-top: 0.25rem !important
}
.mr-1, .mx-1 {
margin-right: 0.25rem !important
}
.mb-1, .my-1 {
margin-bottom: 0.25rem !important
}
.ml-1, .mx-1 {
margin-left: 0.25rem !important
}
.m-2 {
margin: 0.5rem !important
}
.mt-2, .my-2 {
margin-top: 0.5rem !important
}
.mr-2, .mx-2 {
margin-right: 0.5rem !important
}
.mb-2, .my-2 {
margin-bottom: 0.5rem !important
}
.ml-2, .mx-2 {
margin-left: 0.5rem !important
}
.m-3 {
margin: 1rem !important
}
.mt-3, .my-3 {
margin-top: 1rem !important
}
.mr-3, .mx-3 {
margin-right: 1rem !important
}
.mb-3, .my-3 {
margin-bottom: 1rem !important
}
.ml-3, .mx-3 {
margin-left: 1rem !important
}
.m-4 {
margin: 1.5rem !important
}
.mt-4, .my-4 {
margin-top: 1.5rem !important
}
.mr-4, .mx-4 {
margin-right: 1.5rem !important
}
.mb-4, .my-4 {
margin-bottom: 1.5rem !important
}
.ml-4, .mx-4 {
margin-left: 1.5rem !important
}
.m-5 {
margin: 3rem !important
}
.mt-5, .my-5 {
margin-top: 3rem !important
}
.mr-5, .mx-5 {
margin-right: 3rem !important
}
.mb-5, .my-5 {
margin-bottom: 3rem !important
}
.ml-5, .mx-5 {
margin-left: 3rem !important
}
.p-0 {
padding: 0 !important
}
.pt-0, .py-0 {
padding-top: 0 !important
}
.pr-0, .px-0 {
padding-right: 0 !important
}
.pb-0, .py-0 {
padding-bottom: 0 !important
}
.pl-0, .px-0 {
padding-left: 0 !important
}
.p-1 {
padding: 0.25rem !important
}
.pt-1, .py-1 {
padding-top: 0.25rem !important
}
.pr-1, .px-1 {
padding-right: 0.25rem !important
}
.pb-1, .py-1 {
padding-bottom: 0.25rem !important
}
.pl-1, .px-1 {
padding-left: 0.25rem !important
}
.p-2 {
padding: 0.5rem !important
}
.pt-2, .py-2 {
padding-top: 0.5rem !important
}
.pr-2, .px-2 {
padding-right: 0.5rem !important
}
.pb-2, .py-2 {
padding-bottom: 0.5rem !important
}
.pl-2, .px-2 {
padding-left: 0.5rem !important
}
.p-3 {
padding: 1rem !important
}
.pt-3, .py-3 {
padding-top: 1rem !important
}
.pr-3, .px-3 {
padding-right: 1rem !important
}
.pb-3, .py-3 {
padding-bottom: 1rem !important
}
.pl-3, .px-3 {
padding-left: 1rem !important
}
.p-4 {
padding: 1.5rem !important
}
.pt-4, .py-4 {
padding-top: 1.5rem !important
}
.pr-4, .px-4 {
padding-right: 1.5rem !important
}
.pb-4, .py-4 {
padding-bottom: 1.5rem !important
}
.pl-4, .px-4 {
padding-left: 1.5rem !important
}
.p-5 {
padding: 3rem !important
}
.pt-5, .py-5 {
padding-top: 3rem !important
}
.pr-5, .px-5 {
padding-right: 3rem !important
}
.pb-5, .py-5 {
padding-bottom: 3rem !important
}
.pl-5, .px-5 {
padding-left: 3rem !important
}
.m-auto {
margin: auto !important
}
.mt-auto, .my-auto {
margin-top: auto !important
}
.mr-auto, .mx-auto {
margin-right: auto !important
}
.mb-auto, .my-auto {
margin-bottom: auto !important
}
.ml-auto, .mx-auto {
margin-left: auto !important
}
@media (min-width: 576px) {
.m-sm-0 {
margin: 0 !important
}
.mt-sm-0, .my-sm-0 {
margin-top: 0 !important
}
.mr-sm-0, .mx-sm-0 {
margin-right: 0 !important
}
.mb-sm-0, .my-sm-0 {
margin-bottom: 0 !important
}
.ml-sm-0, .mx-sm-0 {
margin-left: 0 !important
}
.m-sm-1 {
margin: 0.25rem !important
}
.mt-sm-1, .my-sm-1 {
margin-top: 0.25rem !important
}
.mr-sm-1, .mx-sm-1 {
margin-right: 0.25rem !important
}
.mb-sm-1, .my-sm-1 {
margin-bottom: 0.25rem !important
}
.ml-sm-1, .mx-sm-1 {
margin-left: 0.25rem !important
}
.m-sm-2 {
margin: 0.5rem !important
}
.mt-sm-2, .my-sm-2 {
margin-top: 0.5rem !important
}
.mr-sm-2, .mx-sm-2 {
margin-right: 0.5rem !important
}
.mb-sm-2, .my-sm-2 {
margin-bottom: 0.5rem !important
}
.ml-sm-2, .mx-sm-2 {
margin-left: 0.5rem !important
}
.m-sm-3 {
margin: 1rem !important
}
.mt-sm-3, .my-sm-3 {
margin-top: 1rem !important
}
.mr-sm-3, .mx-sm-3 {
margin-right: 1rem !important
}
.mb-sm-3, .my-sm-3 {
margin-bottom: 1rem !important
}
.ml-sm-3, .mx-sm-3 {
margin-left: 1rem !important
}
.m-sm-4 {
margin: 1.5rem !important
}
.mt-sm-4, .my-sm-4 {
margin-top: 1.5rem !important
}
.mr-sm-4, .mx-sm-4 {
margin-right: 1.5rem !important
}
.mb-sm-4, .my-sm-4 {
margin-bottom: 1.5rem !important
}
.ml-sm-4, .mx-sm-4 {
margin-left: 1.5rem !important
}
.m-sm-5 {
margin: 3rem !important
}
.mt-sm-5, .my-sm-5 {
margin-top: 3rem !important
}
.mr-sm-5, .mx-sm-5 {
margin-right: 3rem !important
}
.mb-sm-5, .my-sm-5 {
margin-bottom: 3rem !important
}
.ml-sm-5, .mx-sm-5 {
margin-left: 3rem !important
}
.p-sm-0 {
padding: 0 !important
}
.pt-sm-0, .py-sm-0 {
padding-top: 0 !important
}
.pr-sm-0, .px-sm-0 {
padding-right: 0 !important
}
.pb-sm-0, .py-sm-0 {
padding-bottom: 0 !important
}
.pl-sm-0, .px-sm-0 {
padding-left: 0 !important
}
.p-sm-1 {
padding: 0.25rem !important
}
.pt-sm-1, .py-sm-1 {
padding-top: 0.25rem !important
}
.pr-sm-1, .px-sm-1 {
padding-right: 0.25rem !important
}
.pb-sm-1, .py-sm-1 {
padding-bottom: 0.25rem !important
}
.pl-sm-1, .px-sm-1 {
padding-left: 0.25rem !important
}
.p-sm-2 {
padding: 0.5rem !important
}
.pt-sm-2, .py-sm-2 {
padding-top: 0.5rem !important
}
.pr-sm-2, .px-sm-2 {
padding-right: 0.5rem !important
}
.pb-sm-2, .py-sm-2 {
padding-bottom: 0.5rem !important
}
.pl-sm-2, .px-sm-2 {
padding-left: 0.5rem !important
}
.p-sm-3 {
padding: 1rem !important
}
.pt-sm-3, .py-sm-3 {
padding-top: 1rem !important
}
.pr-sm-3, .px-sm-3 {
padding-right: 1rem !important
}
.pb-sm-3, .py-sm-3 {
padding-bottom: 1rem !important
}
.pl-sm-3, .px-sm-3 {
padding-left: 1rem !important
}
.p-sm-4 {
padding: 1.5rem !important
}
.pt-sm-4, .py-sm-4 {
padding-top: 1.5rem !important
}
.pr-sm-4, .px-sm-4 {
padding-right: 1.5rem !important
}
.pb-sm-4, .py-sm-4 {
padding-bottom: 1.5rem !important
}
.pl-sm-4, .px-sm-4 {
padding-left: 1.5rem !important
}
.p-sm-5 {
padding: 3rem !important
}
.pt-sm-5, .py-sm-5 {
padding-top: 3rem !important
}
.pr-sm-5, .px-sm-5 {
padding-right: 3rem !important
}
.pb-sm-5, .py-sm-5 {
padding-bottom: 3rem !important
}
.pl-sm-5, .px-sm-5 {
padding-left: 3rem !important
}
.m-sm-auto {
margin: auto !important
}
.mt-sm-auto, .my-sm-auto {
margin-top: auto !important
}
.mr-sm-auto, .mx-sm-auto {
margin-right: auto !important
}
.mb-sm-auto, .my-sm-auto {
margin-bottom: auto !important
}
.ml-sm-auto, .mx-sm-auto {
margin-left: auto !important
}
}
@media (min-width: 768px) {
.m-md-0 {
margin: 0 !important
}
.mt-md-0, .my-md-0 {
margin-top: 0 !important
}
.mr-md-0, .mx-md-0 {
margin-right: 0 !important
}
.mb-md-0, .my-md-0 {
margin-bottom: 0 !important
}
.ml-md-0, .mx-md-0 {
margin-left: 0 !important
}
.m-md-1 {
margin: 0.25rem !important
}
.mt-md-1, .my-md-1 {
margin-top: 0.25rem !important
}
.mr-md-1, .mx-md-1 {
margin-right: 0.25rem !important
}
.mb-md-1, .my-md-1 {
margin-bottom: 0.25rem !important
}
.ml-md-1, .mx-md-1 {
margin-left: 0.25rem !important
}
.m-md-2 {
margin: 0.5rem !important
}
.mt-md-2, .my-md-2 {
margin-top: 0.5rem !important
}
.mr-md-2, .mx-md-2 {
margin-right: 0.5rem !important
}
.mb-md-2, .my-md-2 {
margin-bottom: 0.5rem !important
}
.ml-md-2, .mx-md-2 {
margin-left: 0.5rem !important
}
.m-md-3 {
margin: 1rem !important
}
.mt-md-3, .my-md-3 {
margin-top: 1rem !important
}
.mr-md-3, .mx-md-3 {
margin-right: 1rem !important
}
.mb-md-3, .my-md-3 {
margin-bottom: 1rem !important
}
.ml-md-3, .mx-md-3 {
margin-left: 1rem !important
}
.m-md-4 {
margin: 1.5rem !important
}
.mt-md-4, .my-md-4 {
margin-top: 1.5rem !important
}
.mr-md-4, .mx-md-4 {
margin-right: 1.5rem !important
}
.mb-md-4, .my-md-4 {
margin-bottom: 1.5rem !important
}
.ml-md-4, .mx-md-4 {
margin-left: 1.5rem !important
}
.m-md-5 {
margin: 3rem !important
}
.mt-md-5, .my-md-5 {
margin-top: 3rem !important
}
.mr-md-5, .mx-md-5 {
margin-right: 3rem !important
}
.mb-md-5, .my-md-5 {
margin-bottom: 3rem !important
}
.ml-md-5, .mx-md-5 {
margin-left: 3rem !important
}
.p-md-0 {
padding: 0 !important
}
.pt-md-0, .py-md-0 {
padding-top: 0 !important
}
.pr-md-0, .px-md-0 {
padding-right: 0 !important
}
.pb-md-0, .py-md-0 {
padding-bottom: 0 !important
}
.pl-md-0, .px-md-0 {
padding-left: 0 !important
}
.p-md-1 {
padding: 0.25rem !important
}
.pt-md-1, .py-md-1 {
padding-top: 0.25rem !important
}
.pr-md-1, .px-md-1 {
padding-right: 0.25rem !important
}
.pb-md-1, .py-md-1 {
padding-bottom: 0.25rem !important
}
.pl-md-1, .px-md-1 {
padding-left: 0.25rem !important
}
.p-md-2 {
padding: 0.5rem !important
}
.pt-md-2, .py-md-2 {
padding-top: 0.5rem !important
}
.pr-md-2, .px-md-2 {
padding-right: 0.5rem !important
}
.pb-md-2, .py-md-2 {
padding-bottom: 0.5rem !important
}
.pl-md-2, .px-md-2 {
padding-left: 0.5rem !important
}
.p-md-3 {
padding: 1rem !important
}
.pt-md-3, .py-md-3 {
padding-top: 1rem !important
}
.pr-md-3, .px-md-3 {
padding-right: 1rem !important
}
.pb-md-3, .py-md-3 {
padding-bottom: 1rem !important
}
.pl-md-3, .px-md-3 {
padding-left: 1rem !important
}
.p-md-4 {
padding: 1.5rem !important
}
.pt-md-4, .py-md-4 {
padding-top: 1.5rem !important
}
.pr-md-4, .px-md-4 {
padding-right: 1.5rem !important
}
.pb-md-4, .py-md-4 {
padding-bottom: 1.5rem !important
}
.pl-md-4, .px-md-4 {
padding-left: 1.5rem !important
}
.p-md-5 {
padding: 3rem !important
}
.pt-md-5, .py-md-5 {
padding-top: 3rem !important
}
.pr-md-5, .px-md-5 {
padding-right: 3rem !important
}
.pb-md-5, .py-md-5 {
padding-bottom: 3rem !important
}
.pl-md-5, .px-md-5 {
padding-left: 3rem !important
}
.m-md-auto {
margin: auto !important
}
.mt-md-auto, .my-md-auto {
margin-top: auto !important
}
.mr-md-auto, .mx-md-auto {
margin-right: auto !important
}
.mb-md-auto, .my-md-auto {
margin-bottom: auto !important
}
.ml-md-auto, .mx-md-auto {
margin-left: auto !important
}
}
@media (min-width: 992px) {
.m-lg-0 {
margin: 0 !important
}
.mt-lg-0, .my-lg-0 {
margin-top: 0 !important
}
.mr-lg-0, .mx-lg-0 {
margin-right: 0 !important
}
.mb-lg-0, .my-lg-0 {
margin-bottom: 0 !important
}
.ml-lg-0, .mx-lg-0 {
margin-left: 0 !important
}
.m-lg-1 {
margin: 0.25rem !important
}
.mt-lg-1, .my-lg-1 {
margin-top: 0.25rem !important
}
.mr-lg-1, .mx-lg-1 {
margin-right: 0.25rem !important
}
.mb-lg-1, .my-lg-1 {
margin-bottom: 0.25rem !important
}
.ml-lg-1, .mx-lg-1 {
margin-left: 0.25rem !important
}
.m-lg-2 {
margin: 0.5rem !important
}
.mt-lg-2, .my-lg-2 {
margin-top: 0.5rem !important
}
.mr-lg-2, .mx-lg-2 {
margin-right: 0.5rem !important
}
.mb-lg-2, .my-lg-2 {
margin-bottom: 0.5rem !important
}
.ml-lg-2, .mx-lg-2 {
margin-left: 0.5rem !important
}
.m-lg-3 {
margin: 1rem !important
}
.mt-lg-3, .my-lg-3 {
margin-top: 1rem !important
}
.mr-lg-3, .mx-lg-3 {
margin-right: 1rem !important
}
.mb-lg-3, .my-lg-3 {
margin-bottom: 1rem !important
}
.ml-lg-3, .mx-lg-3 {
margin-left: 1rem !important
}
.m-lg-4 {
margin: 1.5rem !important
}
.mt-lg-4, .my-lg-4 {
margin-top: 1.5rem !important
}
.mr-lg-4, .mx-lg-4 {
margin-right: 1.5rem !important
}
.mb-lg-4, .my-lg-4 {
margin-bottom: 1.5rem !important
}
.ml-lg-4, .mx-lg-4 {
margin-left: 1.5rem !important
}
.m-lg-5 {
margin: 3rem !important
}
.mt-lg-5, .my-lg-5 {
margin-top: 3rem !important
}
.mr-lg-5, .mx-lg-5 {
margin-right: 3rem !important
}
.mb-lg-5, .my-lg-5 {
margin-bottom: 3rem !important
}
.ml-lg-5, .mx-lg-5 {
margin-left: 3rem !important
}
.p-lg-0 {
padding: 0 !important
}
.pt-lg-0, .py-lg-0 {
padding-top: 0 !important
}
.pr-lg-0, .px-lg-0 {
padding-right: 0 !important
}
.pb-lg-0, .py-lg-0 {
padding-bottom: 0 !important
}
.pl-lg-0, .px-lg-0 {
padding-left: 0 !important
}
.p-lg-1 {
padding: 0.25rem !important
}
.pt-lg-1, .py-lg-1 {
padding-top: 0.25rem !important
}
.pr-lg-1, .px-lg-1 {
padding-right: 0.25rem !important
}
.pb-lg-1, .py-lg-1 {
padding-bottom: 0.25rem !important
}
.pl-lg-1, .px-lg-1 {
padding-left: 0.25rem !important
}
.p-lg-2 {
padding: 0.5rem !important
}
.pt-lg-2, .py-lg-2 {
padding-top: 0.5rem !important
}
.pr-lg-2, .px-lg-2 {
padding-right: 0.5rem !important
}
.pb-lg-2, .py-lg-2 {
padding-bottom: 0.5rem !important
}
.pl-lg-2, .px-lg-2 {
padding-left: 0.5rem !important
}
.p-lg-3 {
padding: 1rem !important
}
.pt-lg-3, .py-lg-3 {
padding-top: 1rem !important
}
.pr-lg-3, .px-lg-3 {
padding-right: 1rem !important
}
.pb-lg-3, .py-lg-3 {
padding-bottom: 1rem !important
}
.pl-lg-3, .px-lg-3 {
padding-left: 1rem !important
}
.p-lg-4 {
padding: 1.5rem !important
}
.pt-lg-4, .py-lg-4 {
padding-top: 1.5rem !important
}
.pr-lg-4, .px-lg-4 {
padding-right: 1.5rem !important
}
.pb-lg-4, .py-lg-4 {
padding-bottom: 1.5rem !important
}
.pl-lg-4, .px-lg-4 {
padding-left: 1.5rem !important
}
.p-lg-5 {
padding: 3rem !important
}
.pt-lg-5, .py-lg-5 {
padding-top: 3rem !important
}
.pr-lg-5, .px-lg-5 {
padding-right: 3rem !important
}
.pb-lg-5, .py-lg-5 {
padding-bottom: 3rem !important
}
.pl-lg-5, .px-lg-5 {
padding-left: 3rem !important
}
.m-lg-auto {
margin: auto !important
}
.mt-lg-auto, .my-lg-auto {
margin-top: auto !important
}
.mr-lg-auto, .mx-lg-auto {
margin-right: auto !important
}
.mb-lg-auto, .my-lg-auto {
margin-bottom: auto !important
}
.ml-lg-auto, .mx-lg-auto {
margin-left: auto !important
}
}
@media (min-width: 1200px) {
.m-xl-0 {
margin: 0 !important
}
.mt-xl-0, .my-xl-0 {
margin-top: 0 !important
}
.mr-xl-0, .mx-xl-0 {
margin-right: 0 !important
}
.mb-xl-0, .my-xl-0 {
margin-bottom: 0 !important
}
.ml-xl-0, .mx-xl-0 {
margin-left: 0 !important
}
.m-xl-1 {
margin: 0.25rem !important
}
.mt-xl-1, .my-xl-1 {
margin-top: 0.25rem !important
}
.mr-xl-1, .mx-xl-1 {
margin-right: 0.25rem !important
}
.mb-xl-1, .my-xl-1 {
margin-bottom: 0.25rem !important
}
.ml-xl-1, .mx-xl-1 {
margin-left: 0.25rem !important
}
.m-xl-2 {
margin: 0.5rem !important
}
.mt-xl-2, .my-xl-2 {
margin-top: 0.5rem !important
}
.mr-xl-2, .mx-xl-2 {
margin-right: 0.5rem !important
}
.mb-xl-2, .my-xl-2 {
margin-bottom: 0.5rem !important
}
.ml-xl-2, .mx-xl-2 {
margin-left: 0.5rem !important
}
.m-xl-3 {
margin: 1rem !important
}
.mt-xl-3, .my-xl-3 {
margin-top: 1rem !important
}
.mr-xl-3, .mx-xl-3 {
margin-right: 1rem !important
}
.mb-xl-3, .my-xl-3 {
margin-bottom: 1rem !important
}
.ml-xl-3, .mx-xl-3 {
margin-left: 1rem !important
}
.m-xl-4 {
margin: 1.5rem !important
}
.mt-xl-4, .my-xl-4 {
margin-top: 1.5rem !important
}
.mr-xl-4, .mx-xl-4 {
margin-right: 1.5rem !important
}
.mb-xl-4, .my-xl-4 {
margin-bottom: 1.5rem !important
}
.ml-xl-4, .mx-xl-4 {
margin-left: 1.5rem !important
}
.m-xl-5 {
margin: 3rem !important
}
.mt-xl-5, .my-xl-5 {
margin-top: 3rem !important
}
.mr-xl-5, .mx-xl-5 {
margin-right: 3rem !important
}
.mb-xl-5, .my-xl-5 {
margin-bottom: 3rem !important
}
.ml-xl-5, .mx-xl-5 {
margin-left: 3rem !important
}
.p-xl-0 {
padding: 0 !important
}
.pt-xl-0, .py-xl-0 {
padding-top: 0 !important
}
.pr-xl-0, .px-xl-0 {
padding-right: 0 !important
}
.pb-xl-0, .py-xl-0 {
padding-bottom: 0 !important
}
.pl-xl-0, .px-xl-0 {
padding-left: 0 !important
}
.p-xl-1 {
padding: 0.25rem !important
}
.pt-xl-1, .py-xl-1 {
padding-top: 0.25rem !important
}
.pr-xl-1, .px-xl-1 {
padding-right: 0.25rem !important
}
.pb-xl-1, .py-xl-1 {
padding-bottom: 0.25rem !important
}
.pl-xl-1, .px-xl-1 {
padding-left: 0.25rem !important
}
.p-xl-2 {
padding: 0.5rem !important
}
.pt-xl-2, .py-xl-2 {
padding-top: 0.5rem !important
}
.pr-xl-2, .px-xl-2 {
padding-right: 0.5rem !important
}
.pb-xl-2, .py-xl-2 {
padding-bottom: 0.5rem !important
}
.pl-xl-2, .px-xl-2 {
padding-left: 0.5rem !important
}
.p-xl-3 {
padding: 1rem !important
}
.pt-xl-3, .py-xl-3 {
padding-top: 1rem !important
}
.pr-xl-3, .px-xl-3 {
padding-right: 1rem !important
}
.pb-xl-3, .py-xl-3 {
padding-bottom: 1rem !important
}
.pl-xl-3, .px-xl-3 {
padding-left: 1rem !important
}
.p-xl-4 {
padding: 1.5rem !important
}
.pt-xl-4, .py-xl-4 {
padding-top: 1.5rem !important
}
.pr-xl-4, .px-xl-4 {
padding-right: 1.5rem !important
}
.pb-xl-4, .py-xl-4 {
padding-bottom: 1.5rem !important
}
.pl-xl-4, .px-xl-4 {
padding-left: 1.5rem !important
}
.p-xl-5 {
padding: 3rem !important
}
.pt-xl-5, .py-xl-5 {
padding-top: 3rem !important
}
.pr-xl-5, .px-xl-5 {
padding-right: 3rem !important
}
.pb-xl-5, .py-xl-5 {
padding-bottom: 3rem !important
}
.pl-xl-5, .px-xl-5 {
padding-left: 3rem !important
}
.m-xl-auto {
margin: auto !important
}
.mt-xl-auto, .my-xl-auto {
margin-top: auto !important
}
.mr-xl-auto, .mx-xl-auto {
margin-right: auto !important
}
.mb-xl-auto, .my-xl-auto {
margin-bottom: auto !important
}
.ml-xl-auto, .mx-xl-auto {
margin-left: auto !important
}
}
.text-monospace {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
}
.text-justify {
text-align: justify !important
}
.text-nowrap {
white-space: nowrap !important
}
.text-truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap
}
.text-left {
text-align: left !important
}
.text-right {
text-align: right !important
}
.text-center {
text-align: center !important
}
@media (min-width: 576px) {
.text-sm-left {
text-align: left !important
}
.text-sm-right {
text-align: right !important
}
.text-sm-center {
text-align: center !important
}
}
@media (min-width: 768px) {
.text-md-left {
text-align: left !important
}
.text-md-right {
text-align: right !important
}
.text-md-center {
text-align: center !important
}
}
@media (min-width: 992px) {
.text-lg-left {
text-align: left !important
}
.text-lg-right {
text-align: right !important
}
.text-lg-center {
text-align: center !important
}
}
@media (min-width: 1200px) {
.text-xl-left {
text-align: left !important
}
.text-xl-right {
text-align: right !important
}
.text-xl-center {
text-align: center !important
}
}
.text-lowercase {
text-transform: lowercase !important
}
.text-uppercase {
text-transform: uppercase !important
}
.text-capitalize {
text-transform: capitalize !important
}
.font-weight-light {
font-weight: 300 !important
}
.font-weight-normal {
font-weight: 400 !important
}
.font-weight-bold {
font-weight: 700 !important
}
.font-italic {
font-style: italic !important
}
.text-white {
color: #fff !important
}
.text-primary {
color: #2780E3 !important
}
a.text-primary:hover, a.text-primary:focus {
color: #1967be !important
}
.text-secondary {
color: #373a3c !important
}
a.text-secondary:hover, a.text-secondary:focus {
color: #1f2021 !important
}
.text-success {
color: #3FB618 !important
}
a.text-success:hover, a.text-success:focus {
color: #2f8912 !important
}
.text-info {
color: #9954BB !important
}
a.text-info:hover, a.text-info:focus {
color: #7e3f9d !important
}
.text-warning {
color: #FF7518 !important
}
a.text-warning:hover, a.text-warning:focus {
color: #e45c00 !important
}
.text-danger {
color: #FF0039 !important
}
a.text-danger:hover, a.text-danger:focus {
color: #cc002e !important
}
.text-light {
color: #f8f9fa !important
}
a.text-light:hover, a.text-light:focus {
color: #dae0e5 !important
}
.text-dark {
color: #373a3c !important
}
a.text-dark:hover, a.text-dark:focus {
color: #1f2021 !important
}
.text-body {
color: #373a3c !important
}
.text-muted {
color: #868e96 !important
}
.text-black-50 {
color: rgba(0, 0, 0, 0.5) !important
}
.text-white-50 {
color: rgba(255, 255, 255, 0.5) !important
}
.text-hide {
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0
}
.visible {
visibility: visible !important
}
.invisible {
visibility: hidden !important
}
@media print {
*, *::before, *::after {
text-shadow: none !important;
-webkit-box-shadow: none !important;
box-shadow: none !important
}
a:not(.btn) {
text-decoration: underline
}
abbr[title]::after {
content: " (" attr(title) ")"
}
pre {
white-space: pre-wrap !important
}
pre, blockquote {
border: 1px solid #adb5bd;
page-break-inside: avoid
}
thead {
display: table-header-group
}
tr, img {
page-break-inside: avoid
}
p, h2, h3 {
orphans: 3;
widows: 3
}
h2, h3 {
page-break-after: avoid
}
@page {
size: a3
}
body {
min-width: 992px !important
}
.container {
min-width: 992px !important
}
.navbar {
display: none
}
.badge {
border: 1px solid #000
}
.table {
border-collapse: collapse !important
}
.table td, .table th {
background-color: #fff !important
}
.table-bordered th, .table-bordered td {
border: 1px solid #dee2e6 !important
}
.table-dark {
color: inherit
}
.table-dark th, .table-dark td, .table-dark thead th, .table-dark tbody + tbody {
border-color: #dee2e6
}
.table .thead-dark th {
color: inherit;
border-color: #dee2e6
}
}
body {
-webkit-font-smoothing: antialiased
}
.progress .progress-bar {
font-size: 8px;
line-height: 8px
}
}
================================================
FILE: app/assets/layouts/BasicLayout.js
================================================
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { Layout, Icon, message } from 'antd';
import DocumentTitle from 'react-document-title';
import { connect } from 'dva';
import { Route, Redirect, Switch, routerRedux } from 'dva/router';
import { ContainerQuery } from 'react-container-query';
import classNames from 'classnames';
import pathToRegexp from 'path-to-regexp';
import { enquireScreen, unenquireScreen } from 'enquire-js';
import GlobalHeader from '../components/GlobalHeader';
import GlobalFooter from '../components/GlobalFooter';
import SiderMenu from '../components/SiderMenu';
import NotFound from '../routes/Exception/404';
import { getRoutes } from '../utils/utils';
import Authorized from '../utils/Authorized';
import { getMenuData } from '../common/menu';
import logo from '../assets/logo.svg';
const { Content, Header, Footer } = Layout;
const { AuthorizedRoute, check } = Authorized;
/**
* 根据菜单取得重定向地址.
*/
const redirectData = [];
const getRedirect = item => {
if (item && item.children) {
if (item.children[0] && item.children[0].path) {
redirectData.push({
from: `${item.path}`,
to: `${item.children[0].path}`,
});
item.children.forEach(children => {
getRedirect(children);
});
}
}
};
getMenuData().forEach(getRedirect);
/**
* 获取面包屑映射
* @param {Object} menuData 菜单配置
* @param {Object} routerData 路由配置
*/
const getBreadcrumbNameMap = (menuData, routerData) => {
const result = {};
const childResult = {};
for (const i of menuData) {
if (!routerData[i.path]) {
result[i.path] = i;
}
if (i.children) {
Object.assign(childResult, getBreadcrumbNameMap(i.children, routerData));
}
}
return Object.assign({}, routerData, result, childResult);
};
const query = {
'screen-xs': {
maxWidth: 575,
},
'screen-sm': {
minWidth: 576,
maxWidth: 767,
},
'screen-md': {
minWidth: 768,
maxWidth: 991,
},
'screen-lg': {
minWidth: 992,
maxWidth: 1199,
},
'screen-xl': {
minWidth: 1200,
},
};
let isMobile;
enquireScreen(b => {
isMobile = b;
});
class BasicLayout extends React.PureComponent {
static childContextTypes = {
location: PropTypes.object,
breadcrumbNameMap: PropTypes.object,
};
state = {
isMobile,
};
getChildContext() {
const { location, routerData } = this.props;
return {
location,
breadcrumbNameMap: getBreadcrumbNameMap(getMenuData(), routerData),
};
}
componentDidMount() {
this.enquireHandler = enquireScreen((mobile) => {
this.setState({
isMobile: mobile,
});
});
this.props.dispatch({
type: 'user/fetchCurrent',
});
}
componentWillUnmount() {
unenquireScreen(this.enquireHandler);
}
getPageTitle() {
const { routerData, location } = this.props;
const { pathname } = location;
let title = 'DMS';
let currRouterData = null;
// match params path
Object.keys(routerData).forEach(key => {
if (pathToRegexp(key).test(pathname)) {
currRouterData = routerData[key];
}
});
if (currRouterData && currRouterData.name) {
title = `${currRouterData.name} - DMS`;
}
return title;
}
getBashRedirect = () => {
// According to the url parameter to redirect
// 这里是重定向的,重定向到 url 的 redirect 参数所示地址
const urlParams = new URL(window.location.href);
const redirect = urlParams.searchParams.get('redirect');
// Remove the parameters in the url
if (redirect) {
urlParams.searchParams.delete('redirect');
window.history.replaceState(null, 'redirect', urlParams.href);
} else {
const { routerData } = this.props;
// get the first authorized route path in routerData
const authorizedPath = Object.keys(routerData).find(
item => check(routerData[item].authority, item) && item !== '/'
);
return authorizedPath;
}
return redirect;
};
handleMenuCollapse = collapsed => {
this.props.dispatch({
type: 'global/changeLayoutCollapsed',
payload: collapsed,
});
};
handleNoticeClear = type => {
message.success(`清空了${type}`);
this.props.dispatch({
type: 'global/clearNotices',
payload: type,
});
};
handleMenuClick = ({ key }) => {
if (key === 'triggerError') {
this.props.dispatch(routerRedux.push('/exception/trigger'));
return;
}
if (key === 'logout') {
this.props.dispatch({
type: 'login/logout',
});
}
};
handleNoticeVisibleChange = visible => {
if (visible) {
this.props.dispatch({
type: 'global/fetchNotices',
});
}
};
render() {
const {
currentUser,
collapsed,
fetchingNotices,
notices,
routerData,
match,
location,
} = this.props;
const bashRedirect = this.getBashRedirect();
const layout = (
{redirectData.map(item => (
))}
{getRoutes(match.path, routerData).map(item => (
))}
,
href: 'https://github.com/gavin1995/dms',
blankTarget: true,
},
// {
// key: 'Ant Design',
// title: 'Ant Design',
// href: 'http://ant.design',
// blankTarget: true,
// },
]}
copyright={
Copyright 2019 gavin1995
}
/>
);
return (
{params => {layout}
}
);
}
}
export default connect(({ user, global, loading }) => ({
currentUser: user.currentUser,
collapsed: global.collapsed,
fetchingNotices: loading.effects['global/fetchNotices'],
notices: global.notices,
}))(BasicLayout);
================================================
FILE: app/assets/layouts/BlankLayout.js
================================================
import React from 'react';
export default props =>
;
================================================
FILE: app/assets/layouts/PageHeaderLayout.js
================================================
import React from 'react';
import { Link } from 'dva/router';
import PageHeader from '../components/PageHeader';
import styles from './PageHeaderLayout.less';
export default ({ children, wrapperClassName, top, ...restProps }) => (
{top}
{children ?
{children}
: null}
);
================================================
FILE: app/assets/layouts/PageHeaderLayout.less
================================================
@import '~antd/lib/style/themes/default.less';
.content {
margin: 24px 24px 0;
}
@media screen and (max-width: @screen-sm) {
.content {
margin: 24px 0 0;
}
}
================================================
FILE: app/assets/layouts/UserLayout.js
================================================
import React, { Fragment } from 'react';
import { Link, Redirect, Switch, Route } from 'dva/router';
import DocumentTitle from 'react-document-title';
import { Icon } from 'antd';
import GlobalFooter from '../components/GlobalFooter';
import styles from './UserLayout.less';
import logo from '../assets/logo.svg';
import { getRoutes } from '../utils/utils';
// const links = [
// {
// key: 'help',
// title: '帮助',
// href: '',
// },
// {
// key: 'privacy',
// title: '隐私',
// href: '',
// },
// {
// key: 'terms',
// title: '条款',
// href: '',
// },
// ];
const copyright = (
Copyright 2019 gavin1995
);
class UserLayout extends React.PureComponent {
getPageTitle() {
const { routerData, location } = this.props;
const { pathname } = location;
let title = 'Ant Design Pro';
if (routerData[pathname] && routerData[pathname].name) {
title = `${routerData[pathname].name} - Ant Design Pro`;
}
return title;
}
render() {
const { routerData, match } = this.props;
return (
人生就像一盒巧克力,你永远不知道下一颗会是什么味道
{getRoutes(match.path, routerData).map(item => (
))}
);
}
}
export default UserLayout;
================================================
FILE: app/assets/layouts/UserLayout.less
================================================
@import '~antd/lib/style/themes/default.less';
.container {
display: flex;
flex-direction: column;
height: 100vh;
overflow: auto;
background: #f0f2f5;
}
.content {
padding: 32px 0;
flex: 1;
}
@media (min-width: @screen-md-min) {
.container {
background-image: url('https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg');
background-repeat: no-repeat;
background-position: center 110px;
background-size: 100%;
}
.content {
padding: 262px 0 24px 0;
}
}
.top {
text-align: center;
}
.header {
height: 44px;
line-height: 44px;
a {
text-decoration: none;
}
}
.logo {
height: 44px;
vertical-align: top;
margin-right: 16px;
}
.title {
font-size: 33px;
color: @heading-color;
font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
font-weight: 600;
position: relative;
top: 2px;
}
.desc {
font-size: 16px;
color: @text-color-secondary;
margin-top: 40px;
margin-bottom: 40px;
}
================================================
FILE: app/assets/models/error.js
================================================
import { routerRedux } from 'dva/router';
import { query } from '../services/error';
export default {
namespace: 'error',
state: {
error: '',
isloading: false,
},
effects: {
*query({ payload }, { call, put }) {
yield call(query, payload.code);
// redirect on client when network broken
yield put(routerRedux.push(`/exception/${payload.code}`));
yield put({
type: 'trigger',
payload: payload.code,
});
},
},
reducers: {
trigger(state, action) {
return {
error: action.payload,
};
},
},
};
================================================
FILE: app/assets/models/global.js
================================================
import { queryNotices } from '../services/api';
export default {
namespace: 'global',
state: {
collapsed: false,
notices: [],
},
effects: {
*fetchNotices(_, { call, put }) {
const data = yield call(queryNotices);
yield put({
type: 'saveNotices',
payload: data,
});
yield put({
type: 'user/changeNotifyCount',
payload: data.length,
});
},
*clearNotices({ payload }, { put, select }) {
yield put({
type: 'saveClearedNotices',
payload,
});
const count = yield select(state => state.global.notices.length);
yield put({
type: 'user/changeNotifyCount',
payload: count,
});
},
},
reducers: {
changeLayoutCollapsed(state, { payload }) {
return {
...state,
collapsed: payload,
};
},
saveNotices(state, { payload }) {
return {
...state,
notices: payload,
};
},
saveClearedNotices(state, { payload }) {
return {
...state,
notices: state.notices.filter(item => item.type !== payload),
};
},
},
subscriptions: {
setup({ history }) {
// Subscribe history(url) change, trigger `load` action if pathname is `/`
return history.listen(({ pathname, search }) => {
if (typeof window.ga !== 'undefined') {
window.ga('send', 'pageview', pathname + search);
}
});
},
},
};
================================================
FILE: app/assets/models/index.js
================================================
// Use require.context to require reducers automatically
// Ref: https://webpack.js.org/guides/dependency-management/#require-context
const context = require.context('./', false, /\.js$/);
export default context
.keys()
.filter(item => item !== './index.js')
.map(key => context(key));
================================================
FILE: app/assets/models/login.js
================================================
import { routerRedux } from 'dva/router';
import { login } from '../services/api';
import { setAuthority } from '../utils/authority';
import { reloadAuthorized } from '../utils/Authorized';
export default {
namespace: 'login',
state: {
status: undefined,
},
effects: {
*login({ data }, { call, put }) {
const response = yield call(login, data);
yield put({
type: 'changeLoginStatus',
resData: response,
});
// Login successfully
if (response.success) {
reloadAuthorized();
yield put(routerRedux.push('/'));
}
},
*logout(_, { put, select }) {
try {
// get location pathname
const urlParams = new URL(window.location.href);
const pathname = yield select(state => state.routing.location.pathname);
// add the parameters in the url
urlParams.searchParams.set('redirect', pathname);
window.history.replaceState(null, 'login', urlParams.href);
} finally {
yield put({
type: 'changeLoginStatus',
payload: {
status: false,
currentAuthority: 'guest',
},
});
reloadAuthorized();
yield put(routerRedux.push('/user/login'));
}
},
},
reducers: {
changeLoginStatus(state, { resData }) {
return {
...state,
status: resData.status,
type: resData.type,
};
},
},
};
================================================
FILE: app/assets/models/register.js
================================================
import { fakeRegister } from '../services/api';
import { setAuthority } from '../utils/authority';
import { reloadAuthorized } from '../utils/Authorized';
export default {
namespace: 'register',
state: {
status: undefined,
},
effects: {
*submit(_, { call, put }) {
const response = yield call(fakeRegister);
yield put({
type: 'registerHandle',
payload: response,
});
},
},
reducers: {
registerHandle(state, { payload }) {
setAuthority('user');
reloadAuthorized();
return {
...state,
status: payload.status,
};
},
},
};
================================================
FILE: app/assets/models/user.js
================================================
import { query as queryUsers, queryCurrent } from '../services/user';
export default {
namespace: 'user',
state: {
list: [],
currentUser: {},
},
effects: {
*fetch(_, { call, put }) {
const response = yield call(queryUsers);
yield put({
type: 'save',
payload: response,
});
},
*fetchCurrent(_, { call, put }) {
const response = yield call(queryCurrent);
yield put({
type: 'saveCurrentUser',
payload: response.data,
});
},
},
reducers: {
save(state, action) {
return {
...state,
list: action.payload,
};
},
saveCurrentUser(state, action) {
return {
...state,
currentUser: action.payload,
};
},
changeNotifyCount(state, action) {
return {
...state,
currentUser: {
...state.currentUser,
notifyCount: action.payload,
},
};
},
},
};
================================================
FILE: app/assets/rollbar.js
================================================
import Rollbar from 'rollbar';
// eslint-disable-next-line no-use-before-define
if (window.location.host === 'preview.pro.ant.design') {
Rollbar.init({
accessToken: '033ca6d7c0eb4cc1831cf470c2649971',
captureUncaught: true,
captureUnhandledRejections: true,
payload: {
environment: 'production',
},
});
}
================================================
FILE: app/assets/router.js
================================================
import React from 'react';
import { routerRedux, Route, Switch } from 'dva/router';
import { LocaleProvider, Spin } from 'antd';
import zhCN from 'antd/lib/locale-provider/zh_CN';
import dynamic from 'dva/dynamic';
// import axios from 'axios';
import { getRouterData } from './common/router';
import Authorized from './utils/Authorized';
import styles from './index.less';
const { ConnectedRouter } = routerRedux;
const { AuthorizedRoute } = Authorized;
dynamic.setDefaultLoadingComponent(() => {
return ;
});
// const havePermission = () => {
// return axios.get('/now/user-checkAuth').then((res) => {
// console.log(res.data && res.data.success);
// return res.data && res.data.success;
// });
// };
function RouterConfig({ history, app }) {
const routerData = getRouterData(app);
const UserLayout = routerData['/user'].component;
const BasicLayout = routerData['/'].component;
return (
}
// authority={havePermission}
// authority={['admin', 'user']}
// redirectPath="/user/login"
/>
);
}
export default RouterConfig;
================================================
FILE: app/assets/routes/Development/App.js
================================================
import React, { PureComponent } from 'react';
import { connect } from 'dva';
import { routerRedux } from 'dva/router';
import {
Form,
Row,
Col,
Input,
Button,
Card,
Modal,
Table,
message,
Transfer,
notification
} from 'antd';
import ca from '../../utils/ca';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import styles from './App.less';
const FormItem = Form.Item;
const { TextArea, Search } = Input;
@connect(({ user }) => ({
user,
}))
@Form.create()
export default class App extends PureComponent {
state = {
appModalVisible: false,
appCount: 0,
appRows: [],
appLoading: false,
pageSize: 15,
page: 1,
name: '',
authModalVisible: false,
users: [], // 所有用户
authUsers: [],
currentSelectAuthAppId: 0, // 当前选中授权的AppID
};
componentDidMount() {
this.init();
}
init = async () => {
await this.props.dispatch({
type: 'user/fetchCurrent',
});
if (!this.checkAuth()) return;
await this.fetchAppListByFilter();
};
checkAuth = () => {
if (this.props.user.currentUser.type === 5) {
// 普通运营
message.error('没有当前配置权限,请切换菜单');
return;
return false;
}
return true;
};
fetchAppListByFilter = async () => {
if (!this.checkAuth()) return;
const { page, name, pageSize } = this.state;
this.setState({
appLoading: true,
});
const res = await ca.get(`/api/appList?page=${page}&name=${name}&page_size=${pageSize}`);
if (!res) {
// 请求失败
return
}
this.setState({
appCount: res.count,
appRows: res.rows,
appLoading: false,
})
};
fetchAllUser = async () => {
const res = await ca.get('/api/userAll');
if (!res) return;
this.setState({
users: res,
});
};
fetchAllAuthUser = async (app_id) => {
const res = await ca.get(`/api/authList?app_id=${app_id}`);
if (!res) return;
const authUsers = res.map(item => item.user_id);
this.setState({
authUsers,
});
};
showApplicationModal = () => {
if (!this.checkAuth()) return;
this.setState({
appModalVisible: true,
});
};
hideApplicationModal = () => {
this.setState({
appModalVisible: false,
});
};
showAuthModalByAppId = async (id) => {
try {
this.setState({
authModalVisible: true,
currentSelectAuthAppId: id,
});
await this.fetchAllUser();
await this.fetchAllAuthUser(id);
} catch (e) {
message.error('请求失败,请重试')
}
};
hideAuthModal = () => {
this.setState({
authModalVisible: false,
});
};
handleCreateAppSubmit = async () => {
await this.props.form.validateFieldsAndScroll(async (err, values) => {
if (err) return;
this.setState({
appModalVisible: false,
});
const res = await ca.post('/api/appCreate', values);
if (!res) return;
await this.fetchAppListByFilter();
message.success('添加成功');
this.props.form.resetFields();
});
};
handleSearch = async (val) => {
await this.setState({
name: val,
page: 1,
});
await this.fetchAppListByFilter();
};
changePage = async (page) => {
await this.setState({ page });
await this.fetchAppListByFilter();
};
handleModuleRoute = async (id) => {
const { dispatch } = this.props;
dispatch(routerRedux.push(`/development/module?app_id=${id}`));
};
handleParamRoute = async (id) => {
const { dispatch } = this.props;
dispatch(routerRedux.push(`/development/param?app_id=${id}`));
};
handleTransferChange = (targetKeys) => {
// targetKeys: user_id
this.setState({
authUsers: targetKeys,
});
};
handleTransferSearch = () => {
// 暂时不需要处理
};
submitAuthUsers = async () => {
this.setState({
authModalVisible: false,
});
const { authUsers, currentSelectAuthAppId } = this.state;
if (!authUsers.length || !currentSelectAuthAppId) {
return;
}
const res = await ca.post('/api/authEdit', {
app_id: currentSelectAuthAppId,
user_ids: authUsers,
});
if (!res) return;
message.success('权限添加成功');
};
render() {
const { submitting } = this.props;
const { getFieldDecorator } = this.props.form;
const { appRows, appCount, appLoading, pageSize, page, users, authUsers, authModalVisible } = this.state;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 12 },
md: { span: 10 },
},
};
const submitFormLayout = {
wrapperCol: {
xs: { span: 24, offset: 0 },
sm: { span: 10, offset: 7 },
},
};
const appColumns = [
{
title: '应用名',
dataIndex: 'name_cn',
key: 'app_name_cn',
}, {
title: '英文名',
dataIndex: 'name_en',
key: 'app_name_en',
}, {
title: '所有者',
dataIndex: 'owner',
key: 'app_owner',
}, {
title: '最后更新人',
dataIndex: 'updater',
key: 'app_updater',
}, {
title: '操作',
key: 'app_operating',
render: (text, record) => (
this.handleModuleRoute(record.id)}>模块列表
this.handleParamRoute(record.id)}>参数列表
this.showAuthModalByAppId(record.id)}>授权
notification.info({ message: `${record.name_cn} 描述`, description: record.description })}>查看描述
{/* 编辑 */}
{/*删除 */}
),
},
];
return (
this.showApplicationModal()}>
新建应用
{getFieldDecorator('name_cn', {
rules: [
{
required: true,
message: '请输入3~24字符的应用中文名',
},
],
})( )}
{getFieldDecorator('name_en', {
rules: [
{
required: true,
message: '请输入应用英文名',
},
],
})( )}
{getFieldDecorator('description', {
rules: [
{
required: true,
message: '请输入应用描述',
},
],
})(
)}
取消
提交
record.user_id}
targetKeys={authUsers}
onChange={this.handleTransferChange}
onSearch={this.handleTransferSearch}
render={item => item.real_name}
/>
取消
提交
);
}
}
================================================
FILE: app/assets/routes/Development/App.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Development/Module.js
================================================
import React, { PureComponent } from 'react';
import { connect } from 'dva';
import {
Form,
Row,
Col,
Input,
Button,
Card,
Modal,
Table,
message
} from 'antd';
import ca from '../../utils/ca';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import { getParams } from '../../utils/url';
import styles from './Module.less';
import {routerRedux} from "dva/router";
const FormItem = Form.Item;
@connect()
@Form.create()
export default class Module extends PureComponent {
state = {
modalVisible: false,
data: [],
loading: false,
appId: 0,
associationUrlModalVisibleId: 0,
};
componentDidMount() {
this.fetchModuleList();
}
fetchModuleList = async () => {
this.setState({
loading: true,
});
const params = getParams(this.props.location.search);
this.setState({
appId: params.app_id,
});
const res = await ca.get(`/api/moduleList?app_id=${params.app_id}`);
if (!res) return;
this.setState({
data: res,
loading: false,
})
};
showModuleModal = () => {
this.setState({
modalVisible: true,
});
};
hideModuleModal = () => {
this.setState({
modalVisible: false,
});
};
handleCreateModuleSubmit = async () => {
await this.props.form.validateFieldsAndScroll(async (err, values) => {
if (err) return;
this.setState({
modalVisible: false,
});
const res = await ca.post('/api/moduleCreate', {
...values,
app_id: this.state.appId,
});
if (!res) return;
await this.fetchModuleList();
message.success('添加成功');
this.props.form.resetFields();
});
};
handleEditSchemaRoute = (module_id) => {
const { dispatch } = this.props;
dispatch(routerRedux.push(`/development/schema?app_id=${this.state.appId}&module_id=${module_id}`));
};
handleAssociationUrl = async (module_id) => {
this.setState({
associationUrlModalVisibleId: 0,
});
if (!this.state[`associationUrl_${module_id}`]) {
return;
}
const res = await ca.post('/api/moduleEditAssociationUrl', {
module_id,
association_url: this.state[`associationUrl_${module_id}`],
});
if (!res) return;
message.success('更新成功');
};
render() {
const { submitting } = this.props;
const { getFieldDecorator } = this.props.form;
const { data, loading, associationUrlModalVisibleId } = this.state;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 12 },
md: { span: 10 },
},
};
const submitFormLayout = {
wrapperCol: {
xs: { span: 24, offset: 0 },
sm: { span: 10, offset: 7 },
},
};
const column = [
{
title: '模块名',
dataIndex: 'name_cn',
key: 'module_name_cn',
}, {
title: '英文名',
dataIndex: 'name_en',
key: 'module_name_en',
}, {
title: '创建者',
dataIndex: 'creator',
key: 'module_creator',
}, {
title: '最后更新人',
dataIndex: 'updater',
key: 'module_updater',
}, {
title: '操作',
key: 'module_operating',
render: (text, record) => (
this.handleEditSchemaRoute(record.id)}>编辑Schema定义
this.setState({ associationUrlModalVisibleId: record.id })}>关联审核地址
this.setState({ associationUrlModalVisibleId: 0 })}
onOk={() => this.handleAssociationUrl(record.id)}
>
{ this.setState({ [`associationUrl_${record.id}`]: e.target.value }) }} value={this.state[[`associationUrl_${record.id}`]] || record.association_url} />
{/* 停用
删除 */}
),
},
];
return (
this.showModuleModal()}>
新建模块
{getFieldDecorator('name_cn', {
rules: [
{
required: true,
message: '请输入3~24字符的模块中文名',
},
],
})( )}
{getFieldDecorator('name_en', {
rules: [
{
required: true,
message: '请输入模块英文名',
},
],
})( )}
取消
提交
);
}
}
================================================
FILE: app/assets/routes/Development/Module.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Development/Param.js
================================================
import React, { PureComponent } from 'react';
import {
Form,
Row,
Col,
Input,
Button,
Card,
Modal,
Table,
message
} from 'antd';
import JsonSchemaForm from "../../components/JsonSchemaForm";
import ca from '../../utils/ca';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import { getParams } from '../../utils/url';
import styles from './Param.less';
import { toJson } from "../../utils/utils";
const FormItem = Form.Item;
const paramsSchema = {
title: "编辑参数值",
description: "用于下拉菜单",
type: "array",
items: {
type: "object",
required: ["key", "value"],
properties: {
key: {
type: "string",
title: "下拉菜单提交值"
},
value: {
type: "string",
title: "下拉菜单项名称"
}
},
message: {
required: "必须完整填写表单的每一项",
}
}
};
@Form.create()
export default class Param extends PureComponent {
state = {
modalVisible: false,
data: [],
loading: false,
appId: 0,
modalParamsVisible: false,
associateUrl: '',
associateUrlStop: 1,
};
componentDidMount() {
this.fetchParamList();
}
fetchParamList = async () => {
this.setState({
loading: true,
});
const params = getParams(this.props.location.search);
this.setState({
appId: params.app_id,
});
const res = await ca.get(`/api/paramList?app_id=${params.app_id}`);
if (!res) return;
this.setState({
data: res,
loading: false,
})
};
showParamModal = () => {
this.setState({
modalVisible: true,
});
};
hideParamModal = () => {
this.setState({
modalVisible: false,
});
};
showParamsModal = async (param_id) => {
const res = await ca.get(`/api/paramInfo?param_id=${param_id}`);
if (!res) return;
this.setState({
modalParamsVisible: true,
currentSelectedParamId: param_id,
formDataJson: JSON.parse(res.value),
associateUrl: res.associate_url,
associateUrlStop: res.associate_url_stop,
});
};
hideParamsModal = () => {
this.setState({
modalParamsVisible: false,
});
};
handleCreateParamSubmit = async () => {
await this.props.form.validateFieldsAndScroll(async (err, values) => {
if (err) return;
this.setState({
modalVisible: false,
});
const res = await ca.post('/api/paramCreate', {
...values,
app_id: this.state.appId,
});
if (!res) return;
await this.fetchParamList();
message.success('添加成功');
this.props.form.resetFields();
});
};
onParamsChange = (data) => {
const { formData } = data;
this.setState({
formDataStr: toJson(formData),
formDataJson: formData,
})
};
submitParamsValue = async () => {
this.setState({
modalParamsVisible: false,
});
const { formDataJson, currentSelectedParamId } = this.state;
const res = await ca.post('/api/paramEdit', {
value: formDataJson,
param_id: currentSelectedParamId,
associate_url_stop: 1, // 未停用/已停用:0/1
});
if (!res) return;
message.success('参数编辑成功');
};
changeAssociateUrl = (e) => {
this.setState({
associateUrl: e.target.value,
})
};
useAssociateUrl = async () => {
this.setState({
modalParamsVisible: false,
});
const { currentSelectedParamId, associateUrl } = this.state;
const res = await ca.post('/api/paramEdit', {
associate_url: associateUrl,
param_id: currentSelectedParamId,
associate_url_stop: 0, // 未停用/已停用:0/1
});
if (!res) return;
message.success('关联URL参数成功');
};
render() {
const { submitting } = this.props;
const { getFieldDecorator } = this.props.form;
const { modalVisible, data, loading, formDataJson, modalParamsVisible, associateUrl, associateUrlStop } = this.state;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 12 },
md: { span: 10 },
},
};
const submitFormLayout = {
wrapperCol: {
xs: { span: 24, offset: 0 },
sm: { span: 10, offset: 7 },
},
};
const column = [
{
title: '参数展示标题',
dataIndex: 'title',
key: 'param_title',
}, {
title: '请求参数名',
dataIndex: 'name',
key: 'param_name',
}, {
title: '创建者',
dataIndex: 'creator',
key: 'param_creator',
}, {
title: '最后更新人',
dataIndex: 'updater',
key: 'param_updater',
}, {
title: '操作',
key: 'param_operating',
render: (text, record) => (
this.showParamsModal(record.id)}>编辑参数
{/*停用 */}
{/*删除 */}
),
},
];
return (
this.showParamModal()}>
新建参数
{getFieldDecorator('title', {
rules: [
{
required: true,
message: '请输入表单展示标题',
},
],
})( )}
{getFieldDecorator('name', {
rules: [
{
required: true,
message: '请输入请求参数名',
},
],
})( )}
取消
提交
使用接口地址生成参数
console.log("errors")}
/>
);
}
}
================================================
FILE: app/assets/routes/Development/Param.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Development/Schema.js
================================================
import React, { PureComponent } from 'react';
import {
Form,
Row,
Col,
message
} from 'antd';
import JsonSchemaForm from "../../components/JsonSchemaForm";
import AceEditor from 'react-ace';
import 'brace/mode/json';
import 'brace/theme/monokai';
import ca from '../../utils/ca';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
// import styles from './Schema.less';
import { getParams } from "../../utils/url";
import { toJson, checkUISchema } from "../../utils/utils";
import './Schema.less';
let operationsNumber = 0;
@Form.create()
export default class Schema extends PureComponent {
state = {
appId: 0,
moduleId: 0,
definition: '',
currentUISchema: '',
};
componentDidMount() {
this.fetchModuleInfo();
}
fetchModuleInfo = async () => {
const params = getParams(this.props.location.search);
this.setState({
appId: params.app_id,
moduleId: params.module_id,
});
const res = await ca.get(`/api/moduleInfo?app_id=${params.app_id}&module_id=${params.module_id}`);
if (!res) return;
const { definition, ui_schema } = res;
// 转换为json字符串
// const jsonStr = JSON.parse(definition);
// 第一次fromJson 变成json字符串(格式化)
definition ? this.onSchemaChange(definition) : this.onSchemaChange('');
ui_schema ? this.onUISchemaChange(ui_schema) : this.onUISchemaChange('');
};
onSchemaChange = (val) => {
const { definition, currentUISchema } = this.state;
console.log('当前Schema: ');
console.log(definition);
console.log(currentUISchema);
// 关闭自动保存
// this.autoSave();
try {
const json = JSON.parse(val);
// JsonSchemaForm 需要object,AceEditor需要json字符串
this.setState({
formDefinition: json,
definition: val,
})
} catch (e) {
this.setState({
definition: val,
})
}
};
autoSave = () => {
// 每15次操作,自动保存
operationsNumber += 1;
if (operationsNumber && operationsNumber % 15 === 0) {
const { definition, moduleId, currentUISchema } = this.state;
// json验证
ca.post('/api/moduleEditDefinition', {
definition, // str
module_id: moduleId,
ui_schema: currentUISchema, // str
});
}
};
onUISchemaChange = (val) => {
try {
const json = JSON.parse(val);
if (checkUISchema(json)) {
// JsonSchemaForm 需要object,并且有该widget
this.setState({
uiSchema: json,
currentUISchema: val,
})
}
this.setState({
currentUISchema: val,
})
} catch (e) {
this.setState({
currentUISchema: val,
})
}
};
onChange = (data) => {
const { formData } = data;
this.setState({
formDataStr: toJson(formData),
formDataJson: formData,
})
};
submitDefinition = async () => {
try {
const { definition, moduleId, currentUISchema } = this.state;
if (!definition) {
message.error('保存失败,请填写Json Schema');
return
}
// json验证
const res = await ca.post('/api/moduleEditDefinition', {
definition, // str
module_id: moduleId,
ui_schema: currentUISchema, // str
});
if (!res) return;
await this.fetchModuleInfo();
message.success('保存成功');
} catch (e) {
message.error('保存失败,请检查json schema是否有误');
}
};
render() {
const { definition, formDefinition, formDataStr, formDataJson, uiSchema, currentUISchema } = this.state;
return (
Schema定义
UI Schema定义
保存Schema
{
typeof formDefinition === 'object' && formDefinition ?
message.info('保存数据请移步至【数据配置】')}
onError={() => console.log("errors")}
/>
:
null
}
真实数据
);
}
}
================================================
FILE: app/assets/routes/Development/Schema.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Exception/403.js
================================================
import React from 'react';
import { Link } from 'dva/router';
import Exception from 'components/Exception';
export default () => (
);
================================================
FILE: app/assets/routes/Exception/404.js
================================================
import React from 'react';
import { Link } from 'dva/router';
import Exception from 'components/Exception';
export default () => (
);
================================================
FILE: app/assets/routes/Exception/500.js
================================================
import React from 'react';
import { Link } from 'dva/router';
import Exception from 'components/Exception';
export default () => (
);
================================================
FILE: app/assets/routes/Exception/style.less
================================================
.trigger {
background: 'red';
:global(.ant-btn) {
margin-right: 8px;
margin-bottom: 12px;
}
}
================================================
FILE: app/assets/routes/Exception/triggerException.js
================================================
import React, { PureComponent } from 'react';
import { Button, Spin, Card } from 'antd';
import { connect } from 'dva';
import styles from './style.less';
@connect(state => ({
isloading: state.error.isloading,
}))
export default class TriggerException extends PureComponent {
state = {
isloading: false,
};
triggerError = code => {
this.setState({
isloading: true,
});
this.props.dispatch({
type: 'error/query',
payload: {
code,
},
});
};
render() {
return (
this.triggerError(401)}>
触发401
this.triggerError(403)}>
触发403
this.triggerError(500)}>
触发500
this.triggerError(404)}>
触发404
);
}
}
================================================
FILE: app/assets/routes/Operations/App.js
================================================
import React, { PureComponent } from 'react';
import { connect } from 'dva';
import { routerRedux } from 'dva/router';
import {
Form,
Row,
Col,
Input,
Select,
Button,
Card,
Modal,
Table,
notification
} from 'antd';
import ca from '../../utils/ca';
import { jsonToQueryString } from '../../utils/utils';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import styles from './App.less';
const FormItem = Form.Item;
const { Option } = Select;
const { Search } = Input;
@connect()
@Form.create()
export default class App extends PureComponent {
state = {
appCount: 0,
appRows: [],
appId: 0,
appLoading: false,
pageSize: 15,
page: 1,
name: '',
currentSelectAuthAppId: 0, // 当前选中授权的AppID
params: [],
selectParamsModalVisible: false,
};
componentDidMount() {
this.fetchAppListByFilter();
}
fetchAppListByFilter = async () => {
const { page, name, pageSize } = this.state;
this.setState({
appLoading: true,
});
const res = await ca.get(`/api/appList?page=${page}&name=${name}&page_size=${pageSize}`);
if (!res) return;
this.setState({
appCount: res.count,
appRows: res.rows,
appLoading: false,
})
};
handleSearch = async (val) => {
await this.setState({
name: val,
page: 1,
});
await this.fetchAppListByFilter();
};
changePage = async (page) => {
await this.setState({ page });
await this.fetchAppListByFilter();
};
handleModuleRoute = async (app_id) => {
const { dispatch } = this.props;
// 参数列表
const res = await ca.get(`/api/paramSelectList?app_id=${app_id}`);
if (!res) return;
if (!res.length) {
dispatch(routerRedux.push(`/operations/module?app_id=${app_id}`));
return;
}
this.setState({
params: res,
appId: app_id,
});
this.showSelectParamsModal();
};
showSelectParamsModal = () => {
this.setState({
selectParamsModalVisible: true,
});
};
hideSelectParamsModal = () => {
this.setState({
selectParamsModalVisible: false,
});
};
handleModuleRouteByParam = async () => {
const { appId } = this.state;
this.setState({
selectParamsModalVisible: false,
});
await this.props.form.validateFieldsAndScroll(async (err, values) => {
if (err) return;
const keys = Object.keys(values);
const selectedValues = {};
keys.forEach(key => {
if (values[key] !== void 0) {
selectedValues[key] = values[key]
}
});
const paramQueryString = jsonToQueryString(selectedValues);
const { dispatch } = this.props;
if (paramQueryString) {
dispatch(routerRedux.push(`/operations/module?app_id=${appId}&${paramQueryString}`));
return;
}
dispatch(routerRedux.push(`/operations/module?app_id=${appId}`));
});
};
render() {
const { getFieldDecorator } = this.props.form;
const { appRows, appCount, appLoading, pageSize, page, users, authUsers, authModalVisible, params, selectParamsModalVisible } = this.state;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 12 },
md: { span: 10 },
},
};
const submitFormLayout = {
wrapperCol: {
xs: { span: 24, offset: 0 },
sm: { span: 10, offset: 7 },
},
};
const appColumns = [
{
title: '应用名',
dataIndex: 'name_cn',
key: 'app_name_cn',
}, {
title: '英文名',
dataIndex: 'name_en',
key: 'app_name_en',
}, {
title: '所有者',
dataIndex: 'owner',
key: 'app_owner',
}, {
title: '最后更新人',
dataIndex: 'updater',
key: 'app_updater',
}, {
title: '操作',
key: 'app_operating',
render: (text, record) => (
this.handleModuleRoute(record.id)}>模块列表
notification.info({ message: `${record.name_cn} 描述`, description: record.description })}>查看描述
),
},
];
return (
{
!params.length || params === 'null' ?
null
:
(
params.map(item => {
if (item.value === 'null' || !item.value) {
return null;
}
return (
{getFieldDecorator(item.name)(
{
JSON.parse(item.value).map(i => (
{i.value}
))
}
)}
);
})
)
}
取消
进入
);
}
}
================================================
FILE: app/assets/routes/Operations/App.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Operations/Data.js
================================================
import React, { PureComponent } from 'react';
import {
Form,
Row,
Col,
message,
Card,
} from 'antd';
import JsonSchemaForm from '../../components/JsonSchemaForm';
import AceEditor from 'react-ace';
import 'brace/mode/json';
import 'brace/theme/monokai';
import ca from '../../utils/ca';
import constants from '../../utils/constants';
import cfg from '../../../../config';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import { getParams } from "../../utils/url";
import { toJson, getParamsString, md5, fromJson } from "../../utils/utils";
import './Data.less';
@Form.create()
export default class Data extends PureComponent {
state = {
appId: 0,
moduleId: 0,
definition: '',
paramsStr: '',
};
componentDidMount() {
this.fetchModuleInfo();
this.fetchTempData();
}
fetchTempData = async () => {
const params = getParams(this.props.location.search);
const paramsStr = getParamsString(params);
const res = await ca.get(`/api/dataGetTempData?module_id=${params.module_id}¶ms=${paramsStr}`);
if (!res) return;
this.setState({
paramsStr,
});
this.setState({
formDataStr: res.data ? toJson(JSON.parse(res.data)) : undefined,
formDataJson: res.data ? JSON.parse(res.data) : null,
});
};
fetchModuleInfo = async () => {
const params = getParams(this.props.location.search);
this.setState({
appId: params.app_id,
moduleId: params.module_id,
});
const res = await ca.get(`/api/moduleInfo?app_id=${params.app_id}&module_id=${params.module_id}`);
if (!res) return;
const { definition, ui_schema } = res;
if (definition) {
const json = JSON.parse(definition);
const uiSchema = ui_schema ? JSON.parse(ui_schema) : {};
this.setState({
uiSchema,
formDefinition: json,
definition: definition
})
}
};
onChange = (data) => {
const { formData } = data;
this.setState({
formDataStr: toJson(formData),
formDataJson: formData,
})
};
submitTempData = async () => {
const { formDataJson, paramsStr, moduleId } = this.state;
const res = await ca.post('/api/dataEditTempData', {
params: paramsStr,
module_id: moduleId,
data: formDataJson
});
if (!res) return;
await this.fetchTempData();
message.success(`添加数据成功,审核后同步, cdn地址: ${res}`);
};
buildDes = () => (
);
render() {
const { formDefinition, formDataStr, formDataJson, paramsStr, uiSchema } = this.state;
//
//
return (
{
formDefinition && (formDataJson || formDataJson === null) ?
console.log("errors")}
/>
:
null
}
真实数据(开发人员可以直接编辑)
{
this.setState({ formDataStr: jsonData });
try {
const json = JSON.parse(jsonData);
this.setState({
formDataJson: json
})
} catch (e) {
// 不做处理
}
}}
/>
);
}
}
================================================
FILE: app/assets/routes/Operations/Data.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Operations/Module.js
================================================
import React, { PureComponent } from 'react';
import { connect } from 'dva';
import {
Row,
Col,
Button,
Card,
Table,
message
} from 'antd';
import ca from '../../utils/ca';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import { getParams, formatReviewUrl } from '../../utils/url';
import { getParamsString } from '../../utils/utils';
import styles from './Module.less';
import {routerRedux} from "dva/router";
const reviewStatus = ['未配置', '请审核', '已审核'];
@connect()
export default class Module extends PureComponent {
state = {
modalVisible: false,
data: [],
loading: false,
appId: 0,
};
componentDidMount() {
this.fetchModuleList();
}
fetchModuleList = async () => {
this.setState({
loading: true,
});
const params = getParams(this.props.location.search);
const paramsStr = getParamsString(params);
this.setState({
paramsStr,
appId: params.app_id,
});
const res = await ca.get(`/api/moduleStatusList?app_id=${params.app_id}¶ms=${paramsStr}`);
if (!res) return;
this.setState({
data: res,
loading: false,
})
};
handleEditDataRoute = (module_id) => {
const { dispatch } = this.props;
dispatch(routerRedux.push(`/operations/data${this.props.location.search}&module_id=${module_id}`));
};
handleReview = async (module_id) => {
const params = getParams(this.props.location.search);
const paramsStr = `/${params.app_id}/${module_id}` + Object.keys(params).sort().map(key => {
if (key === 'app_id' || key === 'module_id') {
return '';
}
return `/${key}/${params[key]}`
}).join('');
const dataRes = await ca.get(`/api/dataGetTempData?module_id=${module_id}¶ms=${paramsStr}`);
const res = await ca.post('/api/dataReviewTempData', {
data_id: dataRes.id
});
if (res) {
message.success(`审核成功, cdn地址: ${res}`);
this.fetchModuleList();
return;
}
message.error('审核失败');
}
// 去审核
goReview = (associationUrl) => {
const reviewUrl = formatReviewUrl(associationUrl);
window.open(reviewUrl, '_blank');
return;
};
render() {
const { data, loading } = this.state;
const column = [
{
title: '模块名',
dataIndex: 'name_cn',
key: 'module_name_cn',
}, {
title: '英文名',
dataIndex: 'name_en',
key: 'module_name_en',
}, {
title: '创建者',
dataIndex: 'creator',
key: 'module_creator',
}, {
title: '最后更新人',
dataIndex: 'updater',
key: 'module_updater',
}, {
title: '审核状态',
key: 'module_review_status',
render: (text, record) => (
{reviewStatus[record.review_status]}
),
}, {
title: '操作',
key: 'module_operating',
render: (text, record) => (
this.handleEditDataRoute(record.id)}>编辑模块数据
{
!record.association_url || record.review_status !== 1 ?
null
:
this.goReview(record.association_url)}>去审核
}
{
record.review_status !== 1 ?
null
:
this.handleReview(record.id)}>审核
}
),
},
];
return (
);
}
}
================================================
FILE: app/assets/routes/Operations/Module.less
================================================
@import '~antd/lib/style/themes/default.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button:nth-child(2) {
margin: 0 16px 0 16px;
}
}
}
.tableOperatingButton {
button {
margin-right: 8px;
}
}
.optional {
color: @text-color-secondary;
font-style: normal;
}
================================================
FILE: app/assets/routes/Result/Error.js
================================================
import React, { Fragment } from 'react';
import { Button, Icon, Card } from 'antd';
import Result from 'components/Result';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
const extra = (
您提交的内容有如下错误:
);
const actions = 返回修改 ;
export default () => (
);
================================================
FILE: app/assets/routes/Result/Success.js
================================================
import React, { Fragment } from 'react';
import { Button, Row, Col, Icon, Steps, Card } from 'antd';
import Result from 'components/Result';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
const { Step } = Steps;
const desc1 = (
);
const desc2 = (
);
const extra = (
项目名称
项目 ID:
23421
负责人:
曲丽丽
生效时间:
2016-12-12 ~ 2017-12-12
创建项目} description={desc1} />
部门初审} description={desc2} />
财务复核} />
完成} />
);
const actions = (
返回列表
查看项目
打 印
);
export default () => (
);
================================================
FILE: app/assets/routes/Result/Success.test.js
================================================
import React from 'react';
import { shallow } from 'enzyme';
import Success from './Success';
it('renders with Result', () => {
const wrapper = shallow( );
expect(wrapper.find('Result').length).toBe(1);
expect(wrapper.find('Result').prop('type')).toBe('success');
});
================================================
FILE: app/assets/routes/User/Login.js
================================================
import React, { Component } from 'react';
import { connect } from 'dva';
import {Link, routerRedux} from 'dva/router';
import { Checkbox, Alert } from 'antd';
import Login from 'components/Login';
import styles from './Login.less';
import ca from "../../utils/ca";
import { reloadAuthorized } from '../../utils/Authorized';
const { UserName, Password, Submit } = Login;
@connect()
export default class LoginPage extends Component {
state = {
autoLogin: true,
};
handleSubmit = async (err, values) => {
if (!err) {
const res = await ca.post('/api/userLogin', {
username: values.username,
password: values.password,
});
if (!res) return;
reloadAuthorized();
this.props.dispatch(routerRedux.push('/'))
}
};
changeAutoLogin = (e) => {
this.setState({
autoLogin: e.target.checked,
});
};
renderMessage = (content) => {
return ;
};
render() {
const { login } = this.props;
return (
);
}
}
================================================
FILE: app/assets/routes/User/Login.less
================================================
@import '~antd/lib/style/themes/default.less';
.main {
width: 368px;
margin: 0 auto;
@media screen and (max-width: @screen-sm) {
width: 95%;
}
.icon {
font-size: 24px;
color: rgba(0, 0, 0, 0.2);
margin-left: 16px;
vertical-align: middle;
cursor: pointer;
transition: color 0.3s;
&:hover {
color: @primary-color;
}
}
.other {
text-align: left;
margin-top: 24px;
line-height: 22px;
.register {
float: right;
}
}
}
================================================
FILE: app/assets/routes/User/Register.js
================================================
import React, { Component } from 'react';
import { connect } from 'dva';
import { routerRedux, Link } from 'dva/router';
import { Form, Input, Button, Popover, Progress } from 'antd';
import styles from './Register.less';
import ca from '../../utils/ca';
import {reloadAuthorized} from "../../utils/Authorized";
const FormItem = Form.Item;
const passwordStatusMap = {
ok: 强度:强
,
pass: 强度:中
,
poor: 强度:太短
,
};
const passwordProgressMap = {
ok: 'success',
pass: 'normal',
poor: 'exception',
};
@connect()
@Form.create()
export default class Register extends Component {
state = {
count: 0,
confirmDirty: false,
visible: false,
help: '',
prefix: '86',
};
componentWillUnmount() {
clearInterval(this.interval);
}
getPasswordStatus = () => {
const { form } = this.props;
const value = form.getFieldValue('password');
if (value && value.length > 9) {
return 'ok';
}
if (value && value.length > 5) {
return 'pass';
}
return 'poor';
};
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields({ force: true }, async (err, values) => {
if (!err) {
const res = await ca.post('/api/userCreate', {
username: values.username,
password: values.password,
employee_id: values.employee_id,
real_name: values.real_name,
});
if (!res) return;
reloadAuthorized();
this.props.dispatch(routerRedux.push('/'))
}
});
};
checkConfirm = (rule, value, callback) => {
const { form } = this.props;
if (value && value !== form.getFieldValue('password')) {
callback('两次输入的密码不匹配!');
} else {
callback();
}
};
checkPassword = (rule, value, callback) => {
if (!value) {
this.setState({
help: '请输入密码!',
visible: !!value,
});
callback('error');
} else {
this.setState({
help: '',
});
if (!this.state.visible) {
this.setState({
visible: !!value,
});
}
if (value.length < 6) {
callback('error');
} else {
const { form } = this.props;
if (value && this.state.confirmDirty) {
form.validateFields(['confirm'], { force: true });
}
callback();
}
}
};
renderPasswordProgress = () => {
const { form } = this.props;
const value = form.getFieldValue('password');
const passwordStatus = this.getPasswordStatus();
return value && value.length ? (
100 ? 100 : value.length * 10}
showInfo={false}
/>
) : null;
};
render() {
const { form } = this.props;
const { getFieldDecorator } = form;
const { count, prefix } = this.state;
return (
注册
{getFieldDecorator('email', {
rules: [
{
required: true,
message: '请输入公司邮箱地址!',
},
{
type: 'email',
message: '邮箱地址格式错误!',
},
],
})( )}
{getFieldDecorator('username', {
rules: [
{
required: true,
message: '请输入3~16位用户名',
},
],
})( )}
{getFieldDecorator('real_name', {
rules: [
{
required: true,
message: '请输入真实姓名',
},
],
})( )}
{getFieldDecorator('employee_id', {
rules: [
{
required: true,
message: '请输入工号',
},
],
})( )}
{passwordStatusMap[this.getPasswordStatus()]}
{this.renderPasswordProgress()}
请至少输入 6 个字符。请不要使用容易被猜到的密码。
}
overlayStyle={{ width: 240 }}
placement="right"
visible={this.state.visible}
>
{getFieldDecorator('password', {
rules: [
{
validator: this.checkPassword,
},
],
})( )}
{getFieldDecorator('confirm', {
rules: [
{
required: true,
message: '请确认密码!',
},
{
validator: this.checkConfirm,
},
],
})( )}
注册
使用已有账户登录
);
}
}
================================================
FILE: app/assets/routes/User/Register.less
================================================
@import '~antd/lib/style/themes/default.less';
.main {
width: 368px;
margin: 0 auto;
:global {
.ant-form-item {
margin-bottom: 24px;
}
}
h3 {
font-size: 16px;
margin-bottom: 20px;
}
.getCaptcha {
display: block;
width: 100%;
}
.submit {
width: 50%;
}
.login {
float: right;
line-height: @btn-height-lg;
}
}
.success,
.warning,
.error {
transition: color 0.3s;
}
.success {
color: @success-color;
}
.warning {
color: @warning-color;
}
.error {
color: @error-color;
}
.progress-pass > .progress {
:global {
.ant-progress-bg {
background-color: @warning-color;
}
}
}
================================================
FILE: app/assets/routes/User/RegisterResult.js
================================================
import React from 'react';
import { Button } from 'antd';
import { Link } from 'dva/router';
import Result from 'components/Result';
import styles from './RegisterResult.less';
const actions = (
);
export default ({ location }) => (
你的账户:{location.state ? location.state.account : 'AntDesign@example.com'} 注册成功
}
description="激活邮件已发送到你的邮箱中,邮件有效期为24小时。请及时登录邮箱,点击邮件中的链接激活帐户。"
actions={actions}
style={{ marginTop: 56 }}
/>
);
================================================
FILE: app/assets/routes/User/RegisterResult.less
================================================
.registerResult {
:global {
.anticon {
font-size: 64px;
}
}
.title {
margin-top: 32px;
font-size: 20px;
line-height: 28px;
}
.actions {
margin-top: 40px;
a + a {
margin-left: 8px;
}
}
}
================================================
FILE: app/assets/services/api.js
================================================
import { stringify } from 'qs';
import request from '../utils/request';
export async function login(params) {
return request('/api/userLogin', {
method: 'POST',
body: {
...params,
},
});
}
export async function queryProjectNotice() {
return request('/api/project/notice');
}
export async function queryActivities() {
return request('/api/activities');
}
export async function queryRule(params) {
return request(`/api/rule?${stringify(params)}`);
}
export async function removeRule(params) {
return request('/api/rule', {
method: 'POST',
body: {
...params,
method: 'delete',
},
});
}
export async function addRule(params) {
return request('/api/rule', {
method: 'POST',
body: {
...params,
method: 'post',
},
});
}
export async function fakeSubmitForm(params) {
return request('/api/forms', {
method: 'POST',
body: params,
});
}
export async function fakeChartData() {
return request('/api/fake_chart_data');
}
export async function queryTags() {
return request('/api/tags');
}
export async function queryBasicProfile() {
return request('/api/profile/basic');
}
export async function queryAdvancedProfile() {
return request('/api/profile/advanced');
}
export async function queryFakeList(params) {
return request(`/api/fake_list?${stringify(params)}`);
}
export async function fakeAccountLogin(params) {
return request('/api/login/account', {
method: 'POST',
body: params,
});
}
export async function fakeRegister(params) {
return request('/api/register', {
method: 'POST',
body: params,
});
}
export async function queryNotices() {
return request('/api/notices');
}
================================================
FILE: app/assets/services/error.js
================================================
import request from '../utils/request';
export async function query(code) {
return request(`/api/${code}`);
}
================================================
FILE: app/assets/services/user.js
================================================
import request from '../utils/request';
export async function query() {
return request('/api/users');
}
export async function queryCurrent() {
return request('/api/userInfo');
}
================================================
FILE: app/assets/theme.js
================================================
// https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less
module.exports = {
// 'primary-color': '#10e99b',
'card-actions-background': '#f5f8fa',
};
================================================
FILE: app/assets/utils/Authorized.js
================================================
import RenderAuthorized from '../components/Authorized';
import { getAuthority } from './authority';
let Authorized = RenderAuthorized(getAuthority()); // eslint-disable-line
// Reload the rights component
const reloadAuthorized = () => {
Authorized = RenderAuthorized(getAuthority());
};
export { reloadAuthorized };
export default Authorized;
================================================
FILE: app/assets/utils/authority.js
================================================
// use localStorage to store the authority info, which might be sent from server in actual project.
export function getAuthority() {
return localStorage.getItem('antd-pro-authority') || 'admin';
}
export function setAuthority(authority) {
return localStorage.setItem('antd-pro-authority', authority);
}
================================================
FILE: app/assets/utils/ca.js
================================================
import axios from 'axios';
// import moment from 'moment';
import { message } from 'antd';
// 方便请求错误上报
let requestKeyInfo;
axios.interceptors.request.use(function (config) {
requestKeyInfo = {
headers: config.headers,
method: config.method,
url: config.url,
data: config.data,
};
return config;
}, function (error) {
return Promise.reject(error);
});
axios.interceptors.response.use(response => {
const { data } = response;
if (data.data === 0 || data.data === 1) {
return data.data;
}
if (!data.success) {
message.error(data.message || '网络异常,请重试');
return false;
}
if (data.data === false) {
return false;
}
return data.data || data.success;
}, function (e) {
message.error('网络异常,请重试!');
return false;
});
export default axios;
================================================
FILE: app/assets/utils/constants.js
================================================
module.exports = {
commonApi: 'http://127.0.0.1:7102/api/dmsGetData?params=',
cdnPrefix: 'http://127.0.0.1:5000/dms/data/',
};
================================================
FILE: app/assets/utils/fetch.js
================================================
import axios from 'axios';
import { message } from 'antd';
export default async (method, url, params = {}) => {
try {
const { data } = await axios[method](url, params);
if (!data.success) {
message.error(data.message || '服务器出错,请联系开发人员');
return false;
} else {
return data.data || data.success;
}
} catch (e) {
message.error('请求失败,请重试');
}
};
================================================
FILE: app/assets/utils/request.js
================================================
import fetch from 'dva/fetch';
import { notification } from 'antd';
import { routerRedux } from 'dva/router';
import store from '../index';
const codeMessage = {
200: '服务器成功返回请求的数据。',
201: '新建或修改数据成功。',
202: '一个请求已经进入后台排队(异步任务)。',
204: '删除数据成功。',
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
401: '用户没有权限(令牌、用户名、密码错误)。',
403: '用户得到授权,但是访问是被禁止的。',
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
406: '请求的格式不可得。',
410: '请求的资源被永久删除,且不会再得到的。',
422: '当创建一个对象时,发生一个验证错误。',
500: '服务器发生错误,请检查服务器。',
502: '网关错误。',
503: '服务不可用,服务器暂时过载或维护。',
504: '网关超时。',
};
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response;
}
const errortext = codeMessage[response.status] || response.statusText;
notification.error({
message: `请求错误 ${response.status}: ${response.url}`,
description: errortext,
});
const error = new Error(errortext);
error.name = response.status;
error.response = response;
throw error;
}
/**
* Requests a URL, returning a promise.
*
* @param {string} url The URL we want to request
* @param {object} [options] The options we want to pass to "fetch"
* @return {object} An object containing either "data" or "err"
*/
export default function request(url, options) {
const defaultOptions = {
credentials: 'include',
};
const newOptions = { ...defaultOptions, ...options };
if (newOptions.method === 'POST' || newOptions.method === 'PUT') {
if (!(newOptions.body instanceof FormData)) {
newOptions.headers = {
Accept: 'application/json',
'Content-Type': 'application/json; charset=utf-8',
...newOptions.headers,
};
newOptions.body = JSON.stringify(newOptions.body);
} else {
// newOptions.body is FormData
newOptions.headers = {
Accept: 'application/json',
...newOptions.headers,
};
}
}
return fetch(url, newOptions)
.then(checkStatus)
.then(response => {
if (newOptions.method === 'DELETE' || response.status === 204) {
return response.text();
}
return response.json();
})
.catch(e => {
const { dispatch } = store;
const status = e.name;
if (status === 401) {
dispatch({
type: 'login/logout',
});
return;
}
if (status === 403) {
dispatch(routerRedux.push('/exception/403'));
return;
}
if (status <= 504 && status >= 500) {
dispatch(routerRedux.push('/exception/500'));
return;
}
if (status >= 404 && status < 422) {
dispatch(routerRedux.push('/exception/404'));
}
});
}
================================================
FILE: app/assets/utils/url.js
================================================
export const getParams = (search) => {
if (!search) return {};
const vars = search.substring(1).split('&');
const queryString = {};
for (let i = 0; i < vars.length; i += 1) {
const pair = vars[i].split('=');
const key = decodeURIComponent(pair[0]);
const value = decodeURIComponent(pair[1]);
if (typeof queryString[key] === 'undefined') {
queryString[key] = decodeURIComponent(value);
} else if (typeof queryString[key] === 'string') {
queryString[key] = [queryString[key], decodeURIComponent(value)];
} else {
queryString[key].push(decodeURIComponent(value));
}
}
return queryString;
};
export const getBaseHashUrlPrefix = url => url.match(/(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]#/g)[0] || url;
export const formatReviewUrl = associationUrl => {
// eslint-disable-next-line no-use-before-define
const url = window.location.href;
const urlSplit = url.split('?');
const search = `?${urlSplit[urlSplit.length - 1]}`;
const params = getParams(search);
if (Object.keys(params).length < 2) {
// 该模块没有关联参数
return `${associationUrl}?enableReview=1`;
}
const urlArray = associationUrl.split('{');
const formatUrl = urlArray.map(item => {
if (!item.includes('}')) {
return item;
}
const tempArray = item.split('}');
const key = tempArray[0];
return params[key] + tempArray[1];
}).join('');
return `${formatUrl}&enableReview=1`;
}
================================================
FILE: app/assets/utils/utils.js
================================================
import moment from 'moment';
import MD5 from 'md5.js';
export function fixedZero(val) {
return val * 1 < 10 ? `0${val}` : val;
}
export function getTimeDistance(type) {
const now = new Date();
const oneDay = 1000 * 60 * 60 * 24;
if (type === 'today') {
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
return [moment(now), moment(now.getTime() + (oneDay - 1000))];
}
if (type === 'week') {
let day = now.getDay();
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
if (day === 0) {
day = 6;
} else {
day -= 1;
}
const beginTime = now.getTime() - day * oneDay;
return [moment(beginTime), moment(beginTime + (7 * oneDay - 1000))];
}
if (type === 'month') {
const year = now.getFullYear();
const month = now.getMonth();
const nextDate = moment(now).add(1, 'months');
const nextYear = nextDate.year();
const nextMonth = nextDate.month();
return [
moment(`${year}-${fixedZero(month + 1)}-01 00:00:00`),
moment(moment(`${nextYear}-${fixedZero(nextMonth + 1)}-01 00:00:00`).valueOf() - 1000),
];
}
if (type === 'year') {
const year = now.getFullYear();
return [moment(`${year}-01-01 00:00:00`), moment(`${year}-12-31 23:59:59`)];
}
}
export function getPlainNode(nodeList, parentPath = '') {
const arr = [];
nodeList.forEach(node => {
const item = node;
item.path = `${parentPath}/${item.path || ''}`.replace(/\/+/g, '/');
item.exact = true;
if (item.children && !item.component) {
arr.push(...getPlainNode(item.children, item.path));
} else {
if (item.children && item.component) {
item.exact = false;
}
arr.push(item);
}
});
return arr;
}
export function digitUppercase(n) {
const fraction = ['角', '分'];
const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
const unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
let num = Math.abs(n);
let s = '';
fraction.forEach((item, index) => {
s += (digit[Math.floor(num * 10 * 10 ** index) % 10] + item).replace(/零./, '');
});
s = s || '整';
num = Math.floor(num);
for (let i = 0; i < unit[0].length && num > 0; i += 1) {
let p = '';
for (let j = 0; j < unit[1].length && num > 0; j += 1) {
p = digit[num % 10] + unit[1][j] + p;
num = Math.floor(num / 10);
}
s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
}
return s
.replace(/(零.)*零元/, '元')
.replace(/(零.)+/g, '零')
.replace(/^整$/, '零元整');
}
function getRelation(str1, str2) {
if (str1 === str2) {
console.warn('Two path are equal!'); // eslint-disable-line
}
const arr1 = str1.split('/');
const arr2 = str2.split('/');
if (arr2.every((item, index) => item === arr1[index])) {
return 1;
} else if (arr1.every((item, index) => item === arr2[index])) {
return 2;
}
return 3;
}
function getRenderArr(routes) {
let renderArr = [];
renderArr.push(routes[0]);
for (let i = 1; i < routes.length; i += 1) {
let isAdd = false;
// 是否包含
isAdd = renderArr.every(item => getRelation(item, routes[i]) === 3);
// 去重
renderArr = renderArr.filter(item => getRelation(item, routes[i]) !== 1);
if (isAdd) {
renderArr.push(routes[i]);
}
}
return renderArr;
}
/**
* Get router routing configuration
* { path:{name,...param}}=>Array<{name,path ...param}>
* @param {string} path
* @param {routerData} routerData
*/
export function getRoutes(path, routerData) {
let routes = Object.keys(routerData).filter(
routePath => routePath.indexOf(path) === 0 && routePath !== path
);
// Replace path to '' eg. path='user' /user/name => name
routes = routes.map(item => item.replace(path, ''));
// Get the route to be rendered to remove the deep rendering
const renderArr = getRenderArr(routes);
// Conversion and stitching parameters
const renderRoutes = renderArr.map(item => {
const exact = !routes.some(route => route !== item && getRelation(route, item) === 1);
return {
exact,
...routerData[`${path}${item}`],
key: `${path}${item}`,
path: `${path}${item}`,
};
});
return renderRoutes;
}
/* eslint no-useless-escape:0 */
const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g;
export function isUrl(path) {
return reg.test(path);
}
// base64 decode
export function b64DecodeUnicode(str) {
return decodeURIComponent(atob(str).split('').map(c => `%00${c.charCodeAt(0).toString(16)}`.slice(-2)).join(''));
}
export function shouldRender(comp, nextProps, nextState) {
const { props, state } = comp;
return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
}
export function deepEquals(a, b, ca = [], cb = []) {
// Partially extracted from node-deeper and adapted to exclude comparison
// checks for functions.
// https://github.com/othiym23/node-deeper
if (a === b) {
return true;
} else if (typeof a === "function" || typeof b === "function") {
// Assume all functions are equivalent
// see https://github.com/mozilla-services/react-jsonschema-form/issues/255
return true;
} else if (typeof a !== "object" || typeof b !== "object") {
return false;
} else if (a === null || b === null) {
return false;
} else if (a instanceof Date && b instanceof Date) {
return a.getTime() === b.getTime();
} else if (a instanceof RegExp && b instanceof RegExp) {
return (
a.source === b.source &&
a.global === b.global &&
a.multiline === b.multiline &&
a.lastIndex === b.lastIndex &&
a.ignoreCase === b.ignoreCase
);
} else if (isArguments(a) || isArguments(b)) {
if (!(isArguments(a) && isArguments(b))) {
return false;
}
let slice = Array.prototype.slice;
return deepEquals(slice.call(a), slice.call(b), ca, cb);
} else {
if (a.constructor !== b.constructor) {
return false;
}
let ka = Object.keys(a);
let kb = Object.keys(b);
// don't bother with stack acrobatics if there's nothing there
if (ka.length === 0 && kb.length === 0) {
return true;
}
if (ka.length !== kb.length) {
return false;
}
let cal = ca.length;
while (cal--) {
if (ca[cal] === a) {
return cb[cal] === b;
}
}
ca.push(a);
cb.push(b);
ka.sort();
kb.sort();
for (var j = ka.length - 1; j >= 0; j--) {
if (ka[j] !== kb[j]) {
return false;
}
}
let key;
for (let k = ka.length - 1; k >= 0; k--) {
key = ka[k];
if (!deepEquals(a[key], b[key], ca, cb)) {
return false;
}
}
ca.pop();
cb.pop();
return true;
}
}
export const fromJson = json => JSON.parse(json);
export const toJson = val => JSON.stringify(val, null, 2);
export const jsonToQueryString = json => Object.keys(json).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(json[key])}`).join('&');
// export const transformErrors = errors => {
// return errors.map(error => {
// // use error messages from JSON schema if any
// if (error.schema.messages && error.schema.messages[error.name]) {
// return {
// ...error,
// message: error.schema.messages[error.name]
// };
// }
// return error;
// });
// };
function isArguments(object) {
return Object.prototype.toString.call(object) === "[object Arguments]";
}
/**
* 验证UI Schema
*
* @param {Object} json
* @returns {boolean}
*/
export const checkUISchema = json => {
const widgetType = [
'updown', // 增减数字
'textarea',
'password',
'alt-datetime',
'alt-date',
'checkboxes',
'select',
'radio',
'range',
'color',
'hidden',
];
const reg = /"ui:widget"\s*:\s*"(\S*)"/g;
const jsonStr = JSON.stringify(json, null, 2);
while(reg.exec(jsonStr)) {
if (!widgetType.includes(RegExp["$1"])) {
return false;
}
}
return true;
};
export const getParamsString = (params) => {
return `/${params.app_id}/${params.module_id || 'dms_module_id'}` + Object.keys(params).sort().map(key => {
if (key === 'app_id' || key === 'module_id') {
return '';
}
return `/${key}/${params[key]}`
}).join('');
};
export const md5 = (str, salt='winwinfe') => new MD5().update(str + salt).digest('hex');
================================================
FILE: app/assets/utils/utils.less
================================================
.textOverflow() {
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
white-space: nowrap;
}
.textOverflowMulti(@line: 3, @bg: #fff) {
overflow: hidden;
position: relative;
line-height: 1.5em;
max-height: @line * 1.5em;
text-align: justify;
margin-right: -1em;
padding-right: 1em;
&:before {
background: @bg;
content: '...';
padding: 0 1px;
position: absolute;
right: 14px;
bottom: 0;
}
&:after {
background: white;
content: '';
margin-top: 0.2em;
position: absolute;
right: 14px;
width: 1em;
height: 1em;
}
}
// mixins for clearfix
// ------------------------
.clearfix() {
zoom: 1;
&:before,
&:after {
content: ' ';
display: table;
}
&:after {
clear: both;
visibility: hidden;
font-size: 0;
height: 0;
}
}
================================================
FILE: app/controller/application.js
================================================
'use strict';
const Controller = require('egg').Controller;
const Joi = require('joi');
const _ = require('lodash');
const response = require('../util/response');
class ApplicationController extends Controller {
async create() {
const { ctx } = this;
const { name_cn, name_en, description, operation_manager_id, associate_url } = ctx.request.body;
if (Joi.validate(name_cn, Joi.string().replace(' ', '').min(3).max(24).required()).error) {
ctx.body = response.simpleError('应用中文名为3~24个字符');
return;
}
if (Joi.validate(name_en, Joi.string().regex(/^[A-Za-z0-9\-]{3,24}$/).required()).error) {
ctx.body = response.simpleError('应用英文名必须为3~24个字,且必须为英文、数字、中横线');
return;
}
const res = await ctx.model.Application.findOneByName(name_cn, name_en);
if (res) {
ctx.body = response.simpleError('应用已存在');
return;
}
const { userId } = ctx.base;
const data = await ctx.model.Application.create({
name_cn: name_cn,
name_en: name_en,
description,
operation_manager_id,
associate_url: associate_url,
owner_id: userId,
updater_id: userId,
creator_id: userId,
});
if (!data) {
ctx.body = response.simpleError('创建失败,请重试');
return;
}
ctx.body = response.success();
}
async edit() {
const { ctx } = this;
const { app_id, description, operation_manager_id, associate_url, owner_id } = ctx.request.body;
const { userId } = ctx.base;
const res = await ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id);
if (!res) {
ctx.body = response.simpleError('权限不足');
return;
}
const data = await ctx.model.Application.update({
description: ctx.helper.escape(description),
operation_manager_id,
associate_url: associate_url,
owner_id,
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: app_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('更新失败,请重试');
return;
}
ctx.body = response.success();
}
async list() {
const { ctx } = this;
// const page = ctx.params.page || 1;
// const { page, name, page_size } = ctx.params;
const { page, name, page_size } = ctx.queries;
const { userId, type } = ctx.base; // 1:超管,2:开发主管;3:运营主管;4:普通开发;5:普通运营
// 获取当前拥有权限的应用ids
let appList;
if (type === 1) {
// 超管
appList = await ctx.model.Application.findSuAllList(page, name, page_size);
} else {
// 非超管
const appIdsObj = await ctx.model.Auth.findAppIdsByUserId(userId);
const appIds = appIdsObj.map(appIdObj => appIdObj.app_id);
appList = await ctx.model.Application.findAllList(userId, appIds, page, name, page_size);
}
let userIds = [];
appList.rows.forEach(appInfo => {
userIds.push(appInfo.owner_id, appInfo.updater_id, appInfo.operation_manager_id, appInfo.creator_id);
});
userIds = _.compact(userIds);
userIds = _.uniq(userIds);
const usersInfo = await ctx.model.User.findUsersByIds(userIds);
if (!usersInfo || !usersInfo.length === 0) {
ctx.body = response.emptySuccess();
return;
}
const users = [];
usersInfo.forEach(userInfo => {
users[userInfo.id] = userInfo.real_name;
});
appList.rows.forEach(app => {
app.key = `app-${app.id}`;
app.owner = users[app.owner_id];
app.updater = users[app.updater_id];
app.operation_manager = users[app.operation_manager_id] || '';
app.creator = users[app.creator_id];
});
ctx.body = response.success(appList);
}
async delete() {
const { ctx } = this;
const { userId } = ctx.base;
const { app_id } = ctx.request.body;
const res = await ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id);
if (!res) {
ctx.body = response.simpleError('权限不足');
return;
}
const data = await ctx.model.Application.update({
soft_delete: 1,
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: app_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('删除失败,请重试');
return;
}
ctx.body = response.success();
}
}
module.exports = ApplicationController;
================================================
FILE: app/controller/auth.js
================================================
'use strict';
const Controller = require('egg').Controller;
// const Joi = require('joi');
const response = require('../util/response');
class AuthController extends Controller {
async create() {
const { ctx } = this;
const { userId } = ctx.base;
const { app_id, user_ids } = ctx.request.body;
// 权限验证
const auth = await this.checkAuth(app_id);
if (!auth) return;
// 把现有权限记录全部软删除
await ctx.model.Auth.deleteAuthByAppId(app_id, userId);
const formatData = user_ids.map(user_id => ({
app_id,
user_id,
creator_id: userId,
updater_id: userId,
}));
// 批量添加权限
const addRes = await ctx.model.Auth.bulkCreate(formatData);
if (addRes && addRes.length > 0) {
ctx.body = response.success();
return;
}
ctx.body = response.simpleError('权限添加失败,请重试');
}
// 先删除后插入
async edit() {
const { ctx } = this;
const { userId } = ctx.base;
const { app_id, user_ids } = ctx.request.body;
// 权限验证
const auth = await this.checkAuth(app_id);
if (!auth) return;
// 先删除
await ctx.model.Auth.update({
soft_delete: 1, // 未删除/已删除:0/1
updater_id: userId,
update_time: new Date(),
}, {
where: {
app_id: app_id,
},
});
// 插入
const formatData = user_ids.map(user_id => ({
app_id,
user_id,
creator_id: userId,
updater_id: userId,
}));
// 批量添加权限
const addRes = await ctx.model.Auth.bulkCreate(formatData);
if (addRes && addRes.length > 0) {
ctx.body = response.success();
return;
}
ctx.body = response.simpleError('权限添加失败,请重试');
}
// 通过AppId获取权限列表
async list() {
const { ctx } = this;
const { app_id } = ctx.queries;
// 权限验证
const auth = await this.checkAuth(app_id);
if (!auth) return;
const userIdsRes = await ctx.model.Auth.findUserIdsByAppId(app_id);
const userIds = userIdsRes.map(userIdRes => userIdRes.user_id);
console.log(userIdsRes);
const usersInfo = await ctx.model.User.findUsersByIds(userIds);
if (!usersInfo || !usersInfo.length === 0) {
ctx.body = response.emptySuccess();
return;
}
const users = [];
usersInfo.forEach(userInfo => {
users[userInfo.id] = userInfo.real_name;
});
userIdsRes.forEach(user => {
user.key = `user-${user.user_id}`;
user.real_name = users[user.user_id];
});
ctx.body = response.success(userIdsRes);
}
async checkAuth(app_id) {
const { ctx } = this;
const { userId, type } = ctx.base;
if (type !== 1) {
// 非超管
const res = await ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id);
if (!res) {
ctx.body = response.simpleError('权限不足');
return false;
}
}
return true;
}
}
module.exports = AuthController;
================================================
FILE: app/controller/data.js
================================================
'use strict';
const Controller = require('egg').Controller;
const _ = require('lodash');
const fetch = require('node-fetch');
const response = require('../util/response');
const cfg = require('../../config');
const { md5 } = require('../util/utils');
const oss = require('../lib/AliOSS');
class DataController extends Controller {
async editTempData() {
const { ctx } = this;
const { params, module_id, data } = ctx.request.body;
const { userId } = ctx.base;
const paramsData = `y${params}`;
// 删除前面的临时数据记录
await ctx.model.Data.deleteDataByParams(paramsData, userId);
// 保存到云服务
const cdnFile = await this.saveJsonToCloud(paramsData, JSON.stringify(data));
// 插入新的临时数据
const createRes = await ctx.model.Data.create({
module_id,
params: paramsData,
data: JSON.stringify(data),
creator_id: userId,
updater_id: userId,
});
if (!createRes || !cdnFile) {
ctx.body = response.simpleError('保存数据失败,请重试');
return;
}
ctx.body = response.success(cdnFile);
}
// 审核通过->真实数据
async reviewTempData() {
const { ctx } = this;
const { data_id } = ctx.request.body;
const { userId } = ctx.base;
// 查询是否有该应用的权限
// const authRes = await this.checkAuth(app_id);
// if (!authRes) {
// ctx.body = response.simpleError('抱歉,您没有当前应用权限');
// return;
// }
const tempData = await ctx.model.Data.findOneById(data_id);
const { module_id, data, params } = tempData;
const paramsData = `n${params.substring(1)}`;
// 删除前面的真实数据记录
await ctx.model.Data.deleteDataByParams(paramsData, userId);
// 保存到云服务
const cdnFile = await this.saveJsonToCloud(paramsData, data);
// 插入新的真实数据
const createRes = await ctx.model.Data.create({
data,
module_id,
params: paramsData,
creator_id: userId,
updater_id: userId,
});
if (!createRes || !cdnFile) {
ctx.body = response.simpleError('保存数据失败,请重试');
return;
}
ctx.body = response.success(cdnFile);
}
async getTempData() {
const { ctx } = this;
const { params, module_id } = ctx.queries;
const { userId } = ctx.base;
const appIdRes = await ctx.model.Module.findAppIdById(module_id);
if (!appIdRes) {
ctx.body = response.simpleError('找不到该模块,请刷新重试');
return;
}
const { app_id } = appIdRes;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const paramsData = `y${params}`;
const dataRes = await ctx.model.Data.findOneByParams(paramsData);
if (dataRes) {
ctx.body = response.success(dataRes.dataValues);
return;
}
ctx.body = response.success(null);
return;
}
async checkAuth(app_id) {
const { ctx } = this;
const { userId } = ctx.base;
const res = await Promise.all([
ctx.model.Auth.findOneByUserIdAndAppId(userId, app_id),
ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id),
]);
return res.some(item => item);
}
async saveAzureCdn(params, data) {
try {
const res = await fetch(`${cfg.dmsUploadAPI}/saveData2CDN`, {
method: 'POST',
body: JSON.stringify({
params,
data
}),
headers: {
'Content-Type': 'application/json',
},
});
const resJson = await res.json();
console.log(resJson);
return resJson.data;
} catch (e) {
return false;
}
}
async saveAliOSS(params, data) {
const fileName = md5(params) + '.json';
const res = await oss.putJson(fileName, data);
return res;
}
// 保存json到云服务
async saveJsonToCloud(params, data) {
const { useCloud } = this.config;
if (!useCloud) return;
let cdnFile;
if (useCloud === 'OSS') {
cdnFile = await this.saveAliOSS(params, data);
} else if (this.config.useCloud === 'AZURE') {
cdnFile = await this.saveAzureCdn(params, data);
}
return cdnFile;
}
}
module.exports = DataController;
================================================
FILE: app/controller/home.js
================================================
'use strict';
const Controller = require('egg').Controller;
const moment = require('moment');
const cookie = require('cookie');
const response = require('../util/response');
class HomeController extends Controller {
async index() {
await this.ctx.render('index.js');
}
async proxy() {
const ctx = this.ctx;
// use roadhog mock api first
const url = 'http://127.0.0.1:8000' + ctx.path + '?' + ctx.querystring;
const res = await this.ctx.curl(url, {
method: this.ctx.method,
});
ctx.body = res.data;
ctx.status = res.status;
}
test() {
const { ctx } = this;
const expiration = moment(moment().add(30, 'd').format('YYYY-MM-DD 00:00:00')).unix();
ctx.cookies.set('token', 'ssasas', {
httpOnly: true,
path: '/',
expires: moment.utc(moment().add(30, 'd').format('YYYY-MM-DD 00:00:00')).toDate(),
});
ctx.body = response.success();
}
}
module.exports = HomeController;
================================================
FILE: app/controller/module.js
================================================
'use strict';
const Controller = require('egg').Controller;
const Joi = require('joi');
const _ = require('lodash');
const response = require('../util/response');
class ModuleController extends Controller {
async create() {
const { ctx } = this;
const { app_id, name_cn, name_en } = ctx.request.body;
const { userId } = ctx.base;
// eslint-disable-next-line
if (Joi.validate(name_cn, Joi.string().replace(' ', '').min(3).max(24).required()).error) {
ctx.body = response.simpleError('模块中文名为3~24个字符');
return;
}
if (Joi.validate(name_en, Joi.string().regex(/^[A-Za-z0-9\-]{3,24}$/).required()).error) {
ctx.body = response.simpleError('模块英文名必须为3~24个字,且必须为英文、数字、中横线');
return;
}
const res = await ctx.model.Module.findOneByName(app_id, name_cn, name_en);
if (res) {
ctx.body = response.simpleError('当前应用已存在该模块');
return;
}
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Module.create({
app_id,
name_cn,
name_en,
creator_id: userId,
updater_id: userId,
});
if (!data) {
ctx.body = response.simpleError('创建失败,请重试');
return;
}
ctx.body = response.success();
}
// 通过模块Id编辑(添加/更新)定义:Json Schema / UI Schema
async editDefinition() {
const { ctx } = this;
const { userId } = ctx.base;
const { module_id, definition, ui_schema } = ctx.request.body;
const appIdRes = await ctx.model.Module.findAppIdById(module_id);
if (!appIdRes) {
ctx.body = response.simpleError('找不到该模块,请刷新重试');
return;
}
const { app_id } = appIdRes;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Module.update({
definition: definition,
ui_schema: ui_schema,
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: module_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('更新失败,请重试');
return;
}
ctx.body = response.success();
}
// 编辑关联URL
async editAssociationUrl() {
const { ctx } = this;
const { userId } = ctx.base;
const { module_id, association_url } = ctx.request.body;
const appIdRes = await ctx.model.Module.findAppIdById(module_id);
if (!appIdRes) {
ctx.body = response.simpleError('找不到该模块,请刷新重试');
return;
}
const { app_id } = appIdRes;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Module.update({
association_url,
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: module_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('更新失败,请重试');
return;
}
ctx.body = response.success();
}
async list() {
const { ctx } = this;
const { app_id } = ctx.queries;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const moduleListRes = await ctx.model.Module.listByAppId(app_id);
// 获取最后更新人姓名
let userIds = [];
moduleListRes.forEach(moduleInfo => {
userIds.push(moduleInfo.creator_id, moduleInfo.updater_id);
});
userIds = _.compact(userIds);
userIds = _.uniq(userIds);
const usersInfo = await ctx.model.User.findUsersByIds(userIds);
if (!usersInfo || !usersInfo.length === 0) {
ctx.body = response.emptySuccess();
return;
}
const users = [];
usersInfo.forEach(userInfo => {
users[userInfo.id] = userInfo.real_name;
});
moduleListRes.forEach(module => {
module.key = `module-${module.id}`;
module.creator = users[module.creator_id];
module.updater = users[module.updater_id];
});
ctx.body = response.success(moduleListRes);
}
async statusList() {
const { ctx } = this;
const { app_id, params } = ctx.queries;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
// 当前模块审核状态
const moduleListRes = await ctx.model.Module.listByAppId(app_id);
const moduleReviewStatus = {}; // 审核状态: 0未配置数据,1需要审核,2已审核
await Promise.all(
await moduleListRes.map(async module => {
const paramsStr = params[0].replace(/dms_module_id/, module.id);
const [tempDataRes, dataRes] = await Promise.all([
ctx.model.Data.findOneByParams(`y${paramsStr}`),
ctx.model.Data.findOneByParams(`n${paramsStr}`)
]);
moduleReviewStatus[module.id] = 1; // 默认需要审核
if (!tempDataRes) {
moduleReviewStatus[module.id] = 0; // 未配置数据
return;
}
if (!dataRes) {
moduleReviewStatus[module.id] = 1; // 需要审核
return;
}
// 临时、正式数据都存在,比较更新时间
if (dataRes.dataValues.update_time > tempDataRes.dataValues.update_time) {
moduleReviewStatus[module.id] = 2; // 已审核
return;
}
return true;
})
);
// 获取最后更新人姓名
let userIds = [];
moduleListRes.forEach(moduleInfo => {
userIds.push(moduleInfo.creator_id, moduleInfo.updater_id);
});
userIds = _.compact(userIds);
userIds = _.uniq(userIds);
const usersInfo = await ctx.model.User.findUsersByIds(userIds);
if (!usersInfo || !usersInfo.length === 0) {
ctx.body = response.emptySuccess();
return;
}
const users = [];
usersInfo.forEach(userInfo => {
users[userInfo.id] = userInfo.real_name;
});
moduleListRes.forEach(module => {
module.key = `module-${module.id}`;
module.review_status = moduleReviewStatus[module.id];
module.creator = users[module.creator_id];
module.updater = users[module.updater_id];
});
ctx.body = response.success(moduleListRes);
}
async info() {
const { ctx } = this;
const { app_id, module_id } = ctx.queries;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Module.findOneById(module_id);
if (!data || !data.dataValues) {
// 不存在
ctx.body = response.simpleError('模块不存在');
return;
}
const { dataValues } = data;
ctx.body = response.success(dataValues);
}
async delete() {
const { ctx } = this;
const { userId } = ctx.base;
const { module_id } = ctx.request.body;
const appIdRes = await ctx.model.Module.findAppIdById(module_id);
if (!appIdRes) {
ctx.body = response.simpleError('找不到该模块,请刷新重试');
return;
}
const { app_id } = appIdRes;
const res = await ctx.model.Application.findIdByAppIdAndOwnerId(app_id, userId);
if (!res) {
ctx.body = response.simpleError('权限不足');
return;
}
const data = await ctx.model.Module.update({
soft_delete: 1,
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: module_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('删除失败,请重试');
return;
}
ctx.body = response.success();
}
async checkAuth(app_id) {
const { ctx } = this;
const { userId } = ctx.base;
const res = await Promise.all([
ctx.model.Auth.findOneByUserIdAndAppId(userId, app_id),
ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id),
]);
return res.some(item => item);
}
}
module.exports = ModuleController;
================================================
FILE: app/controller/param.js
================================================
'use strict';
const Controller = require('egg').Controller;
const Joi = require('joi');
const _ = require('lodash');
const response = require('../util/response');
class ParamController extends Controller {
async create() {
const { ctx } = this;
const { app_id, name, title } = ctx.request.body;
const { userId } = ctx.base;
if (Joi.validate(name, Joi.string().regex(/^[A-Za-z]{1,12}$/).required()).error) {
ctx.body = response.simpleError('参数名必须为1~12个英文字符,尽量简单');
return;
}
// eslint-disable-next-line
if (Joi.validate(title, Joi.string().replace(' ', '').min(1).max(24).required()).error) {
ctx.body = response.simpleError('参数标题为1~24个字符');
return;
}
const res = await ctx.model.Param.findOneByName(app_id, name, title);
if (res) {
ctx.body = response.simpleError('当前应用已存在该参数');
return;
}
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Param.create({
app_id,
name: name,
title: title,
creator_id: userId,
updater_id: userId,
});
if (!data) {
ctx.body = response.simpleError('创建失败,请重试');
return;
}
ctx.body = response.success();
}
async edit() {
const { ctx } = this;
const { userId } = ctx.base;
const { param_id, associate_url, associate_url_stop, value } = ctx.request.body;
const appIdRes = await ctx.model.Param.findAppIdById(param_id);
if (!appIdRes) {
ctx.body = response.simpleError('找不到该参数,请刷新重试');
return;
}
const { app_id } = appIdRes;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Param.update({
associate_url_stop,
associate_url,
value: JSON.stringify(value),
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: param_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('更新失败,请重试');
return;
}
ctx.body = response.success();
}
async list() {
const { ctx } = this;
const { app_id } = ctx.queries;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const paramListRes = await ctx.model.Param.listByAppId(app_id);
let userIds = [];
paramListRes.forEach(paramInfo => {
userIds.push(paramInfo.creator_id, paramInfo.updater_id);
});
userIds = _.compact(userIds);
userIds = _.uniq(userIds);
const usersInfo = await ctx.model.User.findUsersByIds(userIds);
if (!usersInfo || !usersInfo.length === 0) {
ctx.body = response.emptySuccess();
return;
}
const users = [];
usersInfo.forEach(userInfo => {
users[userInfo.id] = userInfo.real_name;
});
paramListRes.forEach(param => {
param.key = `param-${param.id}`;
param.creator = users[param.creator_id];
param.updater = users[param.updater_id];
});
ctx.body = response.success(paramListRes);
}
async selectList() {
const { ctx } = this;
const { app_id } = ctx.queries;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const paramListRes = await ctx.model.Param.listByAppId(app_id);
let userIds = [];
paramListRes.forEach(paramInfo => {
userIds.push(paramInfo.creator_id, paramInfo.updater_id);
});
userIds = _.compact(userIds);
userIds = _.uniq(userIds);
const usersInfo = await ctx.model.User.findUsersByIds(userIds);
if (!usersInfo || !usersInfo.length === 0) {
ctx.body = response.emptySuccess();
return;
}
const users = [];
usersInfo.forEach(userInfo => {
users[userInfo.id] = userInfo.real_name;
});
const res = await Promise.all(await paramListRes.map(async param => {
let value = param.value;
if (!param.associate_url_stop && param.associate_url) {
const apiData = await ctx.curl(param.associate_url);
const jsonData = JSON.parse(apiData.data.toString());
if (jsonData.data) {
value = JSON.stringify(jsonData.data);
} else {
value = JSON.stringify(jsonData);
}
}
return {
...param,
value,
creator: users[param.creator_id],
updater: users[param.updater_id],
}
}));
ctx.body = response.success(res);
}
async delete() {
const { ctx } = this;
const { userId } = ctx.base;
const { param_id } = ctx.request.body;
const appIdRes = await ctx.model.Param.findAppIdById(param_id);
if (!appIdRes) {
ctx.body = response.simpleError('找不到该参数,请刷新重试');
return;
}
const { app_id } = appIdRes;
// 查询是否有该应用的权限
const authRes = await this.checkAuth(app_id);
if (!authRes) {
ctx.body = response.simpleError('抱歉,您没有当前应用权限');
return;
}
const data = await ctx.model.Param.update({
soft_delete: 1,
updater_id: userId,
update_time: new Date(),
}, {
where: {
id: param_id,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('删除失败,请重试');
return;
}
ctx.body = response.success();
}
async info() {
const { ctx } = this;
const { userId } = ctx.base;
const { param_id } = ctx.queries;
const data = await ctx.model.Param.findOneByParamId(param_id);
if (!data || !data.dataValues) {
ctx.body = response.simpleError('没有该参数');
return;
}
const { dataValues } = data;
ctx.body = response.success(dataValues);
}
async checkAuth(app_id) {
const { ctx } = this;
const { userId } = ctx.base;
const res = await Promise.all([
ctx.model.Auth.findOneByUserIdAndAppId(userId, app_id),
ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id),
]);
return res.some(item => item);
}
}
module.exports = ParamController;
================================================
FILE: app/controller/put.js
================================================
'use strict';
const { Controller } = require('egg');
const response = require('../util/response');
const { md5 } = require('../util/utils');
const oss = require('../lib/AliOSS');
class PutController extends Controller {
async putFileByPath() {
const { ctx, config } = this;
const parts = ctx.multipart();
const formFields = {};
let part;
while ((part = await parts()) != null) {
if (part.length) {
formFields[part[0]] = part[1];
} else {
if (!part.filename) {
return;
}
const fileInfo = part.filename.split('.');
const fileType = fileInfo[fileInfo.length - 1];
const datetime = new Date().getTime();
const fileName = md5(`${fileInfo[0]}${datetime}${fileType}`);
const newFile = `${fileName}.${fileType}`;
await oss.putFileByStream(newFile, part);
ctx.body = response.success(`${config.aliCloud.ossStaticUrl}/${newFile}`);
}
}
}
}
module.exports = PutController;
================================================
FILE: app/controller/user.js
================================================
'use strict';
const Controller = require('egg').Controller;
const moment = require('moment');
const jwt = require('jsonwebtoken');
const Joi = require('joi');
const utils = require('../util/utils');
const response = require('../util/response');
class UserController extends Controller {
async login() {
const { ctx } = this;
const { username, password } = ctx.request.body;
const data = await ctx.model.User.findPasswordByUsername(username);
if (!data || !data.dataValues) {
// 不存在该用户名
ctx.body = response.simpleError('用户名或密码不正确');
return false;
}
if (data.dataValues.password !== utils.md5(password)) {
// 密码不正确
ctx.body = response.simpleError('用户名或密码不正确');
return false;
}
return this.jwtAuth(ctx, data.dataValues);
}
async create() {
const { ctx } = this;
const { username, password, employee_id, real_name, gender } = ctx.request.body;
if (Joi.validate(username, Joi.string().replace(' ', '').min(3).max(16).required()).error) {
ctx.body = response.simpleError('用户名为3~16位');
return;
}
if (Joi.validate(password, Joi.string().regex(/^.*(?=.{6,16})(?=.*\d)(?=.*[A-Za-z]+).*$/).required()).error) {
ctx.body = response.simpleError('密码为6~16位,必须包含数字、字母');
return false;
}
if (Joi.validate(real_name, Joi.string().replace(' ', '').min(2).max(10).required()).error) {
ctx.body = response.simpleError('真实姓名为2~10位');
return;
}
const data = await ctx.model.User.findPasswordByUsername(username);
if (data && data.dataValues) {
// 已存在
ctx.body = response.simpleError('用户名已存在');
return false;
}
const res = await ctx.model.User.create({
username,
employee_id,
real_name,
gender, // 性别:1 男,2:女
password: utils.md5(password),
});
if (!res || !res.dataValues) {
ctx.body = response.simpleError('注册失败,请重试');
return;
}
return this.jwtAuth(ctx, res.dataValues);
}
async edit() {
const { ctx } = this;
const { userId } = ctx.base;
const { nickname, phone_number, avatar, weibo, wechat, qq, email, profile, birthday } = ctx.request.body;
if (phone_number !== undefined && Joi.validate(phone_number, Joi.string().regex(/^((1[3-9][0-9])+\d{8})$/).required()).error) {
ctx.body = response.simpleError('手机号格式不正确');
return false;
}
const data = await ctx.model.User.update({
nickname,
phone_number,
avatar,
weibo,
wechat,
qq,
email,
profile,
birthday,
update_time: new Date(),
}, {
where: {
id: userId,
},
});
if (data[0] !== 1) {
ctx.body = response.simpleError('更新失败,请重试');
return;
}
ctx.body = response.success();
}
logout() {
const { ctx } = this;
ctx.cookies.set('token', null, {
overwrite: true,
});
ctx.body = response.success();
}
async info() {
const { ctx } = this;
const { userId } = ctx.base;
const data = await ctx.model.User.findByUserId(userId);
if (!data || !data.dataValues) {
// 不存在
ctx.cookies.set('token', null, {
overwrite: true,
});
ctx.body = response.simpleError('系统错误,请重新登录');
return;
}
const { dataValues } = data;
ctx.body = response.success({
user_id: dataValues.id,
username: dataValues.username,
nickname: dataValues.nickname,
real_name: dataValues.real_name,
type: dataValues.type,
avatar: dataValues.avatar,
employee_id: dataValues.employee_id,
});
}
async all() {
const { ctx } = this;
const allRes = await ctx.model.User.findAllUser();
const res = allRes.map(item => ({
key: `user-${item.id}`,
user_id: item.id,
real_name: item.real_name,
employee_id: item.employee_id,
}));
ctx.body = response.success(res);
}
async checkAuth(app_id) {
const { ctx } = this;
const { userId } = ctx.base;
const res = await Promise.all([
ctx.model.Auth.findOneByUserIdAndAppId(userId, app_id),
ctx.model.Application.findIdByAppIdAndOwnerId(userId, app_id),
]);
return res.some(item => item);
}
jwtAuth(ctx, user) {
const expiration = moment(moment().add(30, 'd').format('YYYY-MM-DD 00:00:00')).unix();
const token = jwt.sign({
username: user.username,
userId: user.id,
type: user.type, // 1:超管,2:开发主管;3:运营主管;4:普通开发;5:普通运营
sub: user.id,
iat: moment().unix(),
exp: expiration,
}, this.config.jwtSecret);
ctx.cookies.set('token', token, {
httpOnly: true,
path: '/',
expires: moment.utc(moment().add(30, 'd').format('YYYY-MM-DD 00:00:00')).toDate(),
});
ctx.body = response.success();
}
}
module.exports = UserController;
================================================
FILE: app/lib/AliOSS.js
================================================
const OSS = require('ali-oss');
const config = require('../../config');
class AliOSS {
constructor() {
this.oss = new OSS({
region: config.aliCloud.ossRegion,
bucket: config.aliCloud.ossBucket,
accessKeyId: config.aliCloud.assessKeyId,
accessKeySecret: config.aliCloud.secretAccessKey,
});
}
async putJson(fileName, jsonStr) {
try {
const res = await this.oss.put(fileName, new Buffer(jsonStr));
return config.aliCloud.ossStaticUrl + '/' + res.name;
} catch (e) {
console.error(e);
return false;
}
}
async putFileByStream(fileName, stream) {
try {
const res = await this.oss.putStream(fileName, stream);
return config.aliCloud.ossStaticUrl + '/' + res.name;
} catch (e) {
console.error(e);
return false;
}
}
}
const instance = new AliOSS();
Object.freeze(instance);
module.exports = instance;
================================================
FILE: app/middleware/auth.js
================================================
'use strict';
const utils = require('../util/utils');
const response = require('../util/response');
module.exports = () => {
return async function auth(ctx, next) {
if (ctx.url === '/api/userLogin' || ctx.url === '/api/userCreate' || ctx.url.substr(0, 4) !== '/api') {
await next();
return;
}
const token = ctx.cookies.get('token', {
signed: false,
});
const data = utils.checkAuth(token);
if (!data) {
ctx.status = 401;
ctx.body = response.error(401, '权限不足');
return;
}
ctx.base = data;
await next();
};
};
================================================
FILE: app/model/application.js
================================================
'use strict';
module.exports = app => {
const { STRING, INTEGER, DATE, NOW, UUIDV4 } = app.Sequelize;
const Application = app.model.define('dms_application', {
name_cn: STRING(64),
name_en: STRING(64),
description: STRING(2048),
soft_delete: {
type: INTEGER(1),
defaultValue: 0,
},
owner_id: INTEGER(11),
updater_id: INTEGER(11),
operation_manager_id: INTEGER(11),
associate_url: STRING(1024),
creator_id: INTEGER(11),
create_time: {
type: DATE,
defaultValue: NOW,
},
update_time: {
type: DATE,
defaultValue: NOW,
},
create_guid: {
type: STRING(36),
defaultValue: UUIDV4,
},
}, {
freezeTableName: true,
timestamps: false,
});
Application.list = async name => {
return await Application.findAndCountAll({
attributes: [ 'id', 'name_cn', 'name_en', 'owner_id', 'updater_id', 'operation_manager_id', 'update_time' ],
where: {
$or: [
{
name_cn: {
$like: `%${name}%`,
},
},
{
name_en: {
$like: `%${name}%`,
},
},
],
soft_delete: 0,
},
offset: (name - 1) * 15,
limit: 15,
order: [
[ 'update_time', 'DESC' ],
],
});
};
Application.findListByUserIdAndFilter = async (userId, appIds, page, name = '', pageSize = 15) => {
return await Application.findAndCountAll({
attributes: {
exclude: [ 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
$or: [
{
name_cn: {
$like: `%${name}%`,
},
},
{
name_en: {
$like: `%${name}%`,
},
},
],
id: appIds,
soft_delete: 0,
},
offset: (page - 1) * pageSize,
limit: pageSize,
order: [
[ 'update_time', 'DESC' ],
],
raw: true,
});
};
Application.findOneByName = async (name_cn, name_en) => {
return await Application.findOne({
where: {
$or: [
{
name_cn,
},
{
name_en,
},
],
},
});
};
Application.findIdByAppIdAndOwnerId = async (owner_id, app_id) => {
return await Application.findOne({
where: {
id: app_id,
owner_id,
soft_delete: 0,
},
});
};
Application.findAllList = async (owner_id, app_ids, page = 1, name = '', page_size = 15) => {
page = parseInt(page, 10);
page_size = parseInt(page_size, 10);
return await Application.findAndCountAll({
attributes: {
exclude: [ 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
$and: [
{
$or: [
{
id: app_ids,
},
{
owner_id,
},
],
},
{
$or: [
{
name_cn: {
$like: `%${name}%`,
},
},
{
name_en: {
$like: `%${name}%`,
},
},
],
}
],
soft_delete: 0,
},
offset: (page - 1) * page_size,
limit: page_size,
order: [
[ 'update_time', 'DESC' ],
],
raw: true,
});
};
// 超管列表
Application.findSuAllList = async (page = 1, name = '', page_size = 15) => {
page = parseInt(page, 10);
page_size = parseInt(page_size, 10);
return await Application.findAndCountAll({
attributes: {
exclude: [ 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
$or: [
{
name_cn: {
$like: `%${name}%`,
},
},
{
name_en: {
$like: `%${name}%`,
},
},
],
soft_delete: 0,
},
offset: (page - 1) * page_size,
limit: page_size,
order: [
[ 'update_time', 'DESC' ],
],
raw: true,
});
};
return Application;
};
================================================
FILE: app/model/auth.js
================================================
'use strict';
module.exports = app => {
const { STRING, INTEGER, DATE, NOW, UUIDV4 } = app.Sequelize;
const Auth = app.model.define('dms_auth', {
app_id: INTEGER(11),
user_id: INTEGER(11),
creator_id: INTEGER(11),
updater_id: INTEGER(11),
soft_delete: {
type: INTEGER(1),
defaultValue: 0,
},
create_time: {
type: DATE,
defaultValue: NOW,
},
update_time: {
type: DATE,
defaultValue: NOW,
},
create_guid: {
type: STRING(36),
defaultValue: UUIDV4,
},
}, {
freezeTableName: true,
timestamps: false,
});
Auth.findAppIdsByUserId = async userId => {
return await Auth.findAll({
attributes: [ 'app_id' ],
where: {
user_id: userId,
soft_delete: 0,
},
});
};
Auth.findUserIdsByAppId = async appId => {
return await Auth.findAll({
attributes: [ 'user_id' ],
where: {
app_id: appId,
soft_delete: 0,
},
raw: true,
});
};
// 用于权限验证
Auth.findOneByUserIdAndAppId = async (userId, appId) => {
return await Auth.findOne({
where: {
user_id: userId,
app_id: appId,
soft_delete: 0,
},
});
};
// 更新都需要userId
Auth.deleteAuthByAppId = async (app_id, userId) => {
return await Auth.update({
soft_delete: 1,
updater_id: userId,
update_time: new Date(),
}, {
where: {
app_id,
},
});
};
return Auth;
};
================================================
FILE: app/model/data.js
================================================
'use strict';
module.exports = app => {
const { STRING, INTEGER, DATE, NOW, UUIDV4 } = app.Sequelize;
const Data = app.model.define('dms_data', {
params: STRING(128),
module_id: INTEGER(11),
data: STRING,
creator_id: INTEGER(11),
updater_id: INTEGER(11),
is_stop: INTEGER(1),
soft_delete: {
type: INTEGER(1),
defaultValue: 0,
},
create_time: {
type: DATE,
defaultValue: NOW,
},
update_time: {
type: DATE,
defaultValue: NOW,
},
create_guid: {
type: STRING(36),
defaultValue: UUIDV4,
},
}, {
freezeTableName: true,
timestamps: false,
});
Data.findOneByParams = async params => {
return await Data.findOne({
where: {
params,
soft_delete: 0,
},
});
};
// 删除之前的数据
Data.deleteDataByParams = async (params, userId) => {
return await Data.update({
soft_delete: 1,
updater_id: userId,
update_time: new Date(),
}, {
where: {
params,
},
});
};
Data.findOneById = async id => {
return await Data.findOne({
where: {
id,
soft_delete: 0,
},
});
};
return Data;
};
================================================
FILE: app/model/module.js
================================================
'use strict';
module.exports = app => {
const { STRING, INTEGER, DATE, NOW, UUIDV4 } = app.Sequelize;
const Module = app.model.define('dms_module', {
app_id: INTEGER(11),
name_cn: STRING(64),
name_en: STRING(64),
definition: STRING,
ui_schema: STRING,
association_url: STRING(2048),
sort: INTEGER(3),
creator_id: INTEGER(11),
updater_id: INTEGER(11),
is_stop: INTEGER(1),
soft_delete: {
type: INTEGER(1),
defaultValue: 0,
},
create_time: {
type: DATE,
defaultValue: NOW,
},
update_time: {
type: DATE,
defaultValue: NOW,
},
create_guid: {
type: STRING(36),
defaultValue: UUIDV4,
},
}, {
freezeTableName: true,
timestamps: false,
});
Module.listByAppId = async appId => {
return await Module.findAll({
attributes: {
exclude: [ 'definition', 'ui_schema', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
app_id: appId,
soft_delete: 0,
},
raw: true,
});
};
Module.findOneByName = async (app_id, name_cn, name_en) => {
return await Module.findOne({
where: {
app_id,
$or: [
{
name_cn,
},
{
name_en,
},
],
},
});
};
Module.findOneById = async id => {
return await Module.findOne({
attributes: {
exclude: [ 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
id,
soft_delete: 0,
},
});
};
Module.findAppIdById = async id => {
return await Module.findOne({
attributes: [ 'app_id' ],
where: {
id,
soft_delete: 0,
},
});
};
return Module;
};
================================================
FILE: app/model/param.js
================================================
'use strict';
module.exports = app => {
const { STRING, INTEGER, DATE, NOW, UUIDV4 } = app.Sequelize;
const Param = app.model.define('dms_param', {
app_id: INTEGER(11),
name: STRING(64),
title: STRING(64),
value: STRING,
associate_url: STRING(64),
associate_url_stop: INTEGER(1),
creator_id: INTEGER(11),
updater_id: INTEGER(11),
soft_delete: {
type: INTEGER(1),
defaultValue: 0,
},
create_time: {
type: DATE,
defaultValue: NOW,
},
update_time: {
type: DATE,
defaultValue: NOW,
},
create_guid: {
type: STRING(36),
defaultValue: UUIDV4,
},
}, {
freezeTableName: true,
timestamps: false,
});
Param.findOneByName = async (app_id, name, title) => {
return await Param.findOne({
where: {
app_id,
$or: [
{
name,
},
{
title,
},
],
},
});
};
Param.findAppIdById = async id => {
return await Param.findOne({
attributes: [ 'app_id' ],
where: {
id,
soft_delete: 0,
},
});
};
Param.listByAppId = async appId => {
return await Param.findAll({
attributes: {
exclude: [ 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
app_id: appId,
soft_delete: 0,
},
raw: true,
});
};
Param.findOneByParamId = async paramId => {
return await Param.findOne({
attributes: {
exclude: [ 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
id: paramId,
soft_delete: 0,
},
});
};
return Param;
};
================================================
FILE: app/model/user.js
================================================
'use strict';
module.exports = app => {
const { STRING, INTEGER, DATE, NOW, UUIDV4 } = app.Sequelize;
const User = app.model.define('dms_user', {
employee_id: INTEGER(11),
nickname: STRING(64),
real_name: STRING(64),
phone_number: STRING(32),
username: STRING(64),
password: STRING(32),
type: INTEGER,
avatar: STRING(1024),
weibo: STRING(1024),
wechat: STRING(1024),
qq: STRING(1024),
email: STRING(1024),
profile: STRING(1024),
birthday: DATE,
gender: INTEGER(1),
soft_delete: {
type: INTEGER(1),
defaultValue: 0,
},
create_time: {
type: DATE,
defaultValue: NOW,
},
update_time: {
type: DATE,
defaultValue: NOW,
},
create_guid: {
type: STRING(36),
defaultValue: UUIDV4,
},
}, {
freezeTableName: true,
timestamps: false,
});
User.findByUsername = async username => {
return await User.findOne({
attributes: {
exclude: [ 'password', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
username,
soft_delete: 0,
},
});
};
User.findPasswordByUsername = async username => {
return await User.findOne({
attributes: [ 'id', 'username', 'type', 'password' ],
where: {
username,
soft_delete: 0,
},
});
};
User.findByUserId = async userId => {
return await User.findOne({
attributes: {
exclude: [ 'password', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
id: userId,
soft_delete: 0,
},
});
};
User.findByPhoneNumber = async phone_number => {
return await User.findOne({
attributes: {
exclude: [ 'password', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
phone_number,
soft_delete: 0,
},
});
};
User.findByLogin = async login => {
return await this.findOne({
attributes: {
exclude: [ 'password', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
login,
soft_delete: 0,
},
});
};
// 根据用户ID批量查询
User.findUsersByIds = async ids => {
return await User.findAll({
attributes: {
exclude: [ 'password', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
id: ids,
soft_delete: 0,
},
});
};
User.findAllUser = async () => {
return await User.findAll({
attributes: {
exclude: [ 'password', 'soft_delete', 'create_time', 'update_time', 'create_guid' ],
},
where: {
soft_delete: 0,
},
});
};
return User;
};
================================================
FILE: app/public/index.3e1a724e.css
================================================
#root,body,html{height:100%}.ant-layout{min-height:100%}canvas{display:block}body{text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale}.globalSpin___3vNq-{width:100%;margin:40px 0!important}.array-item{margin:20px}.ant-spin-container{overflow:visible!important}.anticon{vertical-align:0!important}@font-face{font-family:"Glyphicons Halflings";src:url("/public/assets/fonts/glyphicons-halflings-regular.eot");src:url("/public/assets/fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("/public/assets/fonts/glyphicons-halflings-regular.woff2") format("woff2"),url("/public/assets/fonts/glyphicons-halflings-regular.woff") format("woff"),url("/public/assets/fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("/public/assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"*"}.glyphicon-plus:before{content:"+"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20AC"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270F"}.glyphicon-glass:before{content:"\E001"}.glyphicon-music:before{content:"\E002"}.glyphicon-search:before{content:"\E003"}.glyphicon-heart:before{content:"\E005"}.glyphicon-star:before{content:"\E006"}.glyphicon-star-empty:before{content:"\E007"}.glyphicon-user:before{content:"\E008"}.glyphicon-film:before{content:"\E009"}.glyphicon-th-large:before{content:"\E010"}.glyphicon-th:before{content:"\E011"}.glyphicon-th-list:before{content:"\E012"}.glyphicon-ok:before{content:"\E013"}.glyphicon-remove:before{content:"\E014"}.glyphicon-zoom-in:before{content:"\E015"}.glyphicon-zoom-out:before{content:"\E016"}.glyphicon-off:before{content:"\E017"}.glyphicon-signal:before{content:"\E018"}.glyphicon-cog:before{content:"\E019"}.glyphicon-trash:before{content:"\E020"}.glyphicon-home:before{content:"\E021"}.glyphicon-file:before{content:"\E022"}.glyphicon-time:before{content:"\E023"}.glyphicon-road:before{content:"\E024"}.glyphicon-download-alt:before{content:"\E025"}.glyphicon-download:before{content:"\E026"}.glyphicon-upload:before{content:"\E027"}.glyphicon-inbox:before{content:"\E028"}.glyphicon-play-circle:before{content:"\E029"}.glyphicon-repeat:before{content:"\E030"}.glyphicon-refresh:before{content:"\E031"}.glyphicon-list-alt:before{content:"\E032"}.glyphicon-lock:before{content:"\E033"}.glyphicon-flag:before{content:"\E034"}.glyphicon-headphones:before{content:"\E035"}.glyphicon-volume-off:before{content:"\E036"}.glyphicon-volume-down:before{content:"\E037"}.glyphicon-volume-up:before{content:"\E038"}.glyphicon-qrcode:before{content:"\E039"}.glyphicon-barcode:before{content:"\E040"}.glyphicon-tag:before{content:"\E041"}.glyphicon-tags:before{content:"\E042"}.glyphicon-book:before{content:"\E043"}.glyphicon-bookmark:before{content:"\E044"}.glyphicon-print:before{content:"\E045"}.glyphicon-camera:before{content:"\E046"}.glyphicon-font:before{content:"\E047"}.glyphicon-bold:before{content:"\E048"}.glyphicon-italic:before{content:"\E049"}.glyphicon-text-height:before{content:"\E050"}.glyphicon-text-width:before{content:"\E051"}.glyphicon-align-left:before{content:"\E052"}.glyphicon-align-center:before{content:"\E053"}.glyphicon-align-right:before{content:"\E054"}.glyphicon-align-justify:before{content:"\E055"}.glyphicon-list:before{content:"\E056"}.glyphicon-indent-left:before{content:"\E057"}.glyphicon-indent-right:before{content:"\E058"}.glyphicon-facetime-video:before{content:"\E059"}.glyphicon-picture:before{content:"\E060"}.glyphicon-map-marker:before{content:"\E062"}.glyphicon-adjust:before{content:"\E063"}.glyphicon-tint:before{content:"\E064"}.glyphicon-edit:before{content:"\E065"}.glyphicon-share:before{content:"\E066"}.glyphicon-check:before{content:"\E067"}.glyphicon-move:before{content:"\E068"}.glyphicon-step-backward:before{content:"\E069"}.glyphicon-fast-backward:before{content:"\E070"}.glyphicon-backward:before{content:"\E071"}.glyphicon-play:before{content:"\E072"}.glyphicon-pause:before{content:"\E073"}.glyphicon-stop:before{content:"\E074"}.glyphicon-forward:before{content:"\E075"}.glyphicon-fast-forward:before{content:"\E076"}.glyphicon-step-forward:before{content:"\E077"}.glyphicon-eject:before{content:"\E078"}.glyphicon-chevron-left:before{content:"\E079"}.glyphicon-chevron-right:before{content:"\E080"}.glyphicon-plus-sign:before{content:"\E081"}.glyphicon-minus-sign:before{content:"\E082"}.glyphicon-remove-sign:before{content:"\E083"}.glyphicon-ok-sign:before{content:"\E084"}.glyphicon-question-sign:before{content:"\E085"}.glyphicon-info-sign:before{content:"\E086"}.glyphicon-screenshot:before{content:"\E087"}.glyphicon-remove-circle:before{content:"\E088"}.glyphicon-ok-circle:before{content:"\E089"}.glyphicon-ban-circle:before{content:"\E090"}.glyphicon-arrow-left:before{content:"\E091"}.glyphicon-arrow-right:before{content:"\E092"}.glyphicon-arrow-up:before{content:"\E093"}.glyphicon-arrow-down:before{content:"\E094"}.glyphicon-share-alt:before{content:"\E095"}.glyphicon-resize-full:before{content:"\E096"}.glyphicon-resize-small:before{content:"\E097"}.glyphicon-exclamation-sign:before{content:"\E101"}.glyphicon-gift:before{content:"\E102"}.glyphicon-leaf:before{content:"\E103"}.glyphicon-fire:before{content:"\E104"}.glyphicon-eye-open:before{content:"\E105"}.glyphicon-eye-close:before{content:"\E106"}.glyphicon-warning-sign:before{content:"\E107"}.glyphicon-plane:before{content:"\E108"}.glyphicon-calendar:before{content:"\E109"}.glyphicon-random:before{content:"\E110"}.glyphicon-comment:before{content:"\E111"}.glyphicon-magnet:before{content:"\E112"}.glyphicon-chevron-up:before{content:"\E113"}.glyphicon-chevron-down:before{content:"\E114"}.glyphicon-retweet:before{content:"\E115"}.glyphicon-shopping-cart:before{content:"\E116"}.glyphicon-folder-close:before{content:"\E117"}.glyphicon-folder-open:before{content:"\E118"}.glyphicon-resize-vertical:before{content:"\E119"}.glyphicon-resize-horizontal:before{content:"\E120"}.glyphicon-hdd:before{content:"\E121"}.glyphicon-bullhorn:before{content:"\E122"}.glyphicon-bell:before{content:"\E123"}.glyphicon-certificate:before{content:"\E124"}.glyphicon-thumbs-up:before{content:"\E125"}.glyphicon-thumbs-down:before{content:"\E126"}.glyphicon-hand-right:before{content:"\E127"}.glyphicon-hand-left:before{content:"\E128"}.glyphicon-hand-up:before{content:"\E129"}.glyphicon-hand-down:before{content:"\E130"}.glyphicon-circle-arrow-right:before{content:"\E131"}.glyphicon-circle-arrow-left:before{content:"\E132"}.glyphicon-circle-arrow-up:before{content:"\E133"}.glyphicon-circle-arrow-down:before{content:"\E134"}.glyphicon-globe:before{content:"\E135"}.glyphicon-wrench:before{content:"\E136"}.glyphicon-tasks:before{content:"\E137"}.glyphicon-filter:before{content:"\E138"}.glyphicon-briefcase:before{content:"\E139"}.glyphicon-fullscreen:before{content:"\E140"}.glyphicon-dashboard:before{content:"\E141"}.glyphicon-paperclip:before{content:"\E142"}.glyphicon-heart-empty:before{content:"\E143"}.glyphicon-link:before{content:"\E144"}.glyphicon-phone:before{content:"\E145"}.glyphicon-pushpin:before{content:"\E146"}.glyphicon-usd:before{content:"\E148"}.glyphicon-gbp:before{content:"\E149"}.glyphicon-sort:before{content:"\E150"}.glyphicon-sort-by-alphabet:before{content:"\E151"}.glyphicon-sort-by-alphabet-alt:before{content:"\E152"}.glyphicon-sort-by-order:before{content:"\E153"}.glyphicon-sort-by-order-alt:before{content:"\E154"}.glyphicon-sort-by-attributes:before{content:"\E155"}.glyphicon-sort-by-attributes-alt:before{content:"\E156"}.glyphicon-unchecked:before{content:"\E157"}.glyphicon-expand:before{content:"\E158"}.glyphicon-collapse-down:before{content:"\E159"}.glyphicon-collapse-up:before{content:"\E160"}.glyphicon-log-in:before{content:"\E161"}.glyphicon-flash:before{content:"\E162"}.glyphicon-log-out:before{content:"\E163"}.glyphicon-new-window:before{content:"\E164"}.glyphicon-record:before{content:"\E165"}.glyphicon-save:before{content:"\E166"}.glyphicon-open:before{content:"\E167"}.glyphicon-saved:before{content:"\E168"}.glyphicon-import:before{content:"\E169"}.glyphicon-export:before{content:"\E170"}.glyphicon-send:before{content:"\E171"}.glyphicon-floppy-disk:before{content:"\E172"}.glyphicon-floppy-saved:before{content:"\E173"}.glyphicon-floppy-remove:before{content:"\E174"}.glyphicon-floppy-save:before{content:"\E175"}.glyphicon-floppy-open:before{content:"\E176"}.glyphicon-credit-card:before{content:"\E177"}.glyphicon-transfer:before{content:"\E178"}.glyphicon-cutlery:before{content:"\E179"}.glyphicon-header:before{content:"\E180"}.glyphicon-compressed:before{content:"\E181"}.glyphicon-earphone:before{content:"\E182"}.glyphicon-phone-alt:before{content:"\E183"}.glyphicon-tower:before{content:"\E184"}.glyphicon-stats:before{content:"\E185"}.glyphicon-sd-video:before{content:"\E186"}.glyphicon-hd-video:before{content:"\E187"}.glyphicon-subtitles:before{content:"\E188"}.glyphicon-sound-stereo:before{content:"\E189"}.glyphicon-sound-dolby:before{content:"\E190"}.glyphicon-sound-5-1:before{content:"\E191"}.glyphicon-sound-6-1:before{content:"\E192"}.glyphicon-sound-7-1:before{content:"\E193"}.glyphicon-copyright-mark:before{content:"\E194"}.glyphicon-registration-mark:before{content:"\E195"}.glyphicon-cloud-download:before{content:"\E197"}.glyphicon-cloud-upload:before{content:"\E198"}.glyphicon-tree-conifer:before{content:"\E199"}.glyphicon-tree-deciduous:before{content:"\E200"}.glyphicon-cd:before{content:"\E201"}.glyphicon-save-file:before{content:"\E202"}.glyphicon-open-file:before{content:"\E203"}.glyphicon-level-up:before{content:"\E204"}.glyphicon-copy:before{content:"\E205"}.glyphicon-paste:before{content:"\E206"}.glyphicon-alert:before{content:"\E209"}.glyphicon-equalizer:before{content:"\E210"}.glyphicon-king:before{content:"\E211"}.glyphicon-queen:before{content:"\E212"}.glyphicon-pawn:before{content:"\E213"}.glyphicon-bishop:before{content:"\E214"}.glyphicon-knight:before{content:"\E215"}.glyphicon-baby-formula:before{content:"\E216"}.glyphicon-tent:before{content:"\26FA"}.glyphicon-blackboard:before{content:"\E218"}.glyphicon-bed:before{content:"\E219"}.glyphicon-apple:before{content:"\F8FF"}.glyphicon-erase:before{content:"\E221"}.glyphicon-hourglass:before{content:"\231B"}.glyphicon-lamp:before{content:"\E223"}.glyphicon-duplicate:before{content:"\E224"}.glyphicon-piggy-bank:before{content:"\E225"}.glyphicon-scissors:before{content:"\E226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\E227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\A5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20BD"}.glyphicon-scale:before{content:"\E230"}.glyphicon-ice-lolly:before{content:"\E231"}.glyphicon-ice-lolly-tasted:before{content:"\E232"}.glyphicon-education:before{content:"\E233"}.glyphicon-option-horizontal:before{content:"\E234"}.glyphicon-option-vertical:before{content:"\E235"}.glyphicon-menu-hamburger:before{content:"\E236"}.glyphicon-modal-window:before{content:"\E237"}.glyphicon-oil:before{content:"\E238"}.glyphicon-grain:before{content:"\E239"}.glyphicon-sunglasses:before{content:"\E240"}.glyphicon-text-size:before{content:"\E241"}.glyphicon-text-color:before{content:"\E242"}.glyphicon-text-background:before{content:"\E243"}.glyphicon-object-align-top:before{content:"\E244"}.glyphicon-object-align-bottom:before{content:"\E245"}.glyphicon-object-align-horizontal:before{content:"\E246"}.glyphicon-object-align-left:before{content:"\E247"}.glyphicon-object-align-vertical:before{content:"\E248"}.glyphicon-object-align-right:before{content:"\E249"}.glyphicon-triangle-right:before{content:"\E250"}.glyphicon-triangle-left:before{content:"\E251"}.glyphicon-triangle-bottom:before{content:"\E252"}.glyphicon-triangle-top:before{content:"\E253"}.glyphicon-console:before{content:"\E254"}.glyphicon-superscript:before{content:"\E255"}.glyphicon-subscript:before{content:"\E256"}.glyphicon-menu-left:before{content:"\E257"}.glyphicon-menu-right:before{content:"\E258"}.glyphicon-menu-down:before{content:"\E259"}.glyphicon-menu-up:before{content:"\E260"}:root{--blue:#2780e3;--indigo:#6610f2;--purple:#613d7c;--pink:#e83e8c;--red:#ff0039;--orange:#f0ad4e;--yellow:#ff7518;--green:#3fb618;--teal:#20c997;--cyan:#9954bb;--white:#fff;--gray:#868e96;--gray-dark:#373a3c;--primary:#2780e3;--secondary:#373a3c;--success:#3fb618;--info:#9954bb;--warning:#ff7518;--danger:#ff0039;--light:#f8f9fa;--dark:#373a3c;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Segoe UI","Source Sans Pro",Calibri,Candara,Arial,sans-serif;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Segoe UI","Source Sans Pro",Calibri,Candara,Arial,sans-serif;font-size:.9375rem;font-weight:400;line-height:1.5;color:#373a3c;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#2780e3;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#165ba8;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}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}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:300;line-height:1.2;color:inherit}.h1,h1{font-size:2.34375rem}.h2,h2{font-size:1.875rem}.h3,h3{font-size:1.640625rem}.h4,h4{font-size:1.40625rem}.h5,h5{font-size:1.171875rem}.h6,h6{font-size:.9375rem}.lead{font-size:1.171875rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.171875rem}.blockquote-footer{display:block;font-size:80%;color:#868e96}.blockquote-footer:before{content:"\2014 \A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#868e96}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.33333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.66666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.33333333%}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.66666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.33333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.66666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.33333333%}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.66666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.33333333%}.col-sm-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.66666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.33333333%}.col-sm-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.66666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.33333333%}.col-sm-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.66666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.33333333%}.col-sm-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.66666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.33333333%}.col-md-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.66666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.33333333%}.col-md-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.66666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.33333333%}.col-md-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.66666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.33333333%}.col-md-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.66666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.33333333%}.col-lg-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.66666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.33333333%}.col-lg-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.66666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.33333333%}.col-lg-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.66666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.33333333%}.col-lg-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.66666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.33333333%}.col-xl-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.66666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.33333333%}.col-xl-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.66666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.33333333%}.col-xl-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.66666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.33333333%}.col-xl-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.66666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c3dbf7}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#adcef4}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#c7c8c8}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#babbbb}.table-success,.table-success>td,.table-success>th{background-color:#c9ebbe}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b9e5ab}.table-info,.table-info>td,.table-info>th{background-color:#e2cfec}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d7bde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffd8be}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffc9a5}.table-danger,.table-danger>td,.table-danger>th{background-color:#ffb8c8}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ff9fb4}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c7c8c8}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#babbbb}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:30px;padding:.375rem .75rem;font-size:.9375rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:0;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#98c2f2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.25);box-shadow:0 0 0 .2rem rgba(39,128,227,.25)}.form-control::-webkit-input-placeholder{color:#868e96;opacity:1}.form-control:-ms-input-placeholder,.form-control::-ms-input-placeholder{color:#868e96;opacity:1}.form-control::-moz-placeholder{color:#868e96;opacity:1}.form-control::placeholder{color:#868e96;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:1.375rem;padding-bottom:1.375rem;margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:1.5rem;padding-bottom:1.5rem;font-size:1.171875rem;line-height:1.5}.col-form-label-sm{padding-top:1.25rem;padding-bottom:1.25rem;font-size:.8203125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#373a3c;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:3.73047rem;padding:.25rem .5rem;font-size:.8203125rem;line-height:1.5}.form-control-lg{height:4.75781rem;padding:.5rem 1rem;font-size:1.171875rem;line-height:1.5}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#868e96}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.8203125rem;line-height:1.5;color:#fff;background-color:rgba(63,182,24,.9)}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#3fb618}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#3fb618;-webkit-box-shadow:0 0 0 .2rem rgba(63,182,24,.25);box-shadow:0 0 0 .2rem rgba(63,182,24,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#3fb618}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#3fb618}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#84ea63}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#4fe21f}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(63,182,24,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(63,182,24,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#3fb618}.custom-file-input.is-valid~.custom-file-label:after,.was-validated .custom-file-input:valid~.custom-file-label:after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(63,182,24,.25);box-shadow:0 0 0 .2rem rgba(63,182,24,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.8203125rem;line-height:1.5;color:#fff;background-color:rgba(255,0,57,.9)}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#ff0039}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ff0039;-webkit-box-shadow:0 0 0 .2rem rgba(255,0,57,.25);box-shadow:0 0 0 .2rem rgba(255,0,57,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ff0039}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ff0039}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#ff809c}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#ff3361}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(255,0,57,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(255,0,57,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ff0039}.custom-file-input.is-invalid~.custom-file-label:after,.was-validated .custom-file-input:invalid~.custom-file-label:after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(255,0,57,.25);box-shadow:0 0 0 .2rem rgba(255,0,57,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-ms-flexbox;display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:.9375rem;line-height:1.5;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.25);box-shadow:0 0 0 .2rem rgba(39,128,227,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#2780e3;border-color:#2780e3}.btn-primary:hover{color:#fff;background-color:#1a6dca;border-color:#1967be}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.5);box-shadow:0 0 0 .2rem rgba(39,128,227,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#2780e3;border-color:#2780e3}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#1967be;border-color:#1761b3}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.5);box-shadow:0 0 0 .2rem rgba(39,128,227,.5)}.btn-secondary{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-secondary:hover{color:#fff;background-color:#252728;border-color:#1f2021}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#1f2021;border-color:#191a1b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-success{color:#fff;background-color:#3fb618;border-color:#3fb618}.btn-success:hover{color:#fff;background-color:#339414;border-color:#2f8912}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(63,182,24,.5);box-shadow:0 0 0 .2rem rgba(63,182,24,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#3fb618;border-color:#3fb618}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#2f8912;border-color:#2c7e11}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(63,182,24,.5);box-shadow:0 0 0 .2rem rgba(63,182,24,.5)}.btn-info{color:#fff;background-color:#9954bb;border-color:#9954bb}.btn-info:hover{color:#fff;background-color:#8542a7;border-color:#7e3f9d}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(153,84,187,.5);box-shadow:0 0 0 .2rem rgba(153,84,187,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#9954bb;border-color:#9954bb}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#7e3f9d;border-color:#773b94}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(153,84,187,.5);box-shadow:0 0 0 .2rem rgba(153,84,187,.5)}.btn-warning{color:#fff;background-color:#ff7518;border-color:#ff7518}.btn-warning:hover{color:#fff;background-color:#f16100;border-color:#e45c00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,117,24,.5);box-shadow:0 0 0 .2rem rgba(255,117,24,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#ff7518;border-color:#ff7518}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#e45c00;border-color:#d75700}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,117,24,.5);box-shadow:0 0 0 .2rem rgba(255,117,24,.5)}.btn-danger{color:#fff;background-color:#ff0039;border-color:#ff0039}.btn-danger:hover{color:#fff;background-color:#d90030;border-color:#cc002e}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,0,57,.5);box-shadow:0 0 0 .2rem rgba(255,0,57,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ff0039;border-color:#ff0039}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#cc002e;border-color:#bf002b}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,0,57,.5);box-shadow:0 0 0 .2rem rgba(255,0,57,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-dark:hover{color:#fff;background-color:#252728;border-color:#1f2021}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1f2021;border-color:#191a1b}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-outline-primary{color:#2780e3;background-color:transparent;background-image:none;border-color:#2780e3}.btn-outline-primary:hover{color:#fff;background-color:#2780e3;border-color:#2780e3}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.5);box-shadow:0 0 0 .2rem rgba(39,128,227,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#2780e3;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#2780e3;border-color:#2780e3}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.5);box-shadow:0 0 0 .2rem rgba(39,128,227,.5)}.btn-outline-secondary{color:#373a3c;background-color:transparent;background-image:none;border-color:#373a3c}.btn-outline-secondary:hover{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#373a3c;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-outline-success{color:#3fb618;background-color:transparent;background-image:none;border-color:#3fb618}.btn-outline-success:hover{color:#fff;background-color:#3fb618;border-color:#3fb618}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(63,182,24,.5);box-shadow:0 0 0 .2rem rgba(63,182,24,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#3fb618;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#3fb618;border-color:#3fb618}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(63,182,24,.5);box-shadow:0 0 0 .2rem rgba(63,182,24,.5)}.btn-outline-info{color:#9954bb;background-color:transparent;background-image:none;border-color:#9954bb}.btn-outline-info:hover{color:#fff;background-color:#9954bb;border-color:#9954bb}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(153,84,187,.5);box-shadow:0 0 0 .2rem rgba(153,84,187,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#9954bb;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#9954bb;border-color:#9954bb}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(153,84,187,.5);box-shadow:0 0 0 .2rem rgba(153,84,187,.5)}.btn-outline-warning{color:#ff7518;background-color:transparent;background-image:none;border-color:#ff7518}.btn-outline-warning:hover{color:#fff;background-color:#ff7518;border-color:#ff7518}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,117,24,.5);box-shadow:0 0 0 .2rem rgba(255,117,24,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ff7518;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#ff7518;border-color:#ff7518}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,117,24,.5);box-shadow:0 0 0 .2rem rgba(255,117,24,.5)}.btn-outline-danger{color:#ff0039;background-color:transparent;background-image:none;border-color:#ff0039}.btn-outline-danger:hover{color:#fff;background-color:#ff0039;border-color:#ff0039}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,0,57,.5);box-shadow:0 0 0 .2rem rgba(255,0,57,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ff0039;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ff0039;border-color:#ff0039}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,0,57,.5);box-shadow:0 0 0 .2rem rgba(255,0,57,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#373a3c;background-color:transparent;background-image:none;border-color:#373a3c}.btn-outline-dark:hover{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#373a3c;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#373a3c;border-color:#373a3c}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,58,60,.5);box-shadow:0 0 0 .2rem rgba(55,58,60,.5)}.btn-link{font-weight:400;color:#2780e3;background-color:transparent}.btn-link:hover{color:#165ba8;background-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#868e96;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.8203125rem;line-height:1.5;border-radius:0}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.9375rem;color:#373a3c;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15)}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#2780e3}.dropdown-item.disabled,.dropdown-item:disabled{color:#868e96;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.8203125rem;color:#868e96;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-file{-ms-flex-align:center;align-items:center}.input-group-append,.input-group-prepend,.input-group>.custom-file{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.9375rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:4.75781rem;padding:.5rem 1rem;font-size:1.171875rem;line-height:1.5}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:3.73047rem;padding:.25rem .5rem;font-size:.8203125rem;line-height:1.5}.custom-control{position:relative;display:block;min-height:1.40625rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#2780e3}.custom-control-input:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(39,128,227,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(39,128,227,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#c5ddf7}.custom-control-input:disabled~.custom-control-label{color:#868e96}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label:before{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;background-size:50% 50%}.custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#2780e3}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#2780e3}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(39,128,227,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(39,128,227,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#2780e3}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(39,128,227,.5)}.custom-select{display:inline-block;width:100%;height:4.15625rem;padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23373a3c' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#98c2f2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(152,194,242,.5);box-shadow:0 0 0 .2rem rgba(152,194,242,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#868e96;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:3.73047rem;font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:4.75781rem;font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:4.15625rem}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#98c2f2;-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.25);box-shadow:0 0 0 .2rem rgba(39,128,227,.25)}.custom-file-input:focus~.custom-file-label:after{border-color:#98c2f2}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-label{left:0;z-index:1;height:4.15625rem;background-color:#fff;border:1px solid #ced4da}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:2.15625rem;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(39,128,227,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(39,128,227,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(39,128,227,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(39,128,227,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#2780e3;border:0;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#c5ddf7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#2780e3;border:0;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#c5ddf7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#2780e3;border:0;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#c5ddf7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6}.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#868e96}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#868e96;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#2780e3}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.32421875rem;padding-bottom:.32421875rem;margin-right:1rem;font-size:1.171875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.171875rem;line-height:1;background-color:transparent;border:1px solid transparent}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#fff}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125)}.card>hr{margin-right:0;margin-left:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#868e96;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#868e96}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#2780e3;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#165ba8;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(39,128,227,.25);box-shadow:0 0 0 .2rem rgba(39,128,227,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0}.page-item.active .page-link{z-index:1;color:#fff;background-color:#2780e3;border-color:#2780e3}.page-item.disabled .page-link{color:#868e96;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.171875rem;line-height:1.5}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.8203125rem;line-height:1.5}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em}.badge-primary{color:#fff;background-color:#2780e3}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#1967be}.badge-secondary{color:#fff;background-color:#373a3c}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#1f2021}.badge-success{color:#fff;background-color:#3fb618}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#2f8912}.badge-info{color:#fff;background-color:#9954bb}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#7e3f9d}.badge-warning{color:#fff;background-color:#ff7518}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#fff;text-decoration:none;background-color:#e45c00}.badge-danger{color:#fff;background-color:#ff0039}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#cc002e}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#373a3c}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1f2021}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:0 solid transparent}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.90625rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#144376;background-color:#d4e6f9;border-color:#c3dbf7}.alert-primary hr{border-top-color:#adcef4}.alert-primary .alert-link{color:#0d2a4a}.alert-secondary{color:#1d1e1f;background-color:#d7d8d8;border-color:#c7c8c8}.alert-secondary hr{border-top-color:#babbbb}.alert-secondary .alert-link{color:#040505}.alert-success{color:#215f0c;background-color:#d9f0d1;border-color:#c9ebbe}.alert-success hr{border-top-color:#b9e5ab}.alert-success .alert-link{color:#113206}.alert-info{color:#502c61;background-color:#ebddf1;border-color:#e2cfec}.alert-info hr{border-top-color:#d7bde5}.alert-info .alert-link{color:#331c3e}.alert-warning{color:#853d0c;background-color:#ffe3d1;border-color:#ffd8be}.alert-warning hr{border-top-color:#ffc9a5}.alert-warning .alert-link{color:#562808}.alert-danger{color:#85001e;background-color:#ffccd7;border-color:#ffb8c8}.alert-danger hr{border-top-color:#ff9fb4}.alert-danger .alert-link{color:#520012}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1d1e1f;background-color:#d7d8d8;border-color:#c7c8c8}.alert-dark hr{border-top-color:#babbbb}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes___l6eE5{0%{background-position:.5rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes___l6eE5{0%{background-position:.5rem 0}to{background-position:0 0}}.progress{height:.5rem;overflow:hidden;font-size:.703125rem;background-color:#e9ecef}.progress,.progress-bar{display:-ms-flexbox;display:flex}.progress-bar{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#2780e3;-webkit-transition:width .6s ease;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:.5rem .5rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1 1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#373a3c;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:last-child{margin-bottom:0}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#868e96;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#2780e3;border-color:#2780e3}.list-group-flush .list-group-item{border-right:0;border-left:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#144376;background-color:#c3dbf7}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#144376;background-color:#adcef4}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#144376;border-color:#144376}.list-group-item-secondary{color:#1d1e1f;background-color:#c7c8c8}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#1d1e1f;background-color:#babbbb}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#1d1e1f;border-color:#1d1e1f}.list-group-item-success{color:#215f0c;background-color:#c9ebbe}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#215f0c;background-color:#b9e5ab}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#215f0c;border-color:#215f0c}.list-group-item-info{color:#502c61;background-color:#e2cfec}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#502c61;background-color:#d7bde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#502c61;border-color:#502c61}.list-group-item-warning{color:#853d0c;background-color:#ffd8be}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#853d0c;background-color:#ffc9a5}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#853d0c;border-color:#853d0c}.list-group-item-danger{color:#85001e;background-color:#ffb8c8}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#85001e;background-color:#ff9fb4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#85001e;border-color:#85001e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1d1e1f;background-color:#c7c8c8}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1d1e1f;background-color:#babbbb}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1d1e1f;border-color:#1d1e1f}.close{float:right;font-size:1.40625rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-25%);transform:translateY(-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0);transform:translate(0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:99%}.modal-dialog-centered:before{display:block;height:99vh;content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:96.5%}.modal-dialog-centered:before{height:96.5vh}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Segoe UI","Source Sans Pro",Calibri,Candara,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.8203125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:"Segoe UI","Source Sans Pro",Calibri,Candara,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.8203125rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:-1.5rem}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:after,.bs-popover-top .arrow:before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-top .arrow:after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:-1.5rem;width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:after,.bs-popover-right .arrow:before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-right .arrow:after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:-1.5rem}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:after,.bs-popover-bottom .arrow:before{border-width:0 .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-bottom .arrow:after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:-1.5rem;width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:after,.bs-popover-left .arrow:before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-left .arrow:after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.9375rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#373a3c}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateZ(0);transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateZ(0);transform:translateZ(0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{bottom:-10px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#2780e3!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#1967be!important}.bg-secondary{background-color:#373a3c!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#1f2021!important}.bg-success{background-color:#3fb618!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#2f8912!important}.bg-info{background-color:#9954bb!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#7e3f9d!important}.bg-warning{background-color:#ff7518!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#e45c00!important}.bg-danger{background-color:#ff0039!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#cc002e!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#373a3c!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1f2021!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#2780e3!important}.border-secondary{border-color:#373a3c!important}.border-success{border-color:#3fb618!important}.border-info{border-color:#9954bb!important}.border-warning{border-color:#ff7518!important}.border-danger{border-color:#ff0039!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#373a3c!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714286%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#2780e3!important}a.text-primary:focus,a.text-primary:hover{color:#1967be!important}.text-secondary{color:#373a3c!important}a.text-secondary:focus,a.text-secondary:hover{color:#1f2021!important}.text-success{color:#3fb618!important}a.text-success:focus,a.text-success:hover{color:#2f8912!important}.text-info{color:#9954bb!important}a.text-info:focus,a.text-info:hover{color:#7e3f9d!important}.text-warning{color:#ff7518!important}a.text-warning:focus,a.text-warning:hover{color:#e45c00!important}.text-danger{color:#ff0039!important}a.text-danger:focus,a.text-danger:hover{color:#cc002e!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#373a3c!important}a.text-dark:focus,a.text-dark:hover{color:#1f2021!important}.text-body{color:#373a3c!important}.text-muted{color:#868e96!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}body{-webkit-font-smoothing:antialiased}.progress .progress-bar{font-size:8px;line-height:8px}body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-variant:tabular-nums;line-height:1.5;background-color:#fff;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix{zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s infinite linear;animation:loadingCircle 1s infinite linear}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}html{--antd-wave-shadow-color:#1890ff}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;-webkit-box-shadow:0 0 0 0 #1890ff;box-shadow:0 0 0 0 #1890ff;-webkit-box-shadow:0 0 0 0 var(--antd-wave-shadow-color);box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;-webkit-animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;content:"";pointer-events:none}@-webkit-keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@-webkit-keyframes fadeEffect{to{opacity:0}}@keyframes fadeEffect{to{opacity:0}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@-webkit-keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@-webkit-keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@-webkit-keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@-webkit-keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@-webkit-keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@-webkit-keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@-webkit-keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@-webkit-keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@-webkit-keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}@keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{-webkit-transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important;transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}.ant-notification{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:fixed;z-index:1010;width:384px;max-width:calc(100vw - 32px);margin-right:24px}.ant-notification-bottomLeft,.ant-notification-topLeft{margin-right:0;margin-left:24px}.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active{-webkit-animation-name:NotificationLeftFadeIn;animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-notice{position:relative;margin-bottom:16px;padding:16px 24px;overflow:hidden;line-height:1.5;background:#fff;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.ant-notification-notice-message{display:inline-block;margin-bottom:8px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(384px - 24px * 2 - 24px - 48px - 100%);max-width:4px;background-color:transparent;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin:before{display:block;content:""}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#52c41a}.anticon.ant-notification-notice-icon-info{color:#1890ff}.anticon.ant-notification-notice-icon-warning{color:#faad14}.anticon.ant-notification-notice-icon-error{color:#f5222d}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:rgba(0,0,0,.45);outline:none}.ant-notification-notice-close:hover{color:rgba(0,0,0,.67)}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{-webkit-animation-duration:.24s;animation-duration:.24s;-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-notification-fade-appear,.ant-notification-fade-enter{opacity:0;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-notification-fade-appear,.ant-notification-fade-enter,.ant-notification-fade-leave{-webkit-animation-duration:.24s;animation-duration:.24s;-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-notification-fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-fade-enter.ant-notification-fade-enter-active{-webkit-animation-name:NotificationFadeIn;animation-name:NotificationFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{-webkit-animation-name:NotificationFadeOut;animation-name:NotificationFadeOut;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@-webkit-keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@-webkit-keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;padding-top:16px 24px;padding-bottom:16px 24px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;padding-top:16px 24px;padding-bottom:16px 24px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}.ant-spin{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;display:none;color:#1890ff;text-align:center;vertical-align:middle;opacity:0;-webkit-transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #fff}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;-webkit-transition:opacity .3s;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none\9;width:100%;height:100%;background:#fff;opacity:0;-webkit-transition:all .3s;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;overflow:hidden;opacity:.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:rgba(0,0,0,.45)}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#1890ff;border-radius:100%;-webkit-transform:scale(.75);transform:scale(.75);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;opacity:.3;-webkit-animation:antSpinMove 1s infinite linear alternate;animation:antSpinMove 1s infinite linear alternate}.ant-spin-dot-item:first-child{top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}.ant-spin-dot-spin{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:antRotate 1.2s infinite linear;animation:antRotate 1.2s infinite linear}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-spin-blur{background:#fff;opacity:.5}}@-webkit-keyframes antSpinMove{to{opacity:1}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}.ant-btn{line-height:1.499;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.015);box-shadow:0 2px 0 rgba(0,0,0,.015);cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:manipulation;touch-action:manipulation;height:32px;padding:0 15px;font-size:14px;border-radius:4px;color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;-webkit-box-shadow:none;box-shadow:none}.ant-btn.disabled,.ant-btn[disabled]{cursor:not-allowed}.ant-btn.disabled>*,.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:0 15px;font-size:16px;border-radius:4px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:4px}.ant-btn>a:only-child{color:currentColor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:focus,.ant-btn:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.ant-btn:focus>a:only-child,.ant-btn:hover>a:only-child{color:currentColor}.ant-btn:focus>a:only-child:after,.ant-btn:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn.active,.ant-btn:active{color:#096dd9;background-color:#fff;border-color:#096dd9}.ant-btn.active>a:only-child,.ant-btn:active>a:only-child{color:currentColor}.ant-btn.active>a:only-child:after,.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-disabled,.ant-btn-disabled.active,.ant-btn-disabled:active,.ant-btn-disabled:focus,.ant-btn-disabled:hover,.ant-btn.disabled,.ant-btn.disabled.active,.ant-btn.disabled:active,.ant-btn.disabled:focus,.ant-btn.disabled:hover,.ant-btn[disabled],.ant-btn[disabled].active,.ant-btn[disabled]:active,.ant-btn[disabled]:focus,.ant-btn[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-disabled.active>a:only-child,.ant-btn-disabled:active>a:only-child,.ant-btn-disabled:focus>a:only-child,.ant-btn-disabled:hover>a:only-child,.ant-btn-disabled>a:only-child,.ant-btn.disabled.active>a:only-child,.ant-btn.disabled:active>a:only-child,.ant-btn.disabled:focus>a:only-child,.ant-btn.disabled:hover>a:only-child,.ant-btn.disabled>a:only-child,.ant-btn[disabled].active>a:only-child,.ant-btn[disabled]:active>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]>a:only-child{color:currentColor}.ant-btn-disabled.active>a:only-child:after,.ant-btn-disabled:active>a:only-child:after,.ant-btn-disabled:focus>a:only-child:after,.ant-btn-disabled:hover>a:only-child:after,.ant-btn-disabled>a:only-child:after,.ant-btn.disabled.active>a:only-child:after,.ant-btn.disabled:active>a:only-child:after,.ant-btn.disabled:focus>a:only-child:after,.ant-btn.disabled:hover>a:only-child:after,.ant-btn.disabled>a:only-child:after,.ant-btn[disabled].active>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn.active,.ant-btn:active,.ant-btn:focus,.ant-btn:hover{text-decoration:none;background:#fff}.ant-btn>i,.ant-btn>span{display:inline-block;pointer-events:none}.ant-btn-primary{color:#fff;background-color:#1890ff;border-color:#1890ff;text-shadow:0 -1px 0 rgba(0,0,0,.12);-webkit-box-shadow:0 2px 0 rgba(0,0,0,.045);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:focus,.ant-btn-primary:hover{color:#fff;background-color:#40a9ff;border-color:#40a9ff}.ant-btn-primary:focus>a:only-child,.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-primary:focus>a:only-child:after,.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary.active,.ant-btn-primary:active{color:#fff;background-color:#096dd9;border-color:#096dd9}.ant-btn-primary.active>a:only-child,.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-primary.active>a:only-child:after,.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary-disabled,.ant-btn-primary-disabled.active,.ant-btn-primary-disabled:active,.ant-btn-primary-disabled:focus,.ant-btn-primary-disabled:hover,.ant-btn-primary.disabled,.ant-btn-primary.disabled.active,.ant-btn-primary.disabled:active,.ant-btn-primary.disabled:focus,.ant-btn-primary.disabled:hover,.ant-btn-primary[disabled],.ant-btn-primary[disabled].active,.ant-btn-primary[disabled]:active,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-primary-disabled.active>a:only-child,.ant-btn-primary-disabled:active>a:only-child,.ant-btn-primary-disabled:focus>a:only-child,.ant-btn-primary-disabled:hover>a:only-child,.ant-btn-primary-disabled>a:only-child,.ant-btn-primary.disabled.active>a:only-child,.ant-btn-primary.disabled:active>a:only-child,.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-primary.disabled>a:only-child,.ant-btn-primary[disabled].active>a:only-child,.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-primary-disabled.active>a:only-child:after,.ant-btn-primary-disabled:active>a:only-child:after,.ant-btn-primary-disabled:focus>a:only-child:after,.ant-btn-primary-disabled:hover>a:only-child:after,.ant-btn-primary-disabled>a:only-child:after,.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-primary.disabled>a:only-child:after,.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#40a9ff;border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#40a9ff}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:rgba(0,0,0,.65);background-color:transparent;border-color:#d9d9d9}.ant-btn-ghost>a:only-child{color:currentColor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:focus,.ant-btn-ghost:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-ghost:focus>a:only-child,.ant-btn-ghost:hover>a:only-child{color:currentColor}.ant-btn-ghost:focus>a:only-child:after,.ant-btn-ghost:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost.active,.ant-btn-ghost:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-ghost.active>a:only-child,.ant-btn-ghost:active>a:only-child{color:currentColor}.ant-btn-ghost.active>a:only-child:after,.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost-disabled,.ant-btn-ghost-disabled.active,.ant-btn-ghost-disabled:active,.ant-btn-ghost-disabled:focus,.ant-btn-ghost-disabled:hover,.ant-btn-ghost.disabled,.ant-btn-ghost.disabled.active,.ant-btn-ghost.disabled:active,.ant-btn-ghost.disabled:focus,.ant-btn-ghost.disabled:hover,.ant-btn-ghost[disabled],.ant-btn-ghost[disabled].active,.ant-btn-ghost[disabled]:active,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-ghost-disabled.active>a:only-child,.ant-btn-ghost-disabled:active>a:only-child,.ant-btn-ghost-disabled:focus>a:only-child,.ant-btn-ghost-disabled:hover>a:only-child,.ant-btn-ghost-disabled>a:only-child,.ant-btn-ghost.disabled.active>a:only-child,.ant-btn-ghost.disabled:active>a:only-child,.ant-btn-ghost.disabled:focus>a:only-child,.ant-btn-ghost.disabled:hover>a:only-child,.ant-btn-ghost.disabled>a:only-child,.ant-btn-ghost[disabled].active>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]>a:only-child{color:currentColor}.ant-btn-ghost-disabled.active>a:only-child:after,.ant-btn-ghost-disabled:active>a:only-child:after,.ant-btn-ghost-disabled:focus>a:only-child:after,.ant-btn-ghost-disabled:hover>a:only-child:after,.ant-btn-ghost-disabled>a:only-child:after,.ant-btn-ghost.disabled.active>a:only-child:after,.ant-btn-ghost.disabled:active>a:only-child:after,.ant-btn-ghost.disabled:focus>a:only-child:after,.ant-btn-ghost.disabled:hover>a:only-child:after,.ant-btn-ghost.disabled>a:only-child:after,.ant-btn-ghost[disabled].active>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentColor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:focus,.ant-btn-dashed:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.ant-btn-dashed:focus>a:only-child,.ant-btn-dashed:hover>a:only-child{color:currentColor}.ant-btn-dashed:focus>a:only-child:after,.ant-btn-dashed:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed.active,.ant-btn-dashed:active{color:#096dd9;background-color:#fff;border-color:#096dd9}.ant-btn-dashed.active>a:only-child,.ant-btn-dashed:active>a:only-child{color:currentColor}.ant-btn-dashed.active>a:only-child:after,.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed-disabled,.ant-btn-dashed-disabled.active,.ant-btn-dashed-disabled:active,.ant-btn-dashed-disabled:focus,.ant-btn-dashed-disabled:hover,.ant-btn-dashed.disabled,.ant-btn-dashed.disabled.active,.ant-btn-dashed.disabled:active,.ant-btn-dashed.disabled:focus,.ant-btn-dashed.disabled:hover,.ant-btn-dashed[disabled],.ant-btn-dashed[disabled].active,.ant-btn-dashed[disabled]:active,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-dashed-disabled.active>a:only-child,.ant-btn-dashed-disabled:active>a:only-child,.ant-btn-dashed-disabled:focus>a:only-child,.ant-btn-dashed-disabled:hover>a:only-child,.ant-btn-dashed-disabled>a:only-child,.ant-btn-dashed.disabled.active>a:only-child,.ant-btn-dashed.disabled:active>a:only-child,.ant-btn-dashed.disabled:focus>a:only-child,.ant-btn-dashed.disabled:hover>a:only-child,.ant-btn-dashed.disabled>a:only-child,.ant-btn-dashed[disabled].active>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]>a:only-child{color:currentColor}.ant-btn-dashed-disabled.active>a:only-child:after,.ant-btn-dashed-disabled:active>a:only-child:after,.ant-btn-dashed-disabled:focus>a:only-child:after,.ant-btn-dashed-disabled:hover>a:only-child:after,.ant-btn-dashed-disabled>a:only-child:after,.ant-btn-dashed.disabled.active>a:only-child:after,.ant-btn-dashed.disabled:active>a:only-child:after,.ant-btn-dashed.disabled:focus>a:only-child:after,.ant-btn-dashed.disabled:hover>a:only-child:after,.ant-btn-dashed.disabled>a:only-child:after,.ant-btn-dashed[disabled].active>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#f5222d;background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:hover{color:#fff;background-color:#ff4d4f;border-color:#ff4d4f}.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:focus{color:#ff4d4f;background-color:#fff;border-color:#ff4d4f}.ant-btn-danger:focus>a:only-child{color:currentColor}.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger.active,.ant-btn-danger:active{color:#fff;background-color:#cf1322;border-color:#cf1322}.ant-btn-danger.active>a:only-child,.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-danger.active>a:only-child:after,.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger-disabled,.ant-btn-danger-disabled.active,.ant-btn-danger-disabled:active,.ant-btn-danger-disabled:focus,.ant-btn-danger-disabled:hover,.ant-btn-danger.disabled,.ant-btn-danger.disabled.active,.ant-btn-danger.disabled:active,.ant-btn-danger.disabled:focus,.ant-btn-danger.disabled:hover,.ant-btn-danger[disabled],.ant-btn-danger[disabled].active,.ant-btn-danger[disabled]:active,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-danger-disabled.active>a:only-child,.ant-btn-danger-disabled:active>a:only-child,.ant-btn-danger-disabled:focus>a:only-child,.ant-btn-danger-disabled:hover>a:only-child,.ant-btn-danger-disabled>a:only-child,.ant-btn-danger.disabled.active>a:only-child,.ant-btn-danger.disabled:active>a:only-child,.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-danger.disabled>a:only-child,.ant-btn-danger[disabled].active>a:only-child,.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-danger-disabled.active>a:only-child:after,.ant-btn-danger-disabled:active>a:only-child:after,.ant-btn-danger-disabled:focus>a:only-child:after,.ant-btn-danger-disabled:hover>a:only-child:after,.ant-btn-danger-disabled>a:only-child:after,.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-danger.disabled>a:only-child:after,.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#1890ff;background-color:transparent;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ant-btn-link>a:only-child{color:currentColor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:focus,.ant-btn-link:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-link:focus>a:only-child,.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-link:focus>a:only-child:after,.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link.active,.ant-btn-link:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-link.active>a:only-child,.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-link.active>a:only-child:after,.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link-disabled,.ant-btn-link-disabled.active,.ant-btn-link-disabled:active,.ant-btn-link-disabled:focus,.ant-btn-link-disabled:hover,.ant-btn-link.disabled,.ant-btn-link.disabled.active,.ant-btn-link.disabled:active,.ant-btn-link.disabled:focus,.ant-btn-link.disabled:hover,.ant-btn-link[disabled],.ant-btn-link[disabled].active,.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-link:active,.ant-btn-link:focus,.ant-btn-link:hover{border-color:transparent}.ant-btn-link-disabled,.ant-btn-link-disabled.active,.ant-btn-link-disabled:active,.ant-btn-link-disabled:focus,.ant-btn-link-disabled:hover,.ant-btn-link.disabled,.ant-btn-link.disabled.active,.ant-btn-link.disabled:active,.ant-btn-link.disabled:focus,.ant-btn-link.disabled:hover,.ant-btn-link[disabled],.ant-btn-link[disabled].active,.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background-color:transparent;border-color:transparent;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-link-disabled.active>a:only-child,.ant-btn-link-disabled:active>a:only-child,.ant-btn-link-disabled:focus>a:only-child,.ant-btn-link-disabled:hover>a:only-child,.ant-btn-link-disabled>a:only-child,.ant-btn-link.disabled.active>a:only-child,.ant-btn-link.disabled:active>a:only-child,.ant-btn-link.disabled:focus>a:only-child,.ant-btn-link.disabled:hover>a:only-child,.ant-btn-link.disabled>a:only-child,.ant-btn-link[disabled].active>a:only-child,.ant-btn-link[disabled]:active>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-link-disabled.active>a:only-child:after,.ant-btn-link-disabled:active>a:only-child:after,.ant-btn-link-disabled:focus>a:only-child:after,.ant-btn-link-disabled:hover>a:only-child:after,.ant-btn-link-disabled>a:only-child:after,.ant-btn-link.disabled.active>a:only-child:after,.ant-btn-link.disabled:active>a:only-child:after,.ant-btn-link.disabled:focus>a:only-child:after,.ant-btn-link.disabled:hover>a:only-child:after,.ant-btn-link.disabled>a:only-child:after,.ant-btn-link[disabled].active>a:only-child:after,.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-round{height:32px;padding:0 16px;font-size:16px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:0 20px;font-size:18px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-circle,.ant-btn-circle-outline{width:32px;height:32px;padding:0;font-size:16px;border-radius:50%}.ant-btn-circle-outline.ant-btn-lg,.ant-btn-circle.ant-btn-lg{width:40px;height:40px;padding:0;font-size:18px;border-radius:50%}.ant-btn-circle-outline.ant-btn-sm,.ant-btn-circle.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#fff;border-radius:inherit;opacity:.35;-webkit-transition:opacity .2s;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-minus>svg,.ant-btn .anticon.anticon-plus>svg{shape-rendering:optimizeSpeed}.ant-btn.ant-btn-loading{position:relative;pointer-events:none}.ant-btn.ant-btn-loading:before{display:block}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:29px}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon:not(:last-child){margin-left:-14px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:24px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon{margin-left:-17px}.ant-btn-group{display:inline-block}.ant-btn-group,.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn.active,.ant-btn-group>.ant-btn:active,.ant-btn-group>.ant-btn:focus,.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn.active,.ant-btn-group>span>.ant-btn:active,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>span>.ant-btn:hover{z-index:2}.ant-btn-group>.ant-btn:disabled,.ant-btn-group>span>.ant-btn:disabled{z-index:0}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:0 15px;font-size:16px;border-radius:0;line-height:38px}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0;line-height:22px}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn+.ant-btn-group,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group,.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group span+.ant-btn{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child,.ant-btn-group>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group-sm>.ant-btn:only-child,.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn:not(.ant-btn-circle):not(.ant-btn-circle-outline).ant-btn-icon-only{padding-right:8px;padding-left:8px}.ant-btn:active>span,.ant-btn:focus>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn-background-ghost{color:#fff;background:transparent!important;border-color:#fff}.ant-btn-background-ghost.ant-btn-primary{color:#1890ff;background-color:transparent;border-color:#1890ff;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:focus,.ant-btn-background-ghost.ant-btn-primary:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary.active,.ant-btn-background-ghost.ant-btn-primary:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary-disabled,.ant-btn-background-ghost.ant-btn-primary-disabled.active,.ant-btn-background-ghost.ant-btn-primary-disabled:active,.ant-btn-background-ghost.ant-btn-primary-disabled:focus,.ant-btn-background-ghost.ant-btn-primary-disabled:hover,.ant-btn-background-ghost.ant-btn-primary.disabled,.ant-btn-background-ghost.ant-btn-primary.disabled.active,.ant-btn-background-ghost.ant-btn-primary.disabled:active,.ant-btn-background-ghost.ant-btn-primary.disabled:focus,.ant-btn-background-ghost.ant-btn-primary.disabled:hover,.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled].active,.ant-btn-background-ghost.ant-btn-primary[disabled]:active,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#f5222d;background-color:transparent;border-color:#f5222d;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:focus,.ant-btn-background-ghost.ant-btn-danger:hover{color:#ff4d4f;background-color:transparent;border-color:#ff4d4f}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger.active,.ant-btn-background-ghost.ant-btn-danger:active{color:#cf1322;background-color:transparent;border-color:#cf1322}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger-disabled,.ant-btn-background-ghost.ant-btn-danger-disabled.active,.ant-btn-background-ghost.ant-btn-danger-disabled:active,.ant-btn-background-ghost.ant-btn-danger-disabled:focus,.ant-btn-background-ghost.ant-btn-danger-disabled:hover,.ant-btn-background-ghost.ant-btn-danger.disabled,.ant-btn-background-ghost.ant-btn-danger.disabled.active,.ant-btn-background-ghost.ant-btn-danger.disabled:active,.ant-btn-background-ghost.ant-btn-danger.disabled:focus,.ant-btn-background-ghost.ant-btn-danger.disabled:hover,.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled].active,.ant-btn-background-ghost.ant-btn-danger[disabled]:active,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link{color:#1890ff;background-color:transparent;border-color:transparent;text-shadow:none;color:#fff}.ant-btn-background-ghost.ant-btn-link>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link:focus,.ant-btn-background-ghost.ant-btn-link:hover{color:#40a9ff;background-color:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-link:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link.active,.ant-btn-background-ghost.ant-btn-link:active{color:#096dd9;background-color:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-link.active>a:only-child,.ant-btn-background-ghost.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link-disabled,.ant-btn-background-ghost.ant-btn-link-disabled.active,.ant-btn-background-ghost.ant-btn-link-disabled:active,.ant-btn-background-ghost.ant-btn-link-disabled:focus,.ant-btn-background-ghost.ant-btn-link-disabled:hover,.ant-btn-background-ghost.ant-btn-link.disabled,.ant-btn-background-ghost.ant-btn-link.disabled.active,.ant-btn-background-ghost.ant-btn-link.disabled:active,.ant-btn-background-ghost.ant-btn-link.disabled:focus,.ant-btn-background-ghost.ant-btn-link.disabled:hover,.ant-btn-background-ghost.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-link[disabled].active,.ant-btn-background-ghost.ant-btn-link[disabled]:active,.ant-btn-background-ghost.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-link-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn-block{width:100%}.ant-btn:empty{vertical-align:top}a.ant-btn{line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.exception___24x5-{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:100%}.exception___24x5- .imgBlock___1sK3a{-ms-flex:0 0 62.5%;flex:0 0 62.5%;width:62.5%;padding-right:152px;zoom:1}.exception___24x5- .imgBlock___1sK3a:after,.exception___24x5- .imgBlock___1sK3a:before{content:" ";display:table}.exception___24x5- .imgBlock___1sK3a:after{clear:both;visibility:hidden;font-size:0;height:0}.exception___24x5- .imgEle___26JRS{height:360px;width:100%;max-width:430px;float:right;background-repeat:no-repeat;background-position:50% 50%;background-size:contain}.exception___24x5- .content___Kw_fJ{-ms-flex:auto;flex:auto}.exception___24x5- .content___Kw_fJ h1{color:#434e59;font-size:72px;font-weight:600;line-height:72px;margin-bottom:24px}.exception___24x5- .content___Kw_fJ .desc___2EPaP{color:rgba(0,0,0,.45);font-size:20px;line-height:28px;margin-bottom:16px}.exception___24x5- .content___Kw_fJ .actions___1Snvf button:not(:last-child){margin-right:8px}@media screen and (max-width:1200px){.exception___24x5- .imgBlock___1sK3a{padding-right:88px}}@media screen and (max-width:576px){.exception___24x5-{display:block;text-align:center}.exception___24x5- .imgBlock___1sK3a{padding-right:0;margin:0 auto 24px}}@media screen and (max-width:480px){.exception___24x5- .imgBlock___1sK3a{margin-bottom:-24px;overflow:hidden}}.ant-message{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:fixed;top:16px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice:first-child{margin-top:-8px}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#fff;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15);pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#f5222d}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#1890ff}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.move-up-leave.move-up-leave-active{overflow:hidden;-webkit-animation-name:MessageMoveOut;animation-name:MessageMoveOut;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}.ant-layout{display:-ms-flexbox;display:flex;-ms-flex:auto;flex:auto;-ms-flex-direction:column;flex-direction:column;min-height:0;background:#f0f2f5}.ant-layout,.ant-layout *{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-layout.ant-layout-has-sider{-ms-flex-direction:row;flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{overflow-x:hidden}.ant-layout-footer,.ant-layout-header{-ms-flex:0 0 auto;flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;line-height:64px;background:#001529}.ant-layout-footer{padding:24px 50px;color:rgba(0,0,0,.65);font-size:14px;background:#f0f2f5}.ant-layout-content{-ms-flex:auto;flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#001529;-webkit-transition:all .2s;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{-ms-flex-order:1;order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#002140;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#001529;border-radius:0 4px 4px 0;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-layout-sider-zero-width-trigger:hover{background:#192c3e}.ant-layout-sider-zero-width-trigger-right{left:-36px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:rgba(0,0,0,.65);background:#fff}.ant-tooltip{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;z-index:1060;display:block;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightBottom,.ant-tooltip-placement-rightTop{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftBottom,.ant-tooltip-placement-leftTop{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:rgba(0,0,0,.75);border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:3px;border-width:5px 5px 0;border-top-color:rgba(0,0,0,.75)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;margin-left:-5px}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:16px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:16px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow{left:3px;border-width:5px 5px 5px 0;border-right-color:rgba(0,0,0,.75)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;margin-top:-5px}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:8px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:8px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow{right:3px;border-width:5px 0 5px 5px;border-left-color:rgba(0,0,0,.75)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;margin-top:-5px}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:8px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:8px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:3px;border-width:0 5px 5px;border-bottom-color:rgba(0,0,0,.75)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;margin-left:-5px}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:16px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:16px}.ant-divider{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";background:#e8e8e8}.ant-divider,.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;width:1px;height:.9em;margin:0 8px;vertical-align:middle}.ant-divider-horizontal{display:block;clear:both;width:100%;min-width:100%;height:1px;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text,.ant-divider-horizontal.ant-divider-with-text-left,.ant-divider-horizontal.ant-divider-with-text-right{display:table;margin:16px 0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-align:center;background:transparent}.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-left:before,.ant-divider-horizontal.ant-divider-with-text-right:after,.ant-divider-horizontal.ant-divider-with-text-right:before,.ant-divider-horizontal.ant-divider-with-text:after,.ant-divider-horizontal.ant-divider-with-text:before{position:relative;top:50%;display:table-cell;width:50%;border-top:1px solid #e8e8e8;-webkit-transform:translateY(50%);transform:translateY(50%);content:""}.ant-divider-horizontal.ant-divider-with-text-left .ant-divider-inner-text,.ant-divider-horizontal.ant-divider-with-text-right .ant-divider-inner-text{display:inline-block;padding:0 10px}.ant-divider-horizontal.ant-divider-with-text-left:before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-right:before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 24px}.ant-divider-dashed{background:none;border-top:1px dashed #e8e8e8}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed{border-top:0}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before{border-style:dashed none none}.header___3akN7{height:64px;padding:0 12px 0 0;background:#fff;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08);box-shadow:0 1px 4px rgba(0,21,41,.08);position:relative}.ant-layout{min-height:100vh;overflow-x:hidden}.logo___uc7un{height:64px;line-height:58px;vertical-align:top;display:inline-block;padding:0 0 0 24px;cursor:pointer;font-size:20px}.logo___uc7un img{display:inline-block;vertical-align:middle}.menu___t5C2Y .anticon{margin-right:8px}.menu___t5C2Y .ant-dropdown-menu-item{width:160px}i.trigger___TbClB{font-size:20px;line-height:64px;cursor:pointer;-webkit-transition:all .3s,padding 0s;transition:all .3s,padding 0s;padding:0 24px}i.trigger___TbClB:hover{background:#e6f7ff}.right___3W9p9{float:right;height:100%}.right___3W9p9 .action___1F_vS{cursor:pointer;padding:0 12px;display:inline-block;-webkit-transition:all .3s;transition:all .3s;height:100%}.right___3W9p9 .action___1F_vS>i{font-size:16px;vertical-align:middle;color:rgba(0,0,0,.65)}.right___3W9p9 .action___1F_vS.ant-popover-open,.right___3W9p9 .action___1F_vS:hover{background:#e6f7ff}.right___3W9p9 .search___1-4-m{padding:0;margin:0 12px}.right___3W9p9 .search___1-4-m:hover{background:transparent}.right___3W9p9 .account___q23_b .avatar___3seBz{margin:20px 8px 20px 0;color:#1890ff;background:hsla(0,0%,100%,.85);vertical-align:middle}@media only screen and (max-width:768px){.header___3akN7 .ant-divider-vertical{vertical-align:unset}.header___3akN7 .name___391ZN{display:none}.header___3akN7 i.trigger___TbClB{padding:0 12px}.header___3akN7 .logo___uc7un{padding-right:12px;position:relative}.header___3akN7 .right___3W9p9{position:absolute;right:12px;top:0;background:#fff}.header___3akN7 .right___3W9p9 .account___q23_b .avatar___3seBz{margin-right:0}}.globalFooter___3YFOM{padding:0 16px;margin:48px 0 24px;text-align:center}.globalFooter___3YFOM .links___2hMQM{margin-bottom:8px}.globalFooter___3YFOM .links___2hMQM a{color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}.globalFooter___3YFOM .links___2hMQM a:not(:last-child){margin-right:40px}.globalFooter___3YFOM .links___2hMQM a:hover{color:rgba(0,0,0,.65)}.globalFooter___3YFOM .copyright___3aFZn{color:rgba(0,0,0,.45);font-size:14px}.drawer{position:fixed;top:0;width:100%;height:100%;z-index:9999;pointer-events:none}.drawer>*{-webkit-transition:opacity .3s cubic-bezier(.78,.14,.15,.86),box-shaow .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:opacity .3s cubic-bezier(.78,.14,.15,.86),box-shaow .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),box-shaow .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),box-shaow .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86)}.drawer-mask{background:#000;opacity:0;width:100%;height:100%;top:0}.drawer-content-wrapper,.drawer-mask{position:absolute}.drawer-content{background:#fff;overflow:auto;z-index:1;position:relative}.drawer-handle{position:absolute;top:72px;width:41px;height:40px;cursor:pointer;pointer-events:auto;z-index:0;text-align:center;line-height:40px;font-size:16px;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:#fff}.drawer-handle-icon{width:14px;height:2px;background:#333;position:relative;-webkit-transition:background .3s cubic-bezier(.78,.14,.15,.86);transition:background .3s cubic-bezier(.78,.14,.15,.86)}.drawer-handle-icon:after,.drawer-handle-icon:before{content:"";display:block;position:absolute;background:#333;width:100%;height:2px;-webkit-transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86)}.drawer-handle-icon:before{top:-5px}.drawer-handle-icon:after{top:5px}.drawer-left .drawer-content,.drawer-left .drawer-content-wrapper,.drawer-right .drawer-content,.drawer-right .drawer-content-wrapper{height:100%}.drawer-left .drawer-handle{right:-40px;border-radius:0 4px 4px 0}.drawer-left .drawer-handle,.drawer-left.drawer-open .drawer-wrapper{-webkit-box-shadow:2px 0 8px rgba(0,0,0,.15);box-shadow:2px 0 8px rgba(0,0,0,.15)}.drawer-right .drawer-content-wrapper{right:0}.drawer-right .drawer-handle{left:-40px;border-radius:4px 0 0 4px}.drawer-right .drawer-handle,.drawer-right.drawer-open .drawer-wrapper{-webkit-box-shadow:-2px 0 8px rgba(0,0,0,.15);box-shadow:-2px 0 8px rgba(0,0,0,.15)}.drawer-bottom .drawer-content,.drawer-bottom .drawer-content-wrapper,.drawer-top .drawer-content,.drawer-top .drawer-content-wrapper{width:100%}.drawer-bottom .drawer-handle,.drawer-top .drawer-handle{left:50%;margin-left:-20px}.drawer-top .drawer-handle{top:auto;bottom:-40px;border-radius:0 0 4px 4px}.drawer-top .drawer-handle,.drawer-top.drawer-open .drawer-wrapper{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.drawer-bottom .drawer-content-wrapper{bottom:0}.drawer-bottom .drawer-handle{top:-40px;border-radius:4px 4px 0 0}.drawer-bottom .drawer-handle,.drawer-bottom.drawer-open .drawer-wrapper{-webkit-box-shadow:0 -2px 8px rgba(0,0,0,.15);box-shadow:0 -2px 8px rgba(0,0,0,.15)}.drawer.drawer-open>*{pointer-events:auto}.drawer.drawer-open .drawer-mask{opacity:.3}.drawer.drawer-open .drawer-handle-icon{background:transparent}.drawer.drawer-open .drawer-handle-icon:before{-webkit-transform:translateY(5px) rotate(45deg);transform:translateY(5px) rotate(45deg)}.drawer.drawer-open .drawer-handle-icon:after{-webkit-transform:translateY(-5px) rotate(-45deg);transform:translateY(-5px) rotate(-45deg)}.ant-menu{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin-bottom:0;padding-left:0;color:rgba(0,0,0,.65);line-height:0;list-style:none;background:#fff;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-transition:background .3s,width .2s;transition:background .3s,width .2s;zoom:1}.ant-menu:after,.ant-menu:before{display:table;content:""}.ant-menu:after{clear:both}.ant-menu ol,.ant-menu ul{margin:0;padding:0;list-style:none}.ant-menu-hidden{display:none}.ant-menu-item-group-title{padding:8px 16px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5;-webkit-transition:all .3s;transition:all .3s}.ant-menu-submenu,.ant-menu-submenu-inline{-webkit-transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1);transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#e6f7ff}.ant-menu-submenu .ant-menu-sub{cursor:auto;-webkit-transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item>a{display:block;color:rgba(0,0,0,.65)}.ant-menu-item>a:hover{color:#1890ff}.ant-menu-item>a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:""}.ant-menu-item-divider{height:1px;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-menu-item-active,.ant-menu-item:hover,.ant-menu-submenu-active,.ant-menu-submenu-title:hover,.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open{color:#1890ff}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected>a,.ant-menu-item-selected>a:hover{color:#1890ff}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#e6f7ff}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #e8e8e8}.ant-menu-vertical-right{border-left:1px solid #e8e8e8}.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub,.ant-menu-vertical.ant-menu-sub{min-width:160px;padding:0;border-right:0;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item,.ant-menu-vertical.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{-webkit-transform-origin:0 0;transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;margin-right:10px;font-size:14px;-webkit-transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1);transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{opacity:1;-webkit-transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1)}.ant-menu>.ant-menu-item-divider{height:1px;margin:1px 0;padding:0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-menu-submenu-popup{position:absolute;z-index:1050;background:#fff;border-radius:4px}.ant-menu-submenu-popup .submenu-title-wrapper{padding-right:20px}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;opacity:.0001;content:" "}.ant-menu-submenu>.ant-menu{background-color:#fff;border-radius:4px}.ant-menu-submenu>.ant-menu-submenu-title:after{-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{position:absolute;width:6px;height:1.5px;background:#fff;background:rgba(0,0,0,.65)\9;background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.65)),to(rgba(0,0,0,.65)));background-image:linear-gradient(90deg,rgba(0,0,0,.65),rgba(0,0,0,.65));background-image:none\9;border-radius:2px;-webkit-transition:background .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(45deg) translateY(-2px);transform:rotate(45deg) translateY(-2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(-45deg) translateY(2px);transform:rotate(-45deg) translateY(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before{background:-webkit-gradient(linear,left top,right top,from(#1890ff),to(#1890ff));background:linear-gradient(90deg,#1890ff,#1890ff)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(-45deg) translateX(2px);transform:rotate(-45deg) translateX(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(45deg) translateX(-2px);transform:rotate(45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{-webkit-transform:translateY(-2px);transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(-45deg) translateX(-2px);transform:rotate(-45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(45deg) translateX(2px);transform:rotate(45deg) translateX(2px)}.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected>a,.ant-menu-vertical-right .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected>a,.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical .ant-menu-submenu-selected>a{color:#1890ff}.ant-menu-horizontal{line-height:46px;white-space:nowrap;border:0;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:none;box-shadow:none}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom;border-bottom:2px solid transparent}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover{color:#1890ff;border-bottom:2px solid #1890ff}.ant-menu-horizontal>.ant-menu-item>a{display:block;color:rgba(0,0,0,.65)}.ant-menu-horizontal>.ant-menu-item>a:hover{color:#1890ff}.ant-menu-horizontal>.ant-menu-item>a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected>a{color:#1890ff}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:" "}.ant-menu-inline .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical .ant-menu-item{position:relative}.ant-menu-inline .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-vertical .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #1890ff;-webkit-transform:scaleY(.0001);transform:scaleY(.0001);opacity:0;-webkit-transition:opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);transition:opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;font-size:14px;line-height:40px;text-overflow:ellipsis}.ant-menu-inline .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-vertical .ant-menu-submenu{padding-bottom:.01px}.ant-menu-inline .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-vertical .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-inline>.ant-menu-item,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-item-selected:after,.ant-menu-inline .ant-menu-selected:after{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:1;-webkit-transition:opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1);transition:opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1);transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1);transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline-collapsed{width:80px}.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 32px!important;text-overflow:clip}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{display:none}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;max-width:0;opacity:0}.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu-inline-collapsed-tooltip a{color:hsla(0,0%,100%,.85)}.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-inline,.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right,.ant-menu-sub.ant-menu-inline{-webkit-box-shadow:none;box-shadow:none}.ant-menu-sub.ant-menu-inline{padding:0;border:0;border-radius:0}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:rgba(0,0,0,.25)!important;background:none;border-color:transparent!important;cursor:not-allowed}.ant-menu-item-disabled>a,.ant-menu-submenu-disabled>a{color:rgba(0,0,0,.25)!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:rgba(0,0,0,.25)!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:rgba(0,0,0,.25)!important}.ant-menu-dark,.ant-menu-dark .ant-menu-sub{color:hsla(0,0%,100%,.65);background:#001529}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;-webkit-transition:all .3s;transition:all .3s}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#000c17;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.45) inset;box-shadow:inset 0 2px 8px rgba(0,0,0,.45)}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;border-color:#001529;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a{color:hsla(0,0%,100%,.65)}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-title:hover>a{color:#fff}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>a:hover{color:#fff}.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected,.ant-menu.ant-menu-dark .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-submenu-disabled>a{color:hsla(0,0%,100%,.35)!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:hsla(0,0%,100%,.35)!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:hsla(0,0%,100%,.35)!important}.logo___1hjLC{height:64px;position:relative;line-height:64px;padding-left:24px;-webkit-transition:all .3s;transition:all .3s;background:#002140;overflow:hidden}.logo___1hjLC img{height:32px}.logo___1hjLC h1,.logo___1hjLC img{display:inline-block;vertical-align:middle}.logo___1hjLC h1{color:#fff;font-size:20px;margin:0 0 0 12px;font-family:"Myriad Pro","Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:600}.sider___2wCKY{min-height:100vh;-webkit-box-shadow:2px 0 6px rgba(0,21,41,.35);box-shadow:2px 0 6px rgba(0,21,41,.35);position:relative;z-index:10}.sider___2wCKY.ligth___1uzh8{background-color:#fff}.sider___2wCKY.ligth___1uzh8 .logo___1hjLC{background:#fff}.sider___2wCKY.ligth___1uzh8 .logo___1hjLC h1{color:#002140}.icon___k7OKm{width:14px;margin-right:10px}.drawer .drawer-content{background:#001529}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .sider-menu-item-img+span,.ant-menu-inline-collapsed>.ant-menu-item .sider-menu-item-img+span,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .sider-menu-item-img+span{max-width:0;display:inline-block;opacity:0}.ant-menu-item .sider-menu-item-img+span,.ant-menu-submenu-title .sider-menu-item-img+span{-webkit-transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);opacity:1}@-webkit-keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}.ant-transfer-customize-list{display:-ms-flexbox;display:flex}.ant-transfer-customize-list .ant-transfer-operation{-ms-flex:none;flex:none;-ms-flex-item-align:center;align-self:center}.ant-transfer-customize-list .ant-transfer-list{-ms-flex:auto;flex:auto;width:auto;height:auto;min-height:200px}.ant-transfer-customize-list .ant-transfer-list-body-with-search{padding-top:0}.ant-transfer-customize-list .ant-transfer-list-body-search-wrapper{position:relative;padding-bottom:0}.ant-transfer-customize-list .ant-transfer-list-body-customize-wrapper{padding:12px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th{background:#fafafa}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:1px solid #e8e8e8}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body{margin:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0 4px}.ant-transfer{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative}.ant-transfer-disabled .ant-transfer-list{background:#f5f5f5}.ant-transfer-list{position:relative;display:inline-block;width:180px;height:200px;padding-top:40px;vertical-align:middle;border:1px solid #d9d9d9;border-radius:4px}.ant-transfer-list-with-footer{padding-bottom:34px}.ant-transfer-list-search{padding:0 8px}.ant-transfer-list-search-action{position:absolute;top:12px;right:12px;bottom:12px;width:28px;color:rgba(0,0,0,.25);line-height:32px;text-align:center}.ant-transfer-list-search-action .anticon{color:rgba(0,0,0,.25);-webkit-transition:all .3s;transition:all .3s}.ant-transfer-list-search-action .anticon:hover{color:rgba(0,0,0,.45)}span.ant-transfer-list-search-action{pointer-events:none}.ant-transfer-list-header{position:absolute;top:0;left:0;width:100%;padding:8px 12px 9px;overflow:hidden;color:rgba(0,0,0,.65);background:#fff;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0}.ant-transfer-list-header-title{position:absolute;right:12px}.ant-transfer-list-body{position:relative;height:100%;font-size:14px}.ant-transfer-list-body-search-wrapper{position:absolute;top:0;left:0;width:100%;padding:12px}.ant-transfer-list-body-with-search{padding-top:56px}.ant-transfer-list-content{height:100%;margin:0;padding:0;overflow:auto;list-style:none}.ant-transfer-list-content>.LazyLoad{-webkit-animation:transferHighlightIn 1s;animation:transferHighlightIn 1s}.ant-transfer-list-content-item{min-height:32px;padding:6px 12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-transition:all .3s;transition:all .3s}.ant-transfer-list-content-item>span{padding-right:0}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#e6f7ff;cursor:pointer}.ant-transfer-list-content-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-transfer-list-body-not-found{position:absolute;top:50%;width:100%;padding-top:0;color:rgba(0,0,0,.25);text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-transfer-list-body-with-search .ant-transfer-list-body-not-found{margin-top:16px}.ant-transfer-list-footer{position:absolute;bottom:0;left:0;width:100%;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-transfer-operation{display:inline-block;margin:0 8px;overflow:hidden;vertical-align:middle}.ant-transfer-operation .ant-btn{display:block}.ant-transfer-operation .ant-btn:first-child{margin-bottom:4px}.ant-transfer-operation .ant-btn .anticon{font-size:12px}@-webkit-keyframes transferHighlightIn{0%{background:#bae7ff}to{background:transparent}}@keyframes transferHighlightIn{0%{background:#bae7ff}to{background:transparent}}.ant-empty{margin:0 8px;font-size:14px;line-height:22px;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image img{height:100%}.ant-empty-description{margin:0}.ant-empty-footer{margin-top:16px}.ant-empty-normal{margin:32px 0;color:rgba(0,0,0,.25)}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0;color:rgba(0,0,0,.25)}.ant-empty-small .ant-empty-image{height:35px}@-webkit-keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}.ant-checkbox{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:none;cursor:pointer}.ant-checkbox-input:focus+.ant-checkbox-inner,.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner{border-color:#1890ff}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;content:""}.ant-checkbox-wrapper:hover .ant-checkbox:after,.ant-checkbox:hover:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0) translate(-50%,-50%);transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-checkbox-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset;cursor:pointer}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span,.ant-checkbox-wrapper+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{display:inline-block;margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-input{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-input:-ms-input-placeholder{color:#bfbfbf}.ant-input::-webkit-input-placeholder{color:#bfbfbf}.ant-input:focus,.ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#e6d8d8;border-right-width:1px!important}.ant-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#e6d8d8;border-right-width:1px!important}textarea.ant-input{max-width:100%;height:auto;min-height:32px;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-input-sm{height:24px;padding:1px 7px}.ant-input-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus,.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-group-addon{position:relative;padding:0 11px;color:rgba(0,0,0,.65);font-weight:normal;font-size:14px;line-height:1;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select .ant-select-selection{margin:-1px;background-color:inherit;border:1px solid transparent;-webkit-box-shadow:none;box-shadow:none}.ant-input-group-addon .ant-select-focused .ant-select-selection,.ant-input-group-addon .ant-select-open .ant-select-selection{color:#1890ff}.ant-input-group-addon>i:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-input-group-addon:first-child,.ant-input-group-addon:first-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:first-child,.ant-input-group>.ant-input:first-child .ant-select .ant-select-selection{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group-addon:last-child,.ant-input-group-addon:last-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:last-child,.ant-input-group>.ant-input:last-child .ant-select .ant-select-selection{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{height:40px;padding:6px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{height:24px;padding:1px 7px}.ant-input-group-lg .ant-select-selection--single{height:40px}.ant-input-group-sm .ant-select-selection--single{height:24px}.ant-input-group .ant-input-affix-wrapper{display:table-cell;float:left;width:100%}.ant-input-group.ant-input-group-compact{display:block;zoom:1}.ant-input-group.ant-input-group-compact:after,.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{clear:both}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:focus,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection:focus,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection:hover,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:focus,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:first-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:first-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:last-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:last-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:last-child{border-right-width:1px;border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-affix-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;text-align:start}.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#40a9ff;border-right-width:1px!important}.ant-input-affix-wrapper .ant-input{position:relative;text-align:inherit}.ant-input-affix-wrapper .ant-input-prefix,.ant-input-affix-wrapper .ant-input-suffix{position:absolute;top:50%;z-index:2;color:rgba(0,0,0,.65);line-height:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-input-affix-wrapper .ant-input-prefix :not(.anticon),.ant-input-affix-wrapper .ant-input-suffix :not(.anticon){line-height:1.5}.ant-input-affix-wrapper .ant-input-prefix{left:12px}.ant-input-affix-wrapper .ant-input-suffix{right:12px}.ant-input-affix-wrapper .ant-input:not(:first-child){padding-left:30px}.ant-input-affix-wrapper .ant-input:not(:last-child){padding-right:30px}.ant-input-affix-wrapper .ant-input{min-height:100%}.ant-input-password-icon{color:rgba(0,0,0,.45);cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-input-password-icon:hover{color:#333}.ant-input-clear-icon{color:rgba(0,0,0,.25);font-size:12px;vertical-align:top;cursor:pointer;-webkit-transition:color .3s;transition:color .3s}.ant-input-clear-icon:hover{color:rgba(0,0,0,.45)}.ant-input-clear-icon:active{color:rgba(0,0,0,.65)}.ant-input-clear-icon+i{margin-left:6px}.ant-input-search-icon{color:rgba(0,0,0,.45);cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-input-search-icon:hover{color:rgba(0,0,0,.8)}.ant-input-search-enter-button input{border-right:0}.ant-input-search-enter-button+.ant-input-group-addon,.ant-input-search-enter-button input+.ant-input-group-addon{padding:0;border:0}.ant-input-search-enter-button+.ant-input-group-addon .ant-input-search-button,.ant-input-search-enter-button input+.ant-input-group-addon .ant-input-search-button{width:100%;border-top-left-radius:0;border-bottom-left-radius:0}.ant-row{position:relative;height:auto;margin-right:0;margin-left:0;zoom:1;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.ant-row:after,.ant-row:before{display:table;content:""}.ant-row:after{clear:both}.ant-row-flex{-ms-flex-flow:row wrap;flex-flow:row wrap}.ant-row-flex,.ant-row-flex:after,.ant-row-flex:before{display:-ms-flexbox;display:flex}.ant-row-flex-start{-ms-flex-pack:start;justify-content:flex-start}.ant-row-flex-center{-ms-flex-pack:center;justify-content:center}.ant-row-flex-end{-ms-flex-pack:end;justify-content:flex-end}.ant-row-flex-space-between{-ms-flex-pack:justify;justify-content:space-between}.ant-row-flex-space-around{-ms-flex-pack:distribute;justify-content:space-around}.ant-row-flex-top{-ms-flex-align:start;align-items:flex-start}.ant-row-flex-middle{-ms-flex-align:center;align-items:center}.ant-row-flex-bottom{-ms-flex-align:end;align-items:flex-end}.ant-col{position:relative}.ant-col-1,.ant-col-2,.ant-col-3,.ant-col-4,.ant-col-5,.ant-col-6,.ant-col-7,.ant-col-8,.ant-col-9,.ant-col-10,.ant-col-11,.ant-col-12,.ant-col-13,.ant-col-14,.ant-col-15,.ant-col-16,.ant-col-17,.ant-col-18,.ant-col-19,.ant-col-20,.ant-col-21,.ant-col-22,.ant-col-23,.ant-col-24,.ant-col-lg-1,.ant-col-lg-2,.ant-col-lg-3,.ant-col-lg-4,.ant-col-lg-5,.ant-col-lg-6,.ant-col-lg-7,.ant-col-lg-8,.ant-col-lg-9,.ant-col-lg-10,.ant-col-lg-11,.ant-col-lg-12,.ant-col-lg-13,.ant-col-lg-14,.ant-col-lg-15,.ant-col-lg-16,.ant-col-lg-17,.ant-col-lg-18,.ant-col-lg-19,.ant-col-lg-20,.ant-col-lg-21,.ant-col-lg-22,.ant-col-lg-23,.ant-col-lg-24,.ant-col-md-1,.ant-col-md-2,.ant-col-md-3,.ant-col-md-4,.ant-col-md-5,.ant-col-md-6,.ant-col-md-7,.ant-col-md-8,.ant-col-md-9,.ant-col-md-10,.ant-col-md-11,.ant-col-md-12,.ant-col-md-13,.ant-col-md-14,.ant-col-md-15,.ant-col-md-16,.ant-col-md-17,.ant-col-md-18,.ant-col-md-19,.ant-col-md-20,.ant-col-md-21,.ant-col-md-22,.ant-col-md-23,.ant-col-md-24,.ant-col-sm-1,.ant-col-sm-2,.ant-col-sm-3,.ant-col-sm-4,.ant-col-sm-5,.ant-col-sm-6,.ant-col-sm-7,.ant-col-sm-8,.ant-col-sm-9,.ant-col-sm-10,.ant-col-sm-11,.ant-col-sm-12,.ant-col-sm-13,.ant-col-sm-14,.ant-col-sm-15,.ant-col-sm-16,.ant-col-sm-17,.ant-col-sm-18,.ant-col-sm-19,.ant-col-sm-20,.ant-col-sm-21,.ant-col-sm-22,.ant-col-sm-23,.ant-col-sm-24,.ant-col-xs-1,.ant-col-xs-2,.ant-col-xs-3,.ant-col-xs-4,.ant-col-xs-5,.ant-col-xs-6,.ant-col-xs-7,.ant-col-xs-8,.ant-col-xs-9,.ant-col-xs-10,.ant-col-xs-11,.ant-col-xs-12,.ant-col-xs-13,.ant-col-xs-14,.ant-col-xs-15,.ant-col-xs-16,.ant-col-xs-17,.ant-col-xs-18,.ant-col-xs-19,.ant-col-xs-20,.ant-col-xs-21,.ant-col-xs-22,.ant-col-xs-23,.ant-col-xs-24{position:relative;min-height:1px;padding-right:0;padding-left:0}.ant-col-1,.ant-col-2,.ant-col-3,.ant-col-4,.ant-col-5,.ant-col-6,.ant-col-7,.ant-col-8,.ant-col-9,.ant-col-10,.ant-col-11,.ant-col-12,.ant-col-13,.ant-col-14,.ant-col-15,.ant-col-16,.ant-col-17,.ant-col-18,.ant-col-19,.ant-col-20,.ant-col-21,.ant-col-22,.ant-col-23,.ant-col-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{-ms-flex-order:24;order:24}.ant-col-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{-ms-flex-order:23;order:23}.ant-col-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{-ms-flex-order:22;order:22}.ant-col-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{-ms-flex-order:21;order:21}.ant-col-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{-ms-flex-order:20;order:20}.ant-col-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{-ms-flex-order:19;order:19}.ant-col-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{-ms-flex-order:18;order:18}.ant-col-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{-ms-flex-order:17;order:17}.ant-col-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{-ms-flex-order:16;order:16}.ant-col-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{-ms-flex-order:15;order:15}.ant-col-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{-ms-flex-order:14;order:14}.ant-col-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{-ms-flex-order:13;order:13}.ant-col-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{-ms-flex-order:12;order:12}.ant-col-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{-ms-flex-order:11;order:11}.ant-col-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{-ms-flex-order:10;order:10}.ant-col-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{-ms-flex-order:9;order:9}.ant-col-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{-ms-flex-order:8;order:8}.ant-col-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{-ms-flex-order:7;order:7}.ant-col-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{-ms-flex-order:6;order:6}.ant-col-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{-ms-flex-order:5;order:5}.ant-col-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{-ms-flex-order:4;order:4}.ant-col-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{-ms-flex-order:3;order:3}.ant-col-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{-ms-flex-order:2;order:2}.ant-col-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{-ms-flex-order:1;order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{-ms-flex-order:0;order:0}.ant-col-xs-1,.ant-col-xs-2,.ant-col-xs-3,.ant-col-xs-4,.ant-col-xs-5,.ant-col-xs-6,.ant-col-xs-7,.ant-col-xs-8,.ant-col-xs-9,.ant-col-xs-10,.ant-col-xs-11,.ant-col-xs-12,.ant-col-xs-13,.ant-col-xs-14,.ant-col-xs-15,.ant-col-xs-16,.ant-col-xs-17,.ant-col-xs-18,.ant-col-xs-19,.ant-col-xs-20,.ant-col-xs-21,.ant-col-xs-22,.ant-col-xs-23,.ant-col-xs-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xs-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{-ms-flex-order:24;order:24}.ant-col-xs-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{-ms-flex-order:23;order:23}.ant-col-xs-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{-ms-flex-order:22;order:22}.ant-col-xs-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{-ms-flex-order:21;order:21}.ant-col-xs-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{-ms-flex-order:20;order:20}.ant-col-xs-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{-ms-flex-order:19;order:19}.ant-col-xs-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{-ms-flex-order:18;order:18}.ant-col-xs-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{-ms-flex-order:17;order:17}.ant-col-xs-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{-ms-flex-order:16;order:16}.ant-col-xs-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{-ms-flex-order:15;order:15}.ant-col-xs-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{-ms-flex-order:14;order:14}.ant-col-xs-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{-ms-flex-order:13;order:13}.ant-col-xs-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{-ms-flex-order:12;order:12}.ant-col-xs-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{-ms-flex-order:11;order:11}.ant-col-xs-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{-ms-flex-order:10;order:10}.ant-col-xs-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{-ms-flex-order:9;order:9}.ant-col-xs-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{-ms-flex-order:8;order:8}.ant-col-xs-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{-ms-flex-order:7;order:7}.ant-col-xs-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{-ms-flex-order:6;order:6}.ant-col-xs-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{-ms-flex-order:5;order:5}.ant-col-xs-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{-ms-flex-order:4;order:4}.ant-col-xs-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{-ms-flex-order:3;order:3}.ant-col-xs-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{-ms-flex-order:2;order:2}.ant-col-xs-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{-ms-flex-order:1;order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{-ms-flex-order:0;order:0}@media (min-width:576px){.ant-col-sm-1,.ant-col-sm-2,.ant-col-sm-3,.ant-col-sm-4,.ant-col-sm-5,.ant-col-sm-6,.ant-col-sm-7,.ant-col-sm-8,.ant-col-sm-9,.ant-col-sm-10,.ant-col-sm-11,.ant-col-sm-12,.ant-col-sm-13,.ant-col-sm-14,.ant-col-sm-15,.ant-col-sm-16,.ant-col-sm-17,.ant-col-sm-18,.ant-col-sm-19,.ant-col-sm-20,.ant-col-sm-21,.ant-col-sm-22,.ant-col-sm-23,.ant-col-sm-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-sm-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{-ms-flex-order:24;order:24}.ant-col-sm-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{-ms-flex-order:23;order:23}.ant-col-sm-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{-ms-flex-order:22;order:22}.ant-col-sm-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{-ms-flex-order:21;order:21}.ant-col-sm-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{-ms-flex-order:20;order:20}.ant-col-sm-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{-ms-flex-order:19;order:19}.ant-col-sm-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{-ms-flex-order:18;order:18}.ant-col-sm-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{-ms-flex-order:17;order:17}.ant-col-sm-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{-ms-flex-order:16;order:16}.ant-col-sm-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{-ms-flex-order:15;order:15}.ant-col-sm-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{-ms-flex-order:14;order:14}.ant-col-sm-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{-ms-flex-order:13;order:13}.ant-col-sm-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{-ms-flex-order:12;order:12}.ant-col-sm-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{-ms-flex-order:11;order:11}.ant-col-sm-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{-ms-flex-order:10;order:10}.ant-col-sm-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{-ms-flex-order:9;order:9}.ant-col-sm-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{-ms-flex-order:8;order:8}.ant-col-sm-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{-ms-flex-order:7;order:7}.ant-col-sm-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{-ms-flex-order:6;order:6}.ant-col-sm-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{-ms-flex-order:5;order:5}.ant-col-sm-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{-ms-flex-order:4;order:4}.ant-col-sm-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{-ms-flex-order:3;order:3}.ant-col-sm-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{-ms-flex-order:2;order:2}.ant-col-sm-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{-ms-flex-order:1;order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{-ms-flex-order:0;order:0}}@media (min-width:768px){.ant-col-md-1,.ant-col-md-2,.ant-col-md-3,.ant-col-md-4,.ant-col-md-5,.ant-col-md-6,.ant-col-md-7,.ant-col-md-8,.ant-col-md-9,.ant-col-md-10,.ant-col-md-11,.ant-col-md-12,.ant-col-md-13,.ant-col-md-14,.ant-col-md-15,.ant-col-md-16,.ant-col-md-17,.ant-col-md-18,.ant-col-md-19,.ant-col-md-20,.ant-col-md-21,.ant-col-md-22,.ant-col-md-23,.ant-col-md-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-md-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{-ms-flex-order:24;order:24}.ant-col-md-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{-ms-flex-order:23;order:23}.ant-col-md-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{-ms-flex-order:22;order:22}.ant-col-md-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{-ms-flex-order:21;order:21}.ant-col-md-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{-ms-flex-order:20;order:20}.ant-col-md-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{-ms-flex-order:19;order:19}.ant-col-md-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{-ms-flex-order:18;order:18}.ant-col-md-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{-ms-flex-order:17;order:17}.ant-col-md-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{-ms-flex-order:16;order:16}.ant-col-md-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{-ms-flex-order:15;order:15}.ant-col-md-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{-ms-flex-order:14;order:14}.ant-col-md-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{-ms-flex-order:13;order:13}.ant-col-md-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{-ms-flex-order:12;order:12}.ant-col-md-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{-ms-flex-order:11;order:11}.ant-col-md-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{-ms-flex-order:10;order:10}.ant-col-md-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{-ms-flex-order:9;order:9}.ant-col-md-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{-ms-flex-order:8;order:8}.ant-col-md-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{-ms-flex-order:7;order:7}.ant-col-md-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{-ms-flex-order:6;order:6}.ant-col-md-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{-ms-flex-order:5;order:5}.ant-col-md-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{-ms-flex-order:4;order:4}.ant-col-md-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{-ms-flex-order:3;order:3}.ant-col-md-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{-ms-flex-order:2;order:2}.ant-col-md-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{-ms-flex-order:1;order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{-ms-flex-order:0;order:0}}@media (min-width:992px){.ant-col-lg-1,.ant-col-lg-2,.ant-col-lg-3,.ant-col-lg-4,.ant-col-lg-5,.ant-col-lg-6,.ant-col-lg-7,.ant-col-lg-8,.ant-col-lg-9,.ant-col-lg-10,.ant-col-lg-11,.ant-col-lg-12,.ant-col-lg-13,.ant-col-lg-14,.ant-col-lg-15,.ant-col-lg-16,.ant-col-lg-17,.ant-col-lg-18,.ant-col-lg-19,.ant-col-lg-20,.ant-col-lg-21,.ant-col-lg-22,.ant-col-lg-23,.ant-col-lg-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-lg-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{-ms-flex-order:24;order:24}.ant-col-lg-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{-ms-flex-order:23;order:23}.ant-col-lg-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{-ms-flex-order:22;order:22}.ant-col-lg-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{-ms-flex-order:21;order:21}.ant-col-lg-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{-ms-flex-order:20;order:20}.ant-col-lg-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{-ms-flex-order:19;order:19}.ant-col-lg-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{-ms-flex-order:18;order:18}.ant-col-lg-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{-ms-flex-order:17;order:17}.ant-col-lg-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{-ms-flex-order:16;order:16}.ant-col-lg-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{-ms-flex-order:15;order:15}.ant-col-lg-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{-ms-flex-order:14;order:14}.ant-col-lg-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{-ms-flex-order:13;order:13}.ant-col-lg-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{-ms-flex-order:12;order:12}.ant-col-lg-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{-ms-flex-order:11;order:11}.ant-col-lg-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{-ms-flex-order:10;order:10}.ant-col-lg-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{-ms-flex-order:9;order:9}.ant-col-lg-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{-ms-flex-order:8;order:8}.ant-col-lg-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{-ms-flex-order:7;order:7}.ant-col-lg-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{-ms-flex-order:6;order:6}.ant-col-lg-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{-ms-flex-order:5;order:5}.ant-col-lg-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{-ms-flex-order:4;order:4}.ant-col-lg-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{-ms-flex-order:3;order:3}.ant-col-lg-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{-ms-flex-order:2;order:2}.ant-col-lg-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{-ms-flex-order:1;order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{-ms-flex-order:0;order:0}}@media (min-width:1200px){.ant-col-xl-1,.ant-col-xl-2,.ant-col-xl-3,.ant-col-xl-4,.ant-col-xl-5,.ant-col-xl-6,.ant-col-xl-7,.ant-col-xl-8,.ant-col-xl-9,.ant-col-xl-10,.ant-col-xl-11,.ant-col-xl-12,.ant-col-xl-13,.ant-col-xl-14,.ant-col-xl-15,.ant-col-xl-16,.ant-col-xl-17,.ant-col-xl-18,.ant-col-xl-19,.ant-col-xl-20,.ant-col-xl-21,.ant-col-xl-22,.ant-col-xl-23,.ant-col-xl-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{-ms-flex-order:24;order:24}.ant-col-xl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{-ms-flex-order:23;order:23}.ant-col-xl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{-ms-flex-order:22;order:22}.ant-col-xl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{-ms-flex-order:21;order:21}.ant-col-xl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{-ms-flex-order:20;order:20}.ant-col-xl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{-ms-flex-order:19;order:19}.ant-col-xl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{-ms-flex-order:18;order:18}.ant-col-xl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{-ms-flex-order:17;order:17}.ant-col-xl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{-ms-flex-order:16;order:16}.ant-col-xl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{-ms-flex-order:15;order:15}.ant-col-xl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{-ms-flex-order:14;order:14}.ant-col-xl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{-ms-flex-order:13;order:13}.ant-col-xl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{-ms-flex-order:12;order:12}.ant-col-xl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{-ms-flex-order:11;order:11}.ant-col-xl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{-ms-flex-order:10;order:10}.ant-col-xl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{-ms-flex-order:9;order:9}.ant-col-xl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{-ms-flex-order:8;order:8}.ant-col-xl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{-ms-flex-order:7;order:7}.ant-col-xl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{-ms-flex-order:6;order:6}.ant-col-xl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{-ms-flex-order:5;order:5}.ant-col-xl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{-ms-flex-order:4;order:4}.ant-col-xl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{-ms-flex-order:3;order:3}.ant-col-xl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{-ms-flex-order:2;order:2}.ant-col-xl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{-ms-flex-order:1;order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{-ms-flex-order:0;order:0}}@media (min-width:1600px){.ant-col-xxl-1,.ant-col-xxl-2,.ant-col-xxl-3,.ant-col-xxl-4,.ant-col-xxl-5,.ant-col-xxl-6,.ant-col-xxl-7,.ant-col-xxl-8,.ant-col-xxl-9,.ant-col-xxl-10,.ant-col-xxl-11,.ant-col-xxl-12,.ant-col-xxl-13,.ant-col-xxl-14,.ant-col-xxl-15,.ant-col-xxl-16,.ant-col-xxl-17,.ant-col-xxl-18,.ant-col-xxl-19,.ant-col-xxl-20,.ant-col-xxl-21,.ant-col-xxl-22,.ant-col-xxl-23,.ant-col-xxl-24{-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xxl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{-ms-flex-order:24;order:24}.ant-col-xxl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{-ms-flex-order:23;order:23}.ant-col-xxl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{-ms-flex-order:22;order:22}.ant-col-xxl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{-ms-flex-order:21;order:21}.ant-col-xxl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{-ms-flex-order:20;order:20}.ant-col-xxl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{-ms-flex-order:19;order:19}.ant-col-xxl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{-ms-flex-order:18;order:18}.ant-col-xxl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{-ms-flex-order:17;order:17}.ant-col-xxl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{-ms-flex-order:16;order:16}.ant-col-xxl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{-ms-flex-order:15;order:15}.ant-col-xxl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{-ms-flex-order:14;order:14}.ant-col-xxl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{-ms-flex-order:13;order:13}.ant-col-xxl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{-ms-flex-order:12;order:12}.ant-col-xxl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{-ms-flex-order:11;order:11}.ant-col-xxl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{-ms-flex-order:10;order:10}.ant-col-xxl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{-ms-flex-order:9;order:9}.ant-col-xxl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{-ms-flex-order:8;order:8}.ant-col-xxl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{-ms-flex-order:7;order:7}.ant-col-xxl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{-ms-flex-order:6;order:6}.ant-col-xxl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{-ms-flex-order:5;order:5}.ant-col-xxl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{-ms-flex-order:4;order:4}.ant-col-xxl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{-ms-flex-order:3;order:3}.ant-col-xxl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{-ms-flex-order:2;order:2}.ant-col-xxl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{-ms-flex-order:1;order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{-ms-flex-order:0;order:0}}.ant-card{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;background:#fff;border-radius:2px;-webkit-transition:all .3s;transition:all .3s}.ant-card-hoverable{cursor:pointer}.ant-card-hoverable:hover{border-color:rgba(0,0,0,.09);-webkit-box-shadow:0 2px 8px rgba(0,0,0,.09);box-shadow:0 2px 8px rgba(0,0,0,.09)}.ant-card-bordered{border:1px solid #e8e8e8}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;background:transparent;border-bottom:1px solid #e8e8e8;border-radius:2px 2px 0 0;zoom:1}.ant-card-head:after,.ant-card-head:before{display:table;content:""}.ant-card-head:after{clear:both}.ant-card-head-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ant-card-head-title{display:inline-block;-ms-flex:1 1;flex:1 1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-head .ant-tabs{clear:both;margin-bottom:-17px;color:rgba(0,0,0,.65);font-weight:normal;font-size:14px}.ant-card-head .ant-tabs-bar{border-bottom:1px solid #e8e8e8}.ant-card-extra{float:right;margin-left:auto;padding:16px 0;color:rgba(0,0,0,.65);font-weight:normal;font-size:14px}.ant-card-body{padding:24px;zoom:1}.ant-card-body:after,.ant-card-body:before{display:table;content:""}.ant-card-body:after{clear:both}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;-webkit-box-shadow:1px 0 0 0 #e8e8e8,0 1px 0 0 #e8e8e8,1px 1px 0 0 #e8e8e8,1px 0 0 0 #e8e8e8 inset,0 1px 0 0 #e8e8e8 inset;box-shadow:1px 0 0 0 #e8e8e8,0 1px 0 0 #e8e8e8,1px 1px 0 0 #e8e8e8,inset 1px 0 0 0 #e8e8e8,inset 0 1px 0 0 #e8e8e8;-webkit-transition:all .3s;transition:all .3s}.ant-card-grid:hover{position:relative;z-index:1;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs .ant-card-extra{padding-bottom:0}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:2px 2px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#f5f8fa;border-top:1px solid #e8e8e8;zoom:1}.ant-card-actions:after,.ant-card-actions:before{display:table;content:""}.ant-card-actions:after{clear:both}.ant-card-actions>li{float:left;margin:12px 0;color:rgba(0,0,0,.45);text-align:center}.ant-card-actions>li>span{position:relative;display:inline-block;min-width:32px;font-size:14px;line-height:22px;cursor:pointer}.ant-card-actions>li>span:hover{color:#1890ff;-webkit-transition:color .3s;transition:color .3s}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li>span a{display:inline-block;width:100%;color:rgba(0,0,0,.45);line-height:22px}.ant-card-actions>li>span a:hover{color:#1890ff}.ant-card-actions>li:not(:last-child){border-right:1px solid #e8e8e8}.ant-card-type-inner .ant-card-head{padding:0 24px;background:#fafafa}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0;zoom:1}.ant-card-meta:after,.ant-card-meta:before{display:table;content:""}.ant-card-meta:after{clear:both}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:rgba(0,0,0,.45)}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-card-loading-content p{margin:0}.ant-card-loading-block{height:14px;margin:4px 0;background:-webkit-gradient(linear,left top,right top,from(rgba(207,216,220,.2)),color-stop(rgba(207,216,220,.4)),to(rgba(207,216,220,.2)));background:linear-gradient(90deg,rgba(207,216,220,.2),rgba(207,216,220,.4),rgba(207,216,220,.2));background-size:600% 600%;border-radius:2px;-webkit-animation:card-loading 1.4s ease infinite;animation:card-loading 1.4s ease infinite}@-webkit-keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-nav-container{height:40px}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-ink-bar{visibility:hidden}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab{height:40px;margin:0;margin-right:2px;padding:0 16px;line-height:38px;background:#fafafa;border:1px solid #e8e8e8;border-radius:4px 4px 0 0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{height:40px;color:#1890ff;background:#fff;border-color:#e8e8e8;border-bottom:1px solid #fff}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-inactive{padding:0}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab .ant-tabs-close-x{width:16px;height:16px;height:14px;margin-right:-5px;margin-left:3px;overflow:hidden;color:rgba(0,0,0,.45);font-size:12px;vertical-align:middle;-webkit-transition:all .3s;transition:all .3s}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab .ant-tabs-close-x:hover{color:rgba(0,0,0,.85)}.ant-tabs.ant-tabs-card .ant-tabs-card-content>.ant-tabs-tabpane,.ant-tabs.ant-tabs-editable-card .ant-tabs-card-content>.ant-tabs-tabpane{-webkit-transition:none!important;transition:none!important}.ant-tabs.ant-tabs-card .ant-tabs-card-content>.ant-tabs-tabpane-inactive,.ant-tabs.ant-tabs-editable-card .ant-tabs-card-content>.ant-tabs-tabpane-inactive{overflow:hidden}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab:hover .anticon-close{opacity:1}.ant-tabs-extra-content{line-height:40px}.ant-tabs-extra-content .ant-tabs-new-tab{position:relative;width:20px;height:20px;color:rgba(0,0,0,.65);font-size:12px;line-height:20px;text-align:center;border:1px solid #e8e8e8;border-radius:2px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-tabs-extra-content .ant-tabs-new-tab:hover{color:#1890ff;border-color:#1890ff}.ant-tabs-extra-content .ant-tabs-new-tab svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-nav-container{height:auto}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab{margin-bottom:8px;border-bottom:1px solid #e8e8e8}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab-active,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab-active{padding-bottom:4px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab:last-child,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab:last-child{margin-bottom:8px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-new-tab,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-new-tab{width:90%}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-nav-wrap{margin-right:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab{margin-right:1px;border-right:0;border-radius:4px 0 0 4px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab-active{margin-right:-1px;padding-right:18px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-nav-wrap{margin-left:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab{margin-left:1px;border-left:0;border-radius:0 4px 4px 0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab-active{margin-left:-1px;padding-left:18px}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab{height:auto;border-top:0;border-bottom:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab-active{padding-top:1px;padding-bottom:0;color:#1890ff}.ant-tabs{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;overflow:hidden;zoom:1}.ant-tabs:after,.ant-tabs:before{display:table;content:""}.ant-tabs:after{clear:both}.ant-tabs-ink-bar{position:absolute;bottom:1px;left:0;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box;height:2px;background-color:#1890ff;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-tabs-bar{margin:0 0 16px;border-bottom:1px solid #e8e8e8;outline:none}.ant-tabs-bar,.ant-tabs-nav-container{-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav-container{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:-1px;overflow:hidden;font-size:14px;line-height:1.5;white-space:nowrap;zoom:1}.ant-tabs-nav-container:after,.ant-tabs-nav-container:before{display:table;content:""}.ant-tabs-nav-container:after{clear:both}.ant-tabs-nav-container-scrolling{padding-right:32px;padding-left:32px}.ant-tabs-bottom .ant-tabs-bottom-bar{margin-top:16px;margin-bottom:0;border-top:1px solid #e8e8e8;border-bottom:none}.ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-ink-bar{top:1px;bottom:auto}.ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-nav-container{margin-top:-1px;margin-bottom:0}.ant-tabs-tab-next,.ant-tabs-tab-prev{position:absolute;z-index:2;width:0;height:100%;color:rgba(0,0,0,.45);text-align:center;background-color:transparent;border:0;cursor:pointer;opacity:0;-webkit-transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-tabs-tab-next.ant-tabs-tab-arrow-show,.ant-tabs-tab-prev.ant-tabs-tab-arrow-show{width:32px;height:100%;opacity:1;pointer-events:auto}.ant-tabs-tab-next:hover,.ant-tabs-tab-prev:hover{color:rgba(0,0,0,.65)}.ant-tabs-tab-next-icon,.ant-tabs-tab-prev-icon{position:absolute;top:50%;left:50%;font-weight:bold;font-style:normal;font-variant:normal;line-height:inherit;text-align:center;text-transform:none;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-tabs-tab-next-icon-target,.ant-tabs-tab-prev-icon-target{display:block;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-tabs-tab-next-icon-target,:root .ant-tabs-tab-prev-icon-target{font-size:12px}.ant-tabs-tab-btn-disabled{cursor:not-allowed}.ant-tabs-tab-btn-disabled,.ant-tabs-tab-btn-disabled:hover{color:rgba(0,0,0,.25)}.ant-tabs-tab-next{right:2px}.ant-tabs-tab-prev{left:0}:root .ant-tabs-tab-prev{-webkit-filter:none;filter:none}.ant-tabs-nav-wrap{margin-bottom:-1px;overflow:hidden}.ant-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.ant-tabs-nav{position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding-left:0;list-style:none;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav:after,.ant-tabs-nav:before{display:table;content:" "}.ant-tabs-nav:after{clear:both}.ant-tabs-nav .ant-tabs-tab{position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:0 32px 0 0;padding:12px 16px;text-decoration:none;cursor:pointer;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav .ant-tabs-tab:last-child{margin-right:0}.ant-tabs-nav .ant-tabs-tab:hover{color:#40a9ff}.ant-tabs-nav .ant-tabs-tab:active{color:#096dd9}.ant-tabs-nav .ant-tabs-tab .anticon{margin-right:8px}.ant-tabs-nav .ant-tabs-tab-disabled,.ant-tabs-nav .ant-tabs-tab-disabled:hover{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tabs-nav .ant-tabs-tab-active{color:#1890ff;font-weight:500}.ant-tabs .ant-tabs-large-bar .ant-tabs-nav-container{font-size:16px}.ant-tabs .ant-tabs-large-bar .ant-tabs-tab{padding:16px}.ant-tabs .ant-tabs-small-bar .ant-tabs-nav-container{font-size:14px}.ant-tabs .ant-tabs-small-bar .ant-tabs-tab{padding:8px 16px}.ant-tabs .ant-tabs-bottom-content,.ant-tabs .ant-tabs-top-content{width:100%}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane{-ms-flex-negative:0;flex-shrink:0;width:100%;opacity:1;-webkit-transition:opacity .45s;transition:opacity .45s}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane-inactive,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane-inactive input,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tabs .ant-tabs-bottom-content.ant-tabs-content-animated,.ant-tabs .ant-tabs-top-content.ant-tabs-content-animated{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1);will-change:margin-left}.ant-tabs .ant-tabs-left-bar,.ant-tabs .ant-tabs-right-bar{height:100%;border-bottom:0}.ant-tabs .ant-tabs-left-bar-tab-next,.ant-tabs .ant-tabs-left-bar-tab-prev,.ant-tabs .ant-tabs-right-bar-tab-next,.ant-tabs .ant-tabs-right-bar-tab-prev{width:32px;height:0;-webkit-transition:height .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);transition:height .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs .ant-tabs-left-bar-tab-next.ant-tabs-tab-arrow-show,.ant-tabs .ant-tabs-left-bar-tab-prev.ant-tabs-tab-arrow-show,.ant-tabs .ant-tabs-right-bar-tab-next.ant-tabs-tab-arrow-show,.ant-tabs .ant-tabs-right-bar-tab-prev.ant-tabs-tab-arrow-show{width:100%;height:32px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab{display:block;float:none;margin:0 0 16px;padding:8px 24px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab:last-child,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab:last-child{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-extra-content,.ant-tabs .ant-tabs-right-bar .ant-tabs-extra-content{text-align:center}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-scroll,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-scroll{width:auto}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{height:100%}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling{padding:32px 0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav{width:100%}.ant-tabs .ant-tabs-left-bar .ant-tabs-ink-bar,.ant-tabs .ant-tabs-right-bar .ant-tabs-ink-bar{top:0;bottom:auto;left:auto;width:2px;height:auto}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-next,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-next{bottom:0;width:100%;height:32px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-prev,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-prev{top:0;width:100%;height:32px}.ant-tabs .ant-tabs-left-content,.ant-tabs .ant-tabs-right-content{width:auto;margin-top:0!important;overflow:hidden}.ant-tabs .ant-tabs-left-bar{float:left;margin-right:-1px;margin-bottom:0;border-right:1px solid #e8e8e8}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab{text-align:right}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap{margin-right:-1px}.ant-tabs .ant-tabs-left-bar .ant-tabs-ink-bar{right:1px}.ant-tabs .ant-tabs-left-content{padding-left:24px;border-left:1px solid #e8e8e8}.ant-tabs .ant-tabs-right-bar{float:right;margin-bottom:0;margin-left:-1px;border-left:1px solid #e8e8e8}.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{margin-left:-1px}.ant-tabs .ant-tabs-right-bar .ant-tabs-ink-bar{left:1px}.ant-tabs .ant-tabs-right-content{padding-right:24px;border-right:1px solid #e8e8e8}.ant-tabs-bottom .ant-tabs-ink-bar-animated,.ant-tabs-top .ant-tabs-ink-bar-animated{-webkit-transition:width .3s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:width .3s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-left .ant-tabs-ink-bar-animated,.ant-tabs-right .ant-tabs-ink-bar-animated{-webkit-transition:height .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:height .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-content-animated,.no-flex>.ant-tabs-content>.ant-tabs-content-animated{margin-left:0!important;-webkit-transform:none!important;transform:none!important}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive input,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tabs-left-content>.ant-tabs-content-animated,.ant-tabs-right-content>.ant-tabs-content-animated{margin-left:0!important;-webkit-transform:none!important;transform:none!important}.ant-tabs-left-content>.ant-tabs-tabpane-inactive,.ant-tabs-right-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs-left-content>.ant-tabs-tabpane-inactive input,.ant-tabs-right-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-table-wrapper{zoom:1}.ant-table-wrapper:after,.ant-table-wrapper:before{display:table;content:""}.ant-table-wrapper:after{clear:both}.ant-table{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;clear:both}.ant-table-body{-webkit-transition:opacity .3s;transition:opacity .3s}.ant-table-empty .ant-table-body{overflow:auto!important}.ant-table table{width:100%;text-align:left;border-radius:4px 4px 0 0;border-collapse:collapse}.ant-table-thead>tr{background:#fafafa}.ant-table-thead>tr>th{color:rgba(0,0,0,.85);font-weight:500;text-align:left;background:transparent;border-bottom:1px solid #e8e8e8;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-table-thead>tr>th[colspan]{text-align:center}.ant-table-thead>tr>th .ant-table-filter-icon,.ant-table-thead>tr>th .anticon-filter{position:absolute;top:0;right:0;width:28px;height:100%;color:#bfbfbf;font-size:12px;text-align:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-table-thead>tr>th .ant-table-filter-icon>svg,.ant-table-thead>tr>th .anticon-filter>svg{position:absolute;top:50%;left:50%;margin-top:-5px;margin-left:-6px}.ant-table-thead>tr>th .ant-table-filter-selected.anticon-filter{color:#1890ff}.ant-table-thead>tr>th .ant-table-column-sorter{display:table-cell;vertical-align:middle}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner{height:1em;margin-top:.35em;margin-left:.57142857em;color:#bfbfbf;line-height:1em;text-align:center;-webkit-transition:all .3s;transition:all .3s}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up{display:inline-block;font-size:12px;font-size:11px\9;-webkit-transform:scale(.91666667) rotate(0deg);transform:scale(.91666667) rotate(0deg);display:block;height:1em;line-height:1em;-webkit-transition:all .3s;transition:all .3s}:root .ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down,:root .ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up{font-size:12px}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down.on,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up.on{color:#1890ff}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full{margin-top:-.15em}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-down,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-up{height:.5em;line-height:.5em}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-down{margin-top:.125em}.ant-table-thead>tr>th.ant-table-column-has-actions{position:relative;background-clip:padding-box}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters{padding-right:30px!important}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters .ant-table-filter-icon.ant-table-filter-open,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters .anticon-filter.ant-table-filter-open,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .ant-table-filter-icon:hover,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .anticon-filter:hover{color:rgba(0,0,0,.45);background:#e5e5e5}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .ant-table-filter-icon:active,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .anticon-filter:active{color:rgba(0,0,0,.65)}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters{cursor:pointer}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover .ant-table-filter-icon,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover .anticon-filter{background:#f2f2f2}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:active .ant-table-column-sorter-down:not(.on),.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:active .ant-table-column-sorter-up:not(.on){color:rgba(0,0,0,.45)}.ant-table-thead>tr>th .ant-table-header-column{display:inline-block;vertical-align:top}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters{display:table}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>.ant-table-column-title{display:table-cell;vertical-align:middle}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:relative}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters:before{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;-webkit-transition:all .3s;transition:all .3s;content:""}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters:hover:before{background:rgba(0,0,0,.04)}.ant-table-thead>tr>th.ant-table-column-has-sorters{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-thead>tr:first-child>th:first-child{border-top-left-radius:4px}.ant-table-thead>tr:first-child>th:last-child{border-top-right-radius:4px}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #e8e8e8;-webkit-transition:all .3s,border 0s;transition:all .3s,border 0s}.ant-table-tbody>tr,.ant-table-thead>tr{-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-table-tbody>tr.ant-table-row-hover:not(.ant-table-expanded-row)>td,.ant-table-tbody>tr:hover:not(.ant-table-expanded-row)>td,.ant-table-thead>tr.ant-table-row-hover:not(.ant-table-expanded-row)>td,.ant-table-thead>tr:hover:not(.ant-table-expanded-row)>td{background:#e6f7ff}.ant-table-footer{position:relative;padding:16px;background:#fafafa;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-table-footer:before{position:absolute;top:-1px;left:0;width:100%;height:1px;background:#fafafa;content:""}.ant-table.ant-table-bordered .ant-table-footer{border:1px solid #e8e8e8}.ant-table-title{position:relative;top:1px;padding:16px 0;border-radius:4px 4px 0 0}.ant-table.ant-table-bordered .ant-table-title{padding-right:16px;padding-left:16px;border:1px solid #e8e8e8}.ant-table-title+.ant-table-content{position:relative;overflow:hidden;border-radius:4px 4px 0 0}.ant-table-bordered .ant-table-title+.ant-table-content,.ant-table-bordered .ant-table-title+.ant-table-content .ant-table-thead>tr:first-child>th,.ant-table-bordered .ant-table-title+.ant-table-content table,.ant-table-without-column-header .ant-table-title+.ant-table-content,.ant-table-without-column-header table{border-radius:0}.ant-table-without-column-header.ant-table-bordered.ant-table-empty .ant-table-placeholder{border-top:1px solid #e8e8e8;border-radius:4px}.ant-table-tbody>tr.ant-table-row-selected td{color:inherit;background:#fafafa}.ant-table-thead>tr>th.ant-table-column-sort{background:#f5f5f5}.ant-table-tbody>tr>td.ant-table-column-sort{background:rgba(0,0,0,.01)}.ant-table-tbody>tr>td,.ant-table-thead>tr>th{padding:16px}.ant-table-expand-icon-th,.ant-table-row-expand-icon-cell{width:50px;min-width:50px;text-align:center}.ant-table-header{overflow:hidden;background:#fafafa}.ant-table-header table{border-radius:4px 4px 0 0}.ant-table-loading{position:relative}.ant-table-loading .ant-table-body{background:#fff;opacity:.5}.ant-table-loading .ant-table-spin-holder{position:absolute;top:50%;left:50%;height:20px;margin-left:-30px;line-height:20px}.ant-table-loading .ant-table-with-pagination{margin-top:-20px}.ant-table-loading .ant-table-without-pagination{margin-top:10px}.ant-table-bordered .ant-table-body>table,.ant-table-bordered .ant-table-fixed-left table,.ant-table-bordered .ant-table-fixed-right table,.ant-table-bordered .ant-table-header>table{border:1px solid #e8e8e8;border-right:0;border-bottom:0}.ant-table-bordered.ant-table-empty .ant-table-placeholder{border-right:1px solid #e8e8e8;border-left:1px solid #e8e8e8}.ant-table-bordered.ant-table-fixed-header .ant-table-header>table{border-bottom:0}.ant-table-bordered.ant-table-fixed-header .ant-table-body>table{border-top-left-radius:0;border-top-right-radius:0}.ant-table-bordered.ant-table-fixed-header .ant-table-body-inner>table,.ant-table-bordered.ant-table-fixed-header .ant-table-header+.ant-table-body>table{border-top:0}.ant-table-bordered .ant-table-thead>tr:not(:last-child)>th{border-bottom:1px solid #e8e8e8}.ant-table-bordered .ant-table-tbody>tr>td,.ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #e8e8e8}.ant-table-placeholder{position:relative;z-index:1;padding:16px;color:rgba(0,0,0,.25);font-size:14px;text-align:center;background:#fff;border-bottom:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-table-placeholder .anticon{margin-right:4px}.ant-table-pagination.ant-pagination{float:right;margin:16px 0}.ant-table-filter-dropdown{position:relative;min-width:96px;margin-left:-8px;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-filter-dropdown .ant-dropdown-menu{border:0;border-radius:4px 4px 0 0;-webkit-box-shadow:none;box-shadow:none}.ant-table-filter-dropdown .ant-dropdown-menu-without-submenu{max-height:400px;overflow-x:hidden}.ant-table-filter-dropdown .ant-dropdown-menu-item>label+span{padding-right:0}.ant-table-filter-dropdown .ant-dropdown-menu-sub{border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title:after{color:#1890ff;font-weight:bold;text-shadow:0 0 2px #bae7ff}.ant-table-filter-dropdown .ant-dropdown-menu-item{overflow:hidden}.ant-table-filter-dropdown>.ant-dropdown-menu>.ant-dropdown-menu-item:last-child,.ant-table-filter-dropdown>.ant-dropdown-menu>.ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title{border-radius:0}.ant-table-filter-dropdown-btns{padding:7px 8px;overflow:hidden;border-top:1px solid #e8e8e8}.ant-table-filter-dropdown-link{color:#1890ff}.ant-table-filter-dropdown-link:hover{color:#40a9ff}.ant-table-filter-dropdown-link:active{color:#096dd9}.ant-table-filter-dropdown-link.confirm{float:left}.ant-table-filter-dropdown-link.clear{float:right}.ant-table-selection{white-space:nowrap}.ant-table-selection-select-all-custom{margin-right:4px!important}.ant-table-selection .anticon-down{color:#bfbfbf;-webkit-transition:all .3s;transition:all .3s}.ant-table-selection-menu{min-width:96px;margin-top:5px;margin-left:-30px;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-selection-menu .ant-action-down{color:#bfbfbf}.ant-table-selection-down{display:inline-block;padding:0;line-height:1;cursor:pointer}.ant-table-selection-down:hover .anticon-down{color:rgba(0,0,0,.6)}.ant-table-row-expand-icon{display:inline-block;width:17px;height:17px;line-height:14px;text-align:center;background:#fff;border:1px solid #e8e8e8;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-row-expanded:after{content:"-"}.ant-table-row-collapsed:after{content:"+"}.ant-table-row-spaced{visibility:hidden}.ant-table-row-spaced:after{content:"."}tr.ant-table-expanded-row,tr.ant-table-expanded-row:hover{background:#fbfbfb}tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-16px -16px -17px}.ant-table .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:8px}.ant-table-scroll{overflow:auto;overflow-x:hidden}.ant-table-scroll table{width:auto;min-width:100%}.ant-table-scroll table .ant-table-fixed-columns-in-body{visibility:hidden}.ant-table-body-inner{height:100%}.ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{position:relative;background:#fff}.ant-table-fixed-header .ant-table-body-inner{overflow:scroll}.ant-table-fixed-header .ant-table-scroll .ant-table-header{margin-bottom:-20px;padding-bottom:20px;overflow:scroll;opacity:.9999}.ant-table-fixed-left,.ant-table-fixed-right{position:absolute;top:0;z-index:auto;overflow:hidden;border-radius:0;-webkit-transition:-webkit-box-shadow .3s ease;transition:-webkit-box-shadow .3s ease;transition:box-shadow .3s ease;transition:box-shadow .3s ease,-webkit-box-shadow .3s ease}.ant-table-fixed-left table,.ant-table-fixed-right table{width:auto;background:#fff}.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-outer .ant-table-fixed,.ant-table-fixed-header .ant-table-fixed-right .ant-table-body-outer .ant-table-fixed{border-radius:0}.ant-table-fixed-left{left:0;-webkit-box-shadow:6px 0 6px -4px rgba(0,0,0,.15);box-shadow:6px 0 6px -4px rgba(0,0,0,.15)}.ant-table-fixed-left .ant-table-header{overflow-y:hidden}.ant-table-fixed-left .ant-table-body-inner{margin-right:-20px;padding-right:20px}.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-inner{padding-right:0}.ant-table-fixed-left,.ant-table-fixed-left table{border-radius:4px 0 0 0}.ant-table-fixed-left .ant-table-thead>tr>th:last-child{border-top-right-radius:0}.ant-table-fixed-right{right:0;-webkit-box-shadow:-6px 0 6px -4px rgba(0,0,0,.15);box-shadow:-6px 0 6px -4px rgba(0,0,0,.15)}.ant-table-fixed-right,.ant-table-fixed-right table{border-radius:0 4px 0 0}.ant-table-fixed-right .ant-table-expanded-row{color:transparent;pointer-events:none}.ant-table-fixed-right .ant-table-thead>tr>th:first-child{border-top-left-radius:0}.ant-table.ant-table-scroll-position-left .ant-table-fixed-left,.ant-table.ant-table-scroll-position-right .ant-table-fixed-right{-webkit-box-shadow:none;box-shadow:none}.ant-table colgroup>col.ant-table-selection-col{width:60px}.ant-table-thead>tr>th.ant-table-selection-column-custom .ant-table-selection{margin-right:-15px}.ant-table-tbody>tr>td.ant-table-selection-column,.ant-table-thead>tr>th.ant-table-selection-column{text-align:center}.ant-table-tbody>tr>td.ant-table-selection-column .ant-radio-wrapper,.ant-table-thead>tr>th.ant-table-selection-column .ant-radio-wrapper{margin-right:0}.ant-table-row[class*=ant-table-row-level-0] .ant-table-selection-column>span{display:inline-block}.ant-table-middle>.ant-table-content>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-footer,.ant-table-middle>.ant-table-title{padding:12px 8px}.ant-table-middle tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-12px -8px -13px}.ant-table-small{border:1px solid #e8e8e8;border-radius:4px}.ant-table-small>.ant-table-footer,.ant-table-small>.ant-table-title{padding:8px}.ant-table-small>.ant-table-title{top:0;border-bottom:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-body{margin:0 8px}.ant-table-small>.ant-table-content>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table{border:0}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th{padding:8px}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr{background-color:transparent;border-bottom:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort{background-color:rgba(0,0,0,.01)}.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table{padding:0}.ant-table-small>.ant-table-content .ant-table-header{background-color:#fff}.ant-table-small>.ant-table-content .ant-table-placeholder,.ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:0}.ant-table-small.ant-table-bordered{border-right:0}.ant-table-small.ant-table-bordered .ant-table-title{border:0;border-right:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-content{border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-footer{border:0;border-top:1px solid #e8e8e8;border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-footer:before{display:none}.ant-table-small.ant-table-bordered .ant-table-placeholder{border-right:0;border-bottom:0;border-left:0}.ant-table-small.ant-table-bordered .ant-table-tbody>tr>td:last-child,.ant-table-small.ant-table-bordered .ant-table-thead>tr>th:last-child{border-right:none}.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-tbody>tr>td:last-child,.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-thead>tr>th:last-child{border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-fixed-right{border-right:1px solid #e8e8e8;border-left:1px solid #e8e8e8}.ant-table-small tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-8px -8px -9px}.ant-radio-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset}.ant-radio-wrapper{margin:0;margin-right:8px}.ant-radio,.ant-radio-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;white-space:nowrap;cursor:pointer}.ant-radio{margin:0;line-height:1;vertical-align:sub;outline:none}.ant-radio-input:focus+.ant-radio-inner,.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner{border-color:#1890ff}.ant-radio-input:focus+.ant-radio-inner{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;visibility:hidden;-webkit-animation:antRadioEffect .36s ease-in-out;animation:antRadioEffect .36s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;content:""}.ant-radio-wrapper:hover .ant-radio:after,.ant-radio:hover:after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:100px;-webkit-transition:all .3s;transition:all .3s}.ant-radio-inner:after{position:absolute;top:3px;left:3px;display:table;width:8px;height:8px;background-color:#1890ff;border-top:0;border-left:0;border-radius:8px;-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#1890ff}.ant-radio-checked .ant-radio-inner:after{-webkit-transform:scale(1);transform:scale(1);opacity:1;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled .ant-radio-inner{background-color:#f5f5f5;border-color:#d9d9d9!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner:after{background-color:rgba(0,0,0,.2)}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;color:rgba(0,0,0,.65);line-height:30px;background:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-left:0;cursor:pointer;-webkit-transition:color .3s,background .3s,border-color .3s;transition:color .3s,background .3s,border-color .3s}.ant-radio-button-wrapper a{color:rgba(0,0,0,.65)}.ant-radio-button-wrapper>.ant-radio-button{display:block;width:0;height:0;margin-left:0}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child):before{position:absolute;top:0;left:-1px;display:block;width:1px;height:100%;background-color:#d9d9d9;content:""}.ant-radio-button-wrapper:first-child{border-left:1px solid #d9d9d9;border-radius:4px 0 0 4px}.ant-radio-button-wrapper:last-child{border-radius:0 4px 4px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:4px}.ant-radio-button-wrapper:hover{position:relative;color:#1890ff}.ant-radio-button-wrapper:focus-within{outline:3px solid rgba(24,144,255,.06)}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked{z-index:1;color:#1890ff;background:#fff;border-color:#1890ff;-webkit-box-shadow:-1px 0 0 0 #1890ff;box-shadow:-1px 0 0 0 #1890ff}.ant-radio-button-wrapper-checked:before{background-color:#1890ff!important;opacity:.1}.ant-radio-button-wrapper-checked:first-child{border-color:#1890ff;-webkit-box-shadow:none!important;box-shadow:none!important}.ant-radio-button-wrapper-checked:hover{color:#40a9ff;border-color:#40a9ff;-webkit-box-shadow:-1px 0 0 0 #40a9ff;box-shadow:-1px 0 0 0 #40a9ff}.ant-radio-button-wrapper-checked:active{color:#096dd9;border-color:#096dd9;-webkit-box-shadow:-1px 0 0 0 #096dd9;box-shadow:-1px 0 0 0 #096dd9}.ant-radio-button-wrapper-checked:focus-within{outline:3px solid rgba(24,144,255,.06)}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#1890ff;border-color:#1890ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#40a9ff;border-color:#40a9ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#096dd9;border-color:#096dd9}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{outline:3px solid rgba(24,144,255,.06)}.ant-radio-button-wrapper-disabled{cursor:not-allowed}.ant-radio-button-wrapper-disabled,.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#d9d9d9}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:#fff;background-color:#e6e6e6;border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes antRadioEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antRadioEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@supports (-moz-appearance:meterbar) and (background-blend-mode:difference,normal){.ant-radio{vertical-align:text-bottom}}.ant-dropdown{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-7px;right:0;bottom:-7px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-wrap .ant-btn>.anticon-down{font-size:12px}.ant-dropdown-wrap .anticon-down:before{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.ant-dropdown-wrap-open .anticon-down:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden{display:none}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-transform:translateZ(0)}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050}.ant-dropdown-menu-submenu-popup>.ant-dropdown-menu{-webkit-transform-origin:0 0;transform-origin:0 0}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:rgba(0,0,0,.65);font-weight:normal;font-size:14px;line-height:22px;white-space:nowrap;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-menu-submenu-title>.anticon:first-child{min-width:12px;margin-right:8px}.ant-dropdown-menu-item>a,.ant-dropdown-menu-submenu-title>a{display:block;margin:-5px -12px;padding:5px 12px;color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-item-selected>a,.ant-dropdown-menu-submenu-title-selected,.ant-dropdown-menu-submenu-title-selected>a{color:#1890ff;background-color:#e6f7ff}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#e6f7ff}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.45);font-style:normal;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,:root .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{font-size:12px}.ant-dropdown-menu-submenu-title{padding-right:26px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomRight,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topRight,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-trigger>.anticon.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-link>.anticon.anticon-down,:root .ant-dropdown-trigger>.anticon.anticon-down{font-size:12px}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child){padding-right:8px;padding-left:8px}.ant-dropdown-button .anticon.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-button .anticon.anticon-down{font-size:12px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#001529}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after{color:hsla(0,0%,100%,.65)}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#1890ff}.ant-pagination{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-pagination,.ant-pagination ol,.ant-pagination ul{margin:0;padding:0;list-style:none}.ant-pagination:after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:" "}.ant-pagination-item,.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{min-width:32px;font-family:Arial;text-align:center;list-style:none;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:rgba(0,0,0,.65);-webkit-transition:none;transition:none}.ant-pagination-item:focus,.ant-pagination-item:hover{border-color:#1890ff;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-item:focus a,.ant-pagination-item:hover a{color:#1890ff}.ant-pagination-item-active{font-weight:500;background:#fff;border-color:#1890ff}.ant-pagination-item-active a{color:#1890ff}.ant-pagination-item-active:focus,.ant-pagination-item-active:hover{border-color:#40a9ff}.ant-pagination-item-active:focus a,.ant-pagination-item-active:hover a{color:#40a9ff}.ant-pagination-jump-next,.ant-pagination-jump-prev{outline:0}.ant-pagination-jump-next .ant-pagination-item-container,.ant-pagination-jump-prev .ant-pagination-item-container{position:relative}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{display:inline-block;font-size:12px;font-size:12px\9;-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg);color:#1890ff;letter-spacing:-1px;opacity:0;-webkit-transition:all .2s;transition:all .2s}:root .ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,:root .ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{font-size:12px}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:rgba(0,0,0,.25);letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;-webkit-transition:all .2s;transition:all .2s}.ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-prev{margin-right:8px}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-next,.ant-pagination-prev{display:inline-block;min-width:32px;height:32px;color:rgba(0,0,0,.65);font-family:Arial;line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:4px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-next,.ant-pagination-prev{outline:0}.ant-pagination-next a,.ant-pagination-prev a{color:rgba(0,0,0,.65);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-next:hover a,.ant-pagination-prev:hover a{border-color:#40a9ff}.ant-pagination-next .ant-pagination-item-link,.ant-pagination-prev .ant-pagination-item-link{display:block;height:100%;font-size:12px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:none;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-next:focus .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link,.ant-pagination-prev:focus .ant-pagination-item-link,.ant-pagination-prev:hover .ant-pagination-item-link{color:#1890ff;border-color:#1890ff}.ant-pagination-disabled,.ant-pagination-disabled:focus,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:focus .ant-pagination-item-link,.ant-pagination-disabled:focus a,.ant-pagination-disabled:hover .ant-pagination-item-link,.ant-pagination-disabled:hover a,.ant-pagination-disabled a{color:rgba(0,0,0,.25);border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto;margin-right:8px}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s;width:50px;margin:0 8px}.ant-pagination-options-quick-jumper input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input::-webkit-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input:focus,.ant-pagination-options-quick-jumper input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-pagination-options-quick-jumper input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-pagination-options-quick-jumper input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#e6d8d8;border-right-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#e6d8d8;border-right-width:1px!important}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-pagination-options-quick-jumper input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-pagination-options-quick-jumper input-sm{height:24px;padding:1px 7px}.ant-pagination-simple .ant-pagination-next,.ant-pagination-simple .ant-pagination-prev{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link{height:24px;border:0}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:none;-webkit-transition:border-color .3s;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#1890ff}.ant-pagination.mini .ant-pagination-simple-pager,.ant-pagination.mini .ant-pagination-total-text{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next,.ant-pagination.mini .ant-pagination-prev{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link{background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-jump-next,.ant-pagination.mini .ant-pagination-jump-prev{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{height:24px;padding:1px 7px;width:44px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:rgba(0,0,0,.25);background:transparent;border:none;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:#dbdbdb;border-color:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#fff}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:focus,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:hover{color:rgba(0,0,0,.45);background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:1}@media only screen and (max-width:992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width:576px){.ant-pagination-options{display:none}}.ant-select{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;outline:0}.ant-select,.ant-select ol,.ant-select ul{margin:0;padding:0;list-style:none}.ant-select>ul>li>a{padding:0;background-color:#fff}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;right:11px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:1;-webkit-transform-origin:50% 50%;transform-origin:50% 50%}.ant-select-arrow>*{line-height:1}.ant-select-arrow svg{display:inline-block}.ant-select-arrow:before{display:none}.ant-select-arrow .ant-select-arrow-icon{display:block}.ant-select-arrow .ant-select-arrow-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-select-selection{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-radius:4px;outline:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-selection:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-select-focused .ant-select-selection,.ant-select-selection:active,.ant-select-selection:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-selection__clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;font-style:normal;line-height:12px;text-align:center;text-transform:none;background:#fff;cursor:pointer;opacity:0;-webkit-transition:color .3s ease,opacity .15s ease;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-selection__clear:before{display:block}.ant-select-selection__clear:hover{color:rgba(0,0,0,.45)}.ant-select-selection:hover .ant-select-selection__clear{opacity:1}.ant-select-selection-selected-value{float:left;max-width:100%;padding-right:20px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-no-arrow .ant-select-selection-selected-value{padding-right:0}.ant-select-disabled{color:rgba(0,0,0,.25)}.ant-select-disabled .ant-select-selection{background:#f5f5f5;cursor:not-allowed}.ant-select-disabled .ant-select-selection:active,.ant-select-disabled .ant-select-selection:focus,.ant-select-disabled .ant-select-selection:hover{border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}.ant-select-disabled .ant-select-selection__clear{display:none;visibility:hidden;pointer-events:none}.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice{padding-right:10px;color:rgba(0,0,0,.33);background:#f5f5f5}.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice__remove{display:none}.ant-select-selection--single{position:relative;height:32px;cursor:pointer}.ant-select-selection__rendered{position:relative;display:block;margin-right:11px;margin-left:11px;line-height:30px}.ant-select-selection__rendered:after{display:inline-block;width:0;visibility:hidden;content:".";pointer-events:none}.ant-select-lg{font-size:16px}.ant-select-lg .ant-select-selection--single{height:40px}.ant-select-lg .ant-select-selection__rendered{line-height:38px}.ant-select-lg .ant-select-selection--multiple{min-height:40px}.ant-select-lg .ant-select-selection--multiple .ant-select-selection__rendered li{height:32px;line-height:32px}.ant-select-lg .ant-select-selection--multiple .ant-select-arrow,.ant-select-lg .ant-select-selection--multiple .ant-select-selection__clear{top:20px}.ant-select-sm .ant-select-selection--single{height:24px}.ant-select-sm .ant-select-selection__rendered{margin:0 7px;line-height:22px}.ant-select-sm .ant-select-selection--multiple{min-height:24px}.ant-select-sm .ant-select-selection--multiple .ant-select-selection__rendered li{height:16px;line-height:14px}.ant-select-sm .ant-select-selection--multiple .ant-select-arrow,.ant-select-sm .ant-select-selection--multiple .ant-select-selection__clear{top:12px}.ant-select-sm .ant-select-arrow,.ant-select-sm .ant-select-selection__clear{right:8px}.ant-select-disabled .ant-select-selection__choice__remove{color:rgba(0,0,0,.25);cursor:default}.ant-select-disabled .ant-select-selection__choice__remove:hover{color:rgba(0,0,0,.25)}.ant-select-search__field__wrap{position:relative;display:inline-block}.ant-select-search__field__placeholder,.ant-select-selection__placeholder{position:absolute;top:50%;right:9px;left:0;max-width:100%;height:20px;margin-top:-10px;overflow:hidden;color:#bfbfbf;line-height:20px;white-space:nowrap;text-align:left;text-overflow:ellipsis}.ant-select-search__field__placeholder{left:12px}.ant-select-search__field__mirror{position:absolute;top:0;left:0;white-space:pre;opacity:0;pointer-events:none}.ant-select-search--inline{position:absolute;width:100%;height:100%}.ant-select-search--inline .ant-select-search__field__wrap{width:100%;height:100%}.ant-select-search--inline .ant-select-search__field{width:100%;height:100%;font-size:100%;line-height:1;background:transparent;border-width:0;border-radius:4px;outline:0}.ant-select-search--inline>i{float:right}.ant-select-selection--multiple{min-height:32px;padding-bottom:3px;cursor:text;zoom:1}.ant-select-selection--multiple:after,.ant-select-selection--multiple:before{display:table;content:""}.ant-select-selection--multiple:after{clear:both}.ant-select-selection--multiple .ant-select-search--inline{position:static;float:left;width:auto;max-width:100%;padding:0}.ant-select-selection--multiple .ant-select-search--inline .ant-select-search__field{width:.75em;max-width:100%}.ant-select-selection--multiple .ant-select-selection__rendered{height:auto;margin-bottom:-3px;margin-left:5px}.ant-select-selection--multiple .ant-select-selection__placeholder{margin-left:6px}.ant-select-selection--multiple .ant-select-selection__rendered>ul>li,.ant-select-selection--multiple>ul>li{height:24px;margin-top:3px;line-height:22px}.ant-select-selection--multiple .ant-select-selection__choice{position:relative;float:left;max-width:99%;margin-right:4px;padding:0 20px 0 10px;overflow:hidden;color:rgba(0,0,0,.65);background-color:#fafafa;border:1px solid #e8e8e8;border-radius:2px;cursor:default;-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-select-selection--multiple .ant-select-selection__choice__disabled{padding:0 10px}.ant-select-selection--multiple .ant-select-selection__choice__content{display:inline-block;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-transition:margin .3s cubic-bezier(.645,.045,.355,1);transition:margin .3s cubic-bezier(.645,.045,.355,1)}.ant-select-selection--multiple .ant-select-selection__choice__remove{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;color:rgba(0,0,0,.45);font-weight:bold;line-height:inherit;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}.ant-select-selection--multiple .ant-select-selection__choice__remove>*{line-height:1}.ant-select-selection--multiple .ant-select-selection__choice__remove svg{display:inline-block}.ant-select-selection--multiple .ant-select-selection__choice__remove:before{display:none}.ant-select-selection--multiple .ant-select-selection__choice__remove .ant-select-selection--multiple .ant-select-selection__choice__remove-icon{display:block}:root .ant-select-selection--multiple .ant-select-selection__choice__remove{font-size:12px}.ant-select-selection--multiple .ant-select-selection__choice__remove:hover{color:rgba(0,0,0,.75)}.ant-select-selection--multiple .ant-select-arrow,.ant-select-selection--multiple .ant-select-selection__clear{top:16px}.ant-select-allow-clear .ant-select-selection--single .ant-select-selection-selected-value{padding-right:16px}.ant-select-allow-clear .ant-select-selection--multiple .ant-select-selection__rendered,.ant-select-show-arrow .ant-select-selection--multiple .ant-select-selection__rendered{margin-right:20px}.ant-select-open .ant-select-arrow-icon svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-select-open .ant-select-selection{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-combobox .ant-select-arrow{display:none}.ant-select-combobox .ant-select-search--inline{float:none;width:100%;height:100%}.ant-select-combobox .ant-select-search__field__wrap{width:100%;height:100%}.ant-select-combobox .ant-select-search__field{position:relative;z-index:1;width:100%;height:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1),height 0s;transition:all .3s cubic-bezier(.645,.045,.355,1),height 0s}.ant-select-combobox.ant-select-allow-clear .ant-select-selection:hover .ant-select-selection__rendered,.ant-select-combobox.ant-select-show-arrow .ant-select-selection:hover .ant-select-selection__rendered{margin-right:20px}.ant-select-dropdown{margin:0;padding:0;color:rgba(0,0,0,.65);font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;font-variant:normal;background-color:#fff;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-menu{max-height:250px;margin-bottom:0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-select-dropdown-menu-item-group-list{margin:0;padding:0}.ant-select-dropdown-menu-item-group-list>.ant-select-dropdown-menu-item{padding-left:20px}.ant-select-dropdown-menu-item-group-title{height:32px;padding:0 12px;color:rgba(0,0,0,.45);font-size:12px;line-height:32px}.ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:first-child:not(:last-child),.ant-select-dropdown-menu-item-group:not(:last-child) .ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:last-child{border-radius:0}.ant-select-dropdown-menu-item{position:relative;display:block;padding:5px 12px;overflow:hidden;color:rgba(0,0,0,.65);font-weight:normal;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled){background-color:#e6f7ff}.ant-select-dropdown-menu-item:first-child{border-radius:4px 4px 0 0}.ant-select-dropdown-menu-item:last-child{border-radius:0 0 4px 4px}.ant-select-dropdown-menu-item-selected{color:rgba(0,0,0,.65);font-weight:600;background-color:#fafafa}.ant-select-dropdown-menu-item-disabled,.ant-select-dropdown-menu-item-disabled:hover{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-dropdown-menu-item-active:not(.ant-select-dropdown-menu-item-disabled){background-color:#e6f7ff}.ant-select-dropdown-menu-item-divider{height:1px;margin:1px 0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item{padding-right:32px}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon{position:absolute;top:50%;right:12px;color:transparent;font-weight:bold;font-size:12px;text-shadow:0 .1px 0,.1px 0 0,0 -.1px 0,-.1px 0;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:all .2s;transition:all .2s}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item:hover .ant-select-selected-icon{color:rgba(0,0,0,.87)}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-disabled .ant-select-selected-icon{display:none}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon,.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon{display:inline-block;color:#1890ff}.ant-select-dropdown--empty.ant-select-dropdown--multiple .ant-select-dropdown-menu-item{padding-right:12px}.ant-select-dropdown-container-open .ant-select-dropdown,.ant-select-dropdown-open .ant-select-dropdown{display:block}.ant-modal{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:100px;width:auto;margin:0 auto;padding-bottom:24px}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-title{margin:0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:rgba(0,0,0,.45);font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;-webkit-transition:color .3s;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:rgba(0,0,0,.75);text-decoration:none}.ant-modal-header{padding:16px 24px;color:rgba(0,0,0,.65);background:#fff;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-modal-footer button+button{margin-bottom:0;margin-left:8px}.ant-modal.zoom-appear,.ant-modal.zoom-enter{-webkit-transform:none;transform:none;opacity:0;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:rgba(0,0,0,.65);filter:alpha(opacity=50)}.ant-modal-mask-hidden{display:none}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;text-align:left;vertical-align:middle}@media (max-width:767px){.ant-modal{max-width:84vw;margin:8px auto}.ant-modal-centered .ant-modal{-ms-flex:1 1;flex:1 1}}.ant-modal-confirm .ant-modal-close,.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper{zoom:1}.ant-modal-confirm-body-wrapper:after,.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{clear:both}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:rgba(0,0,0,.65);font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns button+button{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#f5222d}.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon,.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1890ff}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-form{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:rgba(0,0,0,.45);font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #d9d9d9}.ant-form label{font-size:14px}.ant-form input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-form input[type=checkbox],.ant-form input[type=radio]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form select[multiple],.ant-form select[size]{height:auto}.ant-form input[type=checkbox]:focus,.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output{display:block;padding-top:15px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5}.ant-form-item-required:before{display:inline-block;margin-right:4px;color:#f5222d;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.ant-form-hide-required-mark .ant-form-item-required:before{display:none}.ant-form-item-label>label{color:rgba(0,0,0,.85)}.ant-form-item-label>label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-form-item-label>label.ant-form-item-no-colon:after{content:" "}.ant-checkbox-inline.disabled,.ant-checkbox-vertical.disabled,.ant-checkbox.disabled label,.ant-radio-inline.disabled,.ant-radio-vertical.disabled,.ant-radio.disabled label,input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.ant-form-item{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin-bottom:24px;vertical-align:top}.ant-form-item label{position:relative}.ant-form-item label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-control{position:relative;line-height:40px;zoom:1}.ant-form-item-control:after,.ant-form-item-control:before{display:table;content:""}.ant-form-item-control:after{clear:both}.ant-form-item-children{position:relative}.ant-form-item-with-help{margin-bottom:5px}.ant-form-item-label{display:inline-block;overflow:hidden;line-height:39.9999px;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item .ant-switch{margin:2px 0 4px}.ant-form-explain,.ant-form-extra{clear:both;min-height:22px;margin-top:-2px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5;-webkit-transition:color .3s cubic-bezier(.215,.61,.355,1);transition:color .3s cubic-bezier(.215,.61,.355,1)}.ant-form-explain{margin-bottom:-1px}.ant-form-extra{padding-top:4px}.ant-form-text{display:inline-block;padding-right:8px}.ant-form-split{display:block;text-align:center}form .has-feedback .ant-input{padding-right:24px}form .has-feedback .ant-input-password-icon{margin-right:18px}form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection__clear,form .has-feedback>.ant-select .ant-select-arrow,form .has-feedback>.ant-select .ant-select-selection__clear{right:28px}form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,form .has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:42px}form .has-feedback .ant-cascader-picker-arrow{margin-right:17px}form .has-feedback .ant-calendar-picker-clear,form .has-feedback .ant-calendar-picker-icon,form .has-feedback .ant-cascader-picker-clear,form .has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix,form .has-feedback .ant-time-picker-clear,form .has-feedback .ant-time-picker-icon{right:28px}form .ant-mentions,form textarea.ant-input{height:auto;margin-bottom:4px}form .ant-upload{background:transparent}form input[type=checkbox],form input[type=radio]{width:14px;height:14px}form .ant-checkbox-inline,form .ant-radio-inline{display:inline-block;margin-left:8px;font-weight:normal;vertical-align:middle;cursor:pointer}form .ant-checkbox-inline:first-child,form .ant-radio-inline:first-child{margin-left:0}form .ant-checkbox-vertical,form .ant-radio-vertical{display:block}form .ant-checkbox-vertical+.ant-checkbox-vertical,form .ant-radio-vertical+.ant-radio-vertical{margin-left:0}form .ant-input-number+.ant-form-text{margin-left:8px}form .ant-input-number-handler-wrap{z-index:2}form .ant-cascader-picker,form .ant-select{width:100%}form .ant-input-group .ant-cascader-picker,form .ant-input-group .ant-select{width:auto}form .ant-input-group-wrapper,form :not(.ant-input-group-wrapper)>.ant-input-group{position:relative;top:-1px;display:inline-block;vertical-align:middle}.ant-input-group-wrap .ant-select-selection{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-wrap .ant-select-selection:hover{border-color:#d9d9d9}.ant-input-group-wrap .ant-select-selection--single{height:40px;margin-left:-1px;background-color:rgba(0,0,0,.07)}.ant-input-group-wrap .ant-select-selection--single .ant-select-selection__rendered{padding-right:25px;padding-left:8px;line-height:30px}.ant-input-group-wrap .ant-select-open .ant-select-selection{border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label,.ant-form-vertical .ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-24.ant-form-item-label label:after,.ant-col-xl-24.ant-form-item-label label:after,.ant-form-vertical .ant-form-item-label label:after{display:none}.ant-form-vertical .ant-form-item{padding-bottom:8px}.ant-form-vertical .ant-form-item-control{line-height:1.5}.ant-form-vertical .ant-form-explain{margin-top:2px;margin-bottom:-5px}.ant-form-vertical .ant-form-extra{margin-top:2px;margin-bottom:-4px}@media (max-width:575px){.ant-form-item-control-wrapper,.ant-form-item-label{display:block;width:100%}.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-form-item-label label:after{display:none}.ant-col-xs-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xs-24.ant-form-item-label label:after{display:none}}@media (max-width:767px){.ant-col-sm-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-sm-24.ant-form-item-label label:after{display:none}}@media (max-width:991px){.ant-col-md-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-md-24.ant-form-item-label label:after{display:none}}@media (max-width:1199px){.ant-col-lg-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-lg-24.ant-form-item-label label:after{display:none}}@media (max-width:1599px){.ant-col-xl-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xl-24.ant-form-item-label label:after{display:none}}.ant-form-inline .ant-form-item{display:inline-block;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-control-wrapper,.ant-form-inline .ant-form-item>.ant-form-item-label{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-text,.ant-form-inline .has-feedback{display:inline-block}.has-error.has-feedback .ant-form-item-children-icon,.has-success.has-feedback .ant-form-item-children-icon,.has-warning.has-feedback .ant-form-item-children-icon,.is-validating.has-feedback .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;-webkit-animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.has-error.has-feedback .ant-form-item-children-icon svg,.has-success.has-feedback .ant-form-item-children-icon svg,.has-warning.has-feedback .ant-form-item-children-icon svg,.is-validating.has-feedback .ant-form-item-children-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.has-success.has-feedback .ant-form-item-children-icon{color:#52c41a;-webkit-animation-name:diffZoomIn1!important;animation-name:diffZoomIn1!important}.has-warning .ant-form-explain,.has-warning .ant-form-split{color:#faad14}.has-warning .ant-input,.has-warning .ant-input:hover{border-color:#faad14}.has-warning .ant-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input:not([disabled]):hover{border-color:#faad14}.has-warning .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-affix-wrapper .ant-input,.has-warning .ant-input-affix-wrapper .ant-input:hover{background-color:#fff;border-color:#faad14}.has-warning .ant-input-affix-wrapper .ant-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#faad14}.has-warning .ant-input-prefix{color:#faad14}.has-warning .ant-input-group-addon{color:#faad14;background-color:#fff;border-color:#faad14}.has-warning .has-feedback{color:#faad14}.has-warning.has-feedback .ant-form-item-children-icon{color:#faad14;-webkit-animation-name:diffZoomIn3!important;animation-name:diffZoomIn3!important}.has-warning .ant-select-selection,.has-warning .ant-select-selection:hover{border-color:#faad14}.has-warning .ant-select-focused .ant-select-selection,.has-warning .ant-select-open .ant-select-selection{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-calendar-picker-icon:after,.has-warning .ant-cascader-picker-arrow,.has-warning .ant-picker-icon:after,.has-warning .ant-select-arrow,.has-warning .ant-time-picker-icon:after{color:#faad14}.has-warning .ant-input-number,.has-warning .ant-time-picker-input{border-color:#faad14}.has-warning .ant-input-number-focused,.has-warning .ant-input-number:focus,.has-warning .ant-time-picker-input-focused,.has-warning .ant-time-picker-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-number:not([disabled]):hover,.has-warning .ant-time-picker-input:not([disabled]):hover{border-color:#faad14}.has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-error .ant-form-explain,.has-error .ant-form-split{color:#f5222d}.has-error .ant-input,.has-error .ant-input:hover{border-color:#f5222d}.has-error .ant-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input:not([disabled]):hover{border-color:#f5222d}.has-error .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-affix-wrapper .ant-input,.has-error .ant-input-affix-wrapper .ant-input:hover{background-color:#fff;border-color:#f5222d}.has-error .ant-input-affix-wrapper .ant-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#f5222d}.has-error .ant-input-prefix{color:#f5222d}.has-error .ant-input-group-addon{color:#f5222d;background-color:#fff;border-color:#f5222d}.has-error .has-feedback{color:#f5222d}.has-error.has-feedback .ant-form-item-children-icon{color:#f5222d;-webkit-animation-name:diffZoomIn2!important;animation-name:diffZoomIn2!important}.has-error .ant-select-selection,.has-error .ant-select-selection:hover{border-color:#f5222d}.has-error .ant-select-focused .ant-select-selection,.has-error .ant-select-open .ant-select-selection{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#f5222d}.has-error .ant-input-group-addon .ant-select-selection{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.has-error .ant-calendar-picker-icon:after,.has-error .ant-cascader-picker-arrow,.has-error .ant-picker-icon:after,.has-error .ant-select-arrow,.has-error .ant-time-picker-icon:after{color:#f5222d}.has-error .ant-input-number,.has-error .ant-time-picker-input{border-color:#f5222d}.has-error .ant-input-number-focused,.has-error .ant-input-number:focus,.has-error .ant-time-picker-input-focused,.has-error .ant-time-picker-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-number:not([disabled]):hover,.has-error .ant-mention-wrapper .ant-mention-editor,.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover,.has-error .ant-time-picker-input:not([disabled]):hover{border-color:#f5222d}.has-error .ant-cascader-picker:focus .ant-cascader-input,.has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-transfer-list{border-color:#f5222d}.has-error .ant-transfer-list-search:not([disabled]){border-color:#d9d9d9}.has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#40a9ff;border-right-width:1px!important}.has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.is-validating.has-feedback .ant-form-item-children-icon{display:inline-block;color:#1890ff}.ant-advanced-search-form .ant-form-item{margin-bottom:24px}.ant-advanced-search-form .ant-form-item-with-help{margin-bottom:5px}.show-help-appear,.show-help-enter,.show-help-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.show-help-appear.show-help-appear-active,.show-help-enter.show-help-enter-active{-webkit-animation-name:antShowHelpIn;animation-name:antShowHelpIn;-webkit-animation-play-state:running;animation-play-state:running}.show-help-leave.show-help-leave-active{-webkit-animation-name:antShowHelpOut;animation-name:antShowHelpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.show-help-appear,.show-help-enter{opacity:0}.show-help-appear,.show-help-enter,.show-help-leave{-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1)}@-webkit-keyframes antShowHelpIn{0%{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes antShowHelpIn{0%{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes antShowHelpOut{to{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}}@keyframes antShowHelpOut{to{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}}@-webkit-keyframes diffZoomIn1{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn1{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes diffZoomIn2{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn2{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes diffZoomIn3{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn3{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}.ant-breadcrumb{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";color:rgba(0,0,0,.45);font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:rgba(0,0,0,.45);-webkit-transition:color .3s;transition:color .3s}.ant-breadcrumb a:hover{color:#40a9ff}.ant-breadcrumb>span:last-child{color:rgba(0,0,0,.65)}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:rgba(0,0,0,.45)}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.pageHeader___2o00J{background:#fff;padding:16px 32px 0;border-bottom:1px solid #e8e8e8}.pageHeader___2o00J .detail___3YCEL,.pageHeader___2o00J .row___1NicN{display:-ms-flexbox;display:flex}.pageHeader___2o00J .breadcrumb___1RgcN{margin-bottom:16px}.pageHeader___2o00J .tabs___1db7G{margin:0 0 -17px -8px}.pageHeader___2o00J .tabs___1db7G .ant-tabs-bar{border-bottom:1px solid #e8e8e8}.pageHeader___2o00J .logo___2Jy3j{-ms-flex:0 1 auto;flex:0 1 auto;margin-right:16px;padding-top:1px}.pageHeader___2o00J .logo___2Jy3j>img{width:28px;height:28px;border-radius:4px;display:block}.pageHeader___2o00J .title___3k7FD{font-size:20px;font-weight:500;color:rgba(0,0,0,.85)}.pageHeader___2o00J .action___2X5XQ{margin-left:56px;min-width:266px}.pageHeader___2o00J .action___2X5XQ .ant-btn-group:not(:last-child),.pageHeader___2o00J .action___2X5XQ .ant-btn:not(:last-child){margin-right:8px}.pageHeader___2o00J .action___2X5XQ .ant-btn-group>.ant-btn{margin-right:0}.pageHeader___2o00J .action___2X5XQ,.pageHeader___2o00J .content___24A1B,.pageHeader___2o00J .extraContent___18heq,.pageHeader___2o00J .main___3p1-H,.pageHeader___2o00J .title___3k7FD{-ms-flex:1 1;flex:1 1}.pageHeader___2o00J .action___2X5XQ,.pageHeader___2o00J .content___24A1B,.pageHeader___2o00J .extraContent___18heq,.pageHeader___2o00J .logo___2Jy3j,.pageHeader___2o00J .title___3k7FD{margin-bottom:16px}.pageHeader___2o00J .action___2X5XQ,.pageHeader___2o00J .extraContent___18heq{text-align:right}.pageHeader___2o00J .extraContent___18heq{margin-left:88px;min-width:242px}@media screen and (max-width:1200px){.pageHeader___2o00J .extraContent___18heq{margin-left:44px}}@media screen and (max-width:992px){.pageHeader___2o00J .extraContent___18heq{margin-left:20px}}@media screen and (max-width:768px){.pageHeader___2o00J .row___1NicN{display:block}.pageHeader___2o00J .action___2X5XQ,.pageHeader___2o00J .extraContent___18heq{margin-left:0;text-align:left}}@media screen and (max-width:576px){.pageHeader___2o00J .detail___3YCEL{display:block}}@media screen and (max-width:480px){.pageHeader___2o00J .action___2X5XQ .ant-btn,.pageHeader___2o00J .action___2X5XQ .ant-btn-group{display:block;margin-bottom:8px}.pageHeader___2o00J .action___2X5XQ .ant-btn-group>.ant-btn{display:inline-block;margin-bottom:0}}.content___2koTE{margin:24px 24px 0}@media screen and (max-width:576px){.content___2koTE{margin:24px 0 0}}.tableList___2p41g .tableListOperator___1DcQn{margin-bottom:16px}.tableList___2p41g .tableListOperator___1DcQn button:nth-child(2){margin:0 16px}.tableOperatingButton___3N_tN button{margin-right:8px}.optional___1F0Um{color:rgba(0,0,0,.45);font-style:normal}.tableList___3tHt1 .tableListOperator___3MoG7{margin-bottom:16px}.tableList___3tHt1 .tableListOperator___3MoG7 button:nth-child(2){margin:0 16px}.tableOperatingButton___1thYo button{margin-right:8px}.optional___1Zmpp{color:rgba(0,0,0,.45);font-style:normal}.tableList___2D9Cn .tableListOperator___34dcO{margin-bottom:16px}.tableList___2D9Cn .tableListOperator___34dcO button:nth-child(2){margin:0 16px}.tableOperatingButton___35TlQ button{margin-right:8px}.optional___1_fzL{color:rgba(0,0,0,.45);font-style:normal}.tableList___1nKrX .tableListOperator___2ydBW{margin-bottom:16px}.tableList___1nKrX .tableListOperator___2ydBW button:nth-child(2){margin:0 16px}.tableOperatingButton___29xVN button{margin-right:8px}.optional___2AqUL{color:rgba(0,0,0,.45);font-style:normal}.tableList___3yZl_ .tableListOperator___1GFzN{margin-bottom:16px}.tableList___3yZl_ .tableListOperator___1GFzN button:nth-child(2){margin:0 16px}.tableOperatingButton___3qqKv button{margin-right:8px}.optional___3a9aX{color:rgba(0,0,0,.45);font-style:normal}.tableList___11Isu .tableListOperator___2nXfH{margin-bottom:16px}.tableList___11Isu .tableListOperator___2nXfH button:nth-child(2){margin:0 16px}.tableOperatingButton___1LN5P button{margin-right:8px}.optional___3BmjD{color:rgba(0,0,0,.45);font-style:normal}.tableList___3fZP5 .tableListOperator___26UdV{margin-bottom:16px}.tableList___3fZP5 .tableListOperator___26UdV button:nth-child(2){margin:0 16px}.tableOperatingButton___3M8PJ button{margin-right:8px}.optional___6osfX{color:rgba(0,0,0,.45);font-style:normal}.ant-steps{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:-ms-flexbox;display:flex;width:100%;font-size:0}.ant-steps-item{position:relative;display:inline-block;-ms-flex:1 1;flex:1 1;overflow:hidden;vertical-align:top}.ant-steps-item:last-child{-ms-flex:none;flex:none}.ant-steps-item:last-child>.ant-steps-item-content>.ant-steps-item-title:after,.ant-steps-item:last-child>.ant-steps-item-tail{display:none}.ant-steps-item-content,.ant-steps-item-icon{display:inline-block;vertical-align:top}.ant-steps-item-icon{width:32px;height:32px;margin-right:8px;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";line-height:32px;text-align:center;border:1px solid rgba(0,0,0,.25);border-radius:32px;-webkit-transition:background-color .3s,border-color .3s;transition:background-color .3s,border-color .3s}.ant-steps-item-icon>.ant-steps-icon{position:relative;top:-1px;color:#1890ff;line-height:1}.ant-steps-item-tail{position:absolute;top:12px;left:0;width:100%;padding:0 10px}.ant-steps-item-tail:after{display:inline-block;width:100%;height:1px;background:#e8e8e8;border-radius:1px;-webkit-transition:background .3s;transition:background .3s;content:""}.ant-steps-item-title{position:relative;display:inline-block;padding-right:16px;color:rgba(0,0,0,.65);font-size:16px;line-height:32px}.ant-steps-item-title:after{position:absolute;top:16px;left:100%;display:block;width:9999px;height:1px;background:#e8e8e8;content:""}.ant-steps-item-description{color:rgba(0,0,0,.45);font-size:14px}.ant-steps-item-wait .ant-steps-item-icon{background-color:#fff;border-color:rgba(0,0,0,.25)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon{color:rgba(0,0,0,.25)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:rgba(0,0,0,.25)}.ant-steps-item-wait>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.45)}.ant-steps-item-wait>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#e8e8e8}.ant-steps-item-wait>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.45)}.ant-steps-item-wait>.ant-steps-item-tail:after{background-color:#e8e8e8}.ant-steps-item-process .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-process>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.85)}.ant-steps-item-process>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#e8e8e8}.ant-steps-item-process>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.65)}.ant-steps-item-process>.ant-steps-item-tail:after{background-color:#e8e8e8}.ant-steps-item-process .ant-steps-item-icon{background:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#fff}.ant-steps-item-process .ant-steps-item-title{font-weight:500}.ant-steps-item-finish .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-finish>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.65)}.ant-steps-item-finish>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#1890ff}.ant-steps-item-finish>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.45)}.ant-steps-item-finish>.ant-steps-item-tail:after{background-color:#1890ff}.ant-steps-item-error .ant-steps-item-icon{background-color:#fff;border-color:#f5222d}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon{color:#f5222d}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#f5222d}.ant-steps-item-error>.ant-steps-item-content>.ant-steps-item-title{color:#f5222d}.ant-steps-item-error>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#e8e8e8}.ant-steps-item-error>.ant-steps-item-content>.ant-steps-item-description{color:#f5222d}.ant-steps-item-error>.ant-steps-item-tail:after{background-color:#e8e8e8}.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after{background:#f5222d}.ant-steps-item[role=button]{outline:none}.ant-steps-item[role=button]:not(.ant-steps-item-process){cursor:pointer}.ant-steps-item[role=button]:not(.ant-steps-item-process) .ant-steps-item-description,.ant-steps-item[role=button]:not(.ant-steps-item-process) .ant-steps-item-icon .ant-steps-icon,.ant-steps-item[role=button]:not(.ant-steps-item-process) .ant-steps-item-title{-webkit-transition:color .3s;transition:color .3s}.ant-steps-item[role=button]:not(.ant-steps-item-process):hover .ant-steps-item-description,.ant-steps-item[role=button]:not(.ant-steps-item-process):hover .ant-steps-item-title{color:#1890ff}.ant-steps-item[role=button]:not(.ant-steps-item-process):hover .ant-steps-item-icon{border-color:#1890ff}.ant-steps-item[role=button]:not(.ant-steps-item-process):hover .ant-steps-item-icon .ant-steps-icon{color:#1890ff}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{margin-right:16px;white-space:nowrap}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child{margin-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal}.ant-steps-item-custom .ant-steps-item-icon{height:auto;background:none;border:0}.ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{top:0;left:.5px;width:32px;height:32px;font-size:24px;line-height:32px}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{margin-right:12px}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child{margin-right:0}.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;font-size:12px;line-height:24px;text-align:center;border-radius:24px}.ant-steps-small .ant-steps-item-title{padding-right:12px;font-size:14px;line-height:24px}.ant-steps-small .ant-steps-item-title:after{top:12px}.ant-steps-small .ant-steps-item-description{color:rgba(0,0,0,.45);font-size:14px}.ant-steps-small .ant-steps-item-tail{top:8px;padding:0 8px}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:none;border:0;border-radius:0}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{font-size:24px;line-height:24px;-webkit-transform:none;transform:none}.ant-steps-vertical{display:block}.ant-steps-vertical .ant-steps-item{display:block;overflow:visible}.ant-steps-vertical .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-vertical .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-vertical .ant-steps-item-title{line-height:32px}.ant-steps-vertical .ant-steps-item-description{padding-bottom:12px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-vertical>.ant-steps-item:not(:last-child)>.ant-steps-item-tail{display:block}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-vertical.ant-steps-small .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-vertical.ant-steps-small .ant-steps-item-title{line-height:24px}@media (max-width:480px){.ant-steps-horizontal.ant-steps-label-horizontal{display:block}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item{display:block;overflow:visible}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-title{line-height:32px}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-description{padding-bottom:12px}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item:not(:last-child)>.ant-steps-item-tail{display:block}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-title{line-height:24px}}.ant-steps-label-vertical .ant-steps-item{overflow:visible}.ant-steps-label-vertical .ant-steps-item-tail{margin-left:51px;padding:3.5px 24px}.ant-steps-label-vertical .ant-steps-item-content{display:block;width:104px;margin-top:8px;text-align:center}.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-left:36px}.ant-steps-label-vertical .ant-steps-item-title{padding-right:0}.ant-steps-label-vertical .ant-steps-item-title:after{display:none}.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-left:40px}.ant-steps-dot .ant-steps-item-title{line-height:1.5}.ant-steps-dot .ant-steps-item-tail{top:2px;width:100%;margin:0 0 0 70px;padding:0}.ant-steps-dot .ant-steps-item-tail:after{width:calc(100% - 20px);height:3px;margin-left:12px}.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:2px}.ant-steps-dot .ant-steps-item-icon{width:8px;height:8px;margin-left:67px;padding-right:0;line-height:8px;background:transparent;border:0}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;-webkit-transition:all .3s;transition:all .3s}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after{position:absolute;top:-12px;left:-26px;width:60px;height:32px;background:rgba(0,0,0,.001);content:""}.ant-steps-dot .ant-steps-item-content{width:140px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon{width:10px;height:10px;line-height:10px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon .ant-steps-icon-dot{top:-1px}.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:8px;margin-left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-tail{top:2px;left:-9px;margin:0;padding:22px 0 4px}.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{left:-2px}.ant-steps-flex-not-supported.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item{margin-left:-16px;padding-left:16px;background:#fff}.ant-steps-flex-not-supported.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item{margin-left:-12px;padding-left:12px}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item:last-child{overflow:hidden}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item:last-child .ant-steps-icon-dot:after{right:-200px;width:200px}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item .ant-steps-icon-dot:after,.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item .ant-steps-icon-dot:before{position:absolute;top:0;left:-10px;width:10px;height:8px;background:#fff;content:""}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item .ant-steps-icon-dot:after{right:-10px;left:auto}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#ccc}.result___3MT0t{text-align:center;width:72%;margin:0 auto}@media screen and (max-width:480px){.result___3MT0t{width:100%}}.result___3MT0t .icon___2I7tI{font-size:72px;line-height:72px;margin-bottom:24px}.result___3MT0t .icon___2I7tI>.success___3MyvX{color:#52c41a}.result___3MT0t .icon___2I7tI>.error___1z1VJ{color:#f5222d}.result___3MT0t .title___37kb5{font-size:24px;color:rgba(0,0,0,.85);font-weight:500;line-height:32px;margin-bottom:16px}.result___3MT0t .description___2LvEs{font-size:14px;line-height:22px;color:rgba(0,0,0,.45);margin-bottom:24px}.result___3MT0t .extra___1w4GT{background:#fafafa;padding:24px 40px;border-radius:2px;text-align:left}@media screen and (max-width:480px){.result___3MT0t .extra___1w4GT{padding:18px 20px}}.result___3MT0t .actions___3mAWN{margin-top:32px}.result___3MT0t .actions___3mAWN button:not(:last-child){margin-right:8px}.trigger___2JMpq{background:"red"}.trigger___2JMpq .ant-btn{margin-right:8px;margin-bottom:12px}.container___3iDxi{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100vh;overflow:auto;background:#f0f2f5}.content___uzjj4{padding:32px 0;-ms-flex:1 1;flex:1 1}@media (min-width:768px){.container___3iDxi{background-image:url("https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg");background-repeat:no-repeat;background-position:center 110px;background-size:100%}.content___uzjj4{padding:262px 0 24px}}.top___3n9iI{text-align:center}.header___3QBje{height:44px;line-height:44px}.header___3QBje a{text-decoration:none}.logo___231LY{height:44px;vertical-align:top;margin-right:16px}.title___HsWEB{font-size:33px;color:rgba(0,0,0,.85);font-family:"Myriad Pro","Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:600;position:relative;top:2px}.desc___18_Ez{font-size:16px;color:rgba(0,0,0,.45);margin-top:40px;margin-bottom:40px}.ant-alert{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;padding:8px 15px 8px 37px;border-radius:4px}.ant-alert.ant-alert-no-icon{padding:8px 15px}.ant-alert.ant-alert-closable{padding-right:30px}.ant-alert-icon{position:absolute;top:11.5px;left:16px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#f6ffed;border:1px solid #b7eb8f}.ant-alert-success .ant-alert-icon{color:#52c41a}.ant-alert-info{background-color:#e6f7ff;border:1px solid #91d5ff}.ant-alert-info .ant-alert-icon{color:#1890ff}.ant-alert-warning{background-color:#fffbe6;border:1px solid #ffe58f}.ant-alert-warning .ant-alert-icon{color:#faad14}.ant-alert-error{background-color:#fff1f0;border:1px solid #ffa39e}.ant-alert-error .ant-alert-icon{color:#f5222d}.ant-alert-close-icon{position:absolute;top:8px;right:16px;overflow:hidden;font-size:12px;line-height:22px;cursor:pointer}.ant-alert-close-icon .anticon-close{color:rgba(0,0,0,.45);-webkit-transition:color .3s;transition:color .3s}.ant-alert-close-icon .anticon-close:hover{color:rgba(0,0,0,.75)}.ant-alert-close-text{position:absolute;right:16px}.ant-alert-with-description{position:relative;padding:15px 15px 15px 64px;color:rgba(0,0,0,.65);line-height:1.5;border-radius:4px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{position:absolute;top:16px;left:24px;font-size:24px}.ant-alert-with-description .ant-alert-close-icon{position:absolute;top:16px;right:16px;font-size:14px;cursor:pointer}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:rgba(0,0,0,.85);font-size:16px}.ant-alert-with-description .ant-alert-description{display:block}.ant-alert.ant-alert-close{height:0!important;margin:0;padding-top:0;padding-bottom:0;-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert-slide-up-leave{-webkit-animation:antAlertSlideUpOut .3s cubic-bezier(.78,.14,.15,.86);animation:antAlertSlideUpOut .3s cubic-bezier(.78,.14,.15,.86);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}@-webkit-keyframes antAlertSlideUpIn{0%{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antAlertSlideUpIn{0%{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antAlertSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antAlertSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}.login___3b2Rd .tabs___RM-48{padding:0 2px;margin:0 -2px}.login___3b2Rd .tabs___RM-48 .ant-tabs-tab{font-size:16px;line-height:24px}.login___3b2Rd .tabs___RM-48 .ant-input-affix-wrapper .ant-input:not(:first-child){padding-left:34px}.login___3b2Rd .ant-tabs .ant-tabs-bar{border-bottom:0;margin-bottom:24px;text-align:center}.login___3b2Rd .ant-form-item{margin-bottom:24px}.login___3b2Rd .prefixIcon___3U_W7{font-size:14px;color:rgba(0,0,0,.25)}.login___3b2Rd .getCaptcha___3Lj_O{display:block;width:100%;height:42px}.login___3b2Rd .submit___3HI56{width:100%;margin-top:24px}.main___1EvSR{width:368px;margin:0 auto}@media screen and (max-width:576px){.main___1EvSR{width:95%}}.main___1EvSR .icon___1eW9D{font-size:24px;color:rgba(0,0,0,.2);margin-left:16px;vertical-align:middle;cursor:pointer;-webkit-transition:color .3s;transition:color .3s}.main___1EvSR .icon___1eW9D:hover{color:#1890ff}.main___1EvSR .other___2FMl-{text-align:left;margin-top:24px;line-height:22px}.main___1EvSR .other___2FMl- .register___29gTK{float:right}.ant-popover{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:0;left:0;z-index:1030;font-weight:normal;white-space:normal;text-align:left;cursor:auto;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ant-popover:after{position:absolute;background:hsla(0,0%,100%,.01);content:""}.ant-popover-hidden{display:none}.ant-popover-placement-top,.ant-popover-placement-topLeft,.ant-popover-placement-topRight{padding-bottom:10px}.ant-popover-placement-right,.ant-popover-placement-rightBottom,.ant-popover-placement-rightTop{padding-left:10px}.ant-popover-placement-bottom,.ant-popover-placement-bottomLeft,.ant-popover-placement-bottomRight{padding-top:10px}.ant-popover-placement-left,.ant-popover-placement-leftBottom,.ant-popover-placement-leftTop{padding-right:10px}.ant-popover-inner{background-color:#fff;background-clip:padding-box;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-box-shadow:0 0 8px rgba(0,0,0,.15)\9;box-shadow:0 0 8px rgba(0,0,0,.15)\9}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.ant-popover-inner{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}}.ant-popover-title{min-width:177px;min-height:32px;margin:0;padding:5px 16px 4px;color:rgba(0,0,0,.85);font-weight:500;border-bottom:1px solid #e8e8e8}.ant-popover-inner-content{padding:12px 16px;color:rgba(0,0,0,.65)}.ant-popover-message{position:relative;padding:4px 0 12px;color:rgba(0,0,0,.65);font-size:14px}.ant-popover-message>.anticon{position:absolute;top:8px;color:#faad14;font-size:14px}.ant-popover-message-title{padding-left:22px}.ant-popover-buttons{margin-bottom:4px;text-align:right}.ant-popover-buttons button{margin-left:8px}.ant-popover-arrow{position:absolute;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{bottom:6.2px;border-top-color:transparent;border-right-color:#fff;border-bottom-color:#fff;border-left-color:transparent;-webkit-box-shadow:3px 3px 7px rgba(0,0,0,.07);box-shadow:3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow{left:50%;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{left:6px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:#fff;border-left-color:#fff;-webkit-box-shadow:-3px 3px 7px rgba(0,0,0,.07);box-shadow:-3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow{top:50%;-webkit-transform:translateY(-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{top:6px;border-top-color:#fff;border-right-color:transparent;border-bottom-color:transparent;border-left-color:#fff;-webkit-box-shadow:-2px -2px 5px rgba(0,0,0,.06);box-shadow:-2px -2px 5px rgba(0,0,0,.06)}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow{left:50%;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{right:6px;border-top-color:#fff;border-right-color:#fff;border-bottom-color:transparent;border-left-color:transparent;-webkit-box-shadow:3px -3px 7px rgba(0,0,0,.07);box-shadow:3px -3px 7px rgba(0,0,0,.07)}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow{top:50%;-webkit-transform:translateY(-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-progress{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-progress-line{position:relative;width:100%;font-size:14px}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px}.ant-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ant-progress-show-info .ant-progress-outer{margin-right:calc(-2em - 8px);padding-right:calc(2em + 8px)}.ant-progress-inner{position:relative;display:inline-block;width:100%;vertical-align:middle;background-color:#f5f5f5;border-radius:100px}.ant-progress-circle-trail{stroke:#f5f5f5}.ant-progress-circle-path{-webkit-animation:ant-progress-appear .3s;animation:ant-progress-appear .3s;stroke:#1890ff}.ant-progress-bg,.ant-progress-success-bg{position:relative;background-color:#1890ff;-webkit-transition:all .4s cubic-bezier(.08,.82,.17,1) 0s;transition:all .4s cubic-bezier(.08,.82,.17,1) 0s}.ant-progress-success-bg{position:absolute;top:0;left:0;background-color:#52c41a}.ant-progress-text{display:inline-block;width:2em;margin-left:8px;color:rgba(0,0,0,.45);font-size:1em;line-height:1;white-space:nowrap;text-align:left;vertical-align:middle;word-break:normal}.ant-progress-text .anticon{font-size:14px}.ant-progress-status-active .ant-progress-bg:before{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;border-radius:10px;opacity:0;-webkit-animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;content:""}.ant-progress-status-exception .ant-progress-bg{background-color:#f5222d}.ant-progress-status-exception .ant-progress-text{color:#f5222d}.ant-progress-status-exception .ant-progress-circle-path{stroke:#f5222d}.ant-progress-status-success .ant-progress-bg{background-color:#52c41a}.ant-progress-status-success .ant-progress-text{color:#52c41a}.ant-progress-status-success .ant-progress-circle-path{stroke:#52c41a}.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:transparent}.ant-progress-circle .ant-progress-text{position:absolute;top:50%;left:50%;width:100%;margin:0;padding:0;color:rgba(0,0,0,.65);line-height:1;white-space:normal;text-align:center;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-progress-circle .ant-progress-text .anticon{font-size:1.16666667em}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#f5222d}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#52c41a}@-webkit-keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}@keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}.main___10tWl{width:368px;margin:0 auto}.main___10tWl .ant-form-item{margin-bottom:24px}.main___10tWl h3{font-size:16px;margin-bottom:20px}.main___10tWl .getCaptcha___21yu0{display:block;width:100%}.main___10tWl .submit___3P_UT{width:50%}.main___10tWl .login___mpiT_{float:right;line-height:40px}.error___26UIc,.success___3Sa6m,.warning___2T0Oy{-webkit-transition:color .3s;transition:color .3s}.success___3Sa6m{color:#52c41a}.warning___2T0Oy{color:#faad14}.error___26UIc{color:#f5222d}.progress-pass___1vCzd>.progress___1eGYF .ant-progress-bg{background-color:#faad14}.registerResult___1eHSr .anticon{font-size:64px}.registerResult___1eHSr .title___MYr-i{margin-top:32px;font-size:20px;line-height:28px}.registerResult___1eHSr .actions___2Yota{margin-top:40px}.registerResult___1eHSr .actions___2Yota a+a{margin-left:8px}
================================================
FILE: app/public/index.3eaede4e.js
================================================
!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="app/public",t(t.s="YMPV")}({"+1cx":function(e,t,n){"use strict";function r(e){return e[a]={},o(e)}function o(e){return e[a]}function i(e){delete e[a]}var a="_erd";e.exports={initState:r,getState:o,cleanState:i}},"+66z":function(e,t){function n(e){return o.call(e)}var r=Object.prototype,o=r.toString;e.exports=n},"+6Bu":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},"+ASi":function(e,t,n){"use strict";function r(e){var t=e.schema,n=e.idSchema,r=e.reason;return i.default.createElement("div",{className:"unsupported-field"},i.default.createElement("p",null,"Unsupported field schema",n&&n.$id&&i.default.createElement("span",null," for"," field ",i.default.createElement("code",null,n.$id)),r&&i.default.createElement("em",null,": ",r),"."),t&&i.default.createElement("pre",null,JSON.stringify(t,null,2)))}var o=n("ouCL");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n("GiK3")),a=(o(n("KSGD")),r);t.default=a},"+Bak":function(e,t,n){"use strict";function r(e){var t=e.schema,n=e.name,r=e.uiSchema,o=e.idSchema,i=e.formData,u=e.required,f=e.disabled,h=e.readonly,d=e.autofocus,p=e.onChange,m=e.onBlur,v=e.onFocus,g=e.registry,y=void 0===g?(0,l.getDefaultRegistry)():g,b=e.rawErrors,w=t.title,C=t.format,E=y.widgets,x=y.formContext,S=(0,l.isSelect)(t)&&(0,l.optionsList)(t),k=C||(S?"select":"text"),_=(0,l.getUiOptions)(r),O=_.widget,M=void 0===O?k:O,A=_.placeholder,P=void 0===A?"":A,F=(0,s.default)(_,["widget","placeholder"]),z=(0,l.getWidget)(t,M,E);return z?c.default.createElement(z,{options:(0,a.default)({},F,{enumOptions:S}),schema:t,id:o&&o.$id,label:void 0===w?n:w,value:i,onChange:p,onBlur:m,onFocus:v,required:u,disabled:f,readonly:h,formContext:x,autofocus:d,registry:y,placeholder:P,rawErrors:b}):null}var o=n("mhuh"),i=n("ouCL");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n("+TWC")),s=i(n("7b0f")),c=i(n("GiK3")),l=(o(n("AXVs")),n("4Mzz"));r.defaultProps={uiSchema:{},disabled:!1,readonly:!1,autofocus:!1};var u=r;t.default=u},"+CM9":function(e,t,n){"use strict";var r=n("Ds5P"),o=n("ot5s")(!1),i=[].indexOf,a=!!i&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(a||!n("NNrz")(i)),"Array",{indexOf:function(e){return a?i.apply(this,arguments)||0:o(this,e,arguments[1])}})},"+E39":function(e,t,n){e.exports=!n("S82l")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},"+HRN":function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t,n){e.copy(t,n)}var i=n("X3l8").Buffer,a=n(2);e.exports=function(){function e(){r(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var t=i.allocUnsafe(e>>>0),n=this.head,r=0;n;)o(n.data,t,r),r+=n.data.length,n=n.next;return t},e}(),a&&a.inspect&&a.inspect.custom&&(e.exports.prototype[a.inspect.custom]=function(){var e=a.inspect({length:this.length});return this.constructor.name+" "+e})},"+HsV":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e){for(var t=1;t0&&e.handleMarkers(S,t);for(var k=0;k0?a({marginLeft:v/-2,marginRight:v/-2},h):h,C=a({},p);return delete C.gutter,y.createElement(E.a.Provider,{value:{gutter:v}},y.createElement("div",a({},C,{className:g,style:b}),d))},e}return p(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this;this.token=F.subscribe(function(t){"object"===i(e.props.gutter)&&e.setState({screens:t})})}},{key:"componentWillUnmount",value:function(){F.unsubscribe(this.token)}},{key:"getGutter",value:function(){var e=this.props.gutter;if("object"===i(e))for(var t=0;tthis.eventPool.length&&this.eventPool.push(e)}function L(e){e.eventPool=[],e.getPooled=z,e.release=T}function D(e,t){switch(e){case"keyup":return-1!==$o.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function j(e){return e=e.detail,"object"==typeof e&&"data"in e?e.data:null}function R(e,t){switch(e){case"compositionend":return j(t);case"keypress":return 32!==t.which?null:(Qo=!0,Go);case"textInput":return e=t.data,e===Go&&Qo?null:e;default:return null}}function N(e,t){if(Xo)return"compositionend"===e||!Wo&&D(e,t)?(e=M(),Ho=Io=No=null,Xo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1t}return!1}function ie(e,t,n,r,o){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t}function ae(e){return e[1].toUpperCase()}function se(e,t,n,r){var o=Si.hasOwnProperty(t)?Si[t]:null;(null!==o?0===o.type:!r&&(2ra.length&&ra.push(e)}}}function He(e){return Object.prototype.hasOwnProperty.call(e,sa)||(e[sa]=aa++,ia[e[sa]]={}),ia[e[sa]]}function Ve(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Be(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function $e(e,t){var n=Be(e);e=0;for(var r;n;){if(3===n.nodeType){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Be(n)}}function We(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?We(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function Ue(){for(var e=window,t=Ve();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;e=t.contentWindow,t=Ve(e.document)}return t}function Ke(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function qe(){var e=Ue();if(Ke(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var n=t.getSelection&&t.getSelection();if(n&&0!==n.rangeCount){t=n.anchorNode;var r=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{t.nodeType,o.nodeType}catch(e){t=null;break e}var i=0,a=-1,s=-1,c=0,l=0,u=e,f=null;t:for(;;){for(var h;u!==t||0!==r&&3!==u.nodeType||(a=i+r),u!==o||0!==n&&3!==u.nodeType||(s=i+n),3===u.nodeType&&(i+=u.nodeValue.length),null!==(h=u.firstChild);)f=u,u=h;for(;;){if(u===e)break t;if(f===t&&++c===r&&(a=i),f===o&&++l===n&&(s=i),null!==(h=u.nextSibling))break;u=f,f=u.parentNode}u=h}t=-1===a||-1===s?null:{start:a,end:s}}else t=null}t=t||{start:0,end:0}}else t=null;return{focusedElem:e,selectionRange:t}}function Ge(e){var t=Ue(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&We(n.ownerDocument.documentElement,n)){if(null!==r&&Ke(n))if(t=r.start,e=r.end,void 0===e&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=void 0===r.end?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=$e(n,i);var a=$e(n,r);o&&a&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n=t.length||o("93"),t=t[0]),n=t),null==n&&(n="")),e._wrapperState={initialValue:ce(n)}}function tt(e,t){var n=ce(t.value),r=ce(t.defaultValue);null!=n&&(n=""+n,n!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function nt(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)}function rt(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ot(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?rt(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}function it(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function at(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ya.hasOwnProperty(e)&&ya[e]?(""+t).trim():t+"px"}function st(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=at(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}function ct(e,t){t&&(wa[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&o("137",e,""),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&o("60"),"object"==typeof t.dangerouslySetInnerHTML&&"__html"in t.dangerouslySetInnerHTML||o("61")),null!=t.style&&"object"!=typeof t.style&&o("62",""))}function lt(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function ut(e,t){e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument;var n=He(e);t=wo[t];for(var r=0;rMa||(e.current=Oa[Ma],Oa[Ma]=null,Ma--)}function yt(e,t){Ma++,Oa[Ma]=e.current,e.current=t}function bt(e,t){var n=e.type.contextTypes;if(!n)return Aa;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function wt(e){return null!==(e=e.childContextTypes)&&void 0!==e}function Ct(e){gt(Fa,e),gt(Pa,e)}function Et(e){gt(Fa,e),gt(Pa,e)}function xt(e,t,n){Pa.current!==Aa&&o("168"),yt(Pa,t,e),yt(Fa,n,e)}function St(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;r=r.getChildContext();for(var i in r)i in e||o("108",ee(t)||"Unknown",i);return so({},n,r)}function kt(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||Aa,za=Pa.current,yt(Pa,t,e),yt(Fa,Fa.current,e),!0}function _t(e,t,n){var r=e.stateNode;r||o("169"),n?(t=St(e,t,za),r.__reactInternalMemoizedMergedChildContext=t,gt(Fa,e),gt(Pa,e),yt(Pa,t,e)):gt(Fa,e),yt(Fa,n,e)}function Ot(e){return function(t){try{return e(t)}catch(e){}}}function Mt(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ta=Ot(function(e){return t.onCommitFiberRoot(n,e)}),La=Ot(function(e){return t.onCommitFiberUnmount(n,e)})}catch(e){}return!0}function At(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Pt(e,t,n,r){return new At(e,t,n,r)}function Ft(e){return!(!(e=e.prototype)||!e.isReactComponent)}function zt(e){if("function"==typeof e)return Ft(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===mi)return 11;if(e===gi)return 14}return 2}function Tt(e,t){var n=e.alternate;return null===n?(n=Pt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,n.contextDependencies=e.contextDependencies,n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Lt(e,t,n,r,i,a){var s=2;if(r=e,"function"==typeof e)Ft(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case li:return Dt(n.children,i,a,t);case pi:return jt(n,3|i,a,t);case ui:return jt(n,2|i,a,t);case fi:return e=Pt(12,n,t,4|i),e.elementType=fi,e.type=fi,e.expirationTime=a,e;case vi:return e=Pt(13,n,t,i),e.elementType=vi,e.type=vi,e.expirationTime=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case hi:s=10;break e;case di:s=9;break e;case mi:s=11;break e;case gi:s=14;break e;case yi:s=16,r=null;break e}o("130",null==e?e:typeof e,"")}return t=Pt(s,n,t,i),t.elementType=e,t.type=r,t.expirationTime=a,t}function Dt(e,t,n,r){return e=Pt(7,e,r,t),e.expirationTime=n,e}function jt(e,t,n,r){return e=Pt(8,e,r,t),t=0==(1&t)?ui:pi,e.elementType=t,e.type=t,e.expirationTime=n,e}function Rt(e,t,n){return e=Pt(6,e,null,t),e.expirationTime=n,e}function Nt(e,t,n){return t=Pt(4,null!==e.children?e.children:[],e.key,t),t.expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function It(e,t){e.didError=!1;var n=e.earliestPendingTime;0===n?e.earliestPendingTime=e.latestPendingTime=t:nt&&(e.latestPendingTime=t),$t(t,e)}function Ht(e,t){if(e.didError=!1,0===t)e.earliestPendingTime=0,e.latestPendingTime=0,e.earliestSuspendedTime=0,e.latestSuspendedTime=0,e.latestPingedTime=0;else{tt?e.earliestPendingTime=e.latestPendingTime=0:e.earliestPendingTime>t&&(e.earliestPendingTime=e.latestPendingTime)),n=e.earliestSuspendedTime,0===n?It(e,t):tn&&It(e,t)}$t(0,e)}function Vt(e,t){e.didError=!1,e.latestPingedTime>=t&&(e.latestPingedTime=0);var n=e.earliestPendingTime,r=e.latestPendingTime;n===t?e.earliestPendingTime=r===t?e.latestPendingTime=0:r:r===t&&(e.latestPendingTime=n),n=e.earliestSuspendedTime,r=e.latestSuspendedTime,0===n?e.earliestSuspendedTime=e.latestSuspendedTime=t:nt&&(e.latestSuspendedTime=t),$t(t,e)}function Bt(e,t){var n=e.earliestPendingTime;return e=e.earliestSuspendedTime,n>t&&(t=n),e>t&&(t=e),t}function $t(e,t){var n=t.earliestSuspendedTime,r=t.latestSuspendedTime,o=t.earliestPendingTime,i=t.latestPingedTime;o=0!==o?o:i,0===o&&(0===e||re&&(e=n),t.nextExpirationTimeToWorkOn=o,t.expirationTime=e}function Wt(e,t){if(e&&e.defaultProps){t=so({},t),e=e.defaultProps;for(var n in e)void 0===t[n]&&(t[n]=e[n])}return t}function Ut(e){var t=e._result;switch(e._status){case 1:return t;case 2:case 0:throw t;default:switch(e._status=0,t=e._ctor,t=t(),t.then(function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)},function(t){0===e._status&&(e._status=2,e._result=t)}),e._status){case 1:return e._result;case 2:throw e._result}throw e._result=t,t}}function Kt(e,t,n,r){t=e.memoizedState,n=n(r,t),n=null===n||void 0===n?t:so({},t,n),e.memoizedState=n,null!==(r=e.updateQueue)&&0===e.expirationTime&&(r.baseState=n)}function qt(e,t,n,r,o,i,a){return e=e.stateNode,"function"==typeof e.shouldComponentUpdate?e.shouldComponentUpdate(r,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!Me(n,r)||!Me(o,i))}function Gt(e,t,n){var r=!1,o=Aa,i=t.contextType;return"object"==typeof i&&null!==i?i=Vn(i):(o=wt(t)?za:Pa.current,r=t.contextTypes,i=(r=null!==r&&void 0!==r)?bt(e,o):Aa),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ja,e.stateNode=t,t._reactInternalFiber=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function Yt(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ja.enqueueReplaceState(t,t.state,null)}function Qt(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Da;var i=t.contextType;"object"==typeof i&&null!==i?o.context=Vn(i):(i=wt(t)?za:Pa.current,o.context=bt(e,i)),i=e.updateQueue,null!==i&&(Qn(e,i,n,o,r),o.state=e.memoizedState),i=t.getDerivedStateFromProps,"function"==typeof i&&(Kt(e,t,i,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ja.enqueueReplaceState(o,o.state,null),null!==(i=e.updateQueue)&&(Qn(e,i,n,o,r),o.state=e.memoizedState)),"function"==typeof o.componentDidMount&&(e.effectTag|=4)}function Xt(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){n=n._owner;var r=void 0;n&&(1!==n.tag&&o("309"),r=n.stateNode),r||o("147",e);var i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=r.refs;t===Da&&(t=r.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}"string"!=typeof e&&o("284"),n._owner||o("290",e)}return e}function Jt(e,t){"textarea"!==e.type&&o("31","[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,"")}function Zt(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function i(e,t,n){return e=Tt(e,t,n),e.index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index,rm?(v=f,f=null):v=f.sibling;var g=d(o,f,s[m],c);if(null===g){null===f&&(f=v);break}e&&f&&null===g.alternate&&t(o,f),i=a(g,i,m),null===u?l=g:u.sibling=g,u=g,f=v}if(m===s.length)return n(o,f),l;if(null===f){for(;mv?(g=m,m=null):g=m.sibling;var b=d(i,m,y.value,l);if(null===b){m||(m=g);break}e&&m&&null===b.alternate&&t(i,m),s=a(b,s,v),null===f?u=b:f.sibling=b,f=b,m=g}if(y.done)return n(i,m),u;if(null===m){for(;!y.done;v++,y=c.next())null!==(y=h(i,y.value,l))&&(s=a(y,s,v),null===f?u=y:f.sibling=y,f=y);return u}for(m=r(i,m);!y.done;v++,y=c.next())null!==(y=p(m,i,v,y.value,l))&&(e&&null!==y.alternate&&m.delete(null===y.key?v:y.key),s=a(y,s,v),null===f?u=y:f.sibling=y,f=y);return e&&m.forEach(function(e){return t(i,e)}),u}return function(e,r,a,c){var l="object"==typeof a&&null!==a&&a.type===li&&null===a.key;l&&(a=a.props.children);var u="object"==typeof a&&null!==a;if(u)switch(a.$$typeof){case si:e:{for(u=a.key,l=r;null!==l;){if(l.key===u){if(7===l.tag?a.type===li:l.elementType===a.type){n(e,l.sibling),r=i(l,a.type===li?a.props.children:a.props,c),r.ref=Xt(e,l,a),r.return=e,e=r;break e}n(e,l);break}t(e,l),l=l.sibling}a.type===li?(r=Dt(a.props.children,e.mode,c,a.key),r.return=e,e=r):(c=Lt(a.type,a.key,a.props,null,e.mode,c),c.ref=Xt(e,r,a),c.return=e,e=c)}return s(e);case ci:e:{for(l=a.key;null!==r;){if(r.key===l){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),r=i(r,a.children||[],c),r.return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}r=Nt(a,e.mode,c),r.return=e,e=r}return s(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),r=i(r,a,c),r.return=e,e=r):(n(e,r),r=Rt(a,e.mode,c),r.return=e,e=r),s(e);if(Ra(a))return m(e,r,a,c);if(Z(a))return v(e,r,a,c);if(u&&Jt(e,a),void 0===a&&!l)switch(e.tag){case 1:case 0:c=e.type,o("152",c.displayName||c.name||"Component")}return n(e,r)}}function en(e){return e===Ha&&o("174"),e}function tn(e,t){yt($a,t,e),yt(Ba,e,e),yt(Va,Ha,e);var n=t.nodeType;switch(n){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ot(null,"");break;default:n=8===n?t.parentNode:t,t=n.namespaceURI||null,n=n.tagName,t=ot(t,n)}gt(Va,e),yt(Va,t,e)}function nn(e){gt(Va,e),gt(Ba,e),gt($a,e)}function rn(e){en($a.current);var t=en(Va.current),n=ot(t,e.type);t!==n&&(yt(Ba,e,e),yt(Va,n,e))}function on(e){Ba.current===e&&(gt(Va,e),gt(Ba,e))}function an(){o("321")}function sn(e,t){if(null===t)return!1;for(var n=0;nas&&(as=f)):a=l.eagerReducer===e?l.eagerState:e(a,l.action),s=l,l=l.next}while(null!==l&&l!==r);u||(c=s,i=a),Oe(a,t.memoizedState)||(bs=!0),t.memoizedState=a,t.baseUpdate=c,t.baseState=i,n.lastRenderedState=a}return[t.memoizedState,n.dispatch]}function pn(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===ss?(ss={lastEffect:null},ss.lastEffect=e.next=e):(t=ss.lastEffect,null===t?ss.lastEffect=e.next=e:(n=t.next,t.next=e,e.next=n,ss.lastEffect=e)),e}function mn(e,t,n,r){var o=un();cs|=e,o.memoizedState=pn(t,n,void 0,void 0===r?null:r)}function vn(e,t,n,r){var o=fn();r=void 0===r?null:r;var i=void 0;if(null!==ts){var a=ts.memoizedState;if(i=a.destroy,null!==r&&sn(r,a.deps))return void pn(Wa,n,i,r)}cs|=e,o.memoizedState=pn(t,n,i,r)}function gn(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!==t&&void 0!==t?(e=e(),t.current=e,function(){t.current=null}):void 0}function yn(){}function bn(e,t,n){25>fs||o("301");var r=e.alternate;if(e===es||null!==r&&r===es)if(ls=!0,e={expirationTime:Za,action:n,eagerReducer:null,eagerState:null,next:null},null===us&&(us=new Map),void 0===(n=us.get(t)))us.set(t,e);else{for(t=n;null!==t.next;)t=t.next;t.next=e}else{yr();var i=Dr();i=Sr(i,e);var a={expirationTime:i,action:n,eagerReducer:null,eagerState:null,next:null},s=t.last;if(null===s)a.next=a;else{var c=s.next;null!==c&&(a.next=c),s.next=a}if(t.last=a,0===e.expirationTime&&(null===r||0===r.expirationTime)&&null!==(r=t.lastRenderedReducer))try{var l=t.lastRenderedState,u=r(l,n);if(a.eagerReducer=r,a.eagerState=u,Oe(u,l))return}catch(e){}Mr(e,i)}}function wn(e,t){var n=Pt(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Cn(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function En(e){if(gs){var t=vs;if(t){var n=t;if(!Cn(e,t)){if(!(t=mt(n))||!Cn(e,t))return e.effectTag|=2,gs=!1,void(ms=e);wn(ms,n)}ms=e,vs=vt(t)}else e.effectTag|=2,gs=!1,ms=e}}function xn(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&18!==e.tag;)e=e.return;ms=e}function Sn(e){if(e!==ms)return!1;if(!gs)return xn(e),gs=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!dt(t,e.memoizedProps))for(t=vs;t;)wn(e,t),t=mt(t);return xn(e),vs=ms?mt(e.stateNode):null,!0}function kn(){vs=ms=null,gs=!1}function _n(e,t,n,r){t.child=null===e?Ia(t,null,n,r):Na(t,e.child,n,r)}function On(e,t,n,r,o){n=n.render;var i=t.ref;return Hn(t,o),r=cn(e,t,n,r,i,o),null===e||bs?(t.effectTag|=1,_n(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),jn(e,t,o))}function Mn(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!=typeof a||Ft(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?(e=Lt(n.type,null,r,null,t.mode,i),e.ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,An(e,t,a,r,o,i))}return a=e.child,o=n?Dn(e,t,n):(t=jn(e,t,n),null!==t?t.sibling:null)}return jn(e,t,n)}}else bs=!1;switch(t.expirationTime=0,t.tag){case 2:r=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps;var i=bt(t,Pa.current);if(Hn(t,n),i=cn(null,t,r,e,i,n),t.effectTag|=1,"object"==typeof i&&null!==i&&"function"==typeof i.render&&void 0===i.$$typeof){if(t.tag=1,ln(),wt(r)){var a=!0;kt(t)}else a=!1;t.memoizedState=null!==i.state&&void 0!==i.state?i.state:null;var s=r.getDerivedStateFromProps;"function"==typeof s&&Kt(t,r,s,e),i.updater=ja,t.stateNode=i,i._reactInternalFiber=t,Qt(t,r,e,n),t=Tn(null,t,r,!0,a,n)}else t.tag=0,_n(null,t,i,n),t=t.child;return t;case 16:switch(i=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),a=t.pendingProps,e=Ut(i),t.type=e,i=t.tag=zt(e),a=Wt(e,a),s=void 0,i){case 0:s=Fn(null,t,e,a,n);break;case 1:s=zn(null,t,e,a,n);break;case 11:s=On(null,t,e,a,n);break;case 14:s=Mn(null,t,e,Wt(e.type,a),r,n);break;default:o("306",e,"")}return s;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Wt(r,i),Fn(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Wt(r,i),zn(e,t,r,i,n);case 3:return Ln(t),r=t.updateQueue,null===r&&o("282"),i=t.memoizedState,i=null!==i?i.element:null,Qn(t,r,t.pendingProps,null,n),r=t.memoizedState.element,r===i?(kn(),t=jn(e,t,n)):(i=t.stateNode,(i=(null===e||null===e.child)&&i.hydrate)&&(vs=vt(t.stateNode.containerInfo),ms=t,i=gs=!0),i?(t.effectTag|=2,t.child=Ia(t,null,r,n)):(_n(e,t,r,n),kn()),t=t.child),t;case 5:return rn(t),null===e&&En(t),r=t.type,i=t.pendingProps,a=null!==e?e.memoizedProps:null,s=i.children,dt(r,i)?s=null:null!==a&&dt(r,a)&&(t.effectTag|=16),Pn(e,t),1!==n&&1&t.mode&&i.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(_n(e,t,s,n),t=t.child),t;case 6:return null===e&&En(t),null;case 13:return Dn(e,t,n);case 4:return tn(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Na(t,null,r,n):_n(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Wt(r,i),On(e,t,r,i,n);case 7:return _n(e,t,t.pendingProps,n),t.child;case 8:case 12:return _n(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,s=t.memoizedProps,a=i.value,Nn(t,a),null!==s){var c=s.value;if(0===(a=Oe(c,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(c,a):1073741823))){if(s.children===i.children&&!Fa.current){t=jn(e,t,n);break e}}else for(null!==(c=t.child)&&(c.return=t);null!==c;){var l=c.contextDependencies;if(null!==l){s=c.child;for(var u=l.first;null!==u;){if(u.context===r&&0!=(u.observedBits&a)){1===c.tag&&(u=Wn(n),u.tag=_s,Kn(c,u)),c.expirationTime=t&&(bs=!0),e.contextDependencies=null}function Vn(e,t){return xs!==e&&!1!==t&&0!==t&&("number"==typeof t&&1073741823!==t||(xs=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Es?(null===Cs&&o("308"),Es=t,Cs.contextDependencies={first:t,expirationTime:0}):Es=Es.next=t),e._currentValue}function Bn(e){return{baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function $n(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Wn(e){return{expirationTime:e,tag:Ss,payload:null,callback:null,next:null,nextEffect:null}}function Un(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t)}function Kn(e,t){var n=e.alternate;if(null===n){var r=e.updateQueue,o=null;null===r&&(r=e.updateQueue=Bn(e.memoizedState))}else r=e.updateQueue,o=n.updateQueue,null===r?null===o?(r=e.updateQueue=Bn(e.memoizedState),o=n.updateQueue=Bn(n.memoizedState)):r=e.updateQueue=$n(o):null===o&&(o=n.updateQueue=$n(r));null===o||r===o?Un(r,t):null===r.lastUpdate||null===o.lastUpdate?(Un(r,t),Un(o,t)):(Un(r,t),o.lastUpdate=t)}function qn(e,t){var n=e.updateQueue;n=null===n?e.updateQueue=Bn(e.memoizedState):Gn(e,n),null===n.lastCapturedUpdate?n.firstCapturedUpdate=n.lastCapturedUpdate=t:(n.lastCapturedUpdate.next=t,n.lastCapturedUpdate=t)}function Gn(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=$n(t)),t}function Yn(e,t,n,r,o,i){switch(n.tag){case ks:return e=n.payload,"function"==typeof e?e.call(i,r,o):e;case Os:e.effectTag=-2049&e.effectTag|64;case Ss:if(e=n.payload,null===(o="function"==typeof e?e.call(i,r,o):e)||void 0===o)break;return so({},r,o);case _s:Ms=!0}return r}function Qn(e,t,n,r,o){Ms=!1,t=Gn(e,t);for(var i=t.baseState,a=null,s=0,c=t.firstUpdate,l=i;null!==c;){var u=c.expirationTime;ur?i:r),js.current=null,r=void 0,1n?t:n,0===t&&(Ys=null),Lr(e,t)}function wr(e){for(;;){var t=e.alternate,n=e.return,r=e.sibling;if(0==(1024&e.effectTag)){Is=e;e:{var i=t;t=e;var a=Vs,s=t.pendingProps;switch(t.tag){case 2:case 16:break;case 15:case 0:break;case 1:wt(t.type)&&Ct(t);break;case 3:nn(t),Et(t),s=t.stateNode,s.pendingContext&&(s.context=s.pendingContext,s.pendingContext=null),null!==i&&null!==i.child||(Sn(t),t.effectTag&=-3),Ps(t);break;case 5:on(t);var c=en($a.current);if(a=t.type,null!==i&&null!=t.stateNode)Fs(i,t,a,s,c),i.ref!==t.ref&&(t.effectTag|=128);else if(s){var l=en(Va.current);if(Sn(t)){s=t,i=s.stateNode;var u=s.type,f=s.memoizedProps,h=c;switch(i[Oo]=s,i[Mo]=f,a=void 0,c=u){case"iframe":case"object":je("load",i);break;case"video":case"audio":for(u=0;u<\/script>",u=i.removeChild(i.firstChild)):"string"==typeof i.is?u=u.createElement(h,{is:i.is}):(u=u.createElement(h),"select"===h&&(h=u,i.multiple?h.multiple=!0:i.size&&(h.size=i.size))):u=u.createElementNS(l,h),i=u,i[Oo]=f,i[Mo]=s,As(i,t,!1,!1),h=i,u=a,f=s;var d=c,p=lt(u,f);switch(u){case"iframe":case"object":je("load",h),c=f;break;case"video":case"audio":for(c=0;cs&&(s=i),c>s&&(s=c),a=a.sibling;t.childExpirationTime=s}if(null!==Is)return Is;null!==n&&0==(1024&n.effectTag)&&(null===n.firstEffect&&(n.firstEffect=e.firstEffect),null!==e.lastEffect&&(null!==n.lastEffect&&(n.lastEffect.nextEffect=e.firstEffect),n.lastEffect=e.lastEffect),1=m?d=0:(-1===d||m component higher in the tree to provide a loading indicator or placeholder to display."+te(u))}$s=!0,f=Zn(f,u),c=l;do{switch(c.tag){case 3:c.effectTag|=2048,c.expirationTime=s,s=ur(c,f,s),qn(c,s);break e;case 1:if(d=f,p=c.type,u=c.stateNode,0==(64&c.effectTag)&&("function"==typeof p.getDerivedStateFromError||null!==u&&"function"==typeof u.componentDidCatch&&(null===Ys||!Ys.has(u)))){c.effectTag|=2048,c.expirationTime=s,s=fr(c,d,s),qn(c,s);break e}}c=c.return}while(null!==c)}Is=wr(a);continue}i=!0,Wr(t)}}break}if(Ns=!1,Ds.current=n,xs=Es=Cs=null,ln(),i)Hs=null,e.finishedWork=null;else if(null!==Is)e.finishedWork=null;else{if(n=e.current.alternate,null===n&&o("281"),Hs=null,$s){if(i=e.latestPendingTime,a=e.latestSuspendedTime,s=e.latestPingedTime,0!==i&&it?0:t)):(e.pendingCommitExpirationTime=r,e.finishedWork=n)}}function xr(e,t){for(var n=e.return;null!==n;){switch(n.tag){case 1:var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ys||!Ys.has(r)))return e=Zn(t,e),e=fr(n,e,1073741823),Kn(n,e),void Mr(n,1073741823);break;case 3:return e=Zn(t,e),e=ur(n,e,1073741823),Kn(n,e),void Mr(n,1073741823)}n=n.return}3===e.tag&&(n=Zn(t,e),n=ur(e,n,1073741823),Kn(e,n),Mr(e,1073741823))}function Sr(e,t){var n=co.unstable_getCurrentPriorityLevel(),r=void 0;if(0==(1&t.mode))r=1073741823;else if(Ns&&!Us)r=Vs;else{switch(n){case co.unstable_ImmediatePriority:r=1073741823;break;case co.unstable_UserBlockingPriority:r=1073741822-10*(1+((1073741822-e+15)/10|0));break;case co.unstable_NormalPriority:r=1073741822-25*(1+((1073741822-e+500)/25|0));break;case co.unstable_LowPriority:case co.unstable_IdlePriority:r=1;break;default:o("313")}null!==Hs&&r===Vs&&--r}return n===co.unstable_UserBlockingPriority&&(0===rc||r=r&&(e.didError=!1,t=e.latestPingedTime,(0===t||t>n)&&(e.latestPingedTime=n),$t(n,e),0!==(n=e.expirationTime)&&jr(e,n)))}function _r(e,t){var n=e.stateNode;null!==n&&n.delete(t),t=Dr(),t=Sr(t,e),null!==(e=Or(e,t))&&(It(e,t),0!==(t=e.expirationTime)&&jr(e,t))}function Or(e,t){e.expirationTimeVs&&dr(),It(e,t),Ns&&!Us&&Hs===e||jr(e,e.expirationTime),dc>hc&&(dc=0,o("185")))}function Ar(e,t,n,r,o){return co.unstable_runWithPriority(co.unstable_ImmediatePriority,function(){return e(t,n,r,o)})}function Pr(){uc=1073741822-((co.unstable_now()-lc)/10|0)}function Fr(e,t){if(0!==Js){if(te.expirationTime&&(e.expirationTime=t),ec||(ac?sc&&(tc=e,nc=1073741823,Br(e,1073741823,!1)):1073741823===t?Hr(1073741823,!1):Fr(e,t))}function Rr(){var e=0,t=null;if(null!==Xs)for(var n=Xs,r=Qs;null!==r;){var i=r.expirationTime;if(0===i){if((null===n||null===Xs)&&o("244"),r===r.nextScheduledRoot){Qs=Xs=r.nextScheduledRoot=null;break}if(r===Qs)Qs=i=r.nextScheduledRoot,Xs.nextScheduledRoot=i,r.nextScheduledRoot=null;else{if(r===Xs){Xs=n,Xs.nextScheduledRoot=Qs,r.nextScheduledRoot=null;break}n.nextScheduledRoot=r.nextScheduledRoot,r.nextScheduledRoot=null}r=n.nextScheduledRoot}else{if(i>e&&(e=i,t=r),r===Xs)break;if(1073741823===e)break;n=r,r=r.nextScheduledRoot}}tc=t,nc=e}function Nr(){return!!mc||!!co.unstable_shouldYield()&&(mc=!0)}function Ir(){try{if(!Nr()&&null!==Qs){Pr();var e=Qs;do{var t=e.expirationTime;0!==t&&uc<=t&&(e.nextExpirationTimeToWorkOn=uc),e=e.nextScheduledRoot}while(e!==Qs)}Hr(0,!0)}finally{mc=!1}}function Hr(e,t){if(Rr(),t)for(Pr(),fc=uc;null!==tc&&0!==nc&&e<=nc&&!(mc&&uc>nc);)Br(tc,nc,uc>nc),Rr(),Pr(),fc=uc;else for(;null!==tc&&0!==nc&&e<=nc;)Br(tc,nc,!1),Rr();if(t&&(Js=0,Zs=null),0!==nc&&Fr(tc,nc),dc=0,pc=null,null!==cc)for(e=cc,cc=null,t=0;t=n&&(null===cc?cc=[r]:cc.push(r),r._defer))return e.finishedWork=t,void(e.expirationTime=0);e.finishedWork=null,e===pc?dc++:(pc=e,dc=0),co.unstable_runWithPriority(co.unstable_ImmediatePriority,function(){br(e,t)})}function Wr(e){null===tc&&o("246"),tc.expirationTime=0,oc||(oc=!0,ic=e)}function Ur(e,t){var n=ac;ac=!0;try{return e(t)}finally{(ac=n)||ec||Hr(1073741823,!1)}}function Kr(e,t){if(ac&&!sc){sc=!0;try{return e(t)}finally{sc=!1}}return e(t)}function qr(e,t,n){ac||ec||0===rc||(Hr(rc,!1),rc=0);var r=ac;ac=!0;try{return co.unstable_runWithPriority(co.unstable_UserBlockingPriority,function(){return e(t,n)})}finally{(ac=r)||ec||Hr(1073741823,!1)}}function Gr(e,t,n,r,i){var a=t.current;e:if(n){n=n._reactInternalFiber;t:{2===Ae(n)&&1===n.tag||o("170");var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(wt(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);o("171"),s=void 0}if(1===n.tag){var c=n.type;if(wt(c)){n=St(n,c,s);break e}}n=s}else n=Aa;return null===t.context?t.context=n:t.pendingContext=n,t=i,i=Wn(r),i.payload={element:e},t=void 0===t?null:t,null!==t&&(i.callback=t),yr(),Kn(a,i),Mr(a,r),r}function Yr(e,t,n,r){var o=t.current;return o=Sr(Dr(),o),Gr(e,t,n,o,r)}function Qr(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Xr(e,t,n){var r=3=Rs&&(t=Rs-1),this._expirationTime=Rs=t,this._root=e,this._callbacks=this._next=null,this._hasChildren=this._didComplete=!1,this._children=null,this._defer=!0}function Zr(){this._callbacks=null,this._didCommit=!1,this._onCommit=this._onCommit.bind(this)}function eo(e,t,n){t=Pt(3,null,null,t?3:0),e={current:t,containerInfo:e,pendingChildren:null,pingCache:null,earliestPendingTime:0,latestPendingTime:0,earliestSuspendedTime:0,latestSuspendedTime:0,latestPingedTime:0,didError:!1,pendingCommitExpirationTime:0,finishedWork:null,timeoutHandle:-1,context:null,pendingContext:null,hydrate:n,nextExpirationTimeToWorkOn:0,expirationTime:0,firstBatch:null,nextScheduledRoot:null},this._internalRoot=t.stateNode=e}function to(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function no(e,t){if(t||(t=e?9===e.nodeType?e.documentElement:e.firstChild:null,t=!(!t||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new eo(e,!1,t)}function ro(e,t,n,r,o){var i=n._reactRootContainer;if(i){if("function"==typeof o){var a=o;o=function(){var e=Qr(i._internalRoot);a.call(e)}}null!=e?i.legacy_renderSubtreeIntoContainer(e,t,o):i.render(t,o)}else{if(i=n._reactRootContainer=no(n,r),"function"==typeof o){var s=o;o=function(){var e=Qr(i._internalRoot);s.call(e)}}Kr(function(){null!=e?i.legacy_renderSubtreeIntoContainer(e,t,o):i.render(t,o)})}return Qr(i._internalRoot)}function oo(e,t){var n=2=Uo),Go=String.fromCharCode(32),Yo={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},Qo=!1,Xo=!1,Jo={eventTypes:Yo,extractEvents:function(e,t,n,r){var o=void 0,i=void 0;if(Wo)e:{switch(e){case"compositionstart":o=Yo.compositionStart;break e;case"compositionend":o=Yo.compositionEnd;break e;case"compositionupdate":o=Yo.compositionUpdate;break e}o=void 0}else Xo?D(e,n)&&(o=Yo.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=Yo.compositionStart);return o?(qo&&"ko"!==n.locale&&(Xo||o!==Yo.compositionStart?o===Yo.compositionEnd&&Xo&&(i=M()):(No=r,Io="value"in No?No.value:No.textContent,Xo=!0)),o=Vo.getPooled(o,t,n,r),i?o.data=i:null!==(i=j(n))&&(o.data=i),k(o),i=o):i=null,(e=Ko?R(e,n):N(e,n))?(t=Bo.getPooled(Yo.beforeInput,t,n,r),t.data=e,k(t)):t=null,null===i?t:null===t?i:[i,t]}},Zo=null,ei=null,ti=null,ni=!1,ri={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0},oi=ao.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;oi.hasOwnProperty("ReactCurrentDispatcher")||(oi.ReactCurrentDispatcher={current:null});var ii=/^(.*)[\\\/]/,ai="function"==typeof Symbol&&Symbol.for,si=ai?Symbol.for("react.element"):60103,ci=ai?Symbol.for("react.portal"):60106,li=ai?Symbol.for("react.fragment"):60107,ui=ai?Symbol.for("react.strict_mode"):60108,fi=ai?Symbol.for("react.profiler"):60114,hi=ai?Symbol.for("react.provider"):60109,di=ai?Symbol.for("react.context"):60110,pi=ai?Symbol.for("react.concurrent_mode"):60111,mi=ai?Symbol.for("react.forward_ref"):60112,vi=ai?Symbol.for("react.suspense"):60113,gi=ai?Symbol.for("react.memo"):60115,yi=ai?Symbol.for("react.lazy"):60116,bi="function"==typeof Symbol&&Symbol.iterator,wi=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ci=Object.prototype.hasOwnProperty,Ei={},xi={},Si={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Si[e]=new ie(e,0,!1,e,null)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Si[t]=new ie(t,1,!1,e[1],null)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){Si[e]=new ie(e,2,!1,e.toLowerCase(),null)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Si[e]=new ie(e,2,!1,e,null)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Si[e]=new ie(e,3,!1,e.toLowerCase(),null)}),["checked","multiple","muted","selected"].forEach(function(e){Si[e]=new ie(e,3,!0,e,null)}),["capture","download"].forEach(function(e){Si[e]=new ie(e,4,!1,e,null)}),["cols","rows","size","span"].forEach(function(e){Si[e]=new ie(e,6,!1,e,null)}),["rowSpan","start"].forEach(function(e){Si[e]=new ie(e,5,!1,e.toLowerCase(),null)});var ki=/[\-:]([a-z])/g;"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ki,ae);Si[t]=new ie(t,1,!1,e,null)}),"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ki,ae);Si[t]=new ie(t,1,!1,e,"http://www.w3.org/1999/xlink")}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ki,ae);Si[t]=new ie(t,1,!1,e,"http://www.w3.org/XML/1998/namespace")}),["tabIndex","crossOrigin"].forEach(function(e){Si[e]=new ie(e,1,!1,e.toLowerCase(),null)});var _i={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}},Oi=null,Mi=null,Ai=!1;Ao&&(Ai=G("input")&&(!document.documentMode||9=document.documentMode,la={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},ua=null,fa=null,ha=null,da=!1,pa={eventTypes:la,extractEvents:function(e,t,n,r){var o,i=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;if(!(o=!i)){e:{i=He(i),o=wo.onSelect;for(var a=0;a"+t+"",t=va.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}}),ya={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ba=["Webkit","ms","Moz","O"];Object.keys(ya).forEach(function(e){ba.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ya[t]=ya[e]})});var wa=so({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),Ca=null,Ea=null,xa="function"==typeof setTimeout?setTimeout:void 0,Sa="function"==typeof clearTimeout?clearTimeout:void 0,ka=co.unstable_scheduleCallback,_a=co.unstable_cancelCallback;new Set;var Oa=[],Ma=-1,Aa={},Pa={current:Aa},Fa={current:!1},za=Aa,Ta=null,La=null,Da=(new ao.Component).refs,ja={isMounted:function(e){return!!(e=e._reactInternalFiber)&&2===Ae(e)},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=Dr();r=Sr(r,e);var o=Wn(r);o.payload=t,void 0!==n&&null!==n&&(o.callback=n),yr(),Kn(e,o),Mr(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=Dr();r=Sr(r,e);var o=Wn(r);o.tag=ks,o.payload=t,void 0!==n&&null!==n&&(o.callback=n),yr(),Kn(e,o),Mr(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=Dr();n=Sr(n,e);var r=Wn(n);r.tag=_s,void 0!==t&&null!==t&&(r.callback=t),yr(),Kn(e,r),Mr(e,n)}},Ra=Array.isArray,Na=Zt(!0),Ia=Zt(!1),Ha={},Va={current:Ha},Ba={current:Ha},$a={current:Ha},Wa=0,Ua=2,Ka=4,qa=8,Ga=16,Ya=32,Qa=64,Xa=128,Ja=oi.ReactCurrentDispatcher,Za=0,es=null,ts=null,ns=null,rs=null,os=null,is=null,as=0,ss=null,cs=0,ls=!1,us=null,fs=0,hs={readContext:Vn,useCallback:an,useContext:an,useEffect:an,useImperativeHandle:an,useLayoutEffect:an,useMemo:an,useReducer:an,useRef:an,useState:an,useDebugValue:an},ds={readContext:Vn,useCallback:function(e,t){return un().memoizedState=[e,void 0===t?null:t],e},useContext:Vn,useEffect:function(e,t){return mn(516,Xa|Qa,e,t)},useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,mn(4,Ka|Ya,gn.bind(null,t,e),n)},useLayoutEffect:function(e,t){return mn(4,Ka|Ya,e,t)},useMemo:function(e,t){var n=un();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=un();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=r.queue={last:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},e=e.dispatch=bn.bind(null,es,e),[r.memoizedState,e]},useRef:function(e){var t=un();return e={current:e},t.memoizedState=e},useState:function(e){var t=un();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=t.queue={last:null,dispatch:null,lastRenderedReducer:hn,lastRenderedState:e},e=e.dispatch=bn.bind(null,es,e),[t.memoizedState,e]},useDebugValue:yn},ps={readContext:Vn,useCallback:function(e,t){var n=fn();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&sn(t,r[1])?r[0]:(n.memoizedState=[e,t],e)},useContext:Vn,useEffect:function(e,t){return vn(516,Xa|Qa,e,t)},useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,vn(4,Ka|Ya,gn.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vn(4,Ka|Ya,e,t)},useMemo:function(e,t){var n=fn();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&sn(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)},useReducer:dn,useRef:function(){return fn().memoizedState},useState:function(e){return dn(hn)},useDebugValue:yn},ms=null,vs=null,gs=!1,ys=oi.ReactCurrentOwner,bs=!1,ws={current:null},Cs=null,Es=null,xs=null,Ss=0,ks=1,_s=2,Os=3,Ms=!1,As=void 0,Ps=void 0,Fs=void 0,zs=void 0;As=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ps=function(){},Fs=function(e,t,n,r,o){var i=e.memoizedProps;if(i!==r){var a=t.stateNode;switch(en(Va.current),e=null,n){case"input":i=le(a,i),r=le(a,r),e=[];break;case"option":i=Xe(a,i),r=Xe(a,r),e=[];break;case"select":i=so({},i,{value:void 0}),r=so({},r,{value:void 0}),e=[];break;case"textarea":i=Ze(a,i),r=Ze(a,r),e=[];break;default:"function"!=typeof i.onClick&&"function"==typeof r.onClick&&(a.onclick=ft)}ct(n,r),a=n=void 0;var s=null;for(n in i)if(!r.hasOwnProperty(n)&&i.hasOwnProperty(n)&&null!=i[n])if("style"===n){var c=i[n];for(a in c)c.hasOwnProperty(a)&&(s||(s={}),s[a]="")}else"dangerouslySetInnerHTML"!==n&&"children"!==n&&"suppressContentEditableWarning"!==n&&"suppressHydrationWarning"!==n&&"autoFocus"!==n&&(bo.hasOwnProperty(n)?e||(e=[]):(e=e||[]).push(n,null));for(n in r){var l=r[n];if(c=null!=i?i[n]:void 0,r.hasOwnProperty(n)&&l!==c&&(null!=l||null!=c))if("style"===n)if(c){for(a in c)!c.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(s||(s={}),s[a]="");for(a in l)l.hasOwnProperty(a)&&c[a]!==l[a]&&(s||(s={}),s[a]=l[a])}else s||(e||(e=[]),e.push(n,s)),s=l;else"dangerouslySetInnerHTML"===n?(l=l?l.__html:void 0,c=c?c.__html:void 0,null!=l&&c!==l&&(e=e||[]).push(n,""+l)):"children"===n?c===l||"string"!=typeof l&&"number"!=typeof l||(e=e||[]).push(n,""+l):"suppressContentEditableWarning"!==n&&"suppressHydrationWarning"!==n&&(bo.hasOwnProperty(n)?(null!=l&&ut(o,n),e||c===l||(e=[])):(e=e||[]).push(n,l))}s&&(e=e||[]).push("style",s),o=e,(t.updateQueue=o)&&er(t)}},zs=function(e,t,n,r){n!==r&&er(t)};var Ts="function"==typeof WeakSet?WeakSet:Set,Ls="function"==typeof WeakMap?WeakMap:Map,Ds=oi.ReactCurrentDispatcher,js=oi.ReactCurrentOwner,Rs=1073741822,Ns=!1,Is=null,Hs=null,Vs=0,Bs=-1,$s=!1,Ws=null,Us=!1,Ks=null,qs=null,Gs=null,Ys=null,Qs=null,Xs=null,Js=0,Zs=void 0,ec=!1,tc=null,nc=0,rc=0,oc=!1,ic=null,ac=!1,sc=!1,cc=null,lc=co.unstable_now(),uc=1073741822-(lc/10|0),fc=uc,hc=50,dc=0,pc=null,mc=!1;Zo=function(e,t,n){switch(t){case"input":if(he(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t=t;)n=r,r=r._next;e._next=r,null!==n&&(n._next=e)}return e},B=Ur,$=qr,W=function(){ec||0===rc||(Hr(rc,!1),rc=0)};var vc={createPortal:oo,findDOMNode:function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternalFiber;return void 0===t&&("function"==typeof e.render?o("188"):o("268",Object.keys(e))),e=ze(t),e=null===e?null:e.stateNode},hydrate:function(e,t,n){return to(t)||o("200"),ro(null,e,t,!0,n)},render:function(e,t,n){return to(t)||o("200"),ro(null,e,t,!1,n)},unstable_renderSubtreeIntoContainer:function(e,t,n,r){return to(n)||o("200"),(null==e||void 0===e._reactInternalFiber)&&o("38"),ro(e,t,n,!1,r)},unmountComponentAtNode:function(e){return to(e)||o("40"),!!e._reactRootContainer&&(Kr(function(){ro(null,null,e,!1,function(){e._reactRootContainer=null})}),!0)},unstable_createPortal:function(){return oo.apply(void 0,arguments)},unstable_batchedUpdates:Ur,unstable_interactiveUpdates:qr,flushSync:function(e,t){ec&&o("187");var n=ac;ac=!0;try{return Ar(e,t)}finally{ac=n,Hr(1073741823,!1)}},unstable_createRoot:io,unstable_flushControlled:function(e){var t=ac;ac=!0;try{Ar(e)}finally{(ac=t)||ec||Hr(1073741823,!1)}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[g,y,b,ko.injectEventPluginsByName,yo,k,function(e){h(e,S)},H,V,Ie,m]}};!function(e){var t=e.findFiberByHostInstance;Mt(so({},e,{overrideProps:null,currentDispatcherRef:oi.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=ze(e),null===e?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null}}))}({findFiberByHostInstance:v,bundleType:0,version:"16.8.6",rendererPackageName:"react-dom"});var gc={default:vc},yc=gc&&vc||gc;e.exports=yc.default||yc},"/bQp":function(e,t){e.exports={}},"/m1I":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("vtiu"),o=(n.n(r),n("br8L"));n.n(o)},"/n6Q":function(e,t,n){n("zQR9"),n("+tPU"),e.exports=n("Kh4W").f("iterator")},"/n6d":function(e,t,n){"use strict";var r=function(){};e.exports=r},"/qCn":function(e,t,n){"use strict";function r(e){if(a)return void e(a);u.a.newInstance({prefixCls:p,transitionName:m,style:{top:i},getContainer:s,maxCount:c},function(t){if(a)return void e(a);a=t,e(t)})}function o(e){var t=void 0!==e.duration?e.duration:h,n={info:"info-circle",success:"check-circle",error:"close-circle",warning:"exclamation-circle",loading:"loading"}[e.type],o=d++,i=new Promise(function(i){var a=function(){return"function"==typeof e.onClose&&e.onClose(),i(!0)};r(function(r){var i=l.createElement(f.default,{type:n,theme:"loading"===n?"outlined":"filled"});r.notice({key:o,duration:t,style:{},content:l.createElement("div",{className:"".concat(p,"-custom-content").concat(e.type?" ".concat(p,"-").concat(e.type):"")},e.icon?e.icon:n?i:"",l.createElement("span",null,e.content)),onClose:a})})}),s=function(){a&&a.removeNotice(o)};return s.then=function(e,t){return i.then(e,t)},s.promise=i,s}Object.defineProperty(t,"__esModule",{value:!0});var i,a,s,c,l=n("GiK3"),u=(n.n(l),n("Hx0i")),f=n("FC3+"),h=3,d=1,p="ant-message",m="move-up",v={open:o,config:function(e){void 0!==e.top&&(i=e.top,a=null),void 0!==e.duration&&(h=e.duration),void 0!==e.prefixCls&&(p=e.prefixCls),void 0!==e.getContainer&&(s=e.getContainer),void 0!==e.transitionName&&(m=e.transitionName,a=null),void 0!==e.maxCount&&(c=e.maxCount,a=null)},destroy:function(){a&&(a.destroy(),a=null)}};["success","info","warning","error","loading"].forEach(function(e){v[e]=function(t,n,r){return"function"==typeof n&&(r=n,n=void 0),v.open({content:t,duration:n,type:e,onClose:r})}}),v.warn=v.warning,t.default=v},"/uAz":function(e,t,n){"use strict";var r=function(){};e.exports=function(e){r('Please use `require("history").%s` instead of `require("history/%s")`. Support for the latter will be removed in the next major release.',[e,e])}},"/uOx":function(e,t){!function(t){"use strict";function n(e,t,n,r){var i=t&&t.prototype instanceof o?t:o,a=Object.create(i.prototype),s=new d(r||[]);return a._invoke=l(e,n,s),a}function r(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function o(){}function i(){}function a(){}function s(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function c(e){function t(n,o,i,a){var s=r(e[n],e,o);if("throw"!==s.type){var c=s.arg,l=c.value;return l&&"object"==typeof l&&y.call(l,"__await")?Promise.resolve(l.__await).then(function(e){t("next",e,i,a)},function(e){t("throw",e,i,a)}):Promise.resolve(l).then(function(e){c.value=e,i(c)},function(e){return t("throw",e,i,a)})}a(s.arg)}function n(e,n){function r(){return new Promise(function(r,o){t(e,n,r,o)})}return o=o?o.then(r,r):r()}var o;this._invoke=n}function l(e,t,n){var o=k;return function(i,a){if(o===O)throw new Error("Generator is already running");if(o===M){if("throw"===i)throw a;return m()}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var c=u(s,n);if(c){if(c===A)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===k)throw o=M,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=O;var l=r(e,t,n);if("normal"===l.type){if(o=n.done?M:_,l.arg===A)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=M,n.method="throw",n.arg=l.arg)}}}function u(e,t){var n=e.iterator[t.method];if(n===v){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=v,u(e,t),"throw"===t.method))return A;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return A}var o=r(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,A;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=v),t.delegate=null,A):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,A)}function f(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function h(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function d(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(f,this),this.reset(!0)}function p(e){if(e){var t=e[w];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=y.call(o,"catchLoc"),s=y.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&y.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),h(n),A}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;h(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:p(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=v),A}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())},"/whu":function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},0:function(e,t){},"037f":function(e,t,n){var r=n("1oyr"),o=n("p0bc"),i=n("wSKX"),a=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:i;e.exports=a},"04BU":function(e,t){},"04Eq":function(e,t,n){"use strict";function r(e,t,n,a,s,c,l,u,f,h){if(a&&"object"==typeof a&&!Array.isArray(a)){t(a,s,c,l,u,f,h);for(var d in a){var p=a[d];if(Array.isArray(p)){if(d in i.arrayKeywords)for(var m=0;m1?n[o-1]:void 0,s=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);++r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n("mypn"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(t,n("DuR2"))},"17Il":function(e,t,n){function r(e,t,n){return t in e?o(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var o=n("yAaz");e.exports=r},"18qt":function(e,t){e.exports={main:"main___1EvSR",icon:"icon___1eW9D",other:"other___2FMl-",register:"register___29gTK"}},"1A13":function(e,t,n){"use strict";var r=n("49qz")(!0);n("uc2A")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},"1ETD":function(e,t,n){var r=n("kkCw")("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},"1Esd":function(e,t,n){"use strict";function r(e,t){return e.replace(";base64",";name=".concat(t,";base64"))}function o(e){var t=e.name,n=e.size,o=e.type;return new Promise(function(i,a){var s=new window.FileReader;s.onerror=a,s.onload=function(e){i({dataURL:r(e.target.result,t),name:t,size:n,type:o})},s.readAsDataURL(e)})}function i(e){return Promise.all([].map.call(e,o))}var a=n("mhuh"),s=n("ouCL");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var c=s(n("rAzg")),l=s(n("jlIA")),u=s(n("95ke")),f=s(n("Q9dM")),h=s(n("wm7F")),d=s(n("F6AD")),p=s(n("fghW")),m=s(n("QwVp")),v=a(n("GiK3")),g=(s(n("KSGD")),s(n("GPaG"))),y=s(n("sSL5")),b=n("4Mzz"),w=s(n("2u4L")),C=function(e){function t(){return(0,f.default)(this,t),(0,d.default)(this,(0,p.default)(t).apply(this,arguments))}return(0,m.default)(t,e),(0,h.default)(t,[{key:"render",value:function(){var e=this.props,t=e.filesInfo,n=e.values,r=e.value,o=e.id,i=n[0]?n:t;return v.default.createElement("ul",{className:"file-info"},i.map(function(e){e=e?e.replace(/https:\/\/8\.yingyinglicai\.com\/lyfe\/dms\/res/,"http://10.100.8.30:5000/lyfe/dms/res"):e;var t=r?r.replace(/https:\/\/8\.yingyinglicai\.com\/lyfe\/dms\/res/,"http://10.100.8.30:5000/lyfe/dms/res"):e;return v.default.createElement("li",{key:o,style:{display:"flex",width:"250px",flexDirection:"column"}},v.default.createElement("span",null,v.default.createElement(g.default,{image:{src:t||"",alt:"",className:"file-image",style:{width:"200px",margin:"5px"}},zoomImage:{src:t||"",alt:""},defaultStyles:{overlay:{backgroundColor:"rgb(0, 0, 0, 0.7)"}}})))}))}}]),t}(v.Component),E=function(e){function t(e){var n;(0,f.default)(this,t),n=(0,d.default)(this,(0,p.default)(t).call(this,e)),n.onChange=function(){var e=(0,l.default)(c.default.mark(function e(t){var r,o,a,s,f,h,d,p;return c.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.props,o=r.multiple,a=r.onChange,s=t.target.files,e.next=4,i(t.target.files);case 4:return f=e.sent,e.next=7,(0,b.sign)();case 7:return h=e.sent,e.t0=Promise,e.next=11,f.map(function(){var e=(0,l.default)(c.default.mark(function e(t,n){var r,o;return c.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=new FormData,r.append("resource",s[n]),e.next=4,(0,y.default)({method:"POST",url:"".concat(w.default.uploadBaseUrl,"/putFileByPath"),headers:{token:h,"Content-Type":"multipart/form-data"},data:r});case 4:return o=e.sent,e.abrupt("return",o);case 6:case"end":return e.stop()}},e)}));return function(t,n){return e.apply(this,arguments)}}());case 11:return e.t1=e.sent,e.next=14,e.t0.all.call(e.t0,e.t1);case 14:d=e.sent,p={values:d,filesInfo:f},(0,b.setState)((0,u.default)(n),p,function(){a(o?p.values:p.values[0])});case 17:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}();var r=e.value,o=Array.isArray(r)?r:[r];return n.state={values:o,filesInfo:o},n}return(0,m.default)(t,e),(0,h.default)(t,[{key:"shouldComponentUpdate",value:function(e,t){return(0,b.shouldRender)(this,e,t)}},{key:"render",value:function(){var e=this,t=this.props,n=t.multiple,r=t.id,o=t.readonly,i=t.disabled,a=t.autofocus,s=t.value,c=this.state,l=c.filesInfo,u=c.values;return v.default.createElement("div",null,v.default.createElement("p",null,v.default.createElement("input",{ref:function(t){return e.inputRef=t},id:r,type:"file",disabled:o||i,onChange:this.onChange,defaultValue:"",autoFocus:a,multiple:n})),v.default.createElement(C,{filesInfo:l,values:u,value:s,id:r}))}}]),t}(v.Component);E.defaultProps={autofocus:!1};var x=E;t.default=x},"1IGK":function(e,t,n){e.exports=n("cnlX")},"1JAn":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(){return o=Object.assign||function(e){for(var t=1;t0&&this.handleMarkers(x);for(var O=this.editor.$options,M=0;M0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0];this.editor.renderer.setScrollMargins(e[0],e[1],e[2],e[3])}},{key:"componentWillUnmount",value:function(){this.editor.destroy(),this.editor=null}},{key:"onChange",value:function(e){if(this.props.onChange&&!this.silent){var t=this.editor.getValue();this.props.onChange(t,e)}}},{key:"onSelectionChange",value:function(e){if(this.props.onSelectionChange){var t=this.editor.getSelection();this.props.onSelectionChange(t,e)}}},{key:"onCursorChange",value:function(e){if(this.props.onCursorChange){var t=this.editor.getSelection();this.props.onCursorChange(t,e)}}},{key:"onInput",value:function(e){this.props.onInput&&this.props.onInput(e),this.props.placeholder&&this.updatePlaceholder()}},{key:"onFocus",value:function(e){this.props.onFocus&&this.props.onFocus(e,this.editor)}},{key:"onBlur",value:function(e){this.props.onBlur&&this.props.onBlur(e,this.editor)}},{key:"onCopy",value:function(e){this.props.onCopy&&this.props.onCopy(e)}},{key:"onPaste",value:function(e){this.props.onPaste&&this.props.onPaste(e)}},{key:"onScroll",value:function(){this.props.onScroll&&this.props.onScroll(this.editor)}},{key:"handleOptions",value:function(e){for(var t=Object.keys(e.setOptions),n=0;n outside a "),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=Object(p.c)(e.to),n=Object(p.c)(this.props.to);if(Object(p.f)(t,n))return void f()(!1,"You tried to redirect to the same route you're currently on: \""+n.pathname+n.search+'"');this.perform()},t.prototype.computeTo=function(e){var t=e.computedMatch,n=e.to;return t?"string"==typeof n?Object(m.a)(n,t.params):v({},n,{pathname:Object(m.a)(n.pathname,t.params)}):n},t.prototype.perform=function(){var e=this.context.router.history,t=this.props.push,n=this.computeTo(this.props);t?e.push(n):e.replace(n)},t.prototype.render=function(){return null},t}(s.a.Component);g.propTypes={computedMatch:l.a.object,push:l.a.bool,from:l.a.string,to:l.a.oneOfType([l.a.string,l.a.object]).isRequired},g.defaultProps={push:!1},g.contextTypes={router:l.a.shape({history:l.a.shape({push:l.a.func.isRequired,replace:l.a.func.isRequired}).isRequired,staticContext:l.a.object}).isRequired},t.a=g},"1Yb9":function(e,t,n){var r=n("mgnk"),o=n("UnEC"),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=c},"1aA0":function(e,t,n){var r=n("ulTY")("meta"),o=n("UKM+"),i=n("WBcL"),a=n("lDLk").f,s=0,c=Object.isExtensible||function(){return!0},l=!n("zgIt")(function(){return c(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},f=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!c(e))return"F";if(!t)return"E";u(e)}return e[r].i},h=function(e,t){if(!i(e,r)){if(!c(e))return!0;if(!t)return!1;u(e)}return e[r].w},d=function(e){return l&&p.NEED&&c(e)&&!i(e,r)&&u(e),e},p=e.exports={KEY:r,NEED:!1,fastKey:f,getWeak:h,onFreeze:d}},"1er0":function(e,t,n){"use strict";var r=n("kM2E"),o=n("vFc/")(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n("4mcu")("includes")},"1ip3":function(e,t,n){var r=n("Ds5P");r(r.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}})},"1kS7":function(e,t){t.f=Object.getOwnPropertySymbols},"1oyr":function(e,t){function n(e){return function(){return e}}e.exports=n},"1uLP":function(e,t,n){var r=n("Ds5P");r(r.G+r.W+r.F*!n("07k+").ABV,{DataView:n("LrcN").DataView})},"1wHS":function(e,t,n){"use strict";function r(e){function t(){o-=1,o<=0?(e(),delete s[r]):s[r]=i()(t)}var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=a++,o=n;return s[r]=i()(t),r}t.a=r;var o=n("ommR"),i=n.n(o),a=0,s={};r.cancel=function(e){void 0!==e&&(i.a.cancel(s[e]),delete s[e])},r.ids=s},2:function(e,t){},"21It":function(e,t,n){"use strict";var r=n("FtD3");e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},"22B7":function(e,t){function n(e,t){return e===t||e!==e&&t!==t}e.exports=n},"2EnM":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e,t){return e===t?0!==e||1/e==1/t:e!==e&&t!==t}function c(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter(function(t){return t!==e})},get:function(){return e},set:function(n,r){e=n,t.forEach(function(t){return t(e,r)})}}}function l(e){return Array.isArray(e)?e[0]:e}function u(e,t){var n,r,u="__create-react-context-"+(0,m.default)()+"__",h=function(e){function n(){var t,r,a;o(this,n);for(var s=arguments.length,l=Array(s),u=0;u-1}var o=n("imBK");e.exports=r},"2JG3":function(e,t,n){e.exports=n("t7iK")},"2KeS":function(e,t,n){"use strict";function r(e,t,n){function o(){g===v&&(g=v.slice())}function i(){return m}function a(e){if("function"!=typeof e)throw new Error("Expected listener to be a function.");var t=!0;return o(),g.push(e),function(){if(t){t=!1,o();var n=g.indexOf(e);g.splice(n,1)}}}function s(e){if(!Object(f.a)(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if(void 0===e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(y)throw new Error("Reducers may not dispatch actions.");try{y=!0,m=p(m,e)}finally{y=!1}for(var t=v=g,n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];if(c)throw c;for(var r=!1,i={},a=0;af&&(h=h.slice(0,f)),a?h+s:s+h}},"2VmA":function(e,t,n){function r(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=a,this.__views__=[]}var o=n("VORN"),i=n("KMSM"),a=4294967295;r.prototype=o(i.prototype),r.prototype.constructor=r,e.exports=r},"2b2b":function(e,t,n){"use strict";function r(e){return e="full"==e?"full":"fast",f.copy(r[e])}function o(e){return e%4==0&&(e%100!=0||e%400==0)}function i(e){var t=e.match(h);if(!t)return!1;var n=+t[1],r=+t[2],i=+t[3];return r>=1&&r<=12&&i>=1&&i<=(2==r&&o(n)?29:d[r])}function a(e,t){var n=e.match(p);if(!n)return!1;var r=n[1],o=n[2],i=n[3],a=n[5];return(r<=23&&o<=59&&i<=59||23==r&&59==o&&60==i)&&(!t||a)}function s(e){var t=e.split(S);return 2==t.length&&i(t[0])&&a(t[1],!0)}function c(e){return e.length<=255&&m.test(e)}function l(e){return k.test(e)&&v.test(e)}function u(e){if(_.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}var f=n("pYuQ"),h=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,d=[0,31,28,31,30,31,30,31,31,30,31,30,31],p=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i,m=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i,v=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i,g=/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i,y=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#.\/;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,b=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,w=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,C=/^(?:\/(?:[^~\/]|~0|~1)*)*$/,E=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,x=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~\/]|~0|~1)*)*)$/;e.exports=r,r.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":y,url:b,email:/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:m,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:u,uuid:w,"json-pointer":C,"json-pointer-uri-fragment":E,"relative-json-pointer":x},r.full={date:i,time:a,"date-time":s,uri:l,"uri-reference":g,"uri-template":y,url:b,email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:c,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:u,uuid:w,"json-pointer":C,"json-pointer-uri-fragment":E,"relative-json-pointer":x};var S=/t|\s/i,k=/\/|:/,_=/[^\\]\\Z/},"2iM5":function(e,t,n){(function(e,n){function r(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n-1}function E(e,t){var n=this.__data__,r=I(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function x(e){var t=-1,n=null==e?0:e.length;for(this.clear();++tl))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var h=-1,d=!0,p=n&we?new A:void 0;for(a.set(e,t),a.set(t,e);++h-1&&e%1==0&&e-1&&e%1==0&&e<=Ce}function he(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function de(e){return null!=e&&"object"==typeof e}function pe(e){return ce(e)?N(e):q(e)}function me(){return[]}function ve(){return!1}var ge=200,ye="__lodash_hash_undefined__",be=1,we=2,Ce=9007199254740991,Ee="[object Arguments]",xe="[object Array]",Se="[object AsyncFunction]",ke="[object Boolean]",_e="[object Date]",Oe="[object Error]",Me="[object Function]",Ae="[object GeneratorFunction]",Pe="[object Map]",Fe="[object Number]",ze="[object Null]",Te="[object Object]",Le="[object Proxy]",De="[object RegExp]",je="[object Set]",Re="[object String]",Ne="[object Symbol]",Ie="[object Undefined]",He="[object ArrayBuffer]",Ve="[object DataView]",Be=/[\\^$.*+?()[\]{}|]/g,$e=/^\[object .+?Constructor\]$/,We=/^(?:0|[1-9]\d*)$/,Ue={};Ue["[object Float32Array]"]=Ue["[object Float64Array]"]=Ue["[object Int8Array]"]=Ue["[object Int16Array]"]=Ue["[object Int32Array]"]=Ue["[object Uint8Array]"]=Ue["[object Uint8ClampedArray]"]=Ue["[object Uint16Array]"]=Ue["[object Uint32Array]"]=!0,Ue[Ee]=Ue[xe]=Ue[He]=Ue[ke]=Ue[Ve]=Ue[_e]=Ue[Oe]=Ue[Me]=Ue[Pe]=Ue[Fe]=Ue[Te]=Ue[De]=Ue[je]=Ue[Re]=Ue["[object WeakMap]"]=!1;var Ke="object"==typeof e&&e&&e.Object===Object&&e,qe="object"==typeof self&&self&&self.Object===Object&&self,Ge=Ke||qe||Function("return this")(),Ye="object"==typeof t&&t&&!t.nodeType&&t,Qe=Ye&&"object"==typeof n&&n&&!n.nodeType&&n,Xe=Qe&&Qe.exports===Ye,Je=Xe&&Ke.process,Ze=function(){try{return Je&&Je.binding&&Je.binding("util")}catch(e){}}(),et=Ze&&Ze.isTypedArray,tt=Array.prototype,nt=Function.prototype,rt=Object.prototype,ot=Ge["__core-js_shared__"],it=nt.toString,at=rt.hasOwnProperty,st=function(){var e=/[^.]+$/.exec(ot&&ot.keys&&ot.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),ct=rt.toString,lt=RegExp("^"+it.call(at).replace(Be,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ut=Xe?Ge.Buffer:void 0,ft=Ge.Symbol,ht=Ge.Uint8Array,dt=rt.propertyIsEnumerable,pt=tt.splice,mt=ft?ft.toStringTag:void 0,vt=Object.getOwnPropertySymbols,gt=ut?ut.isBuffer:void 0,yt=function(e,t){return function(n){return e(t(n))}}(Object.keys,Object),bt=Z(Ge,"DataView"),wt=Z(Ge,"Map"),Ct=Z(Ge,"Promise"),Et=Z(Ge,"Set"),xt=Z(Ge,"WeakMap"),St=Z(Object,"create"),kt=ae(bt),_t=ae(wt),Ot=ae(Ct),Mt=ae(Et),At=ae(xt),Pt=ft?ft.prototype:void 0,Ft=Pt?Pt.valueOf:void 0;f.prototype.clear=h,f.prototype.delete=d,f.prototype.get=p,f.prototype.has=m,f.prototype.set=v,g.prototype.clear=y,g.prototype.delete=b,g.prototype.get=w,g.prototype.has=C,g.prototype.set=E,x.prototype.clear=S,x.prototype.delete=k,x.prototype.get=_,x.prototype.has=O,x.prototype.set=M,A.prototype.add=A.prototype.push=P,A.prototype.has=F,z.prototype.clear=T,z.prototype.delete=L,z.prototype.get=D,z.prototype.has=j,z.prototype.set=R;var zt=vt?function(e){return null==e?[]:(e=Object(e),r(vt(e),function(t){return dt.call(e,t)}))}:me,Tt=V;(bt&&Tt(new bt(new ArrayBuffer(1)))!=Ve||wt&&Tt(new wt)!=Pe||Ct&&"[object Promise]"!=Tt(Ct.resolve())||Et&&Tt(new Et)!=je||xt&&"[object WeakMap]"!=Tt(new xt))&&(Tt=function(e){var t=V(e),n=t==Te?e.constructor:void 0,r=n?ae(n):"";if(r)switch(r){case kt:return Ve;case _t:return Pe;case Ot:return"[object Promise]";case Mt:return je;case At:return"[object WeakMap]"}return t});var Lt=B(function(){return arguments}())?B:function(e){return de(e)&&at.call(e,"callee")&&!dt.call(e,"callee")},Dt=Array.isArray,jt=gt||ve,Rt=et?function(e){return function(t){return e(t)}}(et):K;n.exports=le}).call(t,n("DuR2"),n("3IRH")(e))},"2kcX":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("hz+3"),o=function(){function e(){this._weakMap=new WeakMap}return e.prototype.set=function(e,t){for(var n=this._weakMap,r=0,o=e.length-1;r1&&i.call(a[0],n,function(){for(l=1;l0&&void 0!==arguments[0]?arguments[0]:l.buffers.fixed(),a=!1,s=[];return(0,c.check)(i,c.is.buffer,d),{take:n,put:t,flush:r,close:o,get __takers__(){return s},get __closed__(){return a}}}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l.buffers.none(),n=arguments[2];arguments.length>2&&(0,c.check)(n,c.is.func,"Invalid match function passed to eventChannel");var r=o(t),i=function(){r.__closed__||(a&&a(),r.close())},a=e(function(e){if(h(e))return void i();n&&!n(e)||r.put(e)});if(r.__closed__&&a(),!c.is.func(a))throw new Error("in eventChannel: subscribe should return a function to unsubscribe");return{take:r.take,flush:r.flush,close:i}}function a(e){var t=i(function(t){return e(function(e){if(e[c.SAGA_ACTION])return void t(e);(0,u.asap)(function(){return t(e)})})});return s({},t,{take:function(e,n){arguments.length>1&&((0,c.check)(n,c.is.func,"channel.take's matcher argument must be a function"),e[c.MATCH]=n),t.take(e)}})}t.__esModule=!0,t.UNDEFINED_INPUT_ERROR=t.INVALID_BUFFER=t.isEnd=t.END=void 0;var s=Object.assign||function(e){for(var t=1;t100?100:e}function o(){return o=Object.assign||function(e){for(var t=1;t4&&void 0!==arguments[4]?arguments[4]:0,i=arguments[5],a=50-r/2,s=0,c=-a,l=0,u=-2*a;switch(i){case"left":s=-a,c=0,l=2*a,u=0;break;case"right":s=a,c=0,l=-2*a,u=0;break;case"bottom":c=a,u=2*a}var f="M 50,50 m "+s+","+c+"\n a "+a+","+a+" 0 1 1 "+l+","+-u+"\n a "+a+","+a+" 0 1 1 "+-l+","+u,h=2*Math.PI*a;return{pathString:f,pathStyle:{stroke:n,strokeDasharray:t/100*(h-o)+"px "+h+"px",strokeDashoffset:"-"+(o/2+e/100*(h-o))+"px",transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s"}}},t.prototype.getStokeList=function(){var e=this,t=this.props,n=t.prefixCls,r=t.percent,o=t.strokeColor,i=t.strokeWidth,a=t.strokeLinecap,s=t.gapDegree,c=t.gapPosition,l=Array.isArray(r)?r:[r],u=Array.isArray(o)?o:[o],f=0;return l.map(function(t,r){var o=u[r]||u[u.length-1],l=e.getPathStyles(f,t,o,i,s,c),h=l.pathString,d=l.pathStyle;return f+=t,k.a.createElement("path",{key:r,className:n+"-circle-path",d:h,strokeLinecap:a,strokeWidth:0===t?0:i,fillOpacity:"0",style:d,ref:function(t){e.paths[r]=t}})})},t.prototype.render=function(){var e=this.props,t=e.prefixCls,n=e.strokeWidth,r=e.trailWidth,o=e.gapDegree,i=e.gapPosition,a=e.trailColor,s=e.strokeLinecap,c=e.style,l=e.className,u=I()(e,["prefixCls","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className"]),f=this.getPathStyles(0,100,a,n,o,i),h=f.pathString,d=f.pathStyle;return delete u.percent,delete u.strokeColor,k.a.createElement("svg",R()({className:t+"-circle "+l,viewBox:"0 0 100 100",style:c},u),k.a.createElement("path",{className:t+"-circle-trail",d:h,stroke:a,strokeLinecap:s,strokeWidth:r||n,fillOpacity:"0",style:d}),this.getStokeList())},t}(S.Component));J.propTypes=R()({},Q,{gapPosition:x.a.oneOf(["top","bottom","left","right"])}),J.defaultProps=R()({},G,{gapPosition:"top"});var Z=q(J),ee={normal:"#108ee9",exception:"#ff5500",success:"#87d068"},te=function(e){var t=e.prefixCls,n=e.width,r=e.strokeWidth,o=e.trailColor,i=e.strokeLinecap,a=e.gapPosition,s=e.gapDegree,c=e.type,f=e.children,h=n||120,d={width:h,height:h,fontSize:.15*h+6},p=r||6,m=a||"dashboard"===c&&"bottom"||"top",v=s||"dashboard"===c&&75;return S.createElement("div",{className:"".concat(t,"-inner"),style:d},S.createElement(Z,{percent:l(e),strokeWidth:p,trailWidth:p,strokeColor:u(e),strokeLinecap:i,trailColor:o,prefixCls:t,gapDegree:v,gapPosition:m}),f)},ne=te,re=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);o=100?"success":e||"normal"}},{key:"renderProcessInfo",value:function(e,t){var n=this.props,o=n.showInfo,i=n.format,a=n.type,s=n.percent,c=n.successPercent;if(!o)return null;var l,u=i||function(e){return"".concat(e,"%")},f="circle"===a||"dashboard"===a?"":"-circle";return i||"exception"!==t&&"success"!==t?l=u(r(s),r(c)):"exception"===t?l=S.createElement(M.default,{type:"close".concat(f),theme:"line"===a?"filled":"outlined"}):"success"===t&&(l=S.createElement(M.default,{type:"check".concat(f),theme:"line"===a?"filled":"outlined"})),S.createElement("span",{className:"".concat(e,"-text"),title:"string"==typeof l?l:void 0},l)}},{key:"render",value:function(){return S.createElement(A.a,null,this.renderProgress)}}]),t}(S.Component);ae.defaultProps={type:"line",percent:0,showInfo:!0,trailColor:"#f3f3f3",size:"default",gapDegree:0,strokeLinecap:"round"},ae.propTypes={status:E.oneOf(ie),type:E.oneOf(oe),showInfo:E.bool,percent:E.number,width:E.number,strokeWidth:E.number,strokeLinecap:E.oneOf(["round","square"]),strokeColor:E.oneOfType([E.string,E.object]),trailColor:E.string,format:E.func,gapDegree:E.number};t.default=ae},"3fs2":function(e,t,n){var r=n("RY/4"),o=n("dSzd")("iterator"),i=n("/bQp");e.exports=n("FeBl").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},"3g/S":function(e,t,n){var r=n("OzIq"),o=n("7gX0"),i=n("V3l/"),a=n("M8WE"),s=n("lDLk").f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},"3g1l":function(e,t,n){"use strict";e.exports=function(e,t,n){var r=" ",o=e.schema[t],i=e.schemaPath+e.util.getProperty(t),a=e.errSchemaPath+"/"+t,s=!e.opts.allErrors,c=e.util.copy(e),l="";c.level++;var u="valid"+c.level,f=c.baseId,h=!0,d=o;if(d)for(var p,m=-1,v=d.length-1;m=l?e?"":void 0:(i=s.charCodeAt(c),i<55296||i>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?e?s.charAt(c):i:e?s.slice(c,c+2):a-56320+(i-55296<<10)+65536)}}},"4Erz":function(e,t){},"4IZP":function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},"4Mzz":function(e,t,n){"use strict";(function(e){function r(e){var t=o(e,"string");return"symbol"==typeof t?t:String(t)}function o(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function i(){return{fields:n("hchJ").default,widgets:n("K1Py").default,definitions:{},formContext:{}}}function a(e){var t=e.type;return!t&&e.const?oe(e.const):!t&&e.enum?"string":t instanceof Array&&2===t.length&&t.includes("null")?t.find(function(e){return"null"!==e}):t}function s(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=a(e);if("function"==typeof t)return function(e){if(!e.MergedWidget){var t=e.defaultProps&&e.defaultProps.options||{};e.MergedWidget=function(n){var r=n.options,o=void 0===r?{}:r,i=(0,Q.default)(n,["options"]);return X.default.createElement(e,(0,G.default)({options:(0,Y.default)({},t,o)},i))}}return e.MergedWidget}(t);if("string"!=typeof t)throw new Error("Unsupported widget definition: ".concat(typeof t));if(n.hasOwnProperty(t)){return s(e,n[t],n)}if(!re.hasOwnProperty(r))throw new Error('No widget for type "'.concat(r,'"'));if(re[r].hasOwnProperty(t)){return s(e,n[re[r][t]],n)}return!1}function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t;if(f(r)&&f(e.default))r=h(r,e.default);else if("default"in e)r=e.default;else{if("$ref"in e){var o=x(e.$ref,n);return c(o,r,n)}w(e)&&(r=e.items.map(function(e){return c(e,void 0,n)}))}switch(void 0===r&&(r=e.default),e.type){case"object":return Object.keys(e.properties||{}).reduce(function(t,o){return t[o]=c(e.properties[o],(r||{})[o],n),t},{});case"array":if(e.minItems){if(y(e,n))return[];var i=r?r.length:0;if(e.minItems>i){var a=r||[],s=Array.isArray(e.items)?e.additionalItems:e.items,l=(0,Z.default)(new Array(e.minItems-i),c(s,s.defaults,n));return a.concat(l)}}}return r}function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!f(e))throw new Error("Invalid schema: "+e);var r=O(e,n,t),o=c(r,e.default,n);return void 0===t?o:f(t)?h(o,t):t||o}function u(e){return Object.keys(e).filter(function(e){return 0===e.indexOf("ui:")}).reduce(function(t,n){var r=e[n];return"ui:widget"===n&&f(r)?(console.warn("Setting options via ui:widget object is deprecated, use ui:options instead"),(0,Y.default)({},t,r.options||{},{widget:r.component})):"ui:options"===n&&f(r)?(0,Y.default)({},t,r):(0,Y.default)({},t,(0,q.default)({},n.substring(3),r))},{})}function f(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=Object.assign({},e);return Object.keys(t).reduce(function(r,o){var i=e?e[o]:{},a=t[o];return e&&e.hasOwnProperty(o)&&f(a)?r[o]=h(i,a,n):n&&Array.isArray(i)&&Array.isArray(a)?r[o]=i.concat(a):r[o]=a,r},r)}function d(e){if(""!==e){if(/\.$/.test(e))return e;if(/\.0$/.test(e))return e;var t=Number(e),n="number"==typeof t&&!Number.isNaN(t);return/\.\d*0$/.test(e)?e:n?t:e}}function p(e,t){if(!Array.isArray(t))return e;var n=function(e){return e.reduce(function(e,t){return e[t]=!0,e},{})},r=function(e){return e.length>1?"properties '".concat(e.join("', '"),"'"):"property '".concat(e[0],"'")},o=n(e),i=n(t),a=t.filter(function(e){return"*"!==e&&!o[e]});if(a.length)throw new Error("uiSchema order list contains extraneous ".concat(r(a)));var s=e.filter(function(e){return!i[e]}),c=t.indexOf("*");if(-1===c){if(s.length)throw new Error("uiSchema order list does not contain ".concat(r(s)));return t}if(c!==t.lastIndexOf("*"))throw new Error("uiSchema order list contains more than one wildcard item");var l=(0,K.default)(t);return l.splice.apply(l,[c,1].concat((0,K.default)(s))),l}function m(e){return Array.isArray(e.enum)&&1===e.enum.length||e.hasOwnProperty("const")}function v(e){if(Array.isArray(e.enum)&&1===e.enum.length)return e.enum[0];if(e.hasOwnProperty("const"))return e.const;throw new Error("schema cannot be inferred as a constant")}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=O(e,t),r=n.oneOf||n.anyOf;return!!Array.isArray(n.enum)||!!Array.isArray(r)&&r.every(function(e){return m(e)})}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!(!e.uniqueItems||!e.items)&&g(e.items,t)}function b(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("files"===t["ui:widget"])return!0;if(e.items){var r=O(e.items,n);return"string"===r.type&&"data-url"===r.format}return!1}function w(e){return Array.isArray(e.items)&&e.items.length>0&&e.items.every(function(e){return f(e)})}function C(e){return!0===e.additionalItems&&console.warn("additionalItems=true is currently not supported"),f(e.additionalItems)}function E(e){return e.enum?e.enum.map(function(t,n){return{label:e.enumNames&&e.enumNames[n]||String(t),value:t}}):(e.oneOf||e.anyOf).map(function(e,t){var n=v(e);return{label:e.title||String(n),value:n}})}function x(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=/^#\/definitions\/(.*)$/.exec(e);if(n&&n[1]){var r=n[1].split("/"),o=t,i=!0,a=!1,s=void 0;try{for(var c,l=r[Symbol.iterator]();!(i=(c=l.next()).done);i=!0){var u=c.value;for(u=u.replace(/~1/g,"/").replace(/~0/g,"~");o.hasOwnProperty("$ref");)o=x(o.$ref,t);if(!o.hasOwnProperty(u))throw new Error("Could not find a definition for ".concat(e,"."));o=o[u]}}catch(e){a=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(a)throw s}}return o}throw new Error("Could not find a definition for ".concat(e,"."))}function S(e){var t=(arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:{});return e=(0,Y.default)({},e,{properties:(0,Y.default)({},e.properties)}),Object.keys(t).forEach(function(n){if(!e.properties.hasOwnProperty(n)){var r=e.additionalProperties.hasOwnProperty("type")?(0,Y.default)({},e.additionalProperties):{type:oe(t[n])};e.properties[n]=r,e.properties[n][ne]=!0}}),e}function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e.hasOwnProperty("$ref"))return _(e,t,n);if(e.hasOwnProperty("dependencies")){return O(M(e,t,n),t,n)}return e}function _(e,t,n){var r=x(e.$ref,t),o=(e.$ref,(0,Q.default)(e,["$ref"]));return O((0,Y.default)({},r,o),t,n)}function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=k(e,t,n);return r.hasOwnProperty("additionalProperties")&&!1!==r.additionalProperties?S(r,t,n):r}function M(e,t,n){var r=e.dependencies,o=void 0===r?{}:r,i=(0,Q.default)(e,["dependencies"]);for(var a in o)if(void 0!==n[a]){var s=o[a];Array.isArray(s)?i=A(i,s):f(s)&&(i=P(i,t,n,a,s))}return i}function A(e,t){if(!t)return e;var n=Array.isArray(e.required)?Array.from(new Set([].concat((0,K.default)(e.required),(0,K.default)(t)))):t;return(0,Y.default)({},e,{required:n})}function P(e,t,n,r,o){var i=O(o,t,n),a=i.oneOf;if(e=z(e,(0,Q.default)(i,["oneOf"])),void 0===a)return e;if(!Array.isArray(a))throw new Error("invalid: it is some ".concat(typeof a," instead of an array"));var s=a.map(function(e){return e.hasOwnProperty("$ref")?_(e,t,n):e});return F(e,t,n,r,s)}function F(e,t,n,o,i){var a=i.filter(function(e){if(!e.properties)return!1;var t=e.properties[o];if(t){var r={type:"object",properties:(0,q.default)({},o,t)};return 0===(0,J.default)(n,r).errors.length}});if(1!==a.length)return console.warn("ignoring oneOf in dependencies because there isn't exactly one subschema that is valid"),e;var s=a[0],c=s.properties,l=(c[o],(0,Q.default)(c,[o].map(r)));return z(e,O((0,Y.default)({},s,{properties:l}),t,n))}function z(e,t){return h(e,t,!0)}function T(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function L(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(e===t)return!0;if("function"==typeof e||"function"==typeof t)return!0;if("object"!=typeof e||"object"!=typeof t)return!1;if(null===e||null===t)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(e instanceof RegExp&&t instanceof RegExp)return e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase;if(T(e)||T(t)){if(!T(e)||!T(t))return!1;var o=Array.prototype.slice;return L(o.call(e),o.call(t),n,r)}if(e.constructor!==t.constructor)return!1;var i=Object.keys(e),a=Object.keys(t);if(0===i.length&&0===a.length)return!0;if(i.length!==a.length)return!1;for(var s=n.length;s--;)if(n[s]===e)return r[s]===t;n.push(e),r.push(t),i.sort(),a.sort();for(var c=i.length-1;c>=0;c--)if(i[c]!==a[c])return!1;for(var l,u=i.length-1;u>=0;u--)if(l=i[u],!L(e[l],t[l],n,r))return!1;return n.pop(),r.pop(),!0}function D(e,t,n){var r=e.props,o=e.state;return!L(r,t)||!L(o,n)}function j(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"root",i={$id:t||o};if("$ref"in e||"dependencies"in e){return j(O(e,n,r),t,n,r,o)}if("items"in e&&!e.items.$ref)return j(e.items,t,n,r,o);if("object"!==e.type)return i;for(var a in e.properties||{}){var s=e.properties[a],c=i.$id+"_"+a;i[a]=j(s,c,n,(r||{})[a],o)}return i}function R(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!e)return{year:-1,month:-1,day:-1,hour:t?-1:0,minute:t?-1:0,second:t?-1:0};var n=new Date(e);if(Number.isNaN(n.getTime()))throw new Error("Unable to parse date "+e);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:t?n.getUTCHours():0,minute:t?n.getUTCMinutes():0,second:t?n.getUTCSeconds():0}}function N(e){var t=e.year,n=e.month,r=e.day,o=e.hour,i=void 0===o?0:o,a=e.minute,s=void 0===a?0:a,c=e.second,l=void 0===c?0:c,u=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],f=Date.UTC(t,n-1,r,i,s,l),h=new Date(f).toJSON();return u?h:h.slice(0,10)}function I(e,t){for(var n=String(e);n.length0&&void 0!==i[0]?i[0]:te.default.uploadUsername,n=i.length>1&&void 0!==i[1]?i[1]:te.default.uploadPassword,e.next=4,ee.default.post("".concat(te.default.uploadBaseUrl,"/sign"),{username:t,password:n});case 4:return r=e.sent,o=r.data,e.abrupt("return",o);case 7:case"end":return e.stop()}},e)}));return function(){return e.apply(this,arguments)}}();t.sign=ie}).call(t,n("162o").setImmediate)},"4NKc":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("TToO"),o=n("B4qY"),i=n("6T+F"),a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t.prototype.apply=function(e){var t=e.args,n=e.config.execute,r=e.target,o=e.value;return function(){for(var e=[],a=0;a=0)return l&&(r+=" if (true) { "),r;throw new Error('unknown format "'+a+'" is used in schema at path "'+e.errSchemaPath+'"')}var v="object"==typeof m&&!(m instanceof RegExp)&&m.validate,g=v&&m.type||"string";if(v){var y=!0===m.async;m=m.validate}if(g!=n)return l&&(r+=" if (true) { "),r;if(y){if(!e.async)throw new Error("async format in sync schema");var b="formats"+e.util.getProperty(a)+".validate";r+=" if (!(await "+b+"("+u+"))) { "}else{r+=" if (! ";var b="formats"+e.util.getProperty(a);v&&(b+=".validate"),r+="function"==typeof m?" "+b+"("+u+") ":" "+b+".test("+u+") ",r+=") { "}}var w=w||[];w.push(r),r="",!1!==e.createErrors?(r+=" { keyword: 'format' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { format: ",r+=h?""+f:""+e.util.toQuotedString(a),r+=" } ",!1!==e.opts.messages&&(r+=" , message: 'should match format \"",r+=h?"' + "+f+" + '":""+e.util.escapeQuotes(a),r+="\"' "),e.opts.verbose&&(r+=" , schema: ",r+=h?"validate.schema"+s:""+e.util.toQuotedString(a),r+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),r+=" } "):r+=" {} ";var C=r;return r=w.pop(),!e.compositeRule&&l?e.async?r+=" throw new ValidationError(["+C+"]); ":r+=" validate.errors = ["+C+"]; return false; ":r+=" var err = "+C+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } ",l&&(r+=" else { "),r}},"5zde":function(e,t,n){n("zQR9"),n("qyJz"),e.exports=n("FeBl").Array.from},"601f":function(e,t,n){"use strict";e.exports=function(e){function t(e){var t=o(e);return t&&void 0!==t.id?t.id:null}function n(e){var t=o(e);if(!t)throw new Error("setId required the element to have a resize detection state.");var n=r.generate();return t.id=n,n}var r=e.idGenerator,o=e.stateHandler.getState;return{get:t,set:n}}},"63NB":function(e,t){function n(e,t,n,r,o){var i={};return Object.keys(r).forEach(function(e){i[e]=r[e]}),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce(function(n,r){return r(e,t,n)||n},i),o&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(o):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}e.exports=n},"6HOO":function(e,t,n){e.exports=n("cnlX")},"6MiT":function(e,t,n){function r(e){return"symbol"==typeof e||i(e)&&o(e)==a}var o=n("aCM0"),i=n("UnEC"),a="[object Symbol]";e.exports=r},"6MkI":function(e,t){e.exports={pageHeader:"pageHeader___2o00J",detail:"detail___3YCEL",row:"row___1NicN",breadcrumb:"breadcrumb___1RgcN",tabs:"tabs___1db7G",logo:"logo___2Jy3j",title:"title___3k7FD",action:"action___2X5XQ",content:"content___24A1B",extraContent:"extraContent___18heq",main:"main___3p1-H"}},"6RRl":function(e,t,n){function r(e){if(e instanceof o)return e.clone();var t=new i(e.__wrapped__,e.__chain__);return t.__actions__=a(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var o=n("2VmA"),i=n("6o+p"),a=n("hrPF");e.exports=r},"6T+F":function(e,t,n){"use strict";function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}Object.defineProperty(t,"__esModule",{value:!0}),r(n("DRk7")),r(n("9QaD")),r(n("2kcX")),r(n("mxWL")),r(n("xR7G")),r(n("nZav")),r(n("hqCQ")),r(n("E7xi")),r(n("zfVZ")),r(n("Iujx"))},"6W27":function(e,t){e.exports={exception:"exception___24x5-",imgBlock:"imgBlock___1sK3a",imgEle:"imgEle___26JRS",content:"content___Kw_fJ",desc:"desc___2EPaP",actions:"actions___1Snvf"}},"6YxY":function(e,t){e.exports=function(e,t){function n(e,r){return e.reduce(function(e,o){return Array.isArray(o)&&r-1&&e%1==0&&e-1&&e%1==0&&e<=v}function a(e){for(var t=c(e),n=t.length,r=n&&e.length,a=!!r&&i(r)&&(f(e)||u(e)),s=-1,l=[];++s0;++r=e.subMenuTitle.offsetWidth||(t.style.minWidth=e.subMenuTitle.offsetWidth+"px")}},this.saveSubMenuTitle=function(t){e.subMenuTitle=t}},Q=Object(O.connect)(function(e,t){var n=e.openKeys,r=e.activeKey,o=e.selectedKeys,i=t.eventKey,a=t.subMenuKey;return{isOpen:n.indexOf(i)>-1,active:r[a]===i,selectedKeys:o}})(G);Q.isSubMenu=!0;var X=Q,J=!("undefined"==typeof window||!window.document||!window.document.createElement),Z="menuitem-overflowed",ee=.5;J&&n("yNhk");var te=function(e){function t(){var n,r,o;y()(this,t);for(var i=arguments.length,a=Array(i),s=0;s=0});i.forEach(function(e){D(e,"display","inline-block")}),r.menuItemSizes=o.map(function(e){return L(e)}),i.forEach(function(e){D(e,"display","none")}),r.overflowedIndicatorWidth=L(e.children[e.children.length-1]),r.originalTotalWidth=r.menuItemSizes.reduce(function(e,t){return e+t},0),r.handleResize(),D(n,"display","none")}}}},r.resizeObserver=null,r.mutationObserver=null,r.originalTotalWidth=0,r.overflowedItems=[],r.menuItemSizes=[],r.handleResize=function(){if("horizontal"===r.props.mode){var e=N.a.findDOMNode(r);if(e){var t=L(e);r.overflowedItems=[];var n=0,o=void 0;r.originalTotalWidth>t+ee&&(o=-1,r.menuItemSizes.forEach(function(e){(n+=e)+r.overflowedIndicatorWidth<=t&&o++})),r.setState({lastVisibleIndex:o})}}},o=n,w()(r,o)}return E()(t,e),t.prototype.componentDidMount=function(){var e=this;if(this.setChildrenWidthAndResize(),1===this.props.level&&"horizontal"===this.props.mode){var t=N.a.findDOMNode(this);if(!t)return;this.resizeObserver=new I.a(function(t){t.forEach(e.setChildrenWidthAndResize)}),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),"undefined"!=typeof MutationObserver&&(this.mutationObserver=new MutationObserver(function(){e.resizeObserver.disconnect(),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),e.setChildrenWidthAndResize()}),this.mutationObserver.observe(t,{attributes:!1,childList:!0,subTree:!1}))}},t.prototype.componentWillUnmount=function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.mutationObserver&&this.resizeObserver.disconnect()},t.prototype.renderChildren=function(e){var t=this,n=this.state.lastVisibleIndex;return(e||[]).reduce(function(r,o,i){var a=o;if("horizontal"===t.props.mode){var s=t.getOverflowedSubMenuItem(o.props.eventKey,[]);void 0!==n&&-1!==t.props.className.indexOf(t.props.prefixCls+"-root")&&(i>n&&(a=S.a.cloneElement(o,{style:{display:"none"},eventKey:o.props.eventKey+"-hidden",className:o.className+" "+Z})),i===n+1&&(t.overflowedItems=e.slice(n+1).map(function(e){return S.a.cloneElement(e,{key:e.props.eventKey,mode:"vertical-left"})}),s=t.getOverflowedSubMenuItem(o.props.eventKey,t.overflowedItems)));var c=[].concat(r,[s,a]);return i===e.length-1&&c.push(t.getOverflowedSubMenuItem(o.props.eventKey,[],!0)),c}return[].concat(r,[a])},[])},t.prototype.render=function(){var e=this.props,t=e.hiddenClassName,n=e.visible,r=(e.prefixCls,e.overflowedIndicator,e.mode,e.level,e.tag),o=(e.children,e.theme,v()(e,["hiddenClassName","visible","prefixCls","overflowedIndicator","mode","level","tag","children","theme"]));return n||(o.className+=" "+t),S.a.createElement(r,o,this.renderChildren(this.props.children))},t}(S.a.Component);te.propTypes={className:_.a.string,children:_.a.node,mode:_.a.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),prefixCls:_.a.string,level:_.a.number,theme:_.a.string,overflowedIndicator:_.a.node,visible:_.a.bool,hiddenClassName:_.a.string,tag:_.a.string,style:_.a.object},te.defaultProps={tag:"div",className:""};var ne=te,re=function(e){function t(n){var r;y()(this,t);var o=w()(this,e.call(this,n));return oe.call(o),n.store.setState({activeKey:p()({},n.store.getState().activeKey,(r={},r[n.eventKey]=f(n,n.activeKey),r))}),o.instanceArray=[],o}return E()(t,e),t.prototype.componentDidMount=function(){this.props.manualRef&&this.props.manualRef(this)},t.prototype.shouldComponentUpdate=function(e){return this.props.visible||e.visible},t.prototype.componentDidUpdate=function(e){var t=this.props,n="activeKey"in t?t.activeKey:t.store.getState().activeKey[u(t)],r=f(t,n);if(r!==n)l(t.store,u(t),r);else if("activeKey"in e){var o=f(e,e.activeKey);r!==o&&l(t.store,u(t),r)}},t.prototype.render=function(){var e=this,t=v()(this.props,[]);this.instanceArray=[];var n=F()(t.prefixCls,t.className,t.prefixCls+"-"+t.mode),r={className:n,role:t.role||"menu"};t.id&&(r.id=t.id),t.focusable&&(r.tabIndex="0",r.onKeyDown=this.onKeyDown);var o=t.prefixCls,i=t.eventKey,a=t.visible,s=t.level,c=t.mode,l=t.overflowedIndicator,u=t.theme;return T.forEach(function(e){return delete t[e]}),delete t.onClick,S.a.createElement(ne,p()({},t,{prefixCls:o,mode:c,tag:"ul",level:s,theme:u,hiddenClassName:o+"-hidden",visible:a,overflowedIndicator:l},r),S.a.Children.map(t.children,function(t,n){return e.renderMenuItem(t,n,i||"0-menu-")}))},t}(S.a.Component);re.propTypes={onSelect:_.a.func,onClick:_.a.func,onDeselect:_.a.func,onOpenChange:_.a.func,onDestroy:_.a.func,openTransitionName:_.a.string,openAnimation:_.a.oneOfType([_.a.string,_.a.object]),openKeys:_.a.arrayOf(_.a.string),visible:_.a.bool,children:_.a.any,parentMenu:_.a.object,eventKey:_.a.string,store:_.a.shape({getState:_.a.func,setState:_.a.func}),focusable:_.a.bool,multiple:_.a.bool,style:_.a.object,defaultActiveFirst:_.a.bool,activeKey:_.a.string,selectedKeys:_.a.arrayOf(_.a.string),defaultSelectedKeys:_.a.arrayOf(_.a.string),defaultOpenKeys:_.a.arrayOf(_.a.string),level:_.a.number,mode:_.a.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),triggerSubMenuAction:_.a.oneOf(["click","hover"]),inlineIndent:_.a.oneOfType([_.a.number,_.a.string]),manualRef:_.a.func,itemIcon:_.a.oneOfType([_.a.func,_.a.node]),expandIcon:_.a.oneOfType([_.a.func,_.a.node])},re.defaultProps={prefixCls:"rc-menu",className:"",mode:"vertical",level:1,inlineIndent:24,visible:!0,focusable:!0,style:{},manualRef:r};var oe=function(){var e=this;this.onKeyDown=function(t,n){var r=t.keyCode,o=void 0;if(e.getFlatInstanceArray().forEach(function(e){e&&e.props.active&&e.onKeyDown&&(o=e.onKeyDown(t))}),o)return 1;var i=null;return r!==M.a.UP&&r!==M.a.DOWN||(i=e.step(r===M.a.UP?-1:1)),i?(t.preventDefault(),l(e.props.store,u(e.props),i.props.eventKey),"function"==typeof n&&n(i),1):void 0},this.onItemHover=function(t){var n=t.key,r=t.hover;l(e.props.store,u(e.props),r?n:null)},this.onDeselect=function(t){e.props.onDeselect(t)},this.onSelect=function(t){e.props.onSelect(t)},this.onClick=function(t){e.props.onClick(t)},this.onOpenChange=function(t){e.props.onOpenChange(t)},this.onDestroy=function(t){e.props.onDestroy(t)},this.getFlatInstanceArray=function(){return e.instanceArray},this.getOpenTransitionName=function(){return e.props.openTransitionName},this.step=function(t){var n=e.getFlatInstanceArray(),r=e.props.store.getState().activeKey[u(e.props)],o=n.length;if(!o)return null;t<0&&(n=n.concat().reverse());var i=-1;if(n.every(function(e,t){return!e||e.props.eventKey!==r||(i=t,!1)}),e.props.defaultActiveFirst||-1===i||!c(n.slice(i,o-1))){var a=(i+1)%o,s=a;do{var l=n[s];if(l&&!l.props.disabled)return l;s=(s+1)%o}while(s!==a);return null}},this.renderCommonMenuItem=function(t,n,i){var a=e.props.store.getState(),s=e.props,c=o(t,s.eventKey,n),l=t.props;if(!l||"string"==typeof t.type)return t;var u=c===a.activeKey,f=p()({mode:l.mode||s.mode,level:s.level,inlineIndent:s.inlineIndent,renderMenuItem:e.renderMenuItem,rootPrefixCls:s.prefixCls,index:n,parentMenu:s.parentMenu,manualRef:l.disabled?void 0:Object(A.a)(t.ref,h.bind(e)),eventKey:c,active:!l.disabled&&u,multiple:s.multiple,onClick:function(t){(l.onClick||r)(t),e.onClick(t)},onItemHover:e.onItemHover,openTransitionName:e.getOpenTransitionName(),openAnimation:s.openAnimation,subMenuOpenDelay:s.subMenuOpenDelay,subMenuCloseDelay:s.subMenuCloseDelay,forceSubMenuRender:s.forceSubMenuRender,onOpenChange:e.onOpenChange,onDeselect:e.onDeselect,onSelect:e.onSelect,builtinPlacements:s.builtinPlacements,itemIcon:l.itemIcon||e.props.itemIcon,expandIcon:l.expandIcon||e.props.expandIcon},i);return("inline"===s.mode||j())&&(f.triggerSubMenuAction="click"),S.a.cloneElement(t,f)},this.renderMenuItem=function(t,n,r){if(!t)return null;var o=e.props.store.getState(),i={openKeys:o.openKeys,selectedKeys:o.selectedKeys,triggerSubMenuAction:e.props.triggerSubMenuAction,subMenuKey:r};return e.renderCommonMenuItem(t,n,i)}},ie=Object(O.connect)()(re),ae=ie,se=function(e){function t(n){y()(this,t);var r=w()(this,e.call(this,n));ce.call(r),r.isRootMenu=!0;var o=n.defaultSelectedKeys,i=n.defaultOpenKeys;return"selectedKeys"in n&&(o=n.selectedKeys||[]),"openKeys"in n&&(i=n.openKeys||[]),r.store=Object(O.create)({selectedKeys:o,openKeys:i,activeKey:{"0-menu-":f(n,n.activeKey)}}),r}return E()(t,e),t.prototype.componentDidMount=function(){this.updateMiniStore()},t.prototype.componentDidUpdate=function(){this.updateMiniStore()},t.prototype.updateMiniStore=function(){"selectedKeys"in this.props&&this.store.setState({selectedKeys:this.props.selectedKeys||[]}),"openKeys"in this.props&&this.store.setState({openKeys:this.props.openKeys||[]})},t.prototype.render=function(){var e=this,t=v()(this.props,[]);return t.className+=" "+t.prefixCls+"-root",t=p()({},t,{onClick:this.onClick,onOpenChange:this.onOpenChange,onDeselect:this.onDeselect,onSelect:this.onSelect,openTransitionName:this.getOpenTransitionName(),parentMenu:this}),S.a.createElement(O.Provider,{store:this.store},S.a.createElement(ae,p()({},t,{ref:function(t){return e.innerMenu=t}}),this.props.children))},t}(S.a.Component);se.propTypes={defaultSelectedKeys:_.a.arrayOf(_.a.string),defaultActiveFirst:_.a.bool,selectedKeys:_.a.arrayOf(_.a.string),defaultOpenKeys:_.a.arrayOf(_.a.string),openKeys:_.a.arrayOf(_.a.string),mode:_.a.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),getPopupContainer:_.a.func,onClick:_.a.func,onSelect:_.a.func,onDeselect:_.a.func,onDestroy:_.a.func,openTransitionName:_.a.string,openAnimation:_.a.oneOfType([_.a.string,_.a.object]),subMenuOpenDelay:_.a.number,subMenuCloseDelay:_.a.number,forceSubMenuRender:_.a.bool,triggerSubMenuAction:_.a.string,level:_.a.number,selectable:_.a.bool,multiple:_.a.bool,children:_.a.any,className:_.a.string,style:_.a.object,activeKey:_.a.string,prefixCls:_.a.string,builtinPlacements:_.a.object,itemIcon:_.a.oneOfType([_.a.func,_.a.node]),expandIcon:_.a.oneOfType([_.a.func,_.a.node]),overflowedIndicator:_.a.node},se.defaultProps={selectable:!0,onClick:r,onSelect:r,onOpenChange:r,onDeselect:r,defaultSelectedKeys:[],defaultOpenKeys:[],subMenuOpenDelay:.1,subMenuCloseDelay:.1,triggerSubMenuAction:"hover",prefixCls:"rc-menu",className:"",mode:"vertical",style:{},builtinPlacements:{},overflowedIndicator:S.a.createElement("span",null,"\xb7\xb7\xb7")};var ce=function(){var e=this;this.onSelect=function(t){var n=e.props;if(n.selectable){var r=e.store.getState().selectedKeys,o=t.key;r=n.multiple?r.concat([o]):[o],"selectedKeys"in n||e.store.setState({selectedKeys:r}),n.onSelect(p()({},t,{selectedKeys:r}))}},this.onClick=function(t){e.props.onClick(t)},this.onKeyDown=function(t,n){e.innerMenu.getWrappedInstance().onKeyDown(t,n)},this.onOpenChange=function(t){var n=e.props,r=e.store.getState().openKeys.concat(),o=!1,i=function(e){var t=!1;if(e.open)(t=-1===r.indexOf(e.key))&&r.push(e.key);else{var n=r.indexOf(e.key);t=-1!==n,t&&r.splice(n,1)}o=o||t};Array.isArray(t)?t.forEach(i):i(t),o&&("openKeys"in e.props||e.store.setState({openKeys:r}),n.onOpenChange(r))},this.onDeselect=function(t){var n=e.props;if(n.selectable){var r=e.store.getState().selectedKeys.concat(),o=t.key,i=r.indexOf(o);-1!==i&&r.splice(i,1),"selectedKeys"in n||e.store.setState({selectedKeys:r}),n.onDeselect(p()({},t,{selectedKeys:r}))}},this.getOpenTransitionName=function(){var t=e.props,n=t.openTransitionName,r=t.openAnimation;return n||"string"!=typeof r||(n=t.prefixCls+"-open-"+r),n}},le=se,ue=n("Kw5M"),fe=n.n(ue),he=function(e){function t(n){y()(this,t);var r=w()(this,e.call(this,n));return r.onKeyDown=function(e){if(e.keyCode===M.a.ENTER)return r.onClick(e),!0},r.onMouseLeave=function(e){var t=r.props,n=t.eventKey,o=t.onItemHover,i=t.onMouseLeave;o({key:n,hover:!1}),i({key:n,domEvent:e})},r.onMouseEnter=function(e){var t=r.props,n=t.eventKey,o=t.onItemHover,i=t.onMouseEnter;o({key:n,hover:!0}),i({key:n,domEvent:e})},r.onClick=function(e){var t=r.props,n=t.eventKey,o=t.multiple,i=t.onClick,a=t.onSelect,s=t.onDeselect,c=t.isSelected,l={key:n,keyPath:[n],item:r,domEvent:e};i(l),o?c?s(l):a(l):c||a(l)},r}return E()(t,e),t.prototype.componentDidMount=function(){this.callRef()},t.prototype.componentDidUpdate=function(){this.props.active&&fe()(N.a.findDOMNode(this),N.a.findDOMNode(this.props.parentMenu),{onlyScrollIfNeeded:!0}),this.callRef()},t.prototype.componentWillUnmount=function(){var e=this.props;e.onDestroy&&e.onDestroy(e.eventKey)},t.prototype.getPrefixCls=function(){return this.props.rootPrefixCls+"-item"},t.prototype.getActiveClassName=function(){return this.getPrefixCls()+"-active"},t.prototype.getSelectedClassName=function(){return this.getPrefixCls()+"-selected"},t.prototype.getDisabledClassName=function(){return this.getPrefixCls()+"-disabled"},t.prototype.callRef=function(){this.props.manualRef&&this.props.manualRef(this)},t.prototype.render=function(){var e,t=p()({},this.props),n=F()(this.getPrefixCls(),t.className,(e={},e[this.getActiveClassName()]=!t.disabled&&t.active,e[this.getSelectedClassName()]=t.isSelected,e[this.getDisabledClassName()]=t.disabled,e)),r=p()({},t.attribute,{title:t.title,className:n,role:t.role||"menuitem","aria-disabled":t.disabled});"option"===t.role?r=p()({},r,{role:"option","aria-selected":t.isSelected}):null!==t.role&&"none"!==t.role||(r.role="none");var o={onClick:t.disabled?null:this.onClick,onMouseLeave:t.disabled?null:this.onMouseLeave,onMouseEnter:t.disabled?null:this.onMouseEnter},i=p()({},t.style);"inline"===t.mode&&(i.paddingLeft=t.inlineIndent*t.level),T.forEach(function(e){return delete t[e]});var a=this.props.itemIcon;return"function"==typeof this.props.itemIcon&&(a=S.a.createElement(this.props.itemIcon,this.props)),S.a.createElement("li",p()({},t,r,o,{style:i}),t.children,a)},t}(S.a.Component);he.propTypes={attribute:_.a.object,rootPrefixCls:_.a.string,eventKey:_.a.string,active:_.a.bool,children:_.a.any,selectedKeys:_.a.array,disabled:_.a.bool,title:_.a.string,onItemHover:_.a.func,onSelect:_.a.func,onClick:_.a.func,onDeselect:_.a.func,parentMenu:_.a.object,onDestroy:_.a.func,onMouseEnter:_.a.func,onMouseLeave:_.a.func,multiple:_.a.bool,isSelected:_.a.bool,manualRef:_.a.func,itemIcon:_.a.oneOfType([_.a.func,_.a.node])},he.defaultProps={onSelect:r,onMouseEnter:r,onMouseLeave:r,manualRef:r},he.isMenuItem=!0;var de=Object(O.connect)(function(e,t){var n=e.activeKey,r=e.selectedKeys,o=t.eventKey;return{active:n[t.subMenuKey]===o,isSelected:-1!==r.indexOf(o)}})(he),pe=de,me=function(e){function t(){var n,r,o;y()(this,t);for(var i=arguments.length,a=Array(i),s=0;sn;)o[n]=t[n++];return o},Ae=function(e,t,n){V(e,t,{get:function(){return this._d[n]}})},Pe=function(e){var t,n,r,o,i,a,s=E(e),c=arguments.length,u=c>1?arguments[1]:void 0,f=void 0!==u,h=O(s);if(void 0!=h&&!x(h)){for(a=h.call(s),r=[],t=0;!(i=a.next()).done;t++)r.push(i.value);s=r}for(f&&c>2&&(u=l(u,arguments[2],2)),t=0,n=m(s.length),o=_e(this,n);n>t;t++)o[t]=f?u(s[t],t):s[t];return o},Fe=function(){for(var e=0,t=arguments.length,n=_e(this,t);t>e;)n[e]=arguments[e++];return n},ze=!!U&&i(function(){de.call(new U(1))}),Te=function(){return de.apply(ze?fe.call(ke(this)):ke(this),arguments)},Le={copyWithin:function(e,t){return N.call(ke(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return J(ke(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return R.apply(ke(this),arguments)},filter:function(e){return Oe(this,Q(ke(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Z(ke(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(ke(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){Y(ke(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ne(ke(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return te(ke(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return le.apply(ke(this),arguments)},lastIndexOf:function(e){return ae.apply(ke(this),arguments)},map:function(e){return Ce(ke(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return se.apply(ke(this),arguments)},reduceRight:function(e){return ce.apply(ke(this),arguments)},reverse:function(){for(var e,t=this,n=ke(t).length,r=Math.floor(n/2),o=0;o1?arguments[1]:void 0)},sort:function(e){return ue.call(ke(this),e)},subarray:function(e,t){var n=ke(this),r=n.length,o=g(e,r);return new(z(n,n[ge]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,m((void 0===t?r:g(t,r))-o))}},De=function(e,t){return Oe(this,fe.call(ke(this),e,t))},je=function(e){ke(this);var t=Se(arguments[1],1),n=this.length,r=E(e),o=m(r.length),i=0;if(o+t>n)throw $("Wrong length!");for(;i255?255:255&r),o.v[d](n*t+o.o,r,Ee)},A=function(e,t){V(e,t,{get:function(){return O(this,t)},set:function(e){return M(this,t,e)},enumerable:!0})};b?(p=n(function(e,n,r,o){u(e,p,l,"_d");var i,a,s,c,f=0,d=0;if(C(n)){if(!(n instanceof q||"ArrayBuffer"==(c=w(n))||"SharedArrayBuffer"==c))return be in n?Me(p,n):Pe.call(p,n);i=n,d=Se(r,t);var g=n.byteLength;if(void 0===o){if(g%t)throw $("Wrong length!");if((a=g-d)<0)throw $("Wrong length!")}else if((a=m(o)*t)+d>g)throw $("Wrong length!");s=a/t}else s=v(n),a=s*t,i=new q(a);for(h(e,"_d",{b:i,o:d,l:a,e:s,v:new G(i)});f=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n("eWiF"),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}},"7GwW":function(e,t,n){"use strict";var r=n("cGG2"),o=n("21It"),i=n("DQCr"),a=n("oJlt"),s=n("GHBc"),c=n("FtD3"),l="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n("thJu");e.exports=function(e){return new Promise(function(t,u){var f=e.data,h=e.headers;r.isFormData(f)&&delete h["Content-Type"];var d=new XMLHttpRequest,p="onreadystatechange",m=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in d||s(e.url)||(d=new window.XDomainRequest,p="onload",m=!0,d.onprogress=function(){},d.ontimeout=function(){}),e.auth){var v=e.auth.username||"",g=e.auth.password||"";h.Authorization="Basic "+l(v+":"+g)}if(d.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d[p]=function(){if(d&&(4===d.readyState||m)&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in d?a(d.getAllResponseHeaders()):null,r=e.responseType&&"text"!==e.responseType?d.response:d.responseText,i={data:r,status:1223===d.status?204:d.status,statusText:1223===d.status?"No Content":d.statusText,headers:n,config:e,request:d};o(t,u,i),d=null}},d.onerror=function(){u(c("Network Error",e,null,d)),d=null},d.ontimeout=function(){u(c("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var y=n("p1b6"),b=(e.withCredentials||s(e.url))&&e.xsrfCookieName?y.read(e.xsrfCookieName):void 0;b&&(h[e.xsrfHeaderName]=b)}if("setRequestHeader"in d&&r.forEach(h,function(e,t){void 0===f&&"content-type"===t.toLowerCase()?delete h[t]:d.setRequestHeader(t,e)}),e.withCredentials&&(d.withCredentials=!0),e.responseType)try{d.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){d&&(d.abort(),u(e),d=null)}),void 0===f&&(f=null),d.send(f)})}},"7I8Q":function(e,t,n){var r=n("oM53"),o=n("Zk5a"),i=o(r);e.exports=i},"7Jvp":function(e,t,n){function r(e){return isFinite(e=+e)&&0!=e?e<0?-r(-e):Math.log(e+Math.sqrt(e*e+1)):e}var o=n("Ds5P"),i=Math.asinh;o(o.S+o.F*!(i&&1/i(0)>0),"Math",{asinh:r})},"7KvD":function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"7Nx4":function(e,t){e.exports={header:"header___3akN7",logo:"logo___uc7un",menu:"menu___t5C2Y",trigger:"trigger___TbClB",right:"right___3W9p9",action:"action___1F_vS",search:"search___1-4-m",account:"account___q23_b",avatar:"avatar___3seBz",name:"name___391ZN"}},"7O1s":function(e,t,n){var r=n("DIVP"),o=n("XSOZ"),i=n("kkCw")("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[i])?t:o(n)}},"7UMu":function(e,t,n){var r=n("R9M2");e.exports=Array.isArray||function(e){return"Array"==r(e)}},"7WgF":function(e,t,n){"use strict";var r=n("vtiu"),o=(n.n(r),n("HE74"));n.n(o),n("crfj")},"7YkW":function(e,t,n){function r(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new o;++t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var o=n("jrF4");e.exports=r},"7bf8":function(e,t,n){"use strict";function r(e,t){var n=e.type,r=e.items;if(""!==t){if("array"===n&&r&&l.has(r.type))return t.map(c.asNumber);if("boolean"===n)return"true"===t;if("number"===n)return(0,c.asNumber)(t);if(e.enum){if(e.enum.every(function(e){return"number"===(0,c.guessType)(e)}))return(0,c.asNumber)(t);if(e.enum.every(function(e){return"boolean"===(0,c.guessType)(e)}))return"true"===t}return t}}function o(e,t){return t?[].slice.call(e.target.options).filter(function(e){return e.selected}).map(function(e){return e.value}):e.target.value}function i(e){var t=e.schema,n=e.id,i=e.options,a=e.value,c=e.required,l=e.disabled,u=e.readonly,f=e.multiple,h=e.autofocus,d=e.onChange,p=e.onBlur,m=e.onFocus,v=e.placeholder,g=i.enumOptions,y=i.enumDisabled,b=f?[]:"";return s.default.createElement("select",{id:n,multiple:f,className:"form-control",value:void 0===a?b:a,required:c,disabled:l||u,autoFocus:h,onBlur:p&&function(e){var i=o(e,f);p(n,r(t,i))},onFocus:m&&function(e){var i=o(e,f);m(n,r(t,i))},onChange:function(e){var n=o(e,f);d(r(t,n))}},!f&&void 0===t.default&&s.default.createElement("option",{value:""},v),g.map(function(e,t){var n=e.value,r=e.label,o=y&&-1!=y.indexOf(n);return s.default.createElement("option",{key:t,value:n,disabled:o},r)}))}var a=n("ouCL");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=a(n("GiK3")),c=(a(n("KSGD")),n("4Mzz")),l=new Set(["number","integer"]);i.defaultProps={autofocus:!1};var u=i;t.default=u},"7dSG":function(e,t,n){"use strict";(function(t,r,o){function i(e){var t=this;this.next=null,this.entry=null,this.finish=function(){O(t,e)}}function a(e){return L.from(e)}function s(e){return L.isBuffer(e)||e instanceof D}function c(){}function l(e,t){A=A||n("DsFX"),e=e||{};var r=t instanceof A;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,a=e.writableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var c=!1===e.decodeStrings;this.decodeStrings=!c,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){y(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new i(this)}function u(e){if(A=A||n("DsFX"),!(R.call(u,this)||this instanceof A))return new u(e);this._writableState=new l(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),T.call(this)}function f(e,t){var n=new Error("write after end");e.emit("error",n),M.nextTick(t,n)}function h(e,t,n,r){var o=!0,i=!1;return null===n?i=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(e.emit("error",i),M.nextTick(r,i),o=!1),o}function d(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=L.from(t,n)),t}function p(e,t,n,r,o,i){if(!n){var a=d(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1?r:M.nextTick;u.WritableState=l;var F=n("jOgh");F.inherits=n("LC74");var z={deprecate:n("iP15")},T=n("UcPO"),L=n("X3l8").Buffer,D=o.Uint8Array||function(){},j=n("x0Ha");F.inherits(u,T),l.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(l.prototype,"buffer",{get:z.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}();var R;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(R=Function.prototype[Symbol.hasInstance],Object.defineProperty(u,Symbol.hasInstance,{value:function(e){return!!R.call(this,e)||this===u&&(e&&e._writableState instanceof l)}})):R=function(e){return e instanceof this},u.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},u.prototype.write=function(e,t,n){var r=this._writableState,o=!1,i=!r.objectMode&&s(e);return i&&!L.isBuffer(e)&&(e=a(e)),"function"==typeof t&&(n=t,t=null),i?t="buffer":t||(t=r.defaultEncoding),"function"!=typeof n&&(n=c),r.ended?f(this,n):(i||h(this,r,e,n))&&(r.pendingcb++,o=p(this,r,i,e,t,n)),o},u.prototype.cork=function(){this._writableState.corked++},u.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||C(this,e))},u.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(u.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),u.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},u.prototype._writev=null,u.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!==e&&void 0!==e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||_(this,r,n)},Object.defineProperty(u.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),u.prototype.destroy=j.destroy,u.prototype._undestroy=j.undestroy,u.prototype._destroy=function(e,t){this.end(),t(e)}}).call(t,n("lNQ5"),n("162o").setImmediate,n("DuR2"))},"7e4z":function(e,t,n){function r(e,t){var n=a(e),r=!n&&i(e),u=!n&&!r&&s(e),h=!n&&!r&&!u&&l(e),d=n||r||u||h,p=d?o(e.length,String):[],m=p.length;for(var v in e)!t&&!f.call(e,v)||d&&("length"==v||u&&("offset"==v||"parent"==v)||h&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||c(v,m))||p.push(v);return p}var o=n("uieL"),i=n("1Yb9"),a=n("NGEn"),s=n("ggOT"),c=n("ZGh9"),l=n("YsVG"),u=Object.prototype,f=u.hasOwnProperty;e.exports=r},"7gX0":function(e,t){var n=e.exports={version:"2.6.8"};"number"==typeof __e&&(__e=n)},"7hdg":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("TToO"),o=n("B4qY"),i=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t.prototype.apply=function(e){var t=e.value,n=e.config.execute,r=e.args,o=e.instance;e.target;return o?n.apply(void 0,[t,o].concat(r)):t},t}(o.Applicator);t.BindApplicator=i},"7orI":function(e,t){e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},"7qZt":function(e,t,n){"use strict";function r(e){var t=e.schema,n=e.value,r=e.registry.widgets.BaseInput;return a.default.createElement("div",{className:"field-range-wrapper"},a.default.createElement(r,(0,i.default)({type:"range"},e,(0,s.rangeSpec)(t))),a.default.createElement("span",{className:"range-view"},n))}var o=n("ouCL");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n("uMMT")),a=o(n("GiK3")),s=(o(n("KSGD")),n("4Mzz")),c=r;t.default=c},"7xWd":function(e,t,n){e.exports=n("F8kA"),e.exports.routerRedux=n("MT/C")},"7ylX":function(e,t,n){var r=n("DIVP"),o=n("twxM"),i=n("QKXm"),a=n("mZON")("IE_PROTO"),s=function(){},c=function(){var e,t=n("jhxf")("iframe"),r=i.length;for(t.style.display="none",n("d075").appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("