diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index fd1d142..0000000 --- a/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parser": "babel-eslint", - "plugins": [ - "prettier" - ], - "rules": { - "prettier/prettier": ["error", {"trailingComma": "none", "singleQuote": true}] - } -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5250bc3 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,73 @@ +{ + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "globalReturn": false, + "impliedStrict": true, + "jsx": true, + "experimentalObjectRestSpread": true + } + }, + "globals": { + "__webpack_public_path__": true, + "bootstrap": true, + "describe": true, + "it": true, + "beforeEach": true, + "afterEach": true, + "before": true, + "after": true, + "test": true, + "expect": true + }, + "env": { + "browser": true, + "node": true, + "es6": true + }, + "plugins": [ + "prettier", + "react", + "import", + "json", + "cflint", + "compat", + "mocha" + ], + "extends": [ + "plugin:react/recommended", + "plugin:import/errors", + "plugin:import/warnings" + ], + "rules": { + "mocha/no-exclusive-tests": 2, + "block-scoped-var": 2, + "default-case": 2, + "guard-for-in": 2, + "no-else-return": 2, + "no-floating-decimal": 2, + "no-self-compare": 2, + "no-void": 2, + "radix": 2, + "wrap-iife": ["error", "inside"], + "no-catch-shadow": 2, + "handle-callback-err": 2, + "camelcase": 0, + "no-unused-vars": [2, {"vars": "all", "args": "after-used"}], + "no-undef": [2, {"typeof": false}], + "react/prop-types": [2, {"skipUndeclared": true}], + "import/no-absolute-path": 2, + "import/no-deprecated": 1, + "import/no-mutable-exports": 1, + "import/no-extraneous-dependencies": 0, + "import/no-unresolved": 0, + "import/first": 1, + "prettier/prettier": [2, {"trailingComma": "none", "singleQuote": true}], + "compat/compat": 2 + }, + "settings": { + "import/resolver": "webpack" + } +} diff --git a/assets/global-caching.svg b/assets/global-caching.svg new file mode 100644 index 0000000..432cec9 --- /dev/null +++ b/assets/global-caching.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/insight.svg b/assets/insight.svg new file mode 100644 index 0000000..a9ac652 --- /dev/null +++ b/assets/insight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/security.svg b/assets/security.svg new file mode 100644 index 0000000..ade1966 --- /dev/null +++ b/assets/security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/web-optimization.svg b/assets/web-optimization.svg new file mode 100644 index 0000000..a219c3f --- /dev/null +++ b/assets/web-optimization.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lang/en.js b/lang/en.js index b83f417..18229d0 100644 --- a/lang/en.js +++ b/lang/en.js @@ -1,7 +1,16 @@ { "container.drawer.help": "Help", + "component.benefitsFeature.globalCaching.title" :"Global Caching", + "component.benefitsFeature.globalCaching.description" :"Shorten your visitor's load times with content caching in our 110+ global locations.", + "component.benefitsFeature.optimization.title" :"Website Optimization", + "component.benefitsFeature.optimization.description" :"Deliver content to users faster by enabling Cloudflare's content optimizations.", + "component.benefitsFeature.security.title" :"Security", + "component.benefitsFeature.security.description" :"Cloudflare offers protections against vulnerabilities including DDoS protection.", + "component.benefitsFeature.insights.title" :"Insights", + "component.benefitsFeature.insights.description" :"Monitor bandwidth saved, threats blocked, and more with built-in analytics.", "component.clientLogin.form.email": "Email", - "component.clientLogin.form.apiKeyHelp": "Already have an account? Get your API Key from", + "component.clientLogin.form.alreadyHaveAccount": "Already have an account?", + "component.clientLogin.form.getApiKey": "Get your API Key from", "component.clientLogin.form.apiKey": "API Key", "component.clientLogin.form.button": "Save API Credentials", "component.clientLogin.form.signUp": "Sign up", @@ -234,6 +243,10 @@ "container.sslCard.select.flexible": "Flexible", "container.sslCard.select.full": "Full", "container.sslCard.select.full_strict": "Full Strict", + "container.splashPage.heading.speedUp": "Speed up and Optimize your {integrationName} Site with Cloudflare", + "container.splashPage.help.alreadyHaveAccount": "Have an account already? Sign in", + "container.splashPage.help.here": "here", + "container.splashPage.button.createFreeAccount": "Create Your Free Account", "container.underAttackButton.description": "Is your website currently being attacked?", "container.underAttackButton.turnOff": "Enable \"I'm Under Attack\" Mode", "container.underAttackButton.turnOn": "Disable \"I'm Under Attack\" Mode", diff --git a/package.json b/package.json index e5ef5aa..421cbdd 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,9 @@ ], "testMatch": [ "**/test/**/*.js" + ], + "testPathIgnorePatterns": [ + "/node_modules/|_helpers" ] }, "repository": { @@ -65,7 +68,13 @@ "d3-format": "^1.0.2", "eslint": "^3.4.0", "eslint-loader": "^1.6.1", + "eslint-plugin-cflint": "^1.0.0", + "eslint-plugin-compat": "^1.0.3", + "eslint-plugin-import": "^2.3.0", + "eslint-plugin-json": "^1.2.0", + "eslint-plugin-mocha": "^4.10.1", "eslint-plugin-prettier": "^2.0.0", + "eslint-plugin-react": "^7.1.0", "history": "3.2.1", "intl": "^1.1.0", "jest": "^19.0.2", @@ -83,10 +92,13 @@ "react-test-renderer": "^15.4.2", "redux": "^3.0.4", "redux-logger": "^2.6.1", + "redux-mock-store": "^1.2.3", "redux-thunk": "^1.0.0", - "webpack": "^2.2.1" + "webpack": "^3.0.0" }, "dependencies": { + "cf-component-box": "^2.2.1", + "cf-style-provider": "^1.5.0", "prop-types": "^15.5.8" } } diff --git a/src/actions/config.js b/src/actions/config.js index fcb624f..ac70186 100644 --- a/src/actions/config.js +++ b/src/actions/config.js @@ -33,14 +33,16 @@ export function asyncConfigInit() { * 3. Fetch translations with the language from the config. */ dispatch(asyncConfigFetch()); - if (typeof absoluteUrlBase !== 'undefined') { + if (typeof window.absoluteUrlBase !== 'undefined') { /* * Some integrations don't work with relative paths because the URL doesn't match * the actual file path, this function allows integrations to configure a base absolute * url path to be used in components/Image. absoluteBaseUrl should be defined globally * on the page where the SPA is loaded. */ - dispatch(configUpdateByKey(ABSOLUTE_URL_BASE_KEY, absoluteUrlBase)); + dispatch( + configUpdateByKey(ABSOLUTE_URL_BASE_KEY, window.absoluteUrlBase) + ); } //log user in if their email is in local storage if (isLoggedIn()) { diff --git a/src/components/AnalyticCard/AnalyticCard.js b/src/components/AnalyticCard/AnalyticCard.js index ebe27e6..3fb78b4 100644 --- a/src/components/AnalyticCard/AnalyticCard.js +++ b/src/components/AnalyticCard/AnalyticCard.js @@ -131,7 +131,9 @@ AnalyticCard.propTypes = { description: PropTypes.string.isRequired, data: PropTypes.object.isRequired, dataType: PropTypes.string.isRequired, - helpTextId: PropTypes.string.isRequired + helpTextId: PropTypes.string.isRequired, + intl: PropTypes.object.isRequired, + formatMessage: PropTypes.func.isRequired }; function mapStateToProps() { diff --git a/src/components/AppNavigationLiNode/AppNavigationLiNode.js b/src/components/AppNavigationLiNode/AppNavigationLiNode.js index f715a2d..1672619 100644 --- a/src/components/AppNavigationLiNode/AppNavigationLiNode.js +++ b/src/components/AppNavigationLiNode/AppNavigationLiNode.js @@ -31,5 +31,6 @@ export default class AppNavigationLiNode extends Component { AppNavigationLiNode.propTypes = { onClick: PropTypes.func.isRequired, - title: PropTypes.string.isRequired + title: PropTypes.string.isRequired, + children: PropTypes.node }; diff --git a/src/components/BenefitsFeature/BenefitsFeature.js b/src/components/BenefitsFeature/BenefitsFeature.js new file mode 100644 index 0000000..3f35590 --- /dev/null +++ b/src/components/BenefitsFeature/BenefitsFeature.js @@ -0,0 +1,52 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +export default class BenefitsFeature extends Component { + render() { + /* + * These styles are stolen from the marketing site and aren't in our CSS + */ + let divStyles = { + padding: '30px 15px 30px 15px' + }; + let iconStyles = { + display: 'block', + width: '75px', + height: 'auto', + maxWidth: '100px', + margin: '0 auto' + }; + let largeLinkStyles = { + padding: '20px 0 0 0', + textAlign: 'center', + fontSize: '16px', + color: '#333333', + width: '100%', + display: 'block' + }; + let columnPStyles = { + padding: '10px 0 0 0', + fontSize: '12px', + textAlign: 'center', + color: '#9A9D9E' + }; + + return ( +
+ + + {this.props.title} + +

+ {this.props.description} +

+
+ ); + } +} + +BenefitsFeature.propTypes = { + imgSrc: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + description: PropTypes.string.isRequired +}; diff --git a/src/components/CustomCardControl/CustomCardControl.js b/src/components/CustomCardControl/CustomCardControl.js index ff135ca..5e7c99b 100644 --- a/src/components/CustomCardControl/CustomCardControl.js +++ b/src/components/CustomCardControl/CustomCardControl.js @@ -58,7 +58,12 @@ class CustomCardControl extends Component { CustomCardControl.propTypes = { name: PropTypes.string, - indentifier: PropTypes.string.isRequired + indentifier: PropTypes.string.isRequired, + integrationName: PropTypes.string, + activeZone: PropTypes.string, + currentPlan: PropTypes.string, + minimumPlan: PropTypes.string, + children: PropTypes.node }; function mapStateToProps(state) { diff --git a/src/components/FeatureManager/FeatureManager.js b/src/components/FeatureManager/FeatureManager.js index b66b966..101c3bd 100644 --- a/src/components/FeatureManager/FeatureManager.js +++ b/src/components/FeatureManager/FeatureManager.js @@ -14,5 +14,6 @@ export default class FeatureManager extends Component { FeatureManager.propTypes = { isEnabled: PropTypes.bool.isRequired, - error: PropTypes.string + error: PropTypes.string, + children: PropTypes.node }; diff --git a/src/components/FormattedMarkdown/FormattedMarkdown.js b/src/components/FormattedMarkdown/FormattedMarkdown.js index 8c41a63..4f92761 100644 --- a/src/components/FormattedMarkdown/FormattedMarkdown.js +++ b/src/components/FormattedMarkdown/FormattedMarkdown.js @@ -17,7 +17,6 @@ import { getConfigValue } from '../../selectors/config.js'; // class FormattedMarkdown extends Component { render() { - const { formatMessage } = this.props.intl; let { integrationName } = this.props; var formattedMessage = formatMessageForIntegration( @@ -39,7 +38,10 @@ class FormattedMarkdown extends Component { } FormattedMarkdown.propTypes = { - text: PropTypes.string.isRequired + text: PropTypes.string.isRequired, + formattedMessage: PropTypes.func, + intl: PropTypes.object, + integrationName: PropTypes.string }; function mapStateToProps(state) { diff --git a/src/components/GradientBanner/GradientBanner.js b/src/components/GradientBanner/GradientBanner.js new file mode 100644 index 0000000..aec8e6f --- /dev/null +++ b/src/components/GradientBanner/GradientBanner.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { createComponent } from 'cf-style-container'; + +const gradientStyles = () => ({ + width: '100%', + height: '150px', + display: 'flex', + justifyContent: 'center', + background: 'linear-gradient(left, #8176B5, #76C4E2)', + backgroundRepeat: 'no-repeat', + backgroundSize: '100% 250px', + backgroundColor: '#e6e6e6' +}); + +const GradientBanner = ({ className, children }) => { + return React.createElement('div', { className }, children); +}; + +export default createComponent(gradientStyles, GradientBanner); diff --git a/src/containers/App/App.js b/src/containers/App/App.js index a9d2754..0730c28 100644 --- a/src/containers/App/App.js +++ b/src/containers/App/App.js @@ -11,6 +11,9 @@ import { asyncConfigInit } from '../../actions/config'; import GlobalNotifications from '../../containers/GlobalNotifications/GlobalNotifications'; import Header from '../../containers/Header/Header'; +import GradientBanner from '../../components/GradientBanner/GradientBanner'; + +import { StyleProvider } from 'cf-style-provider'; //Safari Intl Polyfill if (!global.Intl) { @@ -19,41 +22,55 @@ if (!global.Intl) { class AppContainer extends Component { render() { return ( -
- - -
- - - {isLoggedIn() - ? - - - : null} + +
+ + +
+ {isLoggedIn() ? null : } + +
+ {isLoggedIn() + ? + + + : null} - {isLoggedIn() - ? -   - - {this.props.children} + {isLoggedIn() + ? +   + + {this.props.children} + +   + + : {this.props.children}} + + +

+ +

-  
- : {this.props.children}} - - -

- -

-
-
- - - -
+
+ + + +
+ ); } } diff --git a/src/containers/AppNavigation/AppNavigation.js b/src/containers/AppNavigation/AppNavigation.js index 0952a26..db6fa99 100644 --- a/src/containers/AppNavigation/AppNavigation.js +++ b/src/containers/AppNavigation/AppNavigation.js @@ -97,7 +97,8 @@ class AppNavigation extends Component { } AppNavigation.propTypes = { - dispatch: PropTypes.func.isRequired + dispatch: PropTypes.func.isRequired, + config: PropTypes.object.isRequired }; function mapStateToProps(state) { diff --git a/src/containers/BenefitsCollection/BenefitsCollection.js b/src/containers/BenefitsCollection/BenefitsCollection.js new file mode 100644 index 0000000..6278d43 --- /dev/null +++ b/src/containers/BenefitsCollection/BenefitsCollection.js @@ -0,0 +1,75 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import { LayoutRow, LayoutColumn } from 'cf-component-layout'; +import { Flex } from 'cf-component-flex'; +import { injectIntl } from 'react-intl'; + +import BenefitsFeature from '../../components/BenefitsFeature/BenefitsFeature'; +import { getAbsoluteUrl } from '../../selectors/config'; + +class BenefitsCollection extends Component { + render() { + const { config } = this.props; + let { formatMessage } = this.props.intl; + + return ( + + +   + + + + + + + + + + + + +   + + + ); + } +} + +function mapStateToProps(state) { + return { config: state.config }; +} + +export default injectIntl(connect(mapStateToProps)(BenefitsCollection)); diff --git a/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js b/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js index 5e80c42..b07e13c 100644 --- a/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js +++ b/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js @@ -86,7 +86,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('18000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('18000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.fiveHours' }) @@ -110,7 +110,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('72000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('72000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.twentyHours' }) @@ -140,7 +140,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('432000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('432000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.fiveDays' }) @@ -182,7 +182,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('31536000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('31536000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.oneYear' }) diff --git a/src/containers/ChallengePassageCard/ChallengePassageCard.js b/src/containers/ChallengePassageCard/ChallengePassageCard.js index df7fbc2..c3aa917 100644 --- a/src/containers/ChallengePassageCard/ChallengePassageCard.js +++ b/src/containers/ChallengePassageCard/ChallengePassageCard.js @@ -138,13 +138,13 @@ class ChallengePassageCard extends Component { }) }, { - value: parseInt('2592000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('2592000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.challengePassageCard.select.oneMonth' }) }, { - value: parseInt('31536000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('31536000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.challengePassageCard.select.oneYear' }) diff --git a/src/containers/Header/Header.js b/src/containers/Header/Header.js index 390974b..8136bed 100644 --- a/src/containers/Header/Header.js +++ b/src/containers/Header/Header.js @@ -15,8 +15,8 @@ class Header extends Component { let { config, activeZone, zoneSettings } = this.props; var logoStyle = { - width: '170px', - height: '30px', + width: '140px', + height: '40px', position: 'relative', top: '30px', // Hard code .header-main height/2 transform: 'translateY(-50%)' diff --git a/src/containers/LoginPage/LoginPage.js b/src/containers/LoginPage/LoginPage.js index dc532be..6117a9e 100644 --- a/src/containers/LoginPage/LoginPage.js +++ b/src/containers/LoginPage/LoginPage.js @@ -3,12 +3,11 @@ import { connect } from 'react-redux'; import { FormattedMessage, injectIntl } from 'react-intl'; import { Button } from 'cf-component-button'; +import { Box } from 'cf-component-box'; import { Form, FormHeader, FormFieldset, FormLabel } from 'cf-component-form'; import Input from 'cf-component-input'; import { LayoutContainer, LayoutRow, LayoutColumn } from 'cf-component-layout'; -import MarketingFeatureCollection - from '../../containers/MarketingFeatureCollection/MarketingFeatureCollection'; import { asyncAPILogin, asyncLogin } from '../../actions/user'; import { CLOUDFLARE_SIGNUP_PAGE, @@ -152,13 +151,15 @@ class LoginPage extends Component {
- + + +
@@ -199,20 +200,21 @@ class LoginPage extends Component { > cloudflare.com - . -

-

- - {' '} - - here - - . + .{' '} + + + + {' '} + + here + + . +

} @@ -221,7 +223,6 @@ class LoginPage extends Component { - ); } diff --git a/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js b/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js index 84c6048..2ce91bf 100644 --- a/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js +++ b/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js @@ -3,7 +3,7 @@ import { connect } from 'react-redux'; import { LayoutRow, LayoutColumn } from 'cf-component-layout'; import { Flex } from 'cf-component-flex'; -import { FormattedMessage, injectIntl } from 'react-intl'; +import { injectIntl } from 'react-intl'; import MarketingFeature from '../../components/MarketingFeature/MarketingFeature'; diff --git a/src/containers/SplashPage/SplashPage.js b/src/containers/SplashPage/SplashPage.js new file mode 100644 index 0000000..8bec254 --- /dev/null +++ b/src/containers/SplashPage/SplashPage.js @@ -0,0 +1,144 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import { FormattedMessage, injectIntl } from 'react-intl'; +import { Box } from 'cf-component-box'; +import { Button } from 'cf-component-button'; +import { Heading } from 'cf-component-heading'; + +import { Card, CardSection } from 'cf-component-card'; + +import { LayoutContainer, LayoutRow, LayoutColumn } from 'cf-component-layout'; + +import BenefitsCollection + from '../../containers/BenefitsCollection/BenefitsCollection'; + +import { + CLOUDFLARE_SIGNUP_PAGE, + LOGIN_PAGE, + HOME_PAGE +} from '../../constants/UrlPaths.js'; +import { isLoggedIn } from '../../utils/Auth/Auth'; +import { Link } from 'react-router'; +import { push } from 'react-router-redux'; + +import { openWindow720x720 } from '../../utils/utils.js'; +import { getConfigValue } from '../../selectors/config'; +import { generateUTMLink } from '../../selectors/generateUTMLink.js'; +import { generateChannelLink } from '../../selectors/generateChannelLink.js'; + +const SIGNUP_SPLASH_UTM_CONTENT_IDENTIFIER = 'signup_splash_page'; + +const cardBoxStyles = { + margin: '2em auto', + maxWidth: '1024px', + textAlign: 'center' +}; + +const linkStyles = { + textDecoration: 'none', + color: '#1592E6' +}; + +const textStyles = { + color: '#9A9D9E' +}; + +const cardPaddingStyles = { + padding: '65px 0' +}; + +class SplashPage extends Component { + componentWillMount() { + let { dispatch } = this.props; + if (isLoggedIn()) { + dispatch(push(HOME_PAGE)); + } + } + + render() { + const { config } = this.props; + + const integrationName = getConfigValue(config, 'integrationName'); + const integrationNameCapital = + integrationName.charAt(0).toUpperCase() + integrationName.slice(1); + + let signupLinkWithUTM = generateUTMLink( + CLOUDFLARE_SIGNUP_PAGE, + integrationName, + integrationName, + SIGNUP_SPLASH_UTM_CONTENT_IDENTIFIER + ); + + let signupLinkWithUTMAndChannel = generateChannelLink( + signupLinkWithUTM, + integrationName + ); + + return ( + + + + + + + + + + + + + + + + + + + + + +

+ + {' '} + + + + . +

+
+
+ + + + + +
+ +
+
+
+
+ ); + } +} + +function mapStateToProps(state) { + return { + config: state.config + }; +} + +export default injectIntl(connect(mapStateToProps)(SplashPage)); diff --git a/src/containers/WaitForSettings/WaitForSettings.js b/src/containers/WaitForSettings/WaitForSettings.js index 96ec278..13851e5 100644 --- a/src/containers/WaitForSettings/WaitForSettings.js +++ b/src/containers/WaitForSettings/WaitForSettings.js @@ -33,7 +33,6 @@ class WaitForSettings extends Component { analytics, config } = this.props; - const { formatMessage } = this.props.intl; let isSettingsLoaded = true; let isPluginSettingsLoaded = true; @@ -98,7 +97,15 @@ class WaitForSettings extends Component { WaitForSettings.propTypes = { settings: PropTypes.bool, pluginSettings: PropTypes.bool, - analytics: PropTypes.bool + analytics: PropTypes.bool, + dispatch: PropTypes.func, + activeZone: PropTypes.object, + zoneSettings: PropTypes.object, + zonePluginSettings: PropTypes.object, + zoneAnalytics: PropTypes.object, + config: PropTypes.object, + intl: PropTypes.object, + children: PropTypes.node }; function mapStateToProps(state) { diff --git a/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js b/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js index b38f747..269837b 100644 --- a/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js +++ b/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js @@ -91,6 +91,7 @@ class ZoneProvisionContainer extends Component { diff --git a/src/index.js b/src/index.js index 4b74309..8525fcd 100644 --- a/src/index.js +++ b/src/index.js @@ -15,7 +15,7 @@ const history = syncHistoryWithStore(createHistory(), store); * Register our RestProxyCallback to send all cf-util-http calls to * our backend instead of their actual endpoint. */ -http.beforeSend(RestProxyCallback); +http.beforeSend(window.RestProxyCallback); ReactDOM.render( diff --git a/src/routes.js b/src/routes.js index 4e81a3a..5867f39 100644 --- a/src/routes.js +++ b/src/routes.js @@ -8,7 +8,8 @@ import AnalyticsPage from './containers/AnalyticsPage/AnaltyicsPage'; import App from './containers/App/App'; import DNSManagementPage from './containers/DNSManagementPage/DNSManagementPage'; -import Login from './containers/LoginPage/LoginPage'; +import LoginPage from './containers/LoginPage/LoginPage'; +import SplashPage from './containers/SplashPage/SplashPage'; import SignUpPage from './containers/SignUpPage/SignUpPage'; import HomePage from './containers/HomePage/HomePage'; import MoreSettingsPage from './containers/MoreSettingsPage/MoreSettingsPage'; @@ -24,8 +25,8 @@ function requireAuth(nextState, replaceState) { export default ( - - + + -1) { + return encodeURI(`${pageURL}&channel=${channelName}`); + } + return encodeURI(`${pageURL}?channel=${channelName}`); +} diff --git a/src/test/_helpers/createMockStore.js b/src/test/_helpers/createMockStore.js new file mode 100644 index 0000000..6875cf3 --- /dev/null +++ b/src/test/_helpers/createMockStore.js @@ -0,0 +1,5 @@ +import configureStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +const middlewares = [thunk]; + +export default state => configureStore(middlewares)(state); diff --git a/src/test/components/BenefitsFeatureTest.js b/src/test/components/BenefitsFeatureTest.js new file mode 100644 index 0000000..054db8b --- /dev/null +++ b/src/test/components/BenefitsFeatureTest.js @@ -0,0 +1,16 @@ +import React from 'react'; +import BenefitsFeature from '../../components/BenefitsFeature/BenefitsFeature'; +import renderer from 'react-test-renderer'; + +it('renders enabled correctly', () => { + const component = renderer + .create( + + ) + .toJSON(); + expect(component).toMatchSnapshot(); +}); diff --git a/src/test/components/GradientBannerTest.js b/src/test/components/GradientBannerTest.js new file mode 100644 index 0000000..7989fd2 --- /dev/null +++ b/src/test/components/GradientBannerTest.js @@ -0,0 +1,24 @@ +import React from 'react'; +import GradientBanner from '../../components/GradientBanner/GradientBanner'; +import renderer from 'react-test-renderer'; +import { StyleProvider } from 'cf-style-provider'; + +it('renders enabled correctly', () => { + const component = renderer + .create( + + + + ) + .toJSON(); + expect(component).toMatchSnapshot(); +}); diff --git a/src/test/components/__snapshots__/BenefitsFeatureTest.js.snap b/src/test/components/__snapshots__/BenefitsFeatureTest.js.snap new file mode 100644 index 0000000..699b2f6 --- /dev/null +++ b/src/test/components/__snapshots__/BenefitsFeatureTest.js.snap @@ -0,0 +1,51 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders enabled correctly 1`] = ` +
+ + + title + +

+ description +

+
+`; diff --git a/src/test/components/__snapshots__/GradientBannerTest.js.snap b/src/test/components/__snapshots__/GradientBannerTest.js.snap new file mode 100644 index 0000000..f27d4c9 --- /dev/null +++ b/src/test/components/__snapshots__/GradientBannerTest.js.snap @@ -0,0 +1,7 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders enabled correctly 1`] = ` +
+`; diff --git a/src/test/containers/SplashPageTest.js b/src/test/containers/SplashPageTest.js new file mode 100644 index 0000000..2b58a54 --- /dev/null +++ b/src/test/containers/SplashPageTest.js @@ -0,0 +1,50 @@ +import React from 'react'; +import SplashPage from '../../containers/SplashPage/SplashPage'; + +import renderer from 'react-test-renderer'; +import createMockStore from '../_helpers/createMockStore'; + +import { Provider } from 'react-redux'; +import { StyleProvider } from 'cf-style-provider'; +import { IntlProvider } from 'react-intl'; + +const messages = { + 'container.splashPage.heading.speedUp': 'Speed up and Optimize your WordPress Site with Cloudflare', + 'container.splashPage.help.alreadyHaveAccount': 'Have an account already? Sign in', + 'container.splashPage.help.here': 'here', + 'container.splashPage.button.createFreeAccount': 'Create Your Free Account', + 'component.benefitsFeature.globalCaching.title': 'Global Caching', + 'component.benefitsFeature.globalCaching.description': "Shorten your visitor's load times with content caching in our 110+ global locations.", + 'component.benefitsFeature.optimization.title': 'Website Optimization', + 'component.benefitsFeature.optimization.description': "Deliver content to users faster by enabling Cloudflare's content optimizations.", + 'component.benefitsFeature.security.title': 'Security', + 'component.benefitsFeature.security.description': 'Cloudflare offers protections against vulnerabilities including DDoS protection.', + 'component.benefitsFeature.insights.title': 'Insights', + 'component.benefitsFeature.insights.description': 'Monitor bandwidth saved, threats blocked, and more with built-in analytics.' +}; + +it('renders enabled correctly', () => { + window.localStorage = {}; + const component = renderer + .create( + + + + + + + + + ) + .toJSON(); + expect(component).toMatchSnapshot(); +}); diff --git a/src/test/containers/__snapshots__/SplashPageTest.js.snap b/src/test/containers/__snapshots__/SplashPageTest.js.snap new file mode 100644 index 0000000..9dac15d --- /dev/null +++ b/src/test/containers/__snapshots__/SplashPageTest.js.snap @@ -0,0 +1,371 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders enabled correctly 1`] = ` +
+
+
+
+
+
+
+

+ + Speed up and Optimize your WordPress Site with Cloudflare + +

+
+
+
+
+ +
+
+
+
+

+ + Have an account already? Sign in + + + + + here + + + . +

+
+
+
+
+
+
+
+   +
+
+
+ + + Global Caching + +

+ Shorten your visitor's load times with content caching in our 110+ global locations. +

+
+
+
+
+ + + Website Optimization + +

+ Deliver content to users faster by enabling Cloudflare's content optimizations. +

+
+
+
+
+ + + Security + +

+ Cloudflare offers protections against vulnerabilities including DDoS protection. +

+
+
+
+
+ + + Insights + +

+ Monitor bandwidth saved, threats blocked, and more with built-in analytics. +

+
+
+
+   +
+
+
+
+
+
+
+
+
+
+`; diff --git a/src/test/selectors/generateChannelLinkTest.js b/src/test/selectors/generateChannelLinkTest.js new file mode 100644 index 0000000..bf71f99 --- /dev/null +++ b/src/test/selectors/generateChannelLinkTest.js @@ -0,0 +1,29 @@ +import { generateChannelLink } from '../../selectors/generateChannelLink.js'; + +describe('generateChannelLink', function() { + it('should return appended wordpress uri', function() { + expect( + generateChannelLink('htttp://www.example.com?Param1=param', 'wordpress') + ).toBe( + 'htttp://www.example.com?Param1=param&channel=Integration:wordpress' + ); + + it('should return any arbitary channel', function() { + expect( + generateChannelLink('htttp://www.example.com', 'someNewChannel') + ).toBe('htttp://www.example.com?channel=Integration:someNewChannel'); + }); + + it('should return same url when no integrationName', function() { + expect(generateChannelLink('htttp://www.example.com', '')).toBe( + 'htttp://www.example.com' + ); + }); + + it('should return same url when no integrationName', function() { + expect(generateChannelLink('htttp://www.example.com')).toBe( + 'htttp://www.example.com' + ); + }); + }); +}); diff --git a/src/utils/ImportCards.js b/src/utils/ImportCards.js index b359c5d..b7fc58a 100644 --- a/src/utils/ImportCards.js +++ b/src/utils/ImportCards.js @@ -36,7 +36,7 @@ import BypassCacheByCookieCard import DNSManagementPage from '../containers/DNSManagementPage/DNSManagementPage'; -let cardMapper = { +const cardMapper = { AdvanceDDoSCard: AdvanceDDoSCard, AlwaysOnlineCard: AlwaysOnlineCard, ApplyDefaultSettingsCard: ApplyDefaultSettingsCard, diff --git a/stylesheets/components.css b/stylesheets/components.css index 9facab2..095b702 100644 --- a/stylesheets/components.css +++ b/stylesheets/components.css @@ -1,2 +1,2 @@ -@font-face{font-family:cloudflare-font;src:url(../fonts/cloudflare-font.eot);src:url(../fonts/cloudflare-font.eot?#iefix) format("embedded-opentype"),url(../fonts/cloudflare-font.woff) format("woff"),url(../fonts/cloudflare-font.ttf) format("truetype"),url(../fonts/cloudflare-font.svg#cloudflare-font) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300.eot);src:url(../fonts/opensans-300.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300.woff2) format("woff2"),url(../fonts/opensans-300.woff) format("woff"),url(../fonts/opensans-300.ttf) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300i.eot);src:url(../fonts/opensans-300i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300i.woff2) format("woff2"),url(../fonts/opensans-300i.woff) format("woff"),url(../fonts/opensans-300i.ttf) format("truetype");font-weight:300;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400.eot);src:url(../fonts/opensans-400.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400.woff2) format("woff2"),url(../fonts/opensans-400.woff) format("woff"),url(../fonts/opensans-400.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400i.eot);src:url(../fonts/opensans-400i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400i.woff2) format("woff2"),url(../fonts/opensans-400i.woff) format("woff"),url(../fonts/opensans-400i.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-600.eot);src:url(../fonts/opensans-600.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-600.woff2) format("woff2"),url(../fonts/opensans-600.woff) format("woff"),url(../fonts/opensans-600.ttf) format("truetype");font-weight:600;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-700.eot);src:url(../fonts/opensans-700.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-700.woff2) format("woff2"),url(../fonts/opensans-700.woff) format("woff"),url(../fonts/opensans-700.ttf) format("truetype");font-weight:700;font-style:normal}.cf-btn:focus,.cf-checkbox__input:focus,.cf-dropdown__link a:focus,.cf-input:focus,.cf-link:focus,.cf-radio__input:focus,.cf-tabs__item:focus:after,.cf-textarea:focus,.cf-toggle__checkbox:focus~.cf-toggle__handle{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-1px}.cf-toggle__checkbox,.cf-toggle__label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.cf-checkbox__input,.cf-input,.cf-radio__input,.cf-textarea{z-index:0;width:100%;margin:0 0 .75rem;padding:.45em .75em;border:1px solid #bdbdbd;vertical-align:middle;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:.86667em;background:#fff;color:#333;outline:none;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}.cf-checkbox__input:hover,.cf-input:hover,.cf-radio__input:hover,.cf-textarea:hover{border-color:#256298}.cf-checkbox__input:focus,.cf-input:focus,.cf-radio__input:focus,.cf-textarea:focus{border-color:#2f7bbf}.cf-input,.cf-textarea{border-radius:2px}.cf-checkbox__group,.cf-radio__group{text-align:left;display:inline-block;vertical-align:middle}.cf-checkbox,.cf-radio{cursor:pointer;display:block;min-height:1em;padding-left:2em}.cf-checkbox:hover input,.cf-radio:hover input{border-color:#256298}.cf-checkbox__input,.cf-radio__input{position:relative;height:15px;width:15px;margin:1px 0 0;padding:0;line-height:normal;-webkit-appearance:none;-moz-appearance:none;appearance:none;top:-1px}.cf-checkbox__input:before,.cf-radio__input:before{content:'';position:absolute;background-color:transparent;color:transparent;-webkit-text-stroke:0;-webkit-transition:all .15s ease-out;transition:all .15s ease-out}.cf-checkbox__input{border-radius:2px}.cf-checkbox__input:before{content:'\f009';font-family:cloudflare-font;font-size:15px;left:-1px;top:-1px}.cf-checkbox--checked .cf-checkbox__input:before{color:#333}.cf-radio__input,.cf-radio__input:before{border-radius:50%}.cf-radio__input:before{height:3px;width:3px;top:5px;left:5px}.cf-radio--checked .cf-radio__input:before{background-color:#333;height:7px;width:7px;top:3px;left:3px}.cf-checkbox__label,.cf-radio__label{display:inline;font-size:.86667em;margin-bottom:.38333em;margin-left:1em;min-height:1.22em}.cf-card__toolbar:after,.cf-form__fieldset:after,.cf-modal__footer:after,.cf-progress__items:after{content:"";display:table;clear:both}.cf-btn__group{position:relative;display:inline-block;font-size:0;vertical-align:middle;white-space:nowrap}.cf-btn__group>*{font-size:1rem}.cf-btn__group+.cf-btn__group{margin-left:.4rem}.cf-btn__group .cf-btn{border-radius:0}.cf-btn__group .cf-btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.cf-btn__group .cf-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.cf-btn__group .cf-btn~.cf-btn{margin-left:-1px}.cf-btn{display:inline-block;position:relative;margin:0;padding:.6em 1em .53333em;border:none;border-bottom:1px solid;background:transparent;border-radius:2px;font-size:.93333rem;font-weight:400;font-family:inherit;line-height:1.2;text-align:center;-webkit-text-stroke:0;-webkit-font-smoothing:subpixel-antialiased;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-btn::-moz-focus-inner{padding:0;border:0}.cf-btn+.cf-btn{margin-left:.4rem}.cf-btn--default,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{background-color:#dedede;border-color:#ccc;color:#333}.cf-btn--default:hover,.cf-btn--delete:hover,.cf-btn--edit:hover,.cf-btn--note:hover{background-color:#ccc;border-color:#bababa;color:#333}.cf-btn--default.cf-btn--active,.cf-btn--default:active,.cf-btn--delete.cf-btn--active,.cf-btn--delete:active,.cf-btn--edit.cf-btn--active,.cf-btn--edit:active,.cf-btn--note.cf-btn--active,.cf-btn--note:active{background-color:#bababa;border-color:#a8a8a8;color:#333}.cf-btn--default:focus,.cf-btn--delete:focus,.cf-btn--edit:focus,.cf-btn--note:focus{box-shadow:inset 0 0 0 1px #a8a8a8;color:#333}.cf-btn--primary{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-btn--primary:hover{background-color:#286aa4;border-color:#215887;color:#fff}.cf-btn--primary.cf-btn--active,.cf-btn--primary:active{background-color:#215887;border-color:#1a456b;color:#fff}.cf-btn--primary:focus{box-shadow:inset 0 0 0 1px #1a456b;color:#fff}.cf-btn--accept,.cf-btn--success{background-color:#9bca3e;border-color:#89b431;color:#fff}.cf-btn--accept:hover,.cf-btn--success:hover{background-color:#89b431;border-color:#73982a;color:#fff}.cf-btn--accept.cf-btn--active,.cf-btn--accept:active,.cf-btn--success.cf-btn--active,.cf-btn--success:active{background-color:#73982a;border-color:#5e7c22;color:#fff}.cf-btn--accept:focus,.cf-btn--success:focus{box-shadow:inset 0 0 0 1px #5e7c22;color:#fff}.cf-btn--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-btn--warning:hover{background-color:#db6600;border-color:#b85600;color:#fff}.cf-btn--warning.cf-btn--active,.cf-btn--warning:active{background-color:#b85600;border-color:#944500;color:#fff}.cf-btn--warning:focus{box-shadow:inset 0 0 0 1px #944500;color:#fff}.cf-btn--cancel,.cf-btn--danger{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-btn--cancel:hover,.cf-btn--danger:hover{background-color:#9e1f21;border-color:#80191b;color:#fff}.cf-btn--cancel.cf-btn--active,.cf-btn--cancel:active,.cf-btn--danger.cf-btn--active,.cf-btn--danger:active{background-color:#80191b;border-color:#621315;color:#fff}.cf-btn--cancel:focus,.cf-btn--danger:focus{box-shadow:inset 0 0 0 1px #621315;color:#fff}.cf-btn--disabled{cursor:default;pointer-events:none;opacity:.5}.cf-btn--disabled[title]{pointer-events:auto}.cf-btn--link{background-color:transparent;border-color:transparent;color:#2f7bbf}.cf-btn--link:hover{color:#ff7900}.cf-btn--link.cf-btn--active,.cf-btn--link:active,.cf-btn--link:focus{color:#2f7bbf}.cf-btn--facebook i,.cf-btn--twitter i{vertical-align:baseline;font-size:1.33em}.cf-btn--twitter{background-color:#00aced;border-color:#00aced;color:#fff}.cf-btn--twitter:hover{background-color:#1fc3ff;border-color:#05bcff;color:#333}.cf-btn--facebook{background-color:#3b5998;border-color:#3b5998;color:#fff}.cf-btn--facebook:hover{background-color:#4b6eb9;border-color:#4262a9;color:#fff}.cf-btn--accept,.cf-btn--cancel,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{min-height:2.425rem;width:0;overflow:hidden;padding:1.13333em;text-align:left;text-indent:-9999px;white-space:nowrap;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:subpixel-antialiased}.cf-btn--accept:after,.cf-btn--cancel:after,.cf-btn--delete:after,.cf-btn--edit:after,.cf-btn--note:after{content:"\f009";display:block;position:absolute;height:100%;width:100%;top:53%;left:0;text-align:center;text-indent:0;font-size:225em;line-height:0;speak:none;-webkit-transition-delay:.2s;transition-delay:.2s}.cf-btn--accept:after,.cf-btn--accept:before,.cf-btn--cancel:after,.cf-btn--cancel:before,.cf-btn--delete:after,.cf-btn--delete:before,.cf-btn--edit:after,.cf-btn--edit:before,.cf-btn--note:after,.cf-btn--note:before{-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.cf-btn--accept:after{content:"\f009"}.cf-btn--cancel:after{content:"\f01a"}.cf-btn--delete:after{content:"\f01a"}.cf-btn--edit:after{content:"\f019"}.cf-btn--note:after{content:"\f013"}.cf-btn--block{display:block;margin-bottom:.4rem}.cf-btn--block+.cf-btn--block{margin-left:auto}.cf-btn--loading{color:#ededed;background-color:#ededed;opacity:.8;cursor:default}.cf-btn--loading:before{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:100%;opacity:1;background:transparent url(../assets/spinner.gif) no-repeat 50%;-webkit-transform:scale(1);transform:scale(1);-webkit-animation:a .2s ease-in-out;animation:a .2s ease-in-out}.cf-btn--loading:focus{outline:none}.cf-btn--loading:focus,.cf-btn--loading:hover{background-color:#ededed;color:#ededed}@-webkit-keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.cf-callout{margin:1rem;padding:1rem;border:1px solid transparent;border-radius:2px}.cf-callout--default{background-color:#333;border-color:#333;color:#fff}.cf-callout--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-callout__content{margin-top:0}.cf-card{margin-top:1rem;margin-bottom:1rem;padding:0;border:1px solid #dedede;background-color:#fff;border-radius:2px;-webkit-transition:all .35s ease;transition:all .35s ease}.cf-card__section{display:table;table-layout:fixed;width:100%}.cf-card__section+.cf-card__section{border-top:1px solid #dedede}.cf-card__section--error{border-left:3px solid #bd2527}.cf-card__title{font-weight:400;margin-bottom:1rem}.cf-card__footer_message{font-size:.8rem;color:#7d7d7d;line-height:1.3;margin-top:1.5em}.cf-card__messages{padding-top:.5rem}.cf-card__messages .card__messages+p{margin-top:1em}.cf-card__content{padding:1.5rem}.cf-card__control{position:relative;padding:2rem;border:0 solid #dedede;border-top-width:1px;background-color:#000;background-color:rgba(0,0,0,.06);text-align:center}@media (min-width:49.2em){.cf-card__content,.cf-card__control{display:table-cell}.cf-card__control{width:40%;border-left-width:1px;border-top-width:0;vertical-align:middle}}@media (min-width:66em){.cf-card__control{width:30%}}.cf-card__toolbar{min-height:2.96666rem}.cf-card__toolbar_links{float:right}.cf-card__toolbar_link{position:relative;display:inline-block;padding:.73333rem 2em .73333rem .5rem}.cf-card__toolbar_link:after{content:"\f003";font-family:cloudflare-font;font-style:normal;font-weight:400;margin-top:-.6em;position:absolute;top:50%;right:1rem;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.cf-card__toolbar_link--open:after{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.cf-card__drawers_container{display:none}.cf-card__drawers_container--open{display:block}.cf-card__drawer--active{border-top:1px solid #dedede;padding:1.5rem}.cf-card .cf-table{margin-top:0;margin-bottom:0;border-width:0}.cf-card .cf-form{border-left-width:0;border-right-width:0}.cf-checkbox__group .cf-checkbox:first-child{margin-top:0}.cf-checkbox__group .cf-checkbox{margin-top:1em}.cf-code,.cf-code__block{background-color:#dedede;border:1px solid #d1d1d1;font-family:monaco,courier,monospace;border-radius:2px}.cf-code{display:inline-block;margin-left:.13333em;margin-right:.13333em;padding:0 .4em;vertical-align:baseline;color:#bd2527}.cf-code__block{display:block;width:100%;margin:2rem 0;padding:.5rem;font-size:.86667rem;color:#4d4d4d}.cf-code__block .cf-code{display:inherit;margin:auto;padding:auto;background:none;border:none;color:inherit}.cf-copyable-textarea{margin-top:1rem;cursor:pointer}.cf-copyable-textarea .cf-textarea{height:7rem;word-break:break-all;cursor:text;resize:none;color:#333;font-family:monaco,courier,monospace}.cf-copyable-textarea__help-text{font-size:.8em;color:#7d7d7d;margin-top:-.5em;margin-bottom:1em}.cf-dropdown{position:absolute;z-index:1;min-width:10.66667rem;margin:.5em 0 0;padding:.33333rem 0;list-style:none;background:#fff;border:1px solid #dedede;border-radius:2px;box-shadow:0 3px 10px rgba(0,0,0,.2);-webkit-animation:b .15s ease-out;animation:b .15s ease-out}.cf-dropdown:before{content:"";display:block;position:absolute;bottom:100%;border:solid transparent;border-width:10px;border-top-width:0;border-bottom-color:#fff}@-webkit-keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}@keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}.cf-dropdown--left{left:0}.cf-dropdown--left:before{left:10px}.cf-dropdown--right{right:0}.cf-dropdown--right:before{right:10px}.cf-dropdown__link{position:relative;z-index:1}.cf-dropdown__link a{display:block;padding:.2rem 1.06667rem;cursor:pointer;white-space:nowrap}.cf-dropdown__link a:hover{color:#fff;background:#2f7bbf}.cf-dropdown__link a:focus{color:#fff;background:#63a2d9}.cf-dropdown__link a:active{color:#fff;background:#112d46}.cf-dropdown__link:first-child{border-top-width:0}.cf-dropdown__separator{margin:.53333rem 0;border-top:1px solid #dedede}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:1.33333rem}@media (min-width:49.2em){.cf-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.cf-flex__item{-webkit-box-flex:1;-webkit-flex:1 0;-ms-flex:1 0;flex:1 0}.cf-flex__item--collapse{-webkit-box-flex:0;-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 auto}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:1.33333rem}}.cf-form{background:#fff;border:1px solid #dedede;box-shadow:0 1px 1px rgba(0,0,0,.05)}.cf-form__header{padding:1em;border-bottom:1px solid #dedede}.cf-form__footer{padding:1em;border-top:1px solid #dedede;text-align:right}.cf-form__title{margin:0}.cf-form__fieldset{margin:0;padding:0;border:none;border-bottom:1px solid #dedede}.cf-form__fieldset:last-child{border-bottom:none}.cf-form__fieldset_legend{padding:1em;margin-bottom:0;border-bottom:none}.cf-form__fieldset_content{padding:1em;border:0 solid #dedede;border-top-width:1px;background:#eee}.cf-form__label{display:block;margin-bottom:.2em;color:#333}.cf-form .cf-checkbox,.cf-form .cf-input,.cf-form .cf-radio,.cf-form .cf-textarea{margin-bottom:0}.cf-form__label{font-size:.86667em}.cf-form__label--hidden{display:none}.cf-form__field-error{position:relative;margin-top:.2em;padding:.5em 1em;border:1px solid #9e1f21;font-size:.8em;font-weight:600;background:#bd2527;color:#fff;-webkit-font-smoothing:antialiased;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.1)}.cf-form__field-error:after,.cf-form__field-error:before{content:"";display:block;position:absolute;bottom:100%;border-style:solid;border-color:transparent}.cf-form__field-error:before{left:4px;border-width:6px;border-bottom-color:#9e1f21}.cf-form__field-error:after{left:5px;border-width:5px;border-bottom-color:#bd2527}.cf-form__field-error p{margin-top:0;margin-bottom:0}.cf-form__field-error p+p{margin-top:.5em}@media (min-width:720px){.cf-form--horizontal .cf-form__fieldset_legend{width:30%;float:left;padding:1.7em 1rem;color:#333;text-align:right}.cf-form--horizontal .cf-form__fieldset_content{width:70%;float:left;border-top-width:0;border-left-width:1px}}.cf-heading{font-weight:700}.cf-heading__caption{color:#7d7d7d;font-size:80%;margin-left:.5em}.cf-heading--1{font-size:2rem;line-height:1.2;font-weight:400}.cf-heading--2{font-size:1.6rem;line-height:1.3}.cf-heading--3{font-size:1.46667rem;line-height:1.3}.cf-heading--4{font-size:1.2rem;line-height:1.3}.cf-heading--5{font-size:1rem;line-height:1.5}.cf-heading--6{font-size:.93333rem;line-height:1.5}.cf-icon{display:inline;width:auto;height:auto;margin-top:0;line-height:normal;vertical-align:baseline;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none;background-position:0 0;background-repeat:repeat}.cf-icon:before{display:inline-block;text-decoration:inherit;speak:none}.cf-icon__label{display:inline-block;width:0;height:0;overflow:hidden}.cf-icon--border{border:1px solid #333;padding:.2em .25em .15em;border-radius:2px}.cf-icon--spin{display:inline-block;-webkit-animation:c 2s infinite linear;animation:c 2s infinite linear}@-webkit-keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.cf-icon--muted{color:#333}.cf-icon--white{color:#fff}.cf-icon--2x{font-size:2em}.cf-icon--2x.cf-icon--border{border-width:2px}.cf-icon--3x{font-size:3em}.cf-icon--3x.cf-icon--border{border-width:3px}.cf-icon--4x{font-size:4em}.cf-icon--4x.cf-icon--border{border-width:4px}.cf-icon--large{vertical-align:-10%;font-size:1.3333333333333335em}.cf-icon--xlarge{font-size:2.4em}.cf-icon--caret-up:before,.cf-icon--chevron-up:before{content:"\f000"}.cf-icon--caret-down:before,.cf-icon--chevron-down:before{content:"\f001"}.cf-icon--caret-left:before,.cf-icon--chevron-left:before{content:"\f002"}.cf-icon--caret-right:before,.cf-icon--chevron-right:before{content:"\f003"}.cf-icon--ok-sign:before{content:"\f004"}.cf-icon--exclamation-sign:before{content:"\f005"}.cf-icon--info-sign:before{content:"\f006"}.cf-icon--pause:before{content:"\f007"}.cf-icon--time:before{content:"\f008"}.cf-icon--ok:before{content:"\f009"}.cf-icon--clipboard:before{content:"\f00a"}.cf-icon--bolt:before{content:"\f00b"}.cf-icon--chart:before{content:"\f00c"}.cf-icon--drive:before{content:"\f00d"}.cf-icon--filter:before{content:"\f00e"}.cf-icon--flowchart:before{content:"\f00f"}.cf-icon--hamburger:before{content:"\f010"}.cf-icon--lock:before{content:"\f011"}.cf-icon--list:before{content:"\f012"}.cf-icon--file:before{content:"\f013"}.cf-icon--shield:before{content:"\f014"}.cf-icon--plus:before{content:"\f015"}.cf-icon--happy:before{content:"\f016"}.cf-icon--sad:before{content:"\f017"}.cf-icon--search:before{content:"\f018"}.cf-icon--wrench:before{content:"\f019"}.cf-icon--remove-sign:before,.cf-icon--remove:before{content:"\f01a"}.cf-icon--speech:before{content:"\f01b"}.cf-icon--gear:before{content:"\f01c"}.cf-icon--help:before{content:"\f01d"}.cf-icon--widen:before{content:"\f022"}.cf-icon--calendar:before{content:"\f01e"}.cf-icon--facebook:before{content:"\f01f"}.cf-icon--twitter:before{content:"\f020"}.cf-icon--googleplus:before{content:"\f021"}.cf-icon--linkedin:before{content:"\f022"}.cf-icon--resize-horizontal:before{content:"\f024"}.cf-icon--upload:before{content:"\f025"}.cf-icon--loading{background:transparent url(../assets/spinner.gif) no-repeat 50%}.cf-icon--loading:before{content:"";width:1.06733rem}.cf-icon--close:before{content:'\00D7';font-family:Open Sans,Helvetica,Arial,sans-serif}.cf-label{display:inline-block;padding:.26667em .4em;font-size:.86667rem;line-height:1rem;vertical-align:baseline;white-space:nowrap;color:#fff;font-weight:600;text-transform:uppercase;-webkit-text-stroke:0;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cf-label--default{background:#7d7d7d}.cf-label--info{background:#2f7bbf}.cf-label--success{background:#9bca3e}.cf-label--warning{background:#ff7900}.cf-label--error{background:#bd2527}.cf-layout__container{padding:0 1.5em;max-width:90%;margin:0 auto}.cf-layout__row{clear:both}.cf-layout__column{float:left}@media (max-width:49.2em){.cf-layout__container{padding:0;max-width:none}.cf-layout__column{width:100%!important;float:none}}.cf-link{color:#2f7bbf;outline:none;text-decoration:none;-webkit-transition:all .15s ease;transition:all .15s ease;cursor:pointer}.cf-link:hover{color:#ff7900}.cf-link:focus{color:#63a2d9}.cf-link:active{color:#112d46;outline:none}.cf-list{list-style-type:disc;list-style-position:outside;margin-left:3em}.cf-list--ordered{list-style-type:decimal}.cf-list--unstyled{list-style-type:none;margin-left:0}.cf-modal__backdrop-scroller{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1050;overflow:auto;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.cf-modal__backdrop-outer{position:relative;width:100%;height:100%;display:table}.cf-modal__backdrop{display:table-cell;vertical-align:middle;padding:1.5rem;background:#000;background:rgba(0,0,0,.7);-webkit-transform-origin:center;transform-origin:center}.cf-modal{position:relative;width:100%;max-width:30rem;margin:0 auto;background:#fff;-webkit-transform-origin:center;transform-origin:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:2px;box-shadow:0 1px 15px rgba(0,0,0,.75)}.cf-modal:focus{outline:none}.cf-modal__body,.cf-modal__footer,.cf-modal__header{position:relative;padding:1.5rem}.cf-modal__header+.cf-modal__body{padding-top:0}.cf-modal__title{font-weight:400;word-break:break-all;margin-bottom:.75rem}.cf-modal__title .cf-heading{font-weight:inherit}.cf-modal__close{cursor:pointer;right:1.5rem;top:1rem;position:absolute;line-height:.6}.cf-modal__footer{background-color:#ebebeb}.cf-modal__footer--simple{background-color:transparent}.cf-modal__actions{float:right}.cf-modal--confirm .cf-modal__footer{padding-top:0}.cf-transition-modal-appear .cf-modal__backdrop,.cf-transition-modal-enter .cf-modal__backdrop,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal__backdrop{background:transparent}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave .cf-modal__backdrop{background:#000;background:rgba(0,0,0,.7)}.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave-active .cf-modal__backdrop{-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.cf-transition-modal-appear .cf-modal,.cf-transition-modal-enter .cf-modal,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1);transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1)}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave .cf-modal{opacity:1;-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave-active .cf-modal{-webkit-transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease,-webkit-transform .2s ease}.cf-modal .cf-form{border-left-width:0;border-right-width:0}.cf-modal .cf-form__fieldset_legend{font-size:.86667em}.cf-notifications{margin-top:.5em;margin-bottom:.5em}.cf-notifications__item{position:relative;padding:.5rem 2.5rem;padding-right:2.5rem;border:1px solid;vertical-align:middle;-webkit-text-stroke:0;border-radius:2px;cursor:pointer;-webkit-font-smoothing:antialiased}.cf-notifications__item:before{font-family:cloudflare-font;font-size:1.25rem;position:absolute;top:50%;left:.75rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);line-height:1;vertical-align:middle}.cf-notifications__item+.cf-notifications__item{margin-top:2px}.cf-notifications__global_container{position:fixed;bottom:0;left:0;right:0;max-height:25%;overflow:auto;z-index:1100}.cf-notifications__global_container .cf-notifications{margin-top:0;margin-bottom:0}.cf-notifications__global_container .cf-notifications__item{border-radius:0;border-left-width:0;border-right-width:0;-webkit-transform-origin:bottom left;transform-origin:bottom left;-webkit-animation:d .2s ease-in-out;animation:d .2s ease-in-out}.cf-notifications__global_container .cf-notifications__item:before{-webkit-animation:e .2s ease-out;animation:e .2s ease-out}.cf-notifications__global_container .cf-notifications__item+.cf-notifications__item{margin-top:0;border-top-width:0}.cf-notifications__item_progress{position:absolute;z-index:1;top:0;bottom:0;left:0;width:100%;background:#fff;background:hsla(0,0%,100%,.1)}.cf-notifications__item_progress--active{width:0;-webkit-transition:width 0s linear;transition:width 0s linear}.cf-notifications__item_close{position:absolute;z-index:3;top:0;right:0;bottom:0;width:2.5em;cursor:pointer}.cf-notifications__item_close:hover{background:#000;background:rgba(0,0,0,.1)}.cf-notifications__item_close:before{content:'\00D7';position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:1.25rem}.cf-notifications__item_message{position:relative;z-index:2}.cf-notifications__item--success{background-color:#89b431;border-color:#89b431;color:#fff}.cf-notifications__item--success:before{content:'\f004'}.cf-notifications__item--error{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-notifications__item--error:before{content:'\f005'}.cf-notifications__item--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-notifications__item--info:before{content:'\f006'}.cf-notifications__item--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-notifications__item--warning:before{content:'\f005'}@-webkit-keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.cf-page{padding-top:2.5em;padding-bottom:1.33333rem}.cf-page__title{font-size:2rem;line-height:1.2;font-weight:400}.cf-page__subtitle{color:#7d7d7d;font-weight:300}@media (min-width:49.2em){.cf-page{padding-bottom:2.66667rem}}.cf-progress{position:relative}.cf-progress__bar{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none}.cf-progress__bar::-webkit-progress-bar{background-color:#ebebeb;color:#ebebeb}.cf-progress__bar::-webkit-progress-value{background-color:#2f7bbf;color:#2f7bbf;-webkit-transition:width .5s ease;transition:width .5s ease}.cf-progress__bar::-moz-progress-bar{background-color:#2f7bbf;color:#2f7bbf}.cf-progress__items{list-style:none;margin:0;padding:0}.cf-progress__item{float:left;height:auto;padding:0;padding-top:7.5px;color:#7d7d7d;font-size:.86667em;text-align:center;cursor:pointer}.cf-progress__item:before{content:none}.cf-progress__item .cf-link{display:block;color:inherit;cursor:pointer}.cf-progress__item--active{color:#2f7bbf}.cf-progress__item--disabled{color:#dedede;cursor:default}@media (max-width:49.2em){.cf-progress__item{display:none;width:auto!important;float:none}.cf-progress__item--active{display:block}}.cf-radio__group .cf-radio:first-child{margin-top:0}.cf-radio__group .cf-radio{margin-top:1em}.cf-table{background:#fff;border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;margin-bottom:1.5rem}.cf-table__head{background:#dedede}.cf-table__body+.cf-table__body{border-top:2px solid #dedede}.cf-table__cell{border-top:1px solid #dedede;line-height:1.5;padding:.73333rem;vertical-align:middle}.cf-table__cell--head{font-weight:600}.cf-table__cell--head:first-letter{text-transform:capitalize}.cf-table__head .cf-table__cell{vertical-align:bottom}.cf-table__row--info>.cf-table__cell{border-color:#4e96d4;background:#63a2d9}.cf-table__row--success>.cf-table__cell{border-color:#b1d567;background:#bbdb7b}.cf-table__row--warning>.cf-table__cell{border-color:#ffdf80;background:#ffe699}.cf-table__row--error>.cf-table__cell{border-color:#d83b3e;background:#dc5053}.cf-table__cell--align-left{text-align:left}.cf-table__cell--align-center{text-align:center}.cf-table__cell--align-right{text-align:right}@media (max-width:49.2em){.cf-table,.cf-table__body,.cf-table__cell,.cf-table__foot,.cf-table__head,.cf-table__row{display:block;width:100%;box-sizing:border-box}.cf-table__cell{border-top-width:0}.cf-table__cell:first-child{border-top:1px solid #dedede}}.cf-table--condensed .cf-table__cell{padding:.36667rem .86667rem}.cf-table--striped .cf-table__body>.cf-table__row--default:nth-child(odd)>.cf-table__cell{background:#fafafa}.cf-table--striped .cf-table__body>.cf-table__row--info:nth-child(odd)>.cf-table__cell{background:#5b9dd7}.cf-table--striped .cf-table__body>.cf-table__row--success:nth-child(odd)>.cf-table__cell{background:#b7d973}.cf-table--striped .cf-table__body>.cf-table__row--warning:nth-child(odd)>.cf-table__cell{background:#ffe38f}.cf-table--striped .cf-table__body>.cf-table__row--error:nth-child(odd)>.cf-table__cell{background:#db484a}.cf-table--hover .cf-table__body>.cf-table__row--default:hover>.cf-table__cell{background:#f0f0f0}.cf-table--hover .cf-table__body>.cf-table__row--info:hover>.cf-table__cell{background:#5b9dd7}.cf-table--hover .cf-table__body>.cf-table__row--success:hover>.cf-table__cell{background:#b7d973}.cf-table--hover .cf-table__body>.cf-table__row--warning:hover>.cf-table__cell{background:#ffe38f}.cf-table--hover .cf-table__body>.cf-table__row--error:hover>.cf-table__cell{background:#db484a}.cf-table--bordered{border:1px solid #dedede;border-collapse:separate;*border-collapse:collapse;border-left:0}.cf-table--bordered .cf-table__cell{border-left:1px solid #dedede}.cf-table--bordered .cf-table__body:first-child .cf-table__row:first-child .cf-table__cell,.cf-table--bordered .cf-table__head:first-child .cf-table__row:first-child .cf-table__cell{border-top:0}.cf-tabs__group{display:table;width:100%;margin:0 0 22.5px;padding:0;list-style:none}.cf-tabs__item{display:table-cell;position:relative;margin:0;padding:1.5rem 1rem;vertical-align:middle;text-align:center;background:#fff;color:#2f7bbf;cursor:pointer}.cf-tabs__item:before{content:"";display:block;position:absolute;top:100%;left:50%;height:0;width:0;margin-left:0;border:0 solid transparent;border-top-color:#2f7bbf;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-tabs__item+.cf-tabs__item{border-left:1px solid #ebebeb}.cf-tabs__item:focus{outline:none}.cf-tabs__item:focus:after{content:"";display:block;position:absolute;top:0;bottom:0;left:0;right:0}.cf-tabs__item:hover{background:#e6e6e6;color:#2f7bbf}.cf-tabs__item.cf-tabs__item--active,.cf-tabs__item:active{background:#2f7bbf;color:#fff}.cf-tabs__item.cf-tabs__item--active:before,.cf-tabs__item:active:before{border-width:16px;margin-left:-16px}.cf-text--normal{font-size:1rem;font-weight:400}.cf-text--small{font-size:.8em;line-height:1.3}.cf-text--start{text-align:left}.cf-text--center{text-align:center}.cf-text--justify{text-align:justify}.cf-text--end{text-align:right}.cf-text--capitalize{text-transform:capitalize}.cf-text--titlecase:first-word{text-transform:capitalize}.cf-text--lowercase{text-transform:lowercase}.cf-text--uppercase{text-transform:uppercase}.cf-text--info{color:#2f7bbf}.cf-text--success{color:#9bca3e}.cf-text--warning{color:#ff7900}.cf-text--error{color:#bd2527}.cf-text--muted{color:#7d7d7d}.cf-textarea{width:100%}.cf-toggle{display:block;position:relative;height:2.26667rem;width:5.334rem;border-radius:2px;border:1px solid #aaa;cursor:pointer}.cf-toggle:after,.cf-toggle:before{display:block;position:absolute;top:0;bottom:0;width:50%;line-height:2.26667rem;text-align:center}.cf-toggle:before{content:"On";left:0;background:#9bca3e;color:#fff}.cf-toggle:after{content:"Off";right:0;background:gray;color:#fff}.cf-toggle__handle{display:block;position:absolute;z-index:1;top:0;bottom:0;left:0;width:50%;border:inherit;border-width:0;border-right-width:inherit;background:#fff;-webkit-transition:left .1s ease;transition:left .1s ease}.cf-toggle--active .cf-toggle__handle{border-right-width:0;border-left-width:inherit;left:50%}.tooltip{position:absolute;display:none;max-width:100%;max-height:100%}.tooltip-open{display:block}.tooltip-content{position:relative;padding:.5rem 1rem;font-size:.8rem;font-family:inherit;background:#000;color:#fff;border-radius:2px}.tooltip-content:before{content:"";display:block;position:absolute;width:0;height:0;border:5px solid transparent}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content:before{top:100%;left:50%;margin-left:-5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content:before{bottom:100%;left:50%;margin-left:-5px;border-bottom-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content{margin-right:5px}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content:before{left:100%;top:50%;margin-top:-5px;border-left-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content{margin-left:5px}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content:before{right:100%;top:50%;margin-top:-5px;border-right-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;left:5px;border-bottom-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;right:5px;border-bottom-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content:before{top:100%;left:5px;border-top-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content:before{top:100%;right:5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{top:5px;left:100%;border-left-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{top:5px;right:100%;border-right-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{bottom:5px;left:100%;border-left-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{bottom:5px;right:100%;border-right-color:#000} +@font-face{font-family:cloudflare-font;src:url(../fonts/cloudflare-font.eot);src:url(../fonts/cloudflare-font.eot?#iefix) format("embedded-opentype"),url(../fonts/cloudflare-font.woff) format("woff"),url(../fonts/cloudflare-font.ttf) format("truetype"),url(../fonts/cloudflare-font.svg#cloudflare-font) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300.eot);src:url(../fonts/opensans-300.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300.woff2) format("woff2"),url(../fonts/opensans-300.woff) format("woff"),url(../fonts/opensans-300.ttf) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300i.eot);src:url(../fonts/opensans-300i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300i.woff2) format("woff2"),url(../fonts/opensans-300i.woff) format("woff"),url(../fonts/opensans-300i.ttf) format("truetype");font-weight:300;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400.eot);src:url(../fonts/opensans-400.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400.woff2) format("woff2"),url(../fonts/opensans-400.woff) format("woff"),url(../fonts/opensans-400.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400i.eot);src:url(../fonts/opensans-400i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400i.woff2) format("woff2"),url(../fonts/opensans-400i.woff) format("woff"),url(../fonts/opensans-400i.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-600.eot);src:url(../fonts/opensans-600.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-600.woff2) format("woff2"),url(../fonts/opensans-600.woff) format("woff"),url(../fonts/opensans-600.ttf) format("truetype");font-weight:600;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-700.eot);src:url(../fonts/opensans-700.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-700.woff2) format("woff2"),url(../fonts/opensans-700.woff) format("woff"),url(../fonts/opensans-700.ttf) format("truetype");font-weight:700;font-style:normal}.cf-btn:focus,.cf-checkbox__input:focus,.cf-dropdown__link a:focus,.cf-input:focus,.cf-link:focus,.cf-radio__input:focus,.cf-tabs__item:focus:after,.cf-textarea:focus,.cf-toggle__checkbox:focus~.cf-toggle__handle{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-1px}.cf-toggle__checkbox,.cf-toggle__label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.cf-checkbox__input,.cf-input,.cf-radio__input,.cf-textarea{z-index:0;width:100%;margin:0 0 .75rem;padding:.45em .75em;border:1px solid #bdbdbd;vertical-align:middle;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:.86667em;background:#fff;color:#333;outline:none;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}.cf-checkbox__input:hover,.cf-input:hover,.cf-radio__input:hover,.cf-textarea:hover{border-color:#256298}.cf-checkbox__input:focus,.cf-input:focus,.cf-radio__input:focus,.cf-textarea:focus{border-color:#2f7bbf}.cf-input,.cf-textarea{border-radius:2px}.cf-checkbox__group,.cf-radio__group{text-align:left;display:inline-block;vertical-align:middle}.cf-checkbox,.cf-radio{cursor:pointer;display:block;min-height:1em;padding-left:2em}.cf-checkbox:hover input,.cf-radio:hover input{border-color:#256298}.cf-checkbox__input,.cf-radio__input{position:relative;height:15px;width:15px;margin:1px 0 0;padding:0;line-height:normal;-webkit-appearance:none;-moz-appearance:none;appearance:none;top:-1px}.cf-checkbox__input:before,.cf-radio__input:before{content:'';position:absolute;background-color:transparent;color:transparent;-webkit-text-stroke:0;-webkit-transition:all .15s ease-out;transition:all .15s ease-out}.cf-checkbox__input{border-radius:2px}.cf-checkbox__input:before{content:'\f009';font-family:cloudflare-font;font-size:15px;left:-1px;top:-1px}.cf-checkbox--checked .cf-checkbox__input:before{color:#333}.cf-radio__input,.cf-radio__input:before{border-radius:50%}.cf-radio__input:before{height:3px;width:3px;top:5px;left:5px}.cf-radio--checked .cf-radio__input:before{background-color:#333;height:7px;width:7px;top:3px;left:3px}.cf-checkbox__label,.cf-radio__label{display:inline;font-size:.86667em;margin-bottom:.38333em;margin-left:1em;min-height:1.22em}.cf-card__toolbar:after,.cf-form__fieldset:after,.cf-modal__footer:after,.cf-progress__items:after{content:"";display:table;clear:both}.cf-btn__group{position:relative;display:inline-block;font-size:0;vertical-align:middle;white-space:nowrap}.cf-btn__group>*{font-size:1rem}.cf-btn__group+.cf-btn__group{margin-left:.4rem}.cf-btn__group .cf-btn{border-radius:0}.cf-btn__group .cf-btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.cf-btn__group .cf-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.cf-btn__group .cf-btn~.cf-btn{margin-left:-1px}.cf-btn{display:inline-block;position:relative;margin:0;padding:.6em 1em .53333em;border:none;border-bottom:1px solid;background:transparent;border-radius:2px;font-size:.93333rem;font-weight:400;font-family:inherit;line-height:1.2;text-align:center;-webkit-text-stroke:0;-webkit-font-smoothing:subpixel-antialiased;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-btn::-moz-focus-inner{padding:0;border:0}.cf-btn+.cf-btn{margin-left:.4rem}.cf-btn--default,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{background-color:#dedede;border-color:#ccc;color:#333}.cf-btn--default:hover,.cf-btn--delete:hover,.cf-btn--edit:hover,.cf-btn--note:hover{background-color:#ccc;border-color:#bababa;color:#333}.cf-btn--default.cf-btn--active,.cf-btn--default:active,.cf-btn--delete.cf-btn--active,.cf-btn--delete:active,.cf-btn--edit.cf-btn--active,.cf-btn--edit:active,.cf-btn--note.cf-btn--active,.cf-btn--note:active{background-color:#bababa;border-color:#a8a8a8;color:#333}.cf-btn--default:focus,.cf-btn--delete:focus,.cf-btn--edit:focus,.cf-btn--note:focus{box-shadow:inset 0 0 0 1px #a8a8a8;color:#333}.cf-btn--primary{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-btn--primary:hover{background-color:#286aa4;border-color:#215887;color:#fff}.cf-btn--primary.cf-btn--active,.cf-btn--primary:active{background-color:#215887;border-color:#1a456b;color:#fff}.cf-btn--primary:focus{box-shadow:inset 0 0 0 1px #1a456b;color:#fff}.cf-btn--accept,.cf-btn--success{background-color:#9bca3e;border-color:#89b431;color:#fff}.cf-btn--accept:hover,.cf-btn--success:hover{background-color:#89b431;border-color:#73982a;color:#fff}.cf-btn--accept.cf-btn--active,.cf-btn--accept:active,.cf-btn--success.cf-btn--active,.cf-btn--success:active{background-color:#73982a;border-color:#5e7c22;color:#fff}.cf-btn--accept:focus,.cf-btn--success:focus{box-shadow:inset 0 0 0 1px #5e7c22;color:#fff}.cf-btn--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-btn--warning:hover{background-color:#db6600;border-color:#b85600;color:#fff}.cf-btn--warning.cf-btn--active,.cf-btn--warning:active{background-color:#b85600;border-color:#944500;color:#fff}.cf-btn--warning:focus{box-shadow:inset 0 0 0 1px #944500;color:#fff}.cf-btn--cancel,.cf-btn--danger{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-btn--cancel:hover,.cf-btn--danger:hover{background-color:#9e1f21;border-color:#80191b;color:#fff}.cf-btn--cancel.cf-btn--active,.cf-btn--cancel:active,.cf-btn--danger.cf-btn--active,.cf-btn--danger:active{background-color:#80191b;border-color:#621315;color:#fff}.cf-btn--cancel:focus,.cf-btn--danger:focus{box-shadow:inset 0 0 0 1px #621315;color:#fff}.cf-btn--disabled{cursor:default;pointer-events:none;opacity:.5}.cf-btn--disabled[title]{pointer-events:auto}.cf-btn--link{background-color:transparent;border-color:transparent;color:#2f7bbf}.cf-btn--link:hover{color:#ff7900}.cf-btn--link.cf-btn--active,.cf-btn--link:active,.cf-btn--link:focus{color:#2f7bbf}.cf-btn--facebook i,.cf-btn--twitter i{vertical-align:baseline;font-size:1.33em}.cf-btn--twitter{background-color:#00aced;border-color:#00aced;color:#fff}.cf-btn--twitter:hover{background-color:#1fc3ff;border-color:#05bcff;color:#333}.cf-btn--facebook{background-color:#3b5998;border-color:#3b5998;color:#fff}.cf-btn--facebook:hover{background-color:#4b6eb9;border-color:#4262a9;color:#fff}.cf-btn--accept,.cf-btn--cancel,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{min-height:2.425rem;width:0;overflow:hidden;padding:1.13333em;text-align:left;text-indent:-9999px;white-space:nowrap;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:subpixel-antialiased}.cf-btn--accept:after,.cf-btn--cancel:after,.cf-btn--delete:after,.cf-btn--edit:after,.cf-btn--note:after{content:"\f009";display:block;position:absolute;height:100%;width:100%;top:53%;left:0;text-align:center;text-indent:0;font-size:225em;line-height:0;speak:none;-webkit-transition-delay:.2s;transition-delay:.2s}.cf-btn--accept:after,.cf-btn--accept:before,.cf-btn--cancel:after,.cf-btn--cancel:before,.cf-btn--delete:after,.cf-btn--delete:before,.cf-btn--edit:after,.cf-btn--edit:before,.cf-btn--note:after,.cf-btn--note:before{-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.cf-btn--accept:after{content:"\f009"}.cf-btn--cancel:after{content:"\f01a"}.cf-btn--delete:after{content:"\f01a"}.cf-btn--edit:after{content:"\f019"}.cf-btn--note:after{content:"\f013"}.cf-btn--block{display:block;margin-bottom:.4rem}.cf-btn--block+.cf-btn--block{margin-left:auto}.cf-btn--loading{color:#ededed;background-color:#ededed;opacity:.8;cursor:default}.cf-btn--loading:before{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:100%;opacity:1;background:transparent url(../assets/spinner.gif) no-repeat 50%;-webkit-transform:scale(1);transform:scale(1);-webkit-animation:a .2s ease-in-out;animation:a .2s ease-in-out}.cf-btn--loading:focus{outline:none}.cf-btn--loading:focus,.cf-btn--loading:hover{background-color:#ededed;color:#ededed}@-webkit-keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.cf-callout{margin:1rem;padding:1rem;border:1px solid transparent;border-radius:2px}.cf-callout--default{background-color:#333;border-color:#333;color:#fff}.cf-callout--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-callout__content{margin-top:0}.cf-card{margin-top:1rem;margin-bottom:1rem;padding:0;border:1px solid #dedede;background-color:#fff;border-radius:2px;-webkit-transition:all .35s ease;transition:all .35s ease}.cf-card__section{display:table;table-layout:fixed;width:100%}.cf-card__section+.cf-card__section{border-top:1px solid #dedede}.cf-card__section--error{border-left:3px solid #bd2527}.cf-card__title{font-weight:400;margin-bottom:1rem}.cf-card__footer_message{font-size:.8rem;color:#7d7d7d;line-height:1.3;margin-top:1.5em}.cf-card__messages{padding-top:.5rem}.cf-card__messages .card__messages+p{margin-top:1em}.cf-card__content{padding:1.5rem}.cf-card__control{position:relative;padding:2rem;border:0 solid #dedede;border-top-width:1px;background-color:#000;background-color:rgba(0,0,0,.06);text-align:center}@media (min-width:49.2em){.cf-card__content,.cf-card__control{display:table-cell}.cf-card__control{width:40%;border-left-width:1px;border-top-width:0;vertical-align:middle}}@media (min-width:66em){.cf-card__control{width:30%}}.cf-card__toolbar{min-height:2.96666rem}.cf-card__toolbar_links{float:right}.cf-card__toolbar_link{position:relative;display:inline-block;padding:.73333rem 2em .73333rem .5rem}.cf-card__toolbar_link:after{content:"\f003";font-family:cloudflare-font;font-style:normal;font-weight:400;margin-top:-.6em;position:absolute;top:50%;right:1rem;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.cf-card__toolbar_link--open:after{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.cf-card__drawers_container{display:none}.cf-card__drawers_container--open{display:block}.cf-card__drawer--active{border-top:1px solid #dedede;padding:1.5rem}.cf-card .cf-table{margin-top:0;margin-bottom:0;border-width:0}.cf-card .cf-form{border-left-width:0;border-right-width:0}.cf-checkbox__group .cf-checkbox:first-child{margin-top:0}.cf-checkbox__group .cf-checkbox{margin-top:1em}.cf-code,.cf-code__block{background-color:#dedede;border:1px solid #d1d1d1;font-family:monaco,courier,monospace;border-radius:2px}.cf-code{display:inline-block;margin-left:.13333em;margin-right:.13333em;padding:0 .4em;vertical-align:baseline;color:#bd2527}.cf-code__block{display:block;width:100%;margin:2rem 0;padding:.5rem;font-size:.86667rem;color:#4d4d4d}.cf-code__block .cf-code{display:inherit;margin:auto;padding:auto;background:none;border:none;color:inherit}.cf-copyable-textarea{margin-top:1rem;cursor:pointer}.cf-copyable-textarea .cf-textarea{height:7rem;word-break:break-all;cursor:text;resize:none;color:#333;font-family:monaco,courier,monospace}.cf-copyable-textarea__help-text{font-size:.8em;color:#7d7d7d;margin-top:-.5em;margin-bottom:1em}.cf-dropdown{position:absolute;z-index:1;min-width:10.66667rem;margin:.5em 0 0;padding:.33333rem 0;list-style:none;background:#fff;border:1px solid #dedede;border-radius:2px;box-shadow:0 3px 10px rgba(0,0,0,.2);-webkit-animation:b .15s ease-out;animation:b .15s ease-out}.cf-dropdown:before{content:"";display:block;position:absolute;bottom:100%;border:solid transparent;border-width:10px;border-top-width:0;border-bottom-color:#fff}@-webkit-keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}@keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}.cf-dropdown--left{left:0}.cf-dropdown--left:before{left:10px}.cf-dropdown--right{right:0}.cf-dropdown--right:before{right:10px}.cf-dropdown__link{position:relative;z-index:1}.cf-dropdown__link a{display:block;padding:.2rem 1.06667rem;cursor:pointer;white-space:nowrap}.cf-dropdown__link a:hover{color:#fff;background:#2f7bbf}.cf-dropdown__link a:focus{color:#fff;background:#63a2d9}.cf-dropdown__link a:active{color:#fff;background:#112d46}.cf-dropdown__link:first-child{border-top-width:0}.cf-dropdown__separator{margin:.53333rem 0;border-top:1px solid #dedede}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:1.33333rem}@media (min-width:49.2em){.cf-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.cf-flex__item{-webkit-box-flex:1;-webkit-flex:1 0;-ms-flex:1 0;flex:1 0}.cf-flex__item--collapse{-webkit-box-flex:0;-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 auto}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:1.33333rem}}.cf-form{background:#fff;border:1px solid #dedede;box-shadow:0 1px 1px rgba(0,0,0,.05)}.cf-form__header{padding:1em}.cf-form__footer{padding:1em;border-top:1px solid #dedede;text-align:right}.cf-form__title{margin:0}.cf-form__fieldset{margin:0;padding:0;border:none;}.cf-form__fieldset:last-child{border-bottom:none}.cf-form__fieldset_legend{padding:1em;margin-bottom:0;border-bottom:none}.cf-form__fieldset_content{padding:1em;border:0 solid #dedede;border-top-width:1px;background:#eee;padding-top:0;}.cf-form__label{display:block;margin-bottom:.2em;color:#333}.cf-form .cf-checkbox,.cf-form .cf-input,.cf-form .cf-radio,.cf-form .cf-textarea{margin-bottom:0}.cf-form__label{font-size:.86667em}.cf-form__label--hidden{display:none}.cf-form__field-error{position:relative;margin-top:.2em;padding:.5em 1em;border:1px solid #9e1f21;font-size:.8em;font-weight:600;background:#bd2527;color:#fff;-webkit-font-smoothing:antialiased;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.1)}.cf-form__field-error:after,.cf-form__field-error:before{content:"";display:block;position:absolute;bottom:100%;border-style:solid;border-color:transparent}.cf-form__field-error:before{left:4px;border-width:6px;border-bottom-color:#9e1f21}.cf-form__field-error:after{left:5px;border-width:5px;border-bottom-color:#bd2527}.cf-form__field-error p{margin-top:0;margin-bottom:0}.cf-form__field-error p+p{margin-top:.5em}@media (min-width:720px){.cf-form--horizontal .cf-form__fieldset_legend{width:30%;float:left;padding:1.7em 1rem;color:#333;text-align:right}.cf-form--horizontal .cf-form__fieldset_content{width:70%;float:left;border-top-width:0;border-left-width:1px}}.cf-heading{font-weight:700}.cf-heading__caption{color:#7d7d7d;font-size:80%;margin-left:.5em}.cf-heading--1{font-size:2rem;line-height:1.2;font-weight:400}.cf-heading--2{font-size:1.6rem;line-height:1.3}.cf-heading--3{font-size:1.46667rem;line-height:1.3}.cf-heading--4{font-size:1.2rem;line-height:1.3}.cf-heading--5{font-size:1rem;line-height:1.5}.cf-heading--6{font-size:.93333rem;line-height:1.5}.cf-icon{display:inline;width:auto;height:auto;margin-top:0;line-height:normal;vertical-align:baseline;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none;background-position:0 0;background-repeat:repeat}.cf-icon:before{display:inline-block;text-decoration:inherit;speak:none}.cf-icon__label{display:inline-block;width:0;height:0;overflow:hidden}.cf-icon--border{border:1px solid #333;padding:.2em .25em .15em;border-radius:2px}.cf-icon--spin{display:inline-block;-webkit-animation:c 2s infinite linear;animation:c 2s infinite linear}@-webkit-keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.cf-icon--muted{color:#333}.cf-icon--white{color:#fff}.cf-icon--2x{font-size:2em}.cf-icon--2x.cf-icon--border{border-width:2px}.cf-icon--3x{font-size:3em}.cf-icon--3x.cf-icon--border{border-width:3px}.cf-icon--4x{font-size:4em}.cf-icon--4x.cf-icon--border{border-width:4px}.cf-icon--large{vertical-align:-10%;font-size:1.3333333333333335em}.cf-icon--xlarge{font-size:2.4em}.cf-icon--caret-up:before,.cf-icon--chevron-up:before{content:"\f000"}.cf-icon--caret-down:before,.cf-icon--chevron-down:before{content:"\f001"}.cf-icon--caret-left:before,.cf-icon--chevron-left:before{content:"\f002"}.cf-icon--caret-right:before,.cf-icon--chevron-right:before{content:"\f003"}.cf-icon--ok-sign:before{content:"\f004"}.cf-icon--exclamation-sign:before{content:"\f005"}.cf-icon--info-sign:before{content:"\f006"}.cf-icon--pause:before{content:"\f007"}.cf-icon--time:before{content:"\f008"}.cf-icon--ok:before{content:"\f009"}.cf-icon--clipboard:before{content:"\f00a"}.cf-icon--bolt:before{content:"\f00b"}.cf-icon--chart:before{content:"\f00c"}.cf-icon--drive:before{content:"\f00d"}.cf-icon--filter:before{content:"\f00e"}.cf-icon--flowchart:before{content:"\f00f"}.cf-icon--hamburger:before{content:"\f010"}.cf-icon--lock:before{content:"\f011"}.cf-icon--list:before{content:"\f012"}.cf-icon--file:before{content:"\f013"}.cf-icon--shield:before{content:"\f014"}.cf-icon--plus:before{content:"\f015"}.cf-icon--happy:before{content:"\f016"}.cf-icon--sad:before{content:"\f017"}.cf-icon--search:before{content:"\f018"}.cf-icon--wrench:before{content:"\f019"}.cf-icon--remove-sign:before,.cf-icon--remove:before{content:"\f01a"}.cf-icon--speech:before{content:"\f01b"}.cf-icon--gear:before{content:"\f01c"}.cf-icon--help:before{content:"\f01d"}.cf-icon--widen:before{content:"\f022"}.cf-icon--calendar:before{content:"\f01e"}.cf-icon--facebook:before{content:"\f01f"}.cf-icon--twitter:before{content:"\f020"}.cf-icon--googleplus:before{content:"\f021"}.cf-icon--linkedin:before{content:"\f022"}.cf-icon--resize-horizontal:before{content:"\f024"}.cf-icon--upload:before{content:"\f025"}.cf-icon--loading{background:transparent url(../assets/spinner.gif) no-repeat 50%}.cf-icon--loading:before{content:"";width:1.06733rem}.cf-icon--close:before{content:'\00D7';font-family:Open Sans,Helvetica,Arial,sans-serif}.cf-label{display:inline-block;padding:.26667em .4em;font-size:.86667rem;line-height:1rem;vertical-align:baseline;white-space:nowrap;color:#fff;font-weight:600;text-transform:uppercase;-webkit-text-stroke:0;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cf-label--default{background:#7d7d7d}.cf-label--info{background:#2f7bbf}.cf-label--success{background:#9bca3e}.cf-label--warning{background:#ff7900}.cf-label--error{background:#bd2527}.cf-layout__container{padding:0 1.5em;max-width:90%;margin:0 auto}.cf-layout__row{clear:both}.cf-layout__column{float:left}@media (max-width:49.2em){.cf-layout__container{padding:0;max-width:none}.cf-layout__column{width:100%!important;float:none}}.cf-link{color:#2f7bbf;outline:none;text-decoration:none;-webkit-transition:all .15s ease;transition:all .15s ease;cursor:pointer}.cf-link:hover{color:#ff7900}.cf-link:focus{color:#63a2d9}.cf-link:active{color:#112d46;outline:none}.cf-list{list-style-type:disc;list-style-position:outside;margin-left:3em}.cf-list--ordered{list-style-type:decimal}.cf-list--unstyled{list-style-type:none;margin-left:0}.cf-modal__backdrop-scroller{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1050;overflow:auto;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.cf-modal__backdrop-outer{position:relative;width:100%;height:100%;display:table}.cf-modal__backdrop{display:table-cell;vertical-align:middle;padding:1.5rem;background:#000;background:rgba(0,0,0,.7);-webkit-transform-origin:center;transform-origin:center}.cf-modal{position:relative;width:100%;max-width:30rem;margin:0 auto;background:#fff;-webkit-transform-origin:center;transform-origin:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:2px;box-shadow:0 1px 15px rgba(0,0,0,.75)}.cf-modal:focus{outline:none}.cf-modal__body,.cf-modal__footer,.cf-modal__header{position:relative;padding:1.5rem}.cf-modal__header+.cf-modal__body{padding-top:0}.cf-modal__title{font-weight:400;word-break:break-all;margin-bottom:.75rem}.cf-modal__title .cf-heading{font-weight:inherit}.cf-modal__close{cursor:pointer;right:1.5rem;top:1rem;position:absolute;line-height:.6}.cf-modal__footer{background-color:#ebebeb}.cf-modal__footer--simple{background-color:transparent}.cf-modal__actions{float:right}.cf-modal--confirm .cf-modal__footer{padding-top:0}.cf-transition-modal-appear .cf-modal__backdrop,.cf-transition-modal-enter .cf-modal__backdrop,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal__backdrop{background:transparent}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave .cf-modal__backdrop{background:#000;background:rgba(0,0,0,.7)}.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave-active .cf-modal__backdrop{-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.cf-transition-modal-appear .cf-modal,.cf-transition-modal-enter .cf-modal,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1);transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1)}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave .cf-modal{opacity:1;-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave-active .cf-modal{-webkit-transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease,-webkit-transform .2s ease}.cf-modal .cf-form{border-left-width:0;border-right-width:0}.cf-modal .cf-form__fieldset_legend{font-size:.86667em}.cf-notifications{margin-top:.5em;margin-bottom:.5em}.cf-notifications__item{position:relative;padding:.5rem 2.5rem;padding-right:2.5rem;border:1px solid;vertical-align:middle;-webkit-text-stroke:0;border-radius:2px;cursor:pointer;-webkit-font-smoothing:antialiased}.cf-notifications__item:before{font-family:cloudflare-font;font-size:1.25rem;position:absolute;top:50%;left:.75rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);line-height:1;vertical-align:middle}.cf-notifications__item+.cf-notifications__item{margin-top:2px}.cf-notifications__global_container{position:fixed;bottom:0;left:0;right:0;max-height:25%;overflow:auto;z-index:1100}.cf-notifications__global_container .cf-notifications{margin-top:0;margin-bottom:0}.cf-notifications__global_container .cf-notifications__item{border-radius:0;border-left-width:0;border-right-width:0;-webkit-transform-origin:bottom left;transform-origin:bottom left;-webkit-animation:d .2s ease-in-out;animation:d .2s ease-in-out}.cf-notifications__global_container .cf-notifications__item:before{-webkit-animation:e .2s ease-out;animation:e .2s ease-out}.cf-notifications__global_container .cf-notifications__item+.cf-notifications__item{margin-top:0;border-top-width:0}.cf-notifications__item_progress{position:absolute;z-index:1;top:0;bottom:0;left:0;width:100%;background:#fff;background:hsla(0,0%,100%,.1)}.cf-notifications__item_progress--active{width:0;-webkit-transition:width 0s linear;transition:width 0s linear}.cf-notifications__item_close{position:absolute;z-index:3;top:0;right:0;bottom:0;width:2.5em;cursor:pointer}.cf-notifications__item_close:hover{background:#000;background:rgba(0,0,0,.1)}.cf-notifications__item_close:before{content:'\00D7';position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:1.25rem}.cf-notifications__item_message{position:relative;z-index:2}.cf-notifications__item--success{background-color:#89b431;border-color:#89b431;color:#fff}.cf-notifications__item--success:before{content:'\f004'}.cf-notifications__item--error{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-notifications__item--error:before{content:'\f005'}.cf-notifications__item--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-notifications__item--info:before{content:'\f006'}.cf-notifications__item--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-notifications__item--warning:before{content:'\f005'}@-webkit-keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.cf-page{padding-top:2.5em;padding-bottom:1.33333rem}.cf-page__title{font-size:2rem;line-height:1.2;font-weight:400}.cf-page__subtitle{color:#7d7d7d;font-weight:300}@media (min-width:49.2em){.cf-page{padding-bottom:2.66667rem}}.cf-progress{position:relative}.cf-progress__bar{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none}.cf-progress__bar::-webkit-progress-bar{background-color:#ebebeb;color:#ebebeb}.cf-progress__bar::-webkit-progress-value{background-color:#2f7bbf;color:#2f7bbf;-webkit-transition:width .5s ease;transition:width .5s ease}.cf-progress__bar::-moz-progress-bar{background-color:#2f7bbf;color:#2f7bbf}.cf-progress__items{list-style:none;margin:0;padding:0}.cf-progress__item{float:left;height:auto;padding:0;padding-top:7.5px;color:#7d7d7d;font-size:.86667em;text-align:center;cursor:pointer}.cf-progress__item:before{content:none}.cf-progress__item .cf-link{display:block;color:inherit;cursor:pointer}.cf-progress__item--active{color:#2f7bbf}.cf-progress__item--disabled{color:#dedede;cursor:default}@media (max-width:49.2em){.cf-progress__item{display:none;width:auto!important;float:none}.cf-progress__item--active{display:block}}.cf-radio__group .cf-radio:first-child{margin-top:0}.cf-radio__group .cf-radio{margin-top:1em}.cf-table{background:#fff;border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;margin-bottom:1.5rem}.cf-table__head{background:#dedede}.cf-table__body+.cf-table__body{border-top:2px solid #dedede}.cf-table__cell{border-top:1px solid #dedede;line-height:1.5;padding:.73333rem;vertical-align:middle}.cf-table__cell--head{font-weight:600}.cf-table__cell--head:first-letter{text-transform:capitalize}.cf-table__head .cf-table__cell{vertical-align:bottom}.cf-table__row--info>.cf-table__cell{border-color:#4e96d4;background:#63a2d9}.cf-table__row--success>.cf-table__cell{border-color:#b1d567;background:#bbdb7b}.cf-table__row--warning>.cf-table__cell{border-color:#ffdf80;background:#ffe699}.cf-table__row--error>.cf-table__cell{border-color:#d83b3e;background:#dc5053}.cf-table__cell--align-left{text-align:left}.cf-table__cell--align-center{text-align:center}.cf-table__cell--align-right{text-align:right}@media (max-width:49.2em){.cf-table,.cf-table__body,.cf-table__cell,.cf-table__foot,.cf-table__head,.cf-table__row{display:block;width:100%;box-sizing:border-box}.cf-table__cell{border-top-width:0}.cf-table__cell:first-child{border-top:1px solid #dedede}}.cf-table--condensed .cf-table__cell{padding:.36667rem .86667rem}.cf-table--striped .cf-table__body>.cf-table__row--default:nth-child(odd)>.cf-table__cell{background:#fafafa}.cf-table--striped .cf-table__body>.cf-table__row--info:nth-child(odd)>.cf-table__cell{background:#5b9dd7}.cf-table--striped .cf-table__body>.cf-table__row--success:nth-child(odd)>.cf-table__cell{background:#b7d973}.cf-table--striped .cf-table__body>.cf-table__row--warning:nth-child(odd)>.cf-table__cell{background:#ffe38f}.cf-table--striped .cf-table__body>.cf-table__row--error:nth-child(odd)>.cf-table__cell{background:#db484a}.cf-table--hover .cf-table__body>.cf-table__row--default:hover>.cf-table__cell{background:#f0f0f0}.cf-table--hover .cf-table__body>.cf-table__row--info:hover>.cf-table__cell{background:#5b9dd7}.cf-table--hover .cf-table__body>.cf-table__row--success:hover>.cf-table__cell{background:#b7d973}.cf-table--hover .cf-table__body>.cf-table__row--warning:hover>.cf-table__cell{background:#ffe38f}.cf-table--hover .cf-table__body>.cf-table__row--error:hover>.cf-table__cell{background:#db484a}.cf-table--bordered{border:1px solid #dedede;border-collapse:separate;*border-collapse:collapse;border-left:0}.cf-table--bordered .cf-table__cell{border-left:1px solid #dedede}.cf-table--bordered .cf-table__body:first-child .cf-table__row:first-child .cf-table__cell,.cf-table--bordered .cf-table__head:first-child .cf-table__row:first-child .cf-table__cell{border-top:0}.cf-tabs__group{display:table;width:100%;margin:0 0 22.5px;padding:0;list-style:none}.cf-tabs__item{display:table-cell;position:relative;margin:0;padding:1.5rem 1rem;vertical-align:middle;text-align:center;background:#fff;color:#2f7bbf;cursor:pointer}.cf-tabs__item:before{content:"";display:block;position:absolute;top:100%;left:50%;height:0;width:0;margin-left:0;border:0 solid transparent;border-top-color:#2f7bbf;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-tabs__item+.cf-tabs__item{border-left:1px solid #ebebeb}.cf-tabs__item:focus{outline:none}.cf-tabs__item:focus:after{content:"";display:block;position:absolute;top:0;bottom:0;left:0;right:0}.cf-tabs__item:hover{background:#e6e6e6;color:#2f7bbf}.cf-tabs__item.cf-tabs__item--active,.cf-tabs__item:active{background:#2f7bbf;color:#fff}.cf-tabs__item.cf-tabs__item--active:before,.cf-tabs__item:active:before{border-width:16px;margin-left:-16px}.cf-text--normal{font-size:1rem;font-weight:400}.cf-text--small{font-size:.8em;line-height:1.3}.cf-text--start{text-align:left}.cf-text--center{text-align:center}.cf-text--justify{text-align:justify}.cf-text--end{text-align:right}.cf-text--capitalize{text-transform:capitalize}.cf-text--titlecase:first-word{text-transform:capitalize}.cf-text--lowercase{text-transform:lowercase}.cf-text--uppercase{text-transform:uppercase}.cf-text--info{color:#2f7bbf}.cf-text--success{color:#9bca3e}.cf-text--warning{color:#ff7900}.cf-text--error{color:#bd2527}.cf-text--muted{color:#7d7d7d}.cf-textarea{width:100%}.cf-toggle{display:block;position:relative;height:2.26667rem;width:5.334rem;border-radius:2px;border:1px solid #aaa;cursor:pointer}.cf-toggle:after,.cf-toggle:before{display:block;position:absolute;top:0;bottom:0;width:50%;line-height:2.26667rem;text-align:center}.cf-toggle:before{content:"On";left:0;background:#9bca3e;color:#fff}.cf-toggle:after{content:"Off";right:0;background:gray;color:#fff}.cf-toggle__handle{display:block;position:absolute;z-index:1;top:0;bottom:0;left:0;width:50%;border:inherit;border-width:0;border-right-width:inherit;background:#fff;-webkit-transition:left .1s ease;transition:left .1s ease}.cf-toggle--active .cf-toggle__handle{border-right-width:0;border-left-width:inherit;left:50%}.tooltip{position:absolute;display:none;max-width:100%;max-height:100%}.tooltip-open{display:block}.tooltip-content{position:relative;padding:.5rem 1rem;font-size:.8rem;font-family:inherit;background:#000;color:#fff;border-radius:2px}.tooltip-content:before{content:"";display:block;position:absolute;width:0;height:0;border:5px solid transparent}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content:before{top:100%;left:50%;margin-left:-5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content:before{bottom:100%;left:50%;margin-left:-5px;border-bottom-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content{margin-right:5px}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content:before{left:100%;top:50%;margin-top:-5px;border-left-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content{margin-left:5px}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content:before{right:100%;top:50%;margin-top:-5px;border-right-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;left:5px;border-bottom-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;right:5px;border-bottom-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content:before{top:100%;left:5px;border-top-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content:before{top:100%;right:5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{top:5px;left:100%;border-left-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{top:5px;right:100%;border-right-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{bottom:5px;left:100%;border-left-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{bottom:5px;right:100%;border-right-color:#000} /*# sourceMappingURL=components.css.map */ diff --git a/webpack.config.js b/webpack.config.js index e1ac919..a20445b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,8 +3,9 @@ var webpack = require('webpack'); var isDev = process.env.NODE_ENV !== 'production'; var plugins = []; -if(!isDev) { - plugins.push(new webpack.optimize.UglifyJsPlugin({ +if (!isDev) { + plugins.push( + new webpack.optimize.UglifyJsPlugin({ compress: isDev, mangle: false }) @@ -12,11 +13,11 @@ if(!isDev) { } module.exports = { - entry: "./src/index.js", + entry: './src/index.js', devtool: isDev ? 'cheap-module-source-map' : false, output: { path: __dirname, - filename: "compiled.js" + filename: 'compiled.js' }, watch: isDev, module: { @@ -24,17 +25,9 @@ module.exports = { { test: /\.js$/, exclude: /node_modules/, - loader: 'babel-loader', - }, - { - test: /\.js$/, - exclude: /node_modules/, - enforce: 'pre', - use: [{ - loader: 'eslint-loader', - }], + loader: 'babel-loader' } ] }, plugins: plugins -}; \ No newline at end of file +}; diff --git a/yarn.lock b/yarn.lock index d191270..976717f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,10 +51,14 @@ acorn@^5.0.0, acorn@^5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" -ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: +ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +ajv-keywords@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" + ajv@^4.7.0, ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -62,6 +66,15 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.1.5: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.0.tgz#c1735024c5da2ef75cc190713073d44f098bf486" + dependencies: + co "^4.6.0" + fast-deep-equal "^0.1.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -698,7 +711,7 @@ babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.18.0, babel-runtime@^6.22.0: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -784,6 +797,10 @@ boom@2.x.x: dependencies: hoek "2.x.x" +bowser@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.7.0.tgz#169de4018711f994242bff9a8009e77a1f35e003" + brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" @@ -860,6 +877,13 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" +browserslist@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" + dependencies: + caniuse-lite "^1.0.30000670" + electron-to-chromium "^1.3.11" + bser@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" @@ -888,7 +912,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -924,6 +948,14 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +caniuse-db@1.0.30000671: + version "1.0.30000671" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000671.tgz#9f071bbc7b96994638ccbaf47829d58a1577a8ed" + +caniuse-lite@^1.0.30000670: + version "1.0.30000686" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000686.tgz#d9d9ec6110e5533be544a689003f7596532c67d3" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -935,6 +967,15 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +cf-component-box@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cf-component-box/-/cf-component-box-2.2.1.tgz#05bc4bf26f5749c9183aea5d646ace140a16c5cb" + dependencies: + cf-style-const "^1.4.2" + cf-style-container "^1.2.0" + polished "^1.0.2" + prop-types "^15.5.8" + cf-component-button@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cf-component-button/-/cf-component-button-3.0.0.tgz#2c7eeecee5924a3674a374e13fd1eaaad1353309" @@ -1087,6 +1128,41 @@ cf-component-viewport@^2.2.1: prop-types "^15.5.8" react-responsive "^1.1.3" +cf-style-const@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/cf-style-const/-/cf-style-const-1.4.2.tgz#341f3c32ea404c2fad97f9518c4bce553ac8d7b1" + dependencies: + polished "^1.0.2" + +cf-style-container@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cf-style-container/-/cf-style-container-1.2.0.tgz#df25dc1b538a377784ff0e7a2e8eee6681986be1" + dependencies: + fela "^5.0.0" + merge-options "0.0.64" + prop-types "^15.5.8" + react-fela "^5.0.0" + +cf-style-provider@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cf-style-provider/-/cf-style-provider-1.5.0.tgz#a791a002bb45c1df2a315c46f304948fc79a36fa" + dependencies: + cf-style-const "^1.4.2" + cf-style-container "^1.2.0" + cssbeautify "^0.3.1" + fela "^5.0.0" + fela-beautifier "^5.0.0" + fela-monolithic "^5.0.0" + fela-plugin-embedded "^5.0.0" + fela-plugin-fallback-value "^5.0.0" + fela-plugin-lvha "^5.0.0" + fela-plugin-prefixer "^5.0.0" + fela-plugin-unit "^5.0.0" + fela-plugin-validator "^5.0.0" + inline-style-prefixer "^3.0.5" + prop-types "^15.5.8" + react-fela "^5.0.0" + cf-util-http@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/cf-util-http/-/cf-util-http-2.0.1.tgz#2e3a6f53fef3d45dd51982f0380add32996b13da" @@ -1157,6 +1233,13 @@ cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" +cli@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + dependencies: + exit "0.1.2" + glob "^7.1.1" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1217,7 +1300,7 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -console-browserify@^1.1.0: +console-browserify@1.1.x, console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" dependencies: @@ -1231,6 +1314,10 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + content-type-parser@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" @@ -1311,10 +1398,20 @@ crypto-browserify@^3.11.0: public-encrypt "^4.0.0" randombytes "^2.0.0" +css-in-js-utils@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-1.0.3.tgz#9ac7e02f763cf85d94017666565ed68a5b5f3215" + dependencies: + hyphenate-style-name "^1.0.2" + css-mediaquery@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" +cssbeautify@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cssbeautify/-/cssbeautify-0.3.1.tgz#12dd1f734035c2e6faca67dcbdcef74e42811397" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" @@ -1355,6 +1452,12 @@ debug@2, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: dependencies: ms "2.0.0" +debug@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1422,6 +1525,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + doctrine@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" @@ -1429,16 +1539,48 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + +domutils@1.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" +electron-to-chromium@^1.3.11: + version "1.3.14" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz#64af0f9efd3c3c6acd57d71f83b49ca7ee9c4b43" + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -1470,6 +1612,10 @@ enhanced-resolve@^3.0.0: object-assign "^4.0.1" tapable "^0.2.5" +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" @@ -1562,6 +1708,14 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + eslint-loader@^1.6.1: version "1.7.1" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.7.1.tgz#50b158dd6272dcefb97e984254837f81a5802ce0" @@ -1573,6 +1727,53 @@ eslint-loader@^1.6.1: object-hash "^1.1.4" rimraf "^2.6.1" +eslint-module-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + dependencies: + debug "2.2.0" + pkg-dir "^1.0.0" + +eslint-plugin-cflint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-cflint/-/eslint-plugin-cflint-1.0.0.tgz#84eb9b3c5a707793f83ea2c98f74b8684c0d76be" + +eslint-plugin-compat@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-compat/-/eslint-plugin-compat-1.0.3.tgz#0019e34eebb4512de6dc0351349bc132a322d292" + dependencies: + babel-runtime "^6.23.0" + browserslist "2.1.4" + caniuse-db "1.0.30000671" + requireindex "^1.1.0" + +eslint-plugin-import@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.3.0.tgz#37c801e0ada0e296cbdf20c3f393acb5b52af36b" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + +eslint-plugin-json@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-1.2.0.tgz#9ba73bb0be99d50093e889f5b968463d2a30efae" + dependencies: + jshint "^2.8.0" + +eslint-plugin-mocha@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-4.10.1.tgz#c63ccb83933bdb01d2bef922332dc4c44b30f3f8" + dependencies: + ramda "^0.24.1" + eslint-plugin-prettier@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.1.1.tgz#2fb7e2ab961f2b61d2c8cf91bc17716ca8c53868" @@ -1580,6 +1781,14 @@ eslint-plugin-prettier@^2.0.0: fast-diff "^1.1.1" jest-docblock "^20.0.1" +eslint-plugin-react@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^1.4.1" + eslint@^3.4.0: version "3.19.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" @@ -1695,6 +1904,10 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" +exit@0.1.2, exit@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -1721,6 +1934,10 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +fast-deep-equal@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d" + fast-diff@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.1.tgz#0aea0e4e605b6a2189f0e936d4b7fbaf1b7cfd9b" @@ -1753,6 +1970,89 @@ fbjs@^0.8.4, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fela-beautifier@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-beautifier/-/fela-beautifier-5.0.1.tgz#92177dbfc65129ee59d6391730e46e0cf733c2a7" + dependencies: + cssbeautify "^0.3.1" + fela-utils "^5.0.1" + +fela-dom@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/fela-dom/-/fela-dom-5.0.2.tgz#8c10ce9ff2872eece4eb27fcbf5950eba1c76afa" + dependencies: + fela-tools "^5.0.1" + fela-utils "^5.0.1" + +fela-monolithic@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-monolithic/-/fela-monolithic-5.0.1.tgz#07ae241294e2d857b192377457126c4b9c64600a" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-plugin-embedded@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/fela-plugin-embedded/-/fela-plugin-embedded-5.0.2.tgz#462f01591f021360c13624fb2726891ec19f1c28" + dependencies: + fela-utils "^5.0.1" + +fela-plugin-fallback-value@^5.0.0, fela-plugin-fallback-value@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-fallback-value/-/fela-plugin-fallback-value-5.0.1.tgz#38bd2f926b34a077bf8f03a8eba0b85345edcbc5" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-plugin-lvha@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-lvha/-/fela-plugin-lvha-5.0.1.tgz#ea0d32dfd7e882a766ac1a791859975fd8f11fbc" + dependencies: + fela-utils "^5.0.1" + +fela-plugin-prefixer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-prefixer/-/fela-plugin-prefixer-5.0.1.tgz#a65127af265135e132193cd486fd1de22332a6a8" + dependencies: + css-in-js-utils "^1.0.3" + fela-plugin-fallback-value "^5.0.1" + fela-utils "^5.0.1" + inline-style-prefixer "^3.0.0" + +fela-plugin-unit@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-unit/-/fela-plugin-unit-5.0.1.tgz#39b7fcaba5c59cebb29168d507eb3e38922a86b0" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-plugin-validator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-validator/-/fela-plugin-validator-5.0.1.tgz#1ed6d4cb302576c5ca8d20e7421a826aeaf97fe7" + dependencies: + fela-utils "^5.0.1" + +fela-tools@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-tools/-/fela-tools-5.0.1.tgz#3cb93239c39cb574b6d6b43a718178ff3173dde4" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-utils/-/fela-utils-5.0.1.tgz#d65dc24bd093442c89d5bdd7d8ffeace82b608ee" + dependencies: + css-in-js-utils "^1.0.3" + +fela@^5.0.0, fela@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela/-/fela-5.0.1.tgz#768a78d019021f9b6eb1518773b70668569c187f" + dependencies: + css-in-js-utils "^1.0.3" + fela-tools "^5.0.1" + fela-utils "^5.0.1" + figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -1803,7 +2103,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: @@ -1888,6 +2188,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1949,7 +2253,7 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2018,6 +2322,12 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -2081,6 +2391,16 @@ html-encoding-sniffer@^1.0.1: dependencies: whatwg-encoding "^1.0.1" +htmlparser2@3.8.x: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -2093,7 +2413,7 @@ https-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" -hyphenate-style-name@^1.0.0: +hyphenate-style-name@^1.0.0, hyphenate-style-name@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" @@ -2140,6 +2460,13 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +inline-style-prefixer@^3.0.0, inline-style-prefixer@^3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.6.tgz#b27fe309b4168a31eaf38c8e8c60ab9e7c11731f" + dependencies: + bowser "^1.6.0" + css-in-js-utils "^1.0.3" + inquirer@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" @@ -2293,6 +2620,10 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -2683,10 +3014,27 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +jshint@^2.8.0: + version "2.9.4" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.4.tgz#5e3ba97848d5290273db514aee47fe24cf592934" + dependencies: + cli "~1.0.0" + console-browserify "1.1.x" + exit "0.1.x" + htmlparser2 "3.8.x" + lodash "3.7.x" + minimatch "~3.0.2" + shelljs "0.3.x" + strip-json-comments "1.0.x" + json-loader@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" +json-schema-traverse@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.0.tgz#0016c0b1ca1efe46d44d37541bcdfc19dcfae0db" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -2722,6 +3070,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" +jsx-ast-utils@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2765,6 +3117,15 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + loader-fs-cache@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" @@ -2785,7 +3146,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2: +loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -2808,10 +3169,18 @@ lodash.assign@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + lodash.pickby@^4.0.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" +lodash@3.7.x: + version "3.7.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" + lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -2863,6 +3232,12 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +merge-options@0.0.64: + version "0.0.64" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-0.0.64.tgz#cbe04f594a6985eaf27f7f8f0b2a3acf6f9d562d" + dependencies: + is-plain-obj "^1.1.0" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -2918,7 +3293,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -2938,6 +3313,10 @@ mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: dependencies: minimist "0.0.8" +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3210,6 +3589,12 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + pbkdf2@^3.0.3: version "3.0.12" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" @@ -3252,6 +3637,10 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +polished@^1.0.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/polished/-/polished-1.1.3.tgz#8f0f4b4c82eb7e33b0862487a8d07bd897b5392f" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3361,6 +3750,10 @@ raf@^3.1.0: dependencies: performance-now "^2.1.0" +ramda@^0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -3397,6 +3790,14 @@ react-dom@^15.5.4: object-assign "^4.1.0" prop-types "~15.5.7" +react-fela@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-fela/-/react-fela-5.0.3.tgz#04f3f17b0039c8482adddc7df61c69221f3d9ee1" + dependencies: + fela "^5.0.1" + fela-dom "^5.0.2" + prop-types "^15.5.8" + react-gateway@^2.0.4, react-gateway@^2.2.0: version "2.7.0" resolved "https://registry.yarnpkg.com/react-gateway/-/react-gateway-2.7.0.tgz#64bb3e8f8b7c6bf9f26ff3bf08a9946a5af4836e" @@ -3508,6 +3909,13 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -3516,6 +3924,14 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + readable-stream@1.0.27-1: version "1.0.27-1" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" @@ -3525,6 +3941,15 @@ readable-stream@1.0.27-1: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.2.9" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" @@ -3570,6 +3995,10 @@ redux-logger@^2.6.1: dependencies: deep-diff "0.3.4" +redux-mock-store@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.2.3.tgz#1b3ad299da91cb41ba30d68e3b6f024475fb9e1b" + redux-thunk@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-1.0.3.tgz#778aa0099eea0595031ab6b39165f6670d8d26bd" @@ -3684,6 +4113,10 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" +requireindex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -3776,6 +4209,10 @@ sha.js@^2.4.0, sha.js@^2.4.8: dependencies: inherits "^2.0.1" +shelljs@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" + shelljs@^0.7.5: version "0.7.7" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" @@ -3806,9 +4243,9 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -source-list-map@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-support@^0.4.2: version "0.4.15" @@ -3937,6 +4374,10 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-json-comments@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -4105,7 +4546,7 @@ uc.micro@^1.0.1, uc.micro@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" -uglify-js@^2.6, uglify-js@^2.8.27: +uglify-js@^2.6: version "2.8.27" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" dependencies: @@ -4118,6 +4559,13 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +uglifyjs-webpack-plugin@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.4.tgz#7829c50ee5a5b755969d4458357ed5a2dd36fbbd" + dependencies: + source-map "^0.5.6" + webpack-sources "^1.0.1" + uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -4200,37 +4648,38 @@ webidl-conversions@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" -webpack-sources@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" +webpack-sources@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" dependencies: - source-list-map "^1.1.1" + source-list-map "^2.0.0" source-map "~0.5.3" -webpack@^2.2.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.0.tgz#7e650a92816abff5db5f43316b0b8b19b13d76c1" +webpack@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.0.0.tgz#ee9bcebf21247f7153cb410168cab45e3a59d4d7" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" - ajv "^4.7.0" - ajv-keywords "^1.1.1" + ajv "^5.1.5" + ajv-keywords "^2.0.0" async "^2.1.2" enhanced-resolve "^3.0.0" + escope "^3.6.0" interpret "^1.0.0" json-loader "^0.5.4" json5 "^0.5.1" loader-runner "^2.3.0" - loader-utils "^0.2.16" + loader-utils "^1.1.0" memory-fs "~0.4.1" mkdirp "~0.5.0" node-libs-browser "^2.0.0" source-map "^0.5.3" supports-color "^3.1.0" tapable "~0.2.5" - uglify-js "^2.8.27" + uglifyjs-webpack-plugin "^0.4.4" watchpack "^1.3.1" - webpack-sources "^0.2.3" + webpack-sources "^1.0.1" yargs "^6.0.0" whatwg-encoding@^1.0.1: