diff --git a/.gitignore b/.gitignore index e376fe0..967840f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,48 @@ -core/l/* \ No newline at end of file +core/l/* +# Production secrets — copy from .example, fill in, never commit. +application/settings/config/settings.production.ini +application/settings/config/settings.staging.ini +application/module/ai/settings/ai.production.ini +application/module/ai/settings/ai.staging.ini +application/module/ai/cache/ + +# IDE / editor metadata +.idea/ +.vscode/ +*.iml +.fleet/ + +# OS noise +.DS_Store +Thumbs.db + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Node / JS dependencies +node_modules/ + +# Build outputs +dist/ +.astro/ +.next/ +.cache/ + +# Smarty compile / cache (regenerated at runtime) +application/view/templates_c/ +application/view/cache/ + +# Test artefacts +.playwright-mcp/ + +# IDE / file-recovery dumps (JetBrains) +.fr-* +docs2/ + +# Local-only experiments +docs.bak/ +*.local diff --git a/application/controller/loginController.php b/application/controller/loginController.php new file mode 100644 index 0000000..d58a777 --- /dev/null +++ b/application/controller/loginController.php @@ -0,0 +1,70 @@ +acl = new Acl(); + $this->user = new User(); + $this->user->validate(); + $this->page = Router::getInstance()->currentPage(); + if(!$this->user->checkForStandardUser()) + { + $this->user->loadUser(); + $this->user->createStandardUser(); + } + $this->navigation = JsonNavigation::getInstance()->loadCompleteNavigation("main"); + } + public function pageAction() + { + // TODO: Implement pageAction() method. + } + + public function navigationAction() + { + View::assign([ + 'navigation' => $this->navigation, + 'current_path' => $_SERVER['REQUEST_URI'] + ]); + } + + public function authAction() + { + if(!$this->user->isAuthorized()) + { + View::assign([ + 'loginForm' => $this->user->loginForm() + ]); + } + else + { + View::forwardTo('/index'); + } + } + + public function logoutAction() + { + $this->user->revokeAuthorized(); + View::forwardTo('/login'); + } +} diff --git a/application/module/ai/ai.php b/application/module/ai/ai.php new file mode 100644 index 0000000..6937f47 --- /dev/null +++ b/application/module/ai/ai.php @@ -0,0 +1,134 @@ +chat()->ask('Explain the dispatcher in two sentences.'); + * + * $rag = $ai->rag('docs'); + * $rag->ingest(__DIR__ . '/../../view/templates/'); + * echo $rag->ask('Where is the login form built?'); + * + * $agent = $ai->agent()->withTools([ + * new Plugins\Tools\PdoQuery(), + * new Plugins\Tools\HttpGet(), + * ]); + * echo $agent->run('How many active users do we have?'); + * + * Configuration in application/module/ai/settings/ai.ini. + * + * @author Stephan Kasdorf + * @license BSD + */ + +use Nibiru\Module\Ai\Interfaces; +use Nibiru\Module\Ai\Traits; +use Nibiru\Module\Ai\Plugins; +use Nibiru\Registry; +use SplSubject; +use SplObserver; +use SplObjectStorage; + +class Ai implements Interfaces\Ai, SplSubject +{ + use Traits\Ai; + + const CONFIG_MODULE_NAME = 'ai'; + + /** @var \stdClass module config from settings/ai.ini */ + protected static ?\stdClass $aiRegistry = null; + + /** @var SplObjectStorage observer storage */ + protected SplObjectStorage $observers; + + /** @var Plugins\Chat|null lazy chat plugin */ + protected ?Plugins\Chat $chatPlugin = null; + + /** @var Plugins\Embed|null lazy embed plugin */ + protected ?Plugins\Embed $embedPlugin = null; + + /** @var array RAG instances keyed by collection name */ + protected array $ragInstances = []; + + public function __construct() + { + $this->setAiRegistry(); + $this->observers = new SplObjectStorage(); + } + + public function attach(SplObserver $observer): void + { + $this->observers->attach($observer); + } + + public function detach(SplObserver $observer): void + { + $this->observers->detach($observer); + } + + public function notify(): void + { + foreach ($this->observers as $observer) { + $observer->update($this); + } + } + + /** + * Get a chat-completion plugin. + */ + public function chat(): Plugins\Chat + { + return $this->chatPlugin ??= new Plugins\Chat($this->config()); + } + + /** + * Get an embedding plugin. + */ + public function embed(): Plugins\Embed + { + return $this->embedPlugin ??= new Plugins\Embed($this->config()); + } + + /** + * Get a named RAG (Retrieval-Augmented Generation) collection. Each + * collection has its own on-disk JSON vector index, so you can have + * one RAG over your docs, another over your error logs, another over + * customer-support tickets, all in the same app. + */ + public function rag(string $collection = 'default'): Plugins\Rag + { + return $this->ragInstances[$collection] ??= new Plugins\Rag( + $collection, + $this->config(), + $this->chat(), + $this->embed() + ); + } + + /** + * Get an agent with optional tools attached. Agents call the LLM + * iteratively with tool-call decoding until they hit a terminal answer. + */ + public function agent(): Plugins\Agent + { + return new Plugins\Agent($this->config(), $this->chat()); + } + + /** + * The active config (a stdClass populated from settings/ai.ini). + */ + public function config(): \stdClass + { + return self::$aiRegistry; + } + + protected function setAiRegistry(): void + { + if (self::$aiRegistry === null) { + $cfg = Registry::getInstance()->loadModuleConfigByName(self::CONFIG_MODULE_NAME); + self::$aiRegistry = $cfg ?: new \stdClass(); + } + } +} diff --git a/application/module/ai/interfaces/ai.php b/application/module/ai/interfaces/ai.php new file mode 100644 index 0000000..e0224a1 --- /dev/null +++ b/application/module/ai/interfaces/ai.php @@ -0,0 +1,13 @@ +agent()->withTools([ + * new Plugin\Tools\PdoQuery(), + * new Plugin\Tools\HttpGet(), + * new Plugin\Tools\FileRead(), + * ]); + * echo $agent->run('How many active users do we have?'); + * + * Tool-call protocol uses a simple JSON sentinel — no model-specific + * tool-calling APIs needed, so it works on every Ollama model. Models that + * support native tool-calling can be plugged in via a subclass override + * of {@link parseToolCall()}. + */ +class Agent +{ + protected \stdClass $cfg; + protected Chat $chat; + + /** @var Tool[] */ + protected array $tools = []; + + /** @var array */ + protected array $trace = []; + + public function __construct(\stdClass $cfg, Chat $chat) + { + $this->cfg = $cfg; + $this->chat = $chat; + } + + /** @param Tool[] $tools */ + public function withTools(array $tools): self + { + $this->tools = $tools; + return $this; + } + + /** + * Run the agent against a task. Returns the final answer text. + */ + public function run(string $task): string + { + $maxIter = (int) ($this->cfg->agent_max_iterations ?? 6); + $this->trace = []; + + $system = $this->systemPrompt(); + $this->chat->reset()->system($system)->user($task); + + for ($step = 1; $step <= $maxIter; $step++) { + $reply = $this->chat->complete(); + $call = $this->parseToolCall($reply); + + if ($call === null) { + // Final answer — no tool call detected. + return $this->stripFinalMarker($reply); + } + + $tool = $this->findTool($call['tool']); + if ($tool === null) { + $obs = "ERROR: no tool named \"{$call['tool']}\". Available: " + . implode(', ', array_map(fn($t) => $t->name(), $this->tools)); + } else { + try { + $obs = (string) $tool->execute($call['args']); + } catch (\Throwable $e) { + $obs = 'ERROR: ' . $e->getMessage(); + } + } + + $this->trace[] = ['step' => $step, 'action' => json_encode($call), 'observation' => $obs]; + + // Feed the observation back into the conversation. + $this->chat->user("Observation:\n" . $obs . "\n\nContinue."); + } + + return $this->chat->complete(); // final attempt after max iterations + } + + /** + * @return array + */ + public function trace(): array + { + return $this->trace; + } + + // ----------------------------------------------------------------------- + // Internals + // ----------------------------------------------------------------------- + + protected function systemPrompt(): string + { + $toolBlock = ''; + foreach ($this->tools as $t) { + $toolBlock .= $t->asPrompt() . "\n\n"; + } + + return <<", "args": { ... }} +``` + +After you receive the observation, decide whether to call another tool or to +produce a final answer. When done, write the final answer prefixed with +"FINAL:" on its own paragraph. Do not call a tool and produce a final answer +in the same turn. + +Available tools: + +$toolBlock +Be concise. Prefer real tool data over guesses. If a tool errors twice, give a +final answer that says you couldn't find out, and why. +PROMPT; + } + + /** + * Look for a ```tool { ... }``` JSON block. Returns null if absent. + * + * @return array{tool:string,args:array}|null + */ + protected function parseToolCall(string $reply): ?array + { + if (preg_match('/```(?:tool|json)\s*\n(.*?)\n```/s', $reply, $m)) { + $decoded = json_decode($m[1], true); + if (is_array($decoded) && isset($decoded['tool'])) { + return [ + 'tool' => (string) $decoded['tool'], + 'args' => is_array($decoded['args'] ?? null) ? $decoded['args'] : [], + ]; + } + } + // Fallback: explicit final marker + if (preg_match('/^FINAL:\s*/m', $reply)) return null; + // No tool call detected — treat as final. + return null; + } + + protected function stripFinalMarker(string $reply): string + { + return preg_replace('/^FINAL:\s*/m', '', $reply) ?? $reply; + } + + protected function findTool(string $name): ?Tool + { + foreach ($this->tools as $t) { + if ($t->name() === $name) return $t; + } + return null; + } +} diff --git a/application/module/ai/plugins/chat.php b/application/module/ai/plugins/chat.php new file mode 100644 index 0000000..a35595f --- /dev/null +++ b/application/module/ai/plugins/chat.php @@ -0,0 +1,114 @@ +chat()->ask('How do I scaffold a module?'); + * + * // Multi-turn: + * $chat = $ai->chat(); + * $chat->user('How do I scaffold a module?'); + * $chat->user('And add Graylog hooks?'); + * echo $chat->complete(); + * + * // Custom system + model: + * echo $ai->chat() + * ->system('Answer in German.') + * ->user('Explain MMVC.') + * ->model('qwen2.5-coder:14b') + * ->complete(); + */ +class Chat +{ + protected \stdClass $cfg; + protected Ollama $ollama; + + /** @var array */ + protected array $messages = []; + + protected ?string $modelOverride = null; + protected ?float $temperature = null; + protected ?int $maxTokens = null; + protected ?string $systemPrompt = null; + + public function __construct(\stdClass $cfg) + { + $this->cfg = $cfg; + $this->ollama = new Ollama($cfg); + $this->systemPrompt = $cfg->chat_system_prompt ?? null; + } + + public function system(string $prompt): self { $this->systemPrompt = $prompt; return $this; } + public function model(string $name): self { $this->modelOverride = $name; return $this; } + public function temperature(float $t): self { $this->temperature = $t; return $this; } + public function maxTokens(int $n): self { $this->maxTokens = $n; return $this; } + + public function user(string $content): self { $this->messages[] = ['role' => 'user', 'content' => $content]; return $this; } + public function assistant(string $content): self { $this->messages[] = ['role' => 'assistant', 'content' => $content]; return $this; } + + /** + * Execute the chat call and return the assistant's reply text. + * Appends the reply to the message history. + */ + public function complete(): string + { + $apiMessages = []; + if ($this->systemPrompt) { + $apiMessages[] = ['role' => 'system', 'content' => $this->systemPrompt]; + } + foreach ($this->messages as $m) { + $apiMessages[] = $m; + } + + $model = $this->modelOverride + ?? ($this->cfg->chat_model ?? 'qwen2.5-coder:14b'); + $fallback = $this->cfg->chat_fallback_model ?? null; + + $opts = [ + 'temperature' => $this->temperature ?? (float) ($this->cfg->chat_temperature ?? 0.4), + 'num_predict' => $this->maxTokens ?? (int) ($this->cfg->chat_max_tokens ?? 1024), + ]; + + try { + $res = $this->ollama->chat($model, $apiMessages, $opts); + } catch (\RuntimeException $e) { + if ($fallback && $fallback !== $model) { + $res = $this->ollama->chat($fallback, $apiMessages, $opts); + } else { + throw $e; + } + } + + $text = $res['message']['content'] ?? ''; + $this->assistant($text); + return $text; + } + + /** + * One-shot helper — append a user message, complete, return reply. + */ + public function ask(string $question): string + { + $this->user($question); + return $this->complete(); + } + + /** + * Reset the conversation (keeps system prompt + model override). + */ + public function reset(): self + { + $this->messages = []; + return $this; + } + + /** + * @return array the conversation + */ + public function history(): array + { + return $this->messages; + } +} diff --git a/application/module/ai/plugins/embed.php b/application/module/ai/plugins/embed.php new file mode 100644 index 0000000..b9a061f --- /dev/null +++ b/application/module/ai/plugins/embed.php @@ -0,0 +1,83 @@ +embed()->one('hello world'); // float[] + * $vecs = $ai->embed()->batch(['a', 'b', 'c']); // float[][] + * $sim = \Nibiru\Module\Ai\Plugins\Embed::cosine($a, $b); // 0..1 + */ +class Embed +{ + protected \stdClass $cfg; + protected Ollama $ollama; + + public function __construct(\stdClass $cfg) + { + $this->cfg = $cfg; + $this->ollama = new Ollama($cfg); + } + + /** + * Embed a single string. Returns a flat float[]. + */ + public function one(string $text): array + { + $model = $this->cfg->embed_model ?? 'nomic-embed-text'; + $res = $this->ollama->embed($model, $text); + if (!isset($res['embedding']) || !is_array($res['embedding'])) { + throw new \RuntimeException('Ollama embed: no `embedding` in response.'); + } + return array_map('floatval', $res['embedding']); + } + + /** + * Embed many strings. Sequential under the hood (Ollama embeddings + * endpoint is single-input), but rate-limited by config. + */ + public function batch(array $texts): array + { + $out = []; + foreach ($texts as $t) { + $out[] = $this->one((string) $t); + } + return $out; + } + + /** + * Cosine similarity between two equal-length vectors. Returns 0–1. + */ + public static function cosine(array $a, array $b): float + { + $dot = 0.0; + $na = 0.0; + $nb = 0.0; + $len = min(count($a), count($b)); + for ($i = 0; $i < $len; $i++) { + $dot += $a[$i] * $b[$i]; + $na += $a[$i] * $a[$i]; + $nb += $b[$i] * $b[$i]; + } + $denom = sqrt($na) * sqrt($nb); + return $denom === 0.0 ? 0.0 : $dot / $denom; + } + + /** + * Pack a vector to a base64 string for compact storage in JSON. + */ + public static function pack(array $vec): string + { + return base64_encode(pack('f*', ...$vec)); + } + + /** + * Inverse of pack(). + */ + public static function unpack(string $b64): array + { + $bin = base64_decode($b64, true); + if ($bin === false) return []; + return array_values(unpack('f*', $bin)); + } +} diff --git a/application/module/ai/plugins/ollama.php b/application/module/ai/plugins/ollama.php new file mode 100644 index 0000000..9a85c7c --- /dev/null +++ b/application/module/ai/plugins/ollama.php @@ -0,0 +1,172 @@ +baseUrl = rtrim((string) ($cfg->ollama_base_url ?? 'http://localhost:11434'), '/'); + $this->timeout = (int) ($cfg->ollama_timeout ?? 90); + $this->retries = (int) ($cfg->ollama_retries ?? 1); + } + + /** + * POST /api/chat — synchronous, non-streaming. + * + * @param string $model e.g. "nibiru-coder:1.0" + * @param array $messages [{role: 'user'|'assistant'|'system', content: '...'}] + * @param array $options {temperature, num_predict, top_p, ...} + * @return array decoded JSON response + */ + public function chat(string $model, array $messages, array $options = []): array + { + return $this->post('/api/chat', [ + 'model' => $model, + 'messages' => $messages, + 'stream' => false, + 'options' => $options, + ]); + } + + /** + * POST /api/embeddings — single input. + * + * @return array{embedding: float[]} + */ + public function embed(string $model, string $prompt): array + { + return $this->post('/api/embeddings', [ + 'model' => $model, + 'prompt' => $prompt, + ]); + } + + /** + * POST /api/generate — single-prompt completion (no chat structure). + */ + public function generate(string $model, string $prompt, array $options = []): array + { + return $this->post('/api/generate', [ + 'model' => $model, + 'prompt' => $prompt, + 'stream' => false, + 'options' => $options, + ]); + } + + /** + * GET /api/tags — list available models. + */ + public function listModels(): array + { + return $this->get('/api/tags'); + } + + /** + * GET /api/ps — list currently-loaded models. + */ + public function listLoaded(): array + { + return $this->get('/api/ps'); + } + + /** + * POST /api/pull — pull a model onto the Ollama server. + */ + public function pull(string $name): array + { + return $this->post('/api/pull', ['name' => $name, 'stream' => false]); + } + + /** + * POST /api/create — register a custom model from a Modelfile. + */ + public function create(string $name, string $modelfile): array + { + return $this->post('/api/create', [ + 'name' => $name, + 'modelfile' => $modelfile, + 'stream' => false, + ]); + } + + // ----------------------------------------------------------------------- + // HTTP helpers + // ----------------------------------------------------------------------- + + protected function post(string $path, array $body): array + { + $url = $this->baseUrl . $path; + $payload = json_encode($body, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + return $this->withRetries(function () use ($url, $payload) { + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $payload, + CURLOPT_HTTPHEADER => ['Content-Type: application/json'], + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => $this->timeout, + CURLOPT_CONNECTTIMEOUT => 10, + ]); + $body = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $err = curl_error($ch); + curl_close($ch); + if ($body === false) { + throw new \RuntimeException("Ollama transport error: $err"); + } + if ($code >= 400) { + $snip = substr((string) $body, 0, 240); + throw new \RuntimeException("Ollama HTTP $code: $snip"); + } + $decoded = json_decode((string) $body, true); + if (!is_array($decoded)) { + throw new \RuntimeException('Ollama returned non-JSON body.'); + } + return $decoded; + }); + } + + protected function get(string $path): array + { + $ch = curl_init($this->baseUrl . $path); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 15, + CURLOPT_CONNECTTIMEOUT => 5, + ]); + $body = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + if ($body === false || $code >= 400) { + throw new \RuntimeException("Ollama GET $path failed (HTTP $code)"); + } + return json_decode((string) $body, true) ?? []; + } + + protected function withRetries(callable $fn) + { + $last = null; + for ($i = 0; $i <= $this->retries; $i++) { + try { + return $fn(); + } catch (\RuntimeException $e) { + $last = $e; + if ($i < $this->retries) usleep(250_000 * (1 << $i)); // 250ms, 500ms, ... + } + } + throw $last ?? new \RuntimeException('Ollama call failed.'); + } +} diff --git a/application/module/ai/plugins/rag.php b/application/module/ai/plugins/rag.php new file mode 100644 index 0000000..6ec531d --- /dev/null +++ b/application/module/ai/plugins/rag.php @@ -0,0 +1,315 @@ +rag('docs'); + * $rag->ingestText('The dispatcher runs every request.', ['source' => 'note-1']); + * $rag->ingestFile(__DIR__ . '/manual.md'); + * $rag->ingestDir(__DIR__ . '/articles/'); + * + * $answer = $rag->ask('How does the dispatcher work?'); + * $hits = $rag->search('dispatcher', 5); + * + * Storage: a single JSON file per collection at + * /.json + * + * No database. Restartable. ~10k chunks fits in memory comfortably. + */ +class Rag +{ + protected string $collection; + protected \stdClass $cfg; + protected Chat $chat; + protected Embed $embed; + + /** @var array{chunks:array,embeddings:array} */ + protected array $index = ['chunks' => [], 'embeddings' => []]; + protected bool $loaded = false; + + public function __construct(string $collection, \stdClass $cfg, Chat $chat, Embed $embed) + { + $this->collection = preg_replace('/[^a-z0-9_-]/i', '', $collection) ?: 'default'; + $this->cfg = $cfg; + $this->chat = $chat; + $this->embed = $embed; + } + + // ----------------------------------------------------------------------- + // Ingestion + // ----------------------------------------------------------------------- + + /** + * Add a single chunk of text to the collection. + */ + public function ingestText(string $text, array $metadata = []): void + { + $this->load(); + $this->addChunk($text, $metadata); + $this->save(); + } + + /** + * Read a file, chunk it, and ingest each chunk. + */ + public function ingestFile(string $path): int + { + if (!is_readable($path)) { + throw new \RuntimeException("RAG ingest: $path is not readable."); + } + $this->load(); + $body = (string) file_get_contents($path); + $chunks = $this->chunk($body); + foreach ($chunks as $c) { + $this->addChunk($c, ['source' => $path]); + } + $this->save(); + return count($chunks); + } + + /** + * Recursively ingest every .md / .txt / .php file under a directory. + */ + public function ingestDir(string $dir, array $extensions = ['md', 'txt', 'php']): int + { + if (!is_dir($dir)) { + throw new \RuntimeException("RAG ingest: $dir is not a directory."); + } + $count = 0; + $extPattern = '/\.(' . implode('|', array_map('preg_quote', $extensions)) . ')$/i'; + $iter = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator( + $dir, \RecursiveDirectoryIterator::SKIP_DOTS + )); + foreach ($iter as $entry) { + if (!$entry->isFile()) continue; + if (!preg_match($extPattern, $entry->getFilename())) continue; + $count += $this->ingestFile($entry->getPathname()); + } + return $count; + } + + /** + * Forget every chunk in this collection (and delete the storage file). + */ + public function reset(): void + { + $this->index = ['chunks' => [], 'embeddings' => []]; + $this->loaded = true; + if ($this->backend() === 'database') { + \Nibiru\Pdo::query( + 'DELETE c FROM ai_rag_chunk c ' + . 'INNER JOIN ai_rag_collection o ON o.ai_rag_collection_id = c.ai_rag_chunk_collection_id ' + . 'WHERE o.ai_rag_collection_name = :name', + [':name' => $this->collection] + ); + \Nibiru\Pdo::delete('ai_rag_collection', ['ai_rag_collection_name' => $this->collection]); + return; + } + $path = $this->storagePath(); + if (is_file($path)) @unlink($path); + } + + // ----------------------------------------------------------------------- + // Querying + // ----------------------------------------------------------------------- + + /** + * Top-K cosine similarity. Returns [{score, text, metadata}]. + */ + public function search(string $query, ?int $k = null): array + { + $this->load(); + if (empty($this->index['embeddings'])) return []; + + $k = $k ?? (int) ($this->cfg->rag_top_k ?? 6); + $qv = $this->embed->one($query); + + $scored = []; + foreach ($this->index['embeddings'] as $i => $packed) { + $vec = Embed::unpack($packed); + $scored[] = [ + 'score' => Embed::cosine($qv, $vec), + 'text' => $this->index['chunks'][$i]['text'] ?? '', + 'metadata' => $this->index['chunks'][$i]['metadata'] ?? [], + ]; + } + usort($scored, fn($a, $b) => $b['score'] <=> $a['score']); + return array_slice($scored, 0, $k); + } + + /** + * Search the collection, then ask the LLM with the top-K chunks as context. + */ + public function ask(string $question, ?int $k = null): string + { + $hits = $this->search($question, $k); + if (empty($hits)) { + return $this->chat->reset()->ask($question); + } + $context = ''; + foreach ($hits as $i => $h) { + $context .= '[' . ($i + 1) . '] ' . trim($h['text']) . "\n\n---\n\n"; + } + $sys = ($this->chat->history() ? '' : (string) ($this->cfg->chat_system_prompt ?? '')); + $sys .= "\n\nUse these excerpts to answer. Cite by number like [1].\n\n" . $context; + return $this->chat->reset()->system(trim($sys))->ask($question); + } + + // ----------------------------------------------------------------------- + // Internals + // ----------------------------------------------------------------------- + + protected function addChunk(string $text, array $metadata): void + { + $text = trim($text); + if ($text === '') return; + $vec = $this->embed->one($text); + $packed = Embed::pack($vec); + + $this->index['chunks'][] = ['text' => $text, 'metadata' => $metadata]; + $this->index['embeddings'][] = $packed; + + if ($this->backend() === 'database') { + \Nibiru\Pdo::insert('ai_rag_chunk', [ + 'ai_rag_chunk_collection_id' => $this->dbCollectionId(), + 'ai_rag_chunk_text' => $text, + 'ai_rag_chunk_metadata' => json_encode($metadata, JSON_UNESCAPED_UNICODE), + 'ai_rag_chunk_embedding' => $packed, + 'ai_rag_chunk_token_count' => (int) ceil(strlen($text) / 4), + 'ai_rag_chunk_source' => isset($metadata['source']) ? (string) $metadata['source'] : null, + ]); + } + } + + protected function chunk(string $body): array + { + $target = (int) ($this->cfg->rag_chunk_target ?? 600); + $min = (int) ($this->cfg->rag_chunk_min ?? 120); + $max = (int) ($this->cfg->rag_chunk_max ?? 900); + // Split on paragraph boundaries first, then merge to target size. + $paragraphs = preg_split('/\n\s*\n/', $body) ?: []; + $out = []; + $buf = ''; + $bufTokens = 0; + foreach ($paragraphs as $p) { + $pTokens = (int) ceil(strlen($p) / 4); // crude + if ($bufTokens + $pTokens > $target && $bufTokens >= $min) { + $out[] = $buf; + $buf = ''; + $bufTokens = 0; + } + if ($pTokens > $max) { + if ($buf !== '') { $out[] = $buf; $buf = ''; $bufTokens = 0; } + // Split overlarge paragraph on sentence boundary + $sentences = preg_split('/(?<=[.!?])\s+/', $p) ?: [$p]; + foreach ($sentences as $s) $out[] = $s; + continue; + } + $buf .= ($buf === '' ? '' : "\n\n") . $p; + $bufTokens += $pTokens; + } + if ($buf !== '') $out[] = $buf; + return $out; + } + + /** + * Storage backend, controlled by [AI] rag.storage in ai.ini: + * "json" — single JSON file per collection (default; great for dev) + * "database" — uses ai_rag_collection / ai_rag_chunk tables via \Nibiru\Pdo + * (recommended for production; survives load-balancer fan-out) + */ + protected function backend(): string + { + $b = strtolower((string) ($this->cfg->rag_storage ?? 'json')); + return $b === 'database' ? 'database' : 'json'; + } + + protected function storagePath(): string + { + $base = $this->cfg->rag_storage_path + ?? '/../../application/module/ai/cache/rag/'; + $dir = realpath(__DIR__ . $base) ?: (__DIR__ . $base); + if (!is_dir($dir)) @mkdir($dir, 0775, true); + return rtrim($dir, '/') . '/' . $this->collection . '.json'; + } + + protected function load(): void + { + if ($this->loaded) return; + if ($this->backend() === 'database') { + $this->loadFromDatabase(); + } else { + $path = $this->storagePath(); + if (is_file($path)) { + $raw = json_decode((string) file_get_contents($path), true); + if (is_array($raw) && isset($raw['chunks'], $raw['embeddings'])) { + $this->index = $raw; + } + } + } + $this->loaded = true; + } + + protected function save(): void + { + if ($this->backend() === 'database') { + // database is written incrementally in addChunk(); no-op here. + return; + } + $path = $this->storagePath(); + file_put_contents($path, json_encode($this->index, JSON_UNESCAPED_UNICODE)); + } + + /** + * Load from ai_rag_collection + ai_rag_chunk tables. Uses Nibiru's + * `\Nibiru\Pdo` adapter — the tables are populated by migrations + * 200-ai_rag_collection.sql and 201-ai_rag_chunk.sql. + */ + protected function loadFromDatabase(): void + { + $rows = \Nibiru\Pdo::fetchAll( + 'SELECT c.ai_rag_chunk_text AS text, c.ai_rag_chunk_metadata AS metadata, ' + . ' c.ai_rag_chunk_embedding AS embedding ' + . 'FROM ai_rag_chunk c ' + . 'INNER JOIN ai_rag_collection o ON o.ai_rag_collection_id = c.ai_rag_chunk_collection_id ' + . 'WHERE o.ai_rag_collection_name = :name ' + . 'ORDER BY c.ai_rag_chunk_id', + [':name' => $this->collection] + ); + foreach ($rows as $r) { + $this->index['chunks'][] = [ + 'text' => (string) $r['text'], + 'metadata' => is_string($r['metadata']) ? (json_decode($r['metadata'], true) ?: []) : (array) ($r['metadata'] ?? []), + ]; + $this->index['embeddings'][] = (string) $r['embedding']; + } + } + + /** + * Resolve (or create) the collection's row in ai_rag_collection. + * Called lazily by addChunk() in database mode. + */ + protected function dbCollectionId(): int + { + $row = \Nibiru\Pdo::fetchRow( + 'SELECT ai_rag_collection_id AS id FROM ai_rag_collection ' + . 'WHERE ai_rag_collection_name = :name', + [':name' => $this->collection] + ); + if ($row && isset($row['id'])) return (int) $row['id']; + \Nibiru\Pdo::insert('ai_rag_collection', [ + 'ai_rag_collection_name' => $this->collection, + 'ai_rag_collection_embed_model' => (string) ($this->cfg->embed_model ?? ''), + 'ai_rag_collection_embed_dim' => (int) ($this->cfg->embed_dim ?? 0), + ]); + return (int) \Nibiru\Pdo::lastInsertId(); + } + + public function size(): int + { + $this->load(); + return count($this->index['chunks']); + } +} diff --git a/application/module/ai/plugins/tool.php b/application/module/ai/plugins/tool.php new file mode 100644 index 0000000..53dc7e3 --- /dev/null +++ b/application/module/ai/plugins/tool.php @@ -0,0 +1,53 @@ + + */ + abstract public function schema(): array; + + /** + * Run the tool. Return a string (or scalar) — the agent will pass + * this string back into the LLM as a tool observation. + */ + abstract public function execute(array $args): mixed; + + /** + * Render the tool definition as the agent's prompt sees it. + */ + public function asPrompt(): string + { + $schema = $this->schema(); + $args = []; + foreach ($schema as $key => $def) { + $args[] = " - $key ({$def['type']}): " . ($def['description'] ?? ''); + } + return sprintf( + "Tool: %s\nWhat it does: %s\nArguments:\n%s", + $this->name(), + $this->description(), + implode("\n", $args) + ); + } +} diff --git a/application/module/ai/plugins/tools/fileRead.php b/application/module/ai/plugins/tools/fileRead.php new file mode 100644 index 0000000..2809d30 --- /dev/null +++ b/application/module/ai/plugins/tools/fileRead.php @@ -0,0 +1,51 @@ + [ + 'type' => 'string', + 'description' => 'Relative path, e.g. "application/controller/loginController.php".', + 'required' => true, + ], + ]; + } + + public function execute(array $args): mixed + { + $path = (string) ($args['path'] ?? ''); + if ($path === '' || str_contains($path, '..')) { + return 'ERROR: invalid path'; + } + // Application root = three levels up from this plugin file: + // application/module/ai/plugins/tools/fileRead.php + // ↑ ↑ ↑ ↑ ↑ ↑ + // app module ai plugins tools this + $root = realpath(__DIR__ . '/../../../../../'); + if ($root === false) return 'ERROR: cannot resolve app root'; + $abs = realpath($root . DIRECTORY_SEPARATOR . $path); + if ($abs === false || !is_file($abs)) return 'ERROR: file not found'; + if (strpos($abs, $root) !== 0) return 'ERROR: path escapes root'; + $body = (string) file_get_contents($abs); + if (strlen($body) > 8192) $body = substr($body, 0, 8192) . "\n…[truncated]"; + return $body; + } +} diff --git a/application/module/ai/plugins/tools/httpGet.php b/application/module/ai/plugins/tools/httpGet.php new file mode 100644 index 0000000..354d5c3 --- /dev/null +++ b/application/module/ai/plugins/tools/httpGet.php @@ -0,0 +1,68 @@ + [ + 'type' => 'string', + 'description' => 'Full URL to GET, including https:// scheme.', + 'required' => true, + ], + 'headers' => [ + 'type' => 'object', + 'description' => 'Optional request headers, e.g. {"Authorization": "Bearer …"}.', + 'required' => false, + ], + ]; + } + + public function execute(array $args): mixed + { + $url = (string) ($args['url'] ?? ''); + if ($url === '' || !preg_match('#^https?://#i', $url)) { + return 'ERROR: url must be http(s)://...'; + } + $headers = []; + foreach ((array) ($args['headers'] ?? []) as $k => $v) { + $headers[] = "$k: $v"; + } + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_MAXREDIRS => 3, + CURLOPT_TIMEOUT => 15, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_HTTPHEADER => $headers, + CURLOPT_USERAGENT => 'Nibiru-Agent/1.0', + ]); + $body = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $err = curl_error($ch); + curl_close($ch); + if ($body === false) return "ERROR: $err"; + $body = (string) $body; + if (strlen($body) > 8192) $body = substr($body, 0, 8192) . "\n…[truncated]"; + return "HTTP $code\n$body"; + } +} diff --git a/application/module/ai/plugins/tools/pdoQuery.php b/application/module/ai/plugins/tools/pdoQuery.php new file mode 100644 index 0000000..8edb90a --- /dev/null +++ b/application/module/ai/plugins/tools/pdoQuery.php @@ -0,0 +1,67 @@ +withTools([new \Nibiru\Module\Ai\Plugins\Tools\PdoQuery()]) + * ->run('How many users registered last week?'); + * + * Safety: rejects anything that looks like INSERT/UPDATE/DELETE/DROP/TRUNCATE/ALTER. + * If you need write access, write a more privileged subclass with an audit trail. + */ +class PdoQuery extends Tool +{ + public function name(): string { return 'pdo_query'; } + + public function description(): string + { + return 'Run a single read-only SQL SELECT against the application database. ' + . 'Use for counts, aggregates, lookups. Returns rows as JSON.'; + } + + public function schema(): array + { + return [ + 'sql' => [ + 'type' => 'string', + 'description' => 'A single SELECT statement. Use placeholders (:name) for dynamic values.', + 'required' => true, + ], + 'params' => [ + 'type' => 'object', + 'description' => 'Optional parameter bindings, e.g. {":id": 42}.', + 'required' => false, + ], + ]; + } + + public function execute(array $args): mixed + { + $sql = trim((string) ($args['sql'] ?? '')); + if ($sql === '') return 'ERROR: empty SQL'; + if (!preg_match('/^\s*SELECT\s/i', $sql)) { + return 'ERROR: only SELECT is permitted by pdo_query'; + } + if (preg_match('/;\s*\S/', $sql)) { + return 'ERROR: only a single statement is permitted'; + } + if (preg_match('/\b(INSERT|UPDATE|DELETE|DROP|TRUNCATE|ALTER|CREATE|GRANT|REVOKE)\b/i', $sql)) { + return 'ERROR: write/DDL operations are blocked'; + } + + try { + $params = is_array($args['params'] ?? null) ? $args['params'] : []; + $rows = Pdo::fetchAll($sql, $params); + // Cap the response so the agent doesn't choke on huge results. + $rows = array_slice($rows, 0, 50); + return json_encode($rows, JSON_UNESCAPED_UNICODE); + } catch (\Throwable $e) { + return 'ERROR: ' . $e->getMessage(); + } + } +} diff --git a/application/module/ai/settings/ai.ini b/application/module/ai/settings/ai.ini new file mode 100644 index 0000000..57e325e --- /dev/null +++ b/application/module/ai/settings/ai.ini @@ -0,0 +1,53 @@ +; ===================================================================== +; Nibiru AI module — config +; +; Sections supported under [AI]: +; - Ollama transport +; - Chat completions +; - Embeddings +; - RAG (retrieval-augmented generation) +; - Agents +; +; Override per-environment with ai.production.ini, ai.staging.ini, etc. +; ===================================================================== + +[AI] +; --- Ollama transport --- +; Default is the standard local Ollama port. Override per environment in +; ai.production.ini / ai.staging.ini, or set the OLLAMA_BASE_URL env var. +ollama.base_url = "http://localhost:11434" +ollama.timeout = 90 +ollama.retries = 1 + +; --- Chat --- +chat.model = "nibiru-coder:1.0" +chat.fallback_model = "qwen2.5-coder:14b" +chat.temperature = 0.4 +chat.max_tokens = 1024 +chat.system_prompt = "You are an expert on the Nibiru PHP framework. Answer with concrete code examples." + +; --- Embeddings --- +embed.model = "nomic-embed-text" +embed.batch = 16 +embed.dim = 768 + +; --- RAG --- +rag.storage_path = "/../../application/module/ai/cache/rag/" +rag.top_k = 6 +rag.chunk_target = 600 +rag.chunk_min = 120 +rag.chunk_max = 900 + +; --- Agents --- +agent.max_iterations = 6 +agent.tool_timeout = 30 +agent.allowed_tools[] = "pdo_query" +agent.allowed_tools[] = "http_get" +agent.allowed_tools[] = "view_assign" +agent.allowed_tools[] = "form_build" + +; --- Anthropic / OpenAI fallback (optional) --- +anthropic.api_key = "" +anthropic.model = "claude-haiku-4-5-20251001" +openai.api_key = "" +openai.embed_model = "text-embedding-3-small" diff --git a/application/module/ai/settings/ai.production.ini.example b/application/module/ai/settings/ai.production.ini.example new file mode 100644 index 0000000..2fd7a70 --- /dev/null +++ b/application/module/ai/settings/ai.production.ini.example @@ -0,0 +1,41 @@ +; ===================================================================== +; Per-environment override for the AI module. +; +; Copy to ai.production.ini on the production host and fill in real +; values. The Registry will prefer this file over ai.ini when +; APPLICATION_ENV=production. +; +; This file IS gitignored (or should be — add /application/module/ai/ +; settings/ai.production.ini to .gitignore). Never commit production +; endpoints or model names to a public repo. +; ===================================================================== + +[AI] +; Point at YOUR Ollama. Self-hosted, behind a reverse proxy, or local — +; whatever you run. Leave the default localhost in ai.ini and override +; here for production. +ollama.base_url = "https://your-ollama.example.com" +ollama.timeout = 90 + +; If you've registered the Nibiru-flavoured model on your Ollama, point +; chat.model at it. Otherwise the fallback covers you. +chat.model = "nibiru-coder:1.0" +chat.fallback_model = "qwen2.5-coder:14b" + +; In production prefer the larger / better embedding model if you've +; pulled it. mxbai-embed-large > nomic-embed-text for quality. +embed.model = "nomic-embed-text" + +; Tighten the ask budget in production — fewer tokens = faster + cheaper. +chat.max_tokens = 800 + +; RAG storage in production: switch to database to share a collection +; across multiple app instances behind a load balancer. +; "json" — single JSON file per collection (default, in cache/rag/) +; "database" — uses ai_rag_collection / ai_rag_chunk tables +rag.storage = "database" + +; Optional fallbacks. The framework module ships without these — set +; them only if you want to swap providers temporarily. +; anthropic.api_key = "sk-ant-..." +; openai.api_key = "sk-..." diff --git a/application/module/ai/training/Modelfile b/application/module/ai/training/Modelfile new file mode 100644 index 0000000..983a991 --- /dev/null +++ b/application/module/ai/training/Modelfile @@ -0,0 +1,55 @@ +# ============================================================================= +# nibiru-coder — A Nibiru-flavoured coding model registered on your Ollama. +# +# Build via the helper script (recommended): +# ./application/module/ai/training/build.sh # default tag :1.0 +# ./application/module/ai/training/build.sh 1.1 # custom tag +# OLLAMA_BASE_URL=https://your.ollama.example ./.../build.sh +# +# Or directly against Ollama: +# curl ${OLLAMA_BASE_URL:-http://localhost:11434}/api/create -d @<(jq -n \ +# --arg name "nibiru-coder:1.0" \ +# --rawfile mf application/module/ai/training/Modelfile \ +# '{name: $name, modelfile: $mf, stream: false}') +# ============================================================================= + +FROM qwen2.5-coder:14b + +PARAMETER temperature 0.4 +PARAMETER top_p 0.9 +PARAMETER top_k 40 +PARAMETER repeat_penalty 1.1 +PARAMETER num_ctx 8192 +PARAMETER stop "User:" +PARAMETER stop "Assistant:" + +SYSTEM """ +You are a Nibiru framework expert. + +CONTEXT: Nibiru is a modular MMVC PHP framework. MMVC = Model + Module + View + Controller. Modules are first-class units that own a domain (users, billing, cms, …) with their own traits, plugins, interfaces and settings INI. The Registry auto-discovers module configs. Controllers extend `Nibiru\\Adapter\\Controller` and define `pageAction()` and `navigationAction()` (always called) plus optional named actions. Views are Smarty .tpl files in `application/view/templates/`. The CLI is `./nibiru` — `-m` creates modules, `-c` creates controllers, `-mi ` runs migrations from `application/settings/config/database/`. + +CONVENTIONS: + - Controllers extend `Nibiru\\Adapter\\Controller`. + - View::assign(['key' => $value]) passes data to Smarty. + - View::forwardTo('/path') redirects. + - View::forwardToJsonHeader() makes an action a JSON endpoint. + - Form::create() then Form::addInputType…() then Form::addForm() builds a form. + - Models live in application/model/, auto-generated from DB tables. + - Modules live in application/module// with traits/, plugins/, interfaces/, settings/. + +ANSWER STYLE: + - Always show concrete code for Nibiru questions, with the file path as a comment header. + - Prefer small, self-contained examples over long prose. + - Cite the canonical class names (View, Form, Router, Pageination — note the spelling). + - Don't recommend Laravel/Symfony idioms. Use Nibiru's singletons, factories, and modules. + - Default database driver is `pdo`; switch via `[DATABASE] driver = "psql"|"postgresql"|"mysql"` in the INI. + - When in doubt, recommend the CLI: `./nibiru -m foo`, `./nibiru -c bar`. +""" + +TEMPLATE """{{ if .System }}<|im_start|>system +{{ .System }}<|im_end|> +{{ end }}{{ if .Prompt }}<|im_start|>user +{{ .Prompt }}<|im_end|> +{{ end }}<|im_start|>assistant +{{ .Response }}<|im_end|> +""" diff --git a/application/module/ai/training/README.md b/application/module/ai/training/README.md new file mode 100644 index 0000000..cf1296c --- /dev/null +++ b/application/module/ai/training/README.md @@ -0,0 +1,63 @@ +# Training nibiru-coder + +This folder contains everything needed to register a Nibiru-flavoured chat +model on your Ollama server (defaults to `http://localhost:11434`; override +via the `OLLAMA_BASE_URL` env var or in `application/module/ai/settings/ai.production.ini`). + +## What the model is + +`nibiru-coder` is a **system-prompt-customised** Qwen 2.5 Coder 14B. It's not +a fine-tune in the LoRA sense — it's the same weights as the base model but +with a baked-in system prompt that: + +- explains MMVC, modules, the dispatcher, and Nibiru's singletons, +- enforces the framework's conventions (`pageAction`, `navigationAction`, + `View::assign`, `Form::create`), +- pushes the model toward Nibiru-idiomatic answers instead of generic Laravel + / Symfony advice. + +System-prompt customisation runs **instantly** (no GPU training time) and +gives ~80 % of the value of a real LoRA at zero training cost. When you have +budget for a real LoRA, the +[corpus exporter](/en/ai/corpus/) produces the JSONL you'd train on. + +## Build it + +```bash +./application/module/ai/training/build.sh # builds nibiru-coder:1.0 +./application/module/ai/training/build.sh 1.1 # bump tag +``` + +The script: + +1. Reads the `Modelfile` next to it. +2. POSTs to `${OLLAMA_BASE_URL}/api/create`. +3. Runs a smoke-test chat call to confirm the new tag responds. + +After it succeeds, set the model in `application/module/ai/settings/ai.ini`: + +```ini +[AI] +chat.model = "nibiru-coder:1.0" +``` + +…and every `\Nibiru\Module\Ai\Ai` instance in your app talks to it. + +## Iterate on the system prompt + +The Modelfile's `SYSTEM """ ... """` block is the lever. Tighten the +conventions, add new examples, or add citations to specific framework files. +Re-run `build.sh` with a new tag (`1.1`, `1.2`) and A/B against the previous +tag in your app. + +## Real LoRA path (when you're ready) + +1. Run `npm run build:corpus` in `docs/` — produces `dist/corpus/chat.jsonl`. +2. Use Axolotl / Unsloth / LLaMA-Factory with that JSONL as your sharegpt + training set. +3. Convert the resulting LoRA to GGUF (`llama.cpp`'s `convert-hf-to-gguf.py`). +4. Build an Ollama Modelfile with `FROM ./your-lora.gguf` and re-register + as `nibiru-coder:2.0`. + +The framework code doesn't need to change — flip the model tag in +`ai.ini` and you're on the new weights. diff --git a/application/module/ai/training/build.sh b/application/module/ai/training/build.sh new file mode 100755 index 0000000..7c88dcb --- /dev/null +++ b/application/module/ai/training/build.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# ============================================================================= +# Build nibiru-coder on the configured Ollama server. +# +# Usage: +# ./application/module/ai/training/build.sh # default tag :1.0 +# ./application/module/ai/training/build.sh 1.1 # custom tag +# OLLAMA_BASE_URL=https://your.ollama.example ./.../build.sh # remote Ollama +# +# Prereqs: +# - The base model (qwen2.5-coder:14b) is already pulled on the server. +# - jq is installed locally. +# ============================================================================= +set -euo pipefail + +OLLAMA_BASE_URL="${OLLAMA_BASE_URL:-http://localhost:11434}" +TAG="${1:-1.0}" +MODEL_NAME="nibiru-coder:${TAG}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +MODELFILE_PATH="${SCRIPT_DIR}/Modelfile" + +if [ ! -f "$MODELFILE_PATH" ]; then + echo "Modelfile not found at $MODELFILE_PATH" >&2 + exit 1 +fi + +if ! command -v jq >/dev/null 2>&1; then + echo "jq is required: https://stedolan.github.io/jq/" >&2 + exit 1 +fi + +echo "Building $MODEL_NAME on $OLLAMA_BASE_URL …" +RESP=$(jq -n \ + --arg name "$MODEL_NAME" \ + --rawfile mf "$MODELFILE_PATH" \ + '{name: $name, modelfile: $mf, stream: false}' \ + | curl -sS -X POST "${OLLAMA_BASE_URL}/api/create" \ + -H 'Content-Type: application/json' \ + --data-binary @-) + +echo "$RESP" | jq -r '.status // .error // "ok"' + +# Smoke test — make sure it answers. +echo +echo "Smoke test: 'What does Form::create() do?'" +curl -sS "${OLLAMA_BASE_URL}/api/chat" \ + -H 'Content-Type: application/json' \ + -d "$(jq -n --arg m "$MODEL_NAME" '{ + model: $m, + messages: [{role:"user", content:"In one sentence, what does Form::create() do in Nibiru?"}], + stream: false, + options: {num_predict: 60} + }')" | jq -r '.message.content' + +echo +echo "Done. Use the model:" +echo " curl ${OLLAMA_BASE_URL}/api/chat -d '{\"model\":\"$MODEL_NAME\",\"messages\":[…]}'" +echo "or set in your app:" +echo " [AI]" +echo " chat.model = \"$MODEL_NAME\"" diff --git a/application/module/ai/training/smoke-test.php b/application/module/ai/training/smoke-test.php new file mode 100644 index 0000000..6007248 --- /dev/null +++ b/application/module/ai/training/smoke-test.php @@ -0,0 +1,85 @@ + getenv('OLLAMA_BASE_URL') ?: 'http://localhost:11434', + 'ollama_timeout' => 60, + 'ollama_retries' => 1, + 'chat_model' => getenv('OLLAMA_CHAT_MODEL') ?: 'qwen2.5-coder:14b', + 'chat_fallback_model' => 'qwen2.5-coder:14b', + 'chat_system_prompt' => 'You are a Nibiru framework expert. Be concise.', + 'chat_temperature' => 0.3, + 'chat_max_tokens' => 200, + 'embed_model' => getenv('OLLAMA_EMBED_MODEL') ?: 'nomic-embed-text', + ]; + + echo "=== Ollama at ", $cfg->ollama_base_url, " ===\n"; + $ollama = new Ollama($cfg); + try { + $models = $ollama->listModels(); + $names = array_column($models['models'] ?? [], 'name'); + echo " found ", count($names), " models\n"; + echo " qwen2.5-coder:14b: ", + in_array('qwen2.5-coder:14b', $names, true) ? "yes" : "NO", + "\n"; + } catch (\Throwable $e) { + echo " FAILED: ", $e->getMessage(), "\n"; + exit(1); + } + + echo "\n=== Chat::ask ===\n"; + $chat = new Chat($cfg); + try { + $reply = $chat->ask('In one sentence, what does Form::create() do in Nibiru?'); + echo " reply: ", trim($reply), "\n"; + } catch (\Throwable $e) { + echo " FAILED: ", $e->getMessage(), "\n"; + } + + echo "\n=== Multi-turn chat ===\n"; + $chat2 = new Chat($cfg); + try { + $chat2->user('Name three Nibiru singletons.'); + $r1 = $chat2->complete(); + echo " r1: ", trim($r1), "\n"; + $chat2->user('And what does the second one do?'); + $r2 = $chat2->complete(); + echo " r2: ", trim($r2), "\n"; + } catch (\Throwable $e) { + echo " FAILED: ", $e->getMessage(), "\n"; + } + + echo "\n=== Embed::cosine ===\n"; + try { + $embed = new Embed($cfg); + $a = $embed->one('controller'); + $b = $embed->one('module'); + $c = $embed->one('hummingbird'); + echo " dim(controller) = ", count($a), "\n"; + echo " cos(controller, module) = ", number_format(Embed::cosine($a, $b), 3), "\n"; + echo " cos(controller, hummingbird) = ", number_format(Embed::cosine($a, $c), 3), "\n"; + } catch (\Throwable $e) { + echo " FAILED: ", $e->getMessage(), "\n"; + echo " (expected if nomic-embed-text isn't pulled)\n"; + } + + echo "\nSmoke test done.\n"; +} diff --git a/application/module/ai/traits/ai.php b/application/module/ai/traits/ai.php new file mode 100644 index 0000000..7d4ff16 --- /dev/null +++ b/application/module/ai/traits/ai.php @@ -0,0 +1,19 @@ +cfg('chat.model', 'qwen2.5-coder:14b') + */ + protected function cfg(string $key, $default = null) + { + $cfg = $this->config(); + if (isset($cfg->$key)) return $cfg->$key; + // Allow flat-key INI as written in ai.ini ("chat.model = ..." → "chat.model" key) + $varname = str_replace('.', '_', $key); + if (isset($cfg->$varname)) return $cfg->$varname; + return $default; + } +} diff --git a/application/module/users/interfaces/users.php b/application/module/users/interfaces/users.php new file mode 100755 index 0000000..98243ef --- /dev/null +++ b/application/module/users/interfaces/users.php @@ -0,0 +1,49 @@ + 'Benutzername', 'valueName' => 'user_login', 'icon' => 'lock' ], + [ 'visibleName' => 'Vorname', 'valueName' => 'user_firstname', 'icon' => 'user' ], + [ 'visibleName' => 'Nachname', 'valueName' => 'user_lastname', 'icon' => 'user' ], + ]; + const FORM_CREATE_PASSWORD = [ + [ 'visibleName' => 'Passwort', 'valueName' => 'user_pass', 'icon' => 'lock' ], + [ 'visibleName' => 'Passwort wiederholen', 'valueName' => 'password_repeat', 'icon' => 'lock' ], + ]; + + const FORM_CREATE_ACCOUNT = [ + [ 'visibleName' => 'Konto Name', 'valueName' => 'user_account_name', 'icon' => 'wallet' ], + [ 'visibleName' => 'Konto Email', 'valueName' => 'user_account_email', 'icon' => 'email' ] + ]; + const REGISTRY_USER_KEYS = [ + 'user_firstname', + 'user_lastname', + 'user_login', + 'user_active', + 'user_acl_id', + 'user_account_name', + 'user_account_active', + 'user_account_email', + 'user_pass' + ]; + const FORM_CHECKBOX_SWITCH = [ + 'on' => true, + 'off' => false + ]; + const FORM_CHECKBOX_ON = "on"; + const FORM_CHECKBOX_OFF = "off"; + const USER_ID_ENCRYPTION = 'user_id_encryption'; + const USER_ID_ENCRYPTION_KEY = 'user_id_encryption_key'; +} \ No newline at end of file diff --git a/application/module/users/plugins/acl.php b/application/module/users/plugins/acl.php new file mode 100755 index 0000000..e29af1b --- /dev/null +++ b/application/module/users/plugins/acl.php @@ -0,0 +1,72 @@ +validate()) + { + View::forwardTo('/users/login'); + } + else + { + $this->loadUserRole(); + } + } + + /** + * @desc checks if the user is logged in, if yes it loads the corresponding user role into the session. + * @return void + * [auth] => Array + ( + [session_id] => SESSION_ID + [user_id] => USER_ID + [login] => USER_LOGIN + [role] => ACL_ROLE + ) + */ + public function loadUserRole(): void + { + if(User::validate()) + { + $userRole = User::getRoleByLoggedInUser(); + $_SESSION['auth']['role'] = $userRole['acl_role']; + } + } + + /** + * @desc will load the acl roles from the database and return them as an array. + * @return array + * @throws \Exception + */ + public function loadAclRoles(): array + { + $acl = Db::loadModel('WarehouseLoach\Acl'); + return $acl->loadTableAsArray(); + } +} \ No newline at end of file diff --git a/application/module/users/plugins/user.php b/application/module/users/plugins/user.php new file mode 100755 index 0000000..55ea570 --- /dev/null +++ b/application/module/users/plugins/user.php @@ -0,0 +1,516 @@ +getRequest('', true)) && array_key_exists('password', Controller::getInstance()->getRequest('', true))) + { + $this->_auth = Auth::getInstance()->auth( + Controller::getInstance()->getRequest('login'), + Controller::getInstance()->getRequest('password')); + if($this->_auth) + { + $timeanddateToUser = Db::loadModel('WarehouseLoach\timeanddateToUser')->selectDatasetByFieldWhere(['name' => 'user_id', 'value' => Controller::getInstance()->getSession('auth')['user_id']]); + $timeanddate_id = array_shift($timeanddateToUser)['timeanddate_id']; + Db::loadModel('WarehouseLoach\timeanddate')->updateRowByFieldWhere('timeanddate_id', $timeanddate_id, 'timeanddate_time', date('Y-m-d H:i:s')); + $this->setUserIdToSessionCookie(); + } + } + else + { + $this->_auth = $this->isAuthorized(); + } + return $this->_auth; + } + + /** + * @desc will return true if the user is authorized otherwise false + * @return bool + */ + public function isAuthorized(): bool + { + if(array_key_exists('auth', Controller::getInstance()->getSession('', true))) + { + if(array_key_exists('login', Controller::getInstance()->getSession('auth'))) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * @desc will log out the user and destroy the session + * @return bool + */ + public function revokeAuthorized(): bool + { + setcookie('user_id', '', [ + 'expires' => time() - 3600, // set the cookie to expire one hour ago + 'path' => '/', + 'secure' => false, + 'httponly' => true, + ]); + Memcached::init()->runServer()->delete($_SESSION['auth']['user_id']); + unset($_SESSION['auth']); + return true; + } + + /** + * @desc will update the password of the user, check if the value $user_id is set, if not it will use the current logged in user. + * @param int $user_id + * @param string $password + * @return bool + */ + public function updatePassword(string $password, int $user_id): bool + { + if($user_id == 0) + { + $user_id = $_SESSION['auth']['user_id']; + } + return Pdo::query('UPDATE user SET user_pass = DES_ENCRYPT("'.$password.'", "'.Config::getInstance()->getConfig()[IView::NIBIRU_SECURITY]["password_hash"].'") WHERE user_id = '.$user_id.';'); + } + + /** + * @desc will return true if the standard user is present otherwise false + * @return bool + * @throws \Exception + */ + public function checkForStandardUser(): bool + { + $userTable = Db::loadModel('WarehouseLoach\user')->loadTableAsArray(); + if(sizeof($userTable)==0) + { + return false; + } + else + { + $standardUser = array_search(self::getUsersRegistry()->user_login, array_column($userTable, 'user_login')); + if($standardUser === false) + { + return false; + } + else + { + return true; + } + } + } + + /** + * @desc will check if the user exists in the database + * @param string $user_login + * @return bool + */ + public function checkIfUserExists(string $user_login): bool + { + $userTable = Db::loadModel('WarehouseLoach\user')->loadTableAsArray(); + $user = array_search($user_login, array_column($userTable, 'user_login')); + if($user === false) + { + return false; + } + else + { + return true; + } + } + + /** + * @desc create an object that loads the userdata from the registry, if the user data is not passed by the method + * parameter. Also prepares the user data for user updates in the database. + * @param array $user_data + * @param bool $isUpdate + * @return bool + */ + public function loadUser( array $user_data = [], bool $isUpdate = false ): bool + { + $this->userRegistry = new \stdClass(); + if(sizeof($user_data) == 0) + { + foreach(self::REGISTRY_USER_KEYS as $key) + { + $this->userRegistry->$key = self::getUsersRegistry()->$key; + } + return Message::loadInfo('User loaded', ['info' => json_decode(json_encode($this->userRegistry), true)]); + } + else + { + try { + if(!$this->checkIfUserExists($user_data['user_login']) || $isUpdate) + { + foreach(self::REGISTRY_USER_KEYS as $key) + { + if($user_data[$key] == self::FORM_CHECKBOX_ON || $user_data[$key] == self::FORM_CHECKBOX_OFF) + { + $user_data[$key] = self::FORM_CHECKBOX_SWITCH[$user_data[$key]]; + } + $this->userRegistry->$key = $user_data[$key]; + } + if($isUpdate) + { + $this->userRegistry->user_id = $user_data['user_id']; + } + return Message::loadInfo('User loaded', ['info' => json_decode(json_encode($this->userRegistry), true)]); + } else + { + throw new \Exception('User already exists'); + } + + } catch (\Exception $e) { + return Message::loadError($e); + } + } + } + + /** + * @desc will create the initial user for the system, if no user is setup. + * Can be found in the application/module/users/settings/users.ini + * file. + * @return int|bool + * @throws \Exception + */ + public function createStandardUser(): int|bool + { + try { + Db::loadModel('WarehouseLoach\user')->insertArrayIntoTable([ + 'user_firstname' => $this->userRegistry->user_firstname, + 'user_lastname' => $this->userRegistry->user_lastname, + 'user_login' => $this->userRegistry->user_login, + 'user_account_active' => $this->userRegistry->user_active + ]); + $lastUserId = Db::loadModel('WarehouseLoach\user')->lastInsertId(); + + Db::loadModel('WarehouseLoach\timeanddate')->insertArrayIntoTable([ + ]); + $lastTimeanddateId = Db::loadModel('WarehouseLoach\timeanddate')->lastInsertId(); + Db::loadModel('WarehouseLoach\timeanddateToUser')->insertArrayIntoTable([ + 'timeanddate_id' => $lastTimeanddateId, + 'user_id' => $lastUserId + ]); + + Db::loadModel('WarehouseLoach\userToAcl')->insertArrayIntoTable([ + 'user_id' => $lastUserId, + 'acl_id' => $this->userRegistry->user_acl_id + ]); + + Db::loadModel('WarehouseLoach\account')->insertArrayIntoTable([ + 'account_name' => $this->userRegistry->user_account_name, + 'account_email' => $this->userRegistry->user_account_email, + 'account_active' => $this->userRegistry->user_account_active + ]); + $lastAccountId = Db::loadModel('WarehouseLoach\account')->lastInsertId(); + Db::loadModel('WarehouseLoach\timeanddate')->insertArrayIntoTable([ + ]); + $lastTimeanddateId = Db::loadModel('WarehouseLoach\timeanddate')->lastInsertId(); + Db::loadModel('WarehouseLoach\timeanddateToAccount')->insertArrayIntoTable([ + 'account_id' => $lastAccountId, + 'timeanddate_id' => $lastTimeanddateId + ]); + Db::loadModel('WarehouseLoach\userToAccount')->insertArrayIntoTable([ + 'account_id' => $lastAccountId, + 'user_id' => $lastUserId + ]); + $setPassword = Pdo::query('UPDATE user SET user_pass = DES_ENCRYPT("'.$this->userRegistry->user_pass.'", "'.Config::getInstance()->getConfig()[IView::NIBIRU_SECURITY]["password_hash"].'") WHERE user_id = '.$lastUserId.';'); + if(empty($setPassword)) + { + return $lastUserId; + } + else + { + throw new \Exception('Could not set password for user '.$lastUserId . ' with exception value: ' . $setPassword . '!'); + } + } catch (\Exception $e) { + return Message::loadError($e); + } + } + + /** + * @desc will return the role of the logged in user + * @return array + * @throws \Exception + */ + public function getRoleByLoggedInUser(): array + { + $userToAcl = Db::loadModel('WarehouseLoach\userToAcl')->selectRowByFieldWhere([ + 'field' => 'user_id', + 'value' => $_SESSION['auth']['user_id'] + ]); + return Db::loadModel('WarehouseLoach\acl')->selectRowByFieldWhere([ + 'field' => 'acl_id', + 'value' => $userToAcl['acl_id'] + ]); + } + + /** + * @desc will load all users from the database and return them as an array + * @return array + */ + public function loadUsers(): array + { + return Pdo::queryString('select u.user_id as uid, + u.user_firstname as vorname, + u.user_lastname as nachname, + u.user_login as login, + u.user_account_active as aktiv, + a.acl_role as berechtigung, + tad.timeanddate_date as datum_benutzer, + tad.timeanddate_time as zeit_benutzer, + ac.account_name as konto, + ac.account_email as konto_email, + ac.account_active as konto_aktiv, + tadc.timeanddate_date as datum_konto, + tadc.timeanddate_time as zeit_konto + from warehouse_loach.user as u + join warehouse_loach.user_to_acl as uta on u.user_id = uta.user_id + join warehouse_loach.acl as a on uta.acl_id = a.acl_id + join warehouse_loach.timeanddate_to_user as ttu on u.user_id = ttu.user_id + join warehouse_loach.timeanddate as tad on ttu.timeanddate_id = tad.timeanddate_id + join user_to_account uta2 on u.user_id = uta2.user_id + join account ac on uta2.account_id = ac.account_id + join timeanddate_to_account tta on ac.account_id = tta.account_id + join timeanddate tadc on tta.timeanddate_id = tadc.timeanddate_id;', true); + } + + /** + * @desc will load a user by the given id + * @param int $user_id + * @return array + */ + public function loadUserById( int $user_id ): array + { + $user = Pdo::queryString('select u.user_id as uid, + u.user_firstname as user_firstname, + u.user_lastname as user_lastname, + u.user_login as user_login, + DES_DECRYPT(u.user_pass, "'.Config::getInstance()->getConfig()[IView::NIBIRU_SECURITY]["password_hash"].'") as user_pass, + u.user_account_active as user_account_active, + a.acl_id as user_role_id, + ac.account_name as user_account_name, + ac.account_active as user_account_active, + ac.account_email as user_account_email + from warehouse_loach.user as u + join warehouse_loach.user_to_acl as uta on u.user_id = uta.user_id + join warehouse_loach.acl as a on uta.acl_id = a.acl_id + join warehouse_loach.timeanddate_to_user as ttu on u.user_id = ttu.user_id + join warehouse_loach.timeanddate as tad on ttu.timeanddate_id = tad.timeanddate_id + join user_to_account uta2 on u.user_id = uta2.user_id + join account ac on uta2.account_id = ac.account_id + join timeanddate_to_account tta on ac.account_id = tta.account_id + join timeanddate tadc on tta.timeanddate_id = tadc.timeanddate_id + where u.user_id = '.$user_id.';', true); + $user = array_shift($user); + return $user; + } + + /** + * @desc will delete a user by the given id + * @param int $user_id + * @return bool + */ + public function deleteUserById( int $user_id ): bool + { + try { + $user = $this->loadUserById($user_id); + if($user['user_role_id'] == 1) + { + unset($user); + throw new \Exception('You can not delete the superuser!'); + } + else + { + $userToAccount = Pdo::queryString('SELECT account_id FROM user_to_account WHERE user_id = '.$user_id.';', true); + $account_id = array_shift($userToAccount)["account_id"]; + $timeanddateToUser = Pdo::queryString('SELECT timeanddate_id FROM timeanddate_to_user WHERE user_id = '.$user_id.';', true); + $timeanddate_id = array_shift($timeanddateToUser)["timeanddate_id"]; + Pdo::query('DELETE FROM user_to_acl WHERE user_id = '.$user_id.';'); + Pdo::query('DELETE FROM user_to_account WHERE user_id = '.$user_id.';'); + Pdo::query('DELETE FROM timeanddate_to_user WHERE user_id = '.$user_id.';'); + Pdo::query('DELETE FROM timeanddate_to_account WHERE account_id = '.$account_id.';'); + Pdo::query('DELETE FROM user WHERE user_id = '.$user_id.';'); + Pdo::query('DELETE FROM account WHERE account_id = '.$account_id.';'); + Pdo::query('DELETE FROM timeanddate WHERE timeanddate_id = '.$timeanddate_id.';'); + unset($user['user_pass']); + return Message::loadInfo("User deleted successfully", $user); + } + } catch (\Exception $e) { + return Message::loadError($e); + } + } + + /** + * @desc will set the user active or inactive + * @param int $user_id + * @param int $active + * @return bool + */ + public function setUserActive( int $user_id, int $active ): bool + { + try { + if($active) + { + $state = 'Aktiv'; + } + else + { + $state = 'Inaktiv'; + } + $user = $this->loadUserById($user_id); + if($user['user_role_id'] == 1) + { + unset($user); + throw new \Exception('You can not deactivate the superuser!'); + } + else + { + Db::loadModel('WarehouseLoach\User')->updateRowByFieldWhere('user_id', $user_id, 'user_account_active', $active); + unset($user['user_pass']); + return Message::loadInfo("User updated active state successfully: $state", $user); + } + } catch (\Exception $e) { + return Message::loadError($e); + } + } + + /** + * @desc will update the user by the given user array + * @return bool + * @throws \Exception + */ + public function updateUser(): bool + { + try { + $user = (array) $this->userRegistry; + $userString = ''; + foreach(WarehouseLoach\User::TABLE['fields'] as $field) + { + if(array_key_exists($field, $user)) + { + if($field == 'user_pass') + { + $userString .= $field.' = DES_ENCRYPT("'.$user[$field].'", "'.Config::getInstance()->getConfig()[IView::NIBIRU_SECURITY]["password_hash"].'"), '; + } + else + { + if($field != 'user_id') + { + $userString .= $field.' = "'.$user[$field].'", '; + } + } + } + } + Pdo::query('UPDATE user SET '.substr($userString, 0, -2).' WHERE user_id = '.$user['user_id'].';'); + $userToAccount = Db::loadModel('WarehouseLoach\userToAccount')->selectDatasetByFieldWhere(['name' => 'user_id', 'value' => $user['user_id']]); + $account_id = array_shift($userToAccount)['account_id']; + if(isset($account_id)) + { + $accountString = ''; + foreach(WarehouseLoach\Account::TABLE['fields'] as $field) + { + foreach($user as $key => $value) + { + if(strstr($key, $field)) + { + $accountString .= $field.' = "'.$user[$key].'", '; + } + } + } + Pdo::query('UPDATE account SET '.substr($accountString, 0, -2).' WHERE account_id = '.$account_id.';'); + } + else + { + throw new \Exception('Did not get valid Account ID, the database could be corrupted for that user! user_id: ' . $user['user_id']); + } + Db::loadModel('WarehouseLoach\userToAcl')->updateRowByFieldWhere('user_id', $user['user_id'], 'acl_id', $user['user_acl_id']); + } catch (\Exception $e) { + Message::loadError($e); + } + } + + /** + * @desc will set the user_id in a cookie, in order to find the memcached session + * @return void + */ + public function setUserIdToSessionCookie(): void + { + if(!array_key_exists('user_id', $_COOKIE) && array_key_exists('auth', $_SESSION)) + { + $ivLength = openssl_cipher_iv_length($this->getUsersRegistry()->{self::USER_ID_ENCRYPTION}); + $iv = openssl_random_pseudo_bytes($ivLength); + $encryptedUserId = openssl_encrypt($_SESSION['auth']['user_id'], $this->getUsersRegistry()->{self::USER_ID_ENCRYPTION}, $this->getUsersRegistry()->{self::USER_ID_ENCRYPTION_KEY}, 0, $iv); + $cookieValue = base64_encode($encryptedUserId . '::' . $iv); + setcookie('user_id', $cookieValue, [ + 'expires' => time() + (86400 * 30), + 'path' => '/', + 'secure' => false, // only send cookie over https + 'httponly' => true, // make the cookie inaccessible to javascript + ]); + } + } + + /** + * @desc will get the user_id from the cookie + * @return int + */ + public function getUserIdFromSessionCookie(): int + { + if(array_key_exists('user_id', $_COOKIE)) + { + list($encryptedUserId, $iv) = explode('::', base64_decode($_COOKIE['user_id']), 2); + $decryptedUserId = openssl_decrypt($encryptedUserId, $this->getUsersRegistry()->{self::USER_ID_ENCRYPTION}, $this->getUsersRegistry()->{self::USER_ID_ENCRYPTION_KEY}, 0, $iv); + return $decryptedUserId; + } + else + { + return 0; + } + } +} \ No newline at end of file diff --git a/application/module/users/settings/users.ini b/application/module/users/settings/users.ini new file mode 100755 index 0000000..f7ece4f --- /dev/null +++ b/application/module/users/settings/users.ini @@ -0,0 +1,71 @@ +[USERS] +name = "users" +path = "/application/module/users" +is_api = false +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;Start User when no user is part of the system +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +user_firstname = "{user_firstname}" +user_lastname = "{user_lastname}" +user_pass = "{GENERATE_PASSWORD}" +user_login = "{user_login}" +user_active = true +user_account_name = "admin" +user_account_active = true +user_account_email = "{user_account_email}" +user_acl_id = 1 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;User Cookie // Session handling +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +user_id_encryption = "AES-256-CBC" +user_id_encryption_key = "B4D4F6H8J0K2L4N6" +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;Login css files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +users_login_css[] = "/public/css/vendors_css.css" +users_login_css[] = "/public/css/style.css" +users_login_css[] = "/public/css/skin_color.css" +users_login_js[] = "/public/js/vendors.min.js" +users_login_js[] = "/public/js/pages/chat-popup.js" +users_login_js[] = "/public/assets/icons/feather-icons/feather.min.js" +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;User listing css/js files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +users_user-list_css[] = "/public/css/vendors_css.css" +users_user-list_css[] = "/public/css/style.css" +users_user-list_css[] = "/public/css/skin_color.css" +users_user-list_js[] = "/public/js/vendors.min.js" +users_user-list_js[] = "/public/js/pages/chat-popup.js" +users_user-list_js[] = "/public/assets/icons/feather-icons/feather.min.js" +users_user-list_js[] = "/public/assets/vendor_components/perfect-scrollbar-master/perfect-scrollbar.jquery.min.js" +users_user-list_js[] = "/public/assets/vendor_components/datatable/datatables.min.js" +users_user-list_js[] = "/public/js/template.js" +users_user-list_js[] = "/public/js/pages/data-table.js" +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;User new css/js files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +users_user-new_css[] = "/public/css/vendors_css.css" +users_user-new_css[] = "/public/css/style.css" +users_user-new_css[] = "/public/css/skin_color.css" +users_user-new_js[] = "/public/js/vendors.min.js" +users_user-new_js[] = "/public/js/pages/chat-popup.js" +users_user-new_js[] = "/public/assets/icons/feather-icons/feather.min.js" +users_user-new_js[] = "/public/assets/vendor_components/jquery-toast-plugin-master/src/jquery.toast.js" +users_user-new_js[] = "/public/js/template.js" +users_user-new_js[] = "/public/js/pages/toastr.js" +users_user-new_js[] = "/public/js/pages/notification.js" +users_user-new_js[] = "/public/js/pages/users/new-user.js" +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;User edit css/js files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +users_user-edit_css[] = "/public/css/vendors_css.css" +users_user-edit_css[] = "/public/css/style.css" +users_user-edit_css[] = "/public/css/skin_color.css" +users_user-edit_js[] = "/public/js/vendors.min.js" +users_user-edit_js[] = "/public/js/pages/chat-popup.js" +users_user-edit_js[] = "/public/assets/icons/feather-icons/feather.min.js" +users_user-edit_js[] = "/public/assets/vendor_components/jquery-toast-plugin-master/src/jquery.toast.js" +users_user-edit_js[] = "/public/js/template.js" +users_user-edit_js[] = "/public/js/pages/toastr.js" +users_user-edit_js[] = "/public/js/pages/notification.js" +users_user-edit_js[] = "/public/js/pages/users/edit-user.js" \ No newline at end of file diff --git a/application/module/users/traits/userForm.php b/application/module/users/traits/userForm.php new file mode 100755 index 0000000..dc37eb5 --- /dev/null +++ b/application/module/users/traits/userForm.php @@ -0,0 +1,359 @@ + 0) + { + self::addTextElement($entry['visibleName'], $entry['valueName'], $entry['icon'], $user[$entry['valueName']]); + } + else + { + self::addTextElement($entry['visibleName'], $entry['valueName'], $entry['icon']); + } + } + foreach(self::FORM_CREATE_PASSWORD as $entry) + { + if(sizeof($user) > 0) + { + self::addPasswordElement($entry['visibleName'], $entry['valueName'], $entry['icon'], $user['user_pass']); + } + else + { + self::addPasswordElement($entry['visibleName'], $entry['valueName'], $entry['icon']); + } + } + self::closeHalfWidthElement(); + self::closeHalfWidthElement(); + self::openHalfWidthElement('Konto Informationen'); + self::openInnerHalfWithElement(); + foreach(self::FORM_CREATE_ACCOUNT as $entry) + { + if(sizeof($user) > 0) + { + self::addTextElement($entry['visibleName'], $entry['valueName'], $entry['icon'], $user[$entry['valueName']]); + } + else + { + self::addTextElement($entry['visibleName'], $entry['valueName'], $entry['icon']); + } + } + + if(sizeof($user) > 0) + { + self::addSelectDropdown($acl->loadAclRoles(), 'lock', $user['user_role_id']); + self::addActiveCheckbox('Konto aktivieren', $user['user_account_active']); + } + else + { + self::addSelectDropdown($acl->loadAclRoles(), 'lock'); + self::addActiveCheckbox('Konto aktivieren', true); + } + self::closeHalfWidthElement(); + if(sizeof($user) > 0) + { + self::addHiddenElementEditUser($user); + self::addSubmitFormButton('Speichern', 'save-alt'); + } + else + { + self::addHiddenElementNewUser(); + self::addSubmitFormButton('Erstellen', 'save-alt'); + } + + self::closeHalfWidthElement(); + return Form::addForm([ + 'name' => 'userForm', + 'action' => $action, + 'class' => 'row', + 'method' => 'post', + 'target' => '_self' + ]); + } + private static function addHiddenElementNewUser() + { + Form::addTypeHidden([ + 'name' => 'user_new', + 'value' => 1 + ]); + Form::addTypeHidden([ + 'name' => 'user_active', + 'value' => 1 + ]); + } + private static function addHiddenElementEditUser(array $user = []) + { + Form::addTypeHidden([ + 'name' => 'user_edit', + 'value' => 1 + ]); + Form::addTypeHidden([ + 'name' => 'user_active', + 'value' => $user['user_account_active'] + ]); + Form::addTypeHidden([ + 'name' => 'user_id', + 'value' => $user['uid'] + ]); + } + private static function addSubmitFormButton(string $buttonText = '', string $icon = '') + { + Form::addOpenDiv([ + 'class' => 'box-footer text-end', + 'value' => '' + ]); + Form::addTypeButton([ + 'class' => 'btn btn-primary', + 'type' => 'submit', + 'value' => ' '.$buttonText + ]); + Form::addCloseDiv(); + } + /** + * @desc will add a text element to the form + * @param string $visibleName + * @param string $valueName + * @param string $icon + * @return void + */ + private static function addTextElement(string $visibleName = '', string $valueName = '', string $icon = '', string $value = '') + { + Form::addTypeLabel([ + 'class' => 'form-label', + 'for' => $valueName, + 'value' => $visibleName + ]); + Form::addOpenDiv([ + 'class' => 'input-group mb-3', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'span', + 'class' => 'input-group-text', + 'value' => '' + ]); + Form::addCloseAny([ + 'any' => 'span' + ]); + if($value!="") + { + Form::addInputTypeText([ + 'class' => 'form-control', + 'name' => $valueName, + 'placeholder' => $visibleName, + 'value' => $value + ]); + } + else + { + Form::addInputTypeText([ + 'class' => 'form-control', + 'name' => $valueName, + 'placeholder' => $visibleName + ]); + } + + Form::addCloseDiv(); + } + + /** + * @desc will add a select dropdown to the form + * @param array $options + * @param string $icon + * @return void + */ + private static function addSelectDropdown( array $options = [], string $icon = '', int $selected = 0 ) + { + Form::addTypeLabel([ + 'for' => 'source-api', + 'class' => 'form-label', + 'value' => 'Rolle auswählen:' + ]); + Form::addOpenDiv([ + 'class' => 'input-group mb-3', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'span', + 'class' => 'input-group-text', + 'value' => '' + ]); + Form::addCloseAny([ + 'any' => 'span' + ]); + foreach($options as $option) + { + if($selected == $option['acl_id']) + { + Form::addSelectOption([ + 'context' => $option['acl_role'], + 'value' => $option['acl_id'], + 'selected' => 'selected' + ]); + } + else + { + Form::addSelectOption([ + 'context' => $option['acl_role'], + 'value' => $option['acl_id'] + ]); + } + } + Form::addSelect([ + 'name' => 'user_acl_id', + 'class' => 'form-control select2' + ]); + Form::addCloseDiv(); + } + + /** + * @desc will add a password element to the form + * @param string $visibleName + * @param string $valueName + * @param string $icon + * @return void + */ + private static function addPasswordElement(string $visibleName = '', string $valueName = '', string $icon = '', string $value = '') + { + Form::addTypeLabel([ + 'class' => 'form-label', + 'for' => $valueName, + 'value' => $visibleName + ]); + Form::addOpenDiv([ + 'class' => 'input-group mb-3', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'span', + 'class' => 'input-group-text', + 'value' => '' + ]); + Form::addCloseAny([ + 'any' => 'span' + ]); + if($value!="") + { + Form::addInputTypePassword([ + 'class' => 'form-control', + 'name' => $valueName, + 'placeholder' => $visibleName, + 'value' => $value + ]); + } + else + { + Form::addInputTypePassword([ + 'class' => 'form-control', + 'name' => $valueName, + 'placeholder' => $visibleName + ]); + } + Form::addCloseDiv(); + } + + /** + * @desc will open a half width element for form fields + * @param string $title + * @return void + */ + private static function openHalfWidthElement(string $title = '') + { + Form::addOpenDiv([ + 'class' => 'col-lg-6 col-13', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'box', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'box-header with-border', + 'value' => '

'.$title.'

' + ]); + Form::addCloseDiv(); + } + + /** + * @desc will add the inner half width distance frame element for form fields + * @return void + */ + private static function openInnerHalfWithElement() + { + Form::addOpenDiv([ + 'class' => 'form-group', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'box-body', + 'value' => '' + ]); + } + + /** + * @desc will add a checkbox for the active user account state + * @param string $visibleTitle + * @param bool $active + * @return void + */ + private static function addActiveCheckbox(string $visibleTitle = '', int $active = 0) + { + Form::addOpenDiv([ + 'class' => 'form-group', 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'checkbox checkbox-success', + 'value' => '' + ]); + if($active) + { + Form::addInputTypeCheckbox([ + 'id' => 'checkbox', + 'name' => 'user_account_active', + 'checked' => true + ]); + } + else + { + Form::addInputTypeCheckbox([ + 'id' => 'checkbox', + 'name' => 'account_active' + ]); + } + Form::addTypeLabel([ + 'for' => 'checkbox', + 'value' => $visibleTitle + ]); + Form::addCloseDiv(); + Form::addCloseDiv(); + } + + /** + * @desc will close the inner half width distance frame element, and the half width element for form fields + * @return void + */ + private static function closeHalfWidthElement() + { + Form::addCloseDiv(); + Form::addCloseDiv(); + } + +} \ No newline at end of file diff --git a/application/module/users/traits/users.php b/application/module/users/traits/users.php new file mode 100755 index 0000000..1627e8f --- /dev/null +++ b/application/module/users/traits/users.php @@ -0,0 +1,144 @@ + 'form-group', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'input-group mb-3', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'span', + 'class' => 'input-group-text bg-transparent', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'i', + 'class' => 'ti-user', + 'value' => '' + ]); + Form::addCloseAny([ + 'any' => 'i' + ]); + Form::addCloseAny([ + 'any' => 'span' + ]); + Form::addInputTypeText([ + 'class' => 'form-control ps-15 bg-transparent', + 'name' => 'login', + 'placeholder' => 'Benutzername' + ]); + Form::addCloseDiv(); + Form::addCloseDiv(); + //Start form field Password + Form::addOpenDiv([ + 'class' => 'form-group', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'input-group mb-3', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'span', + 'class' => 'input-group-text bg-transparent', + 'value' => '' + ]); + Form::addOpenAny([ + 'any' => 'i', + 'class' => 'ti-lock', + 'value' => '' + ]); + Form::addCloseAny([ + 'any' => 'i' + ]); + Form::addCloseAny([ + 'any' => 'span' + ]); + Form::addInputTypePassword([ + 'class' => 'form-control ps-15 bg-transparent', + 'name' => 'password', + 'placeholder' => 'Passwort' + ]); + Form::addCloseDiv(); + Form::addCloseDiv(); + //End form field Password + Form::addOpenDiv([ + 'class' => 'row', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'col-6', + 'value' => '' + ]); + + Form::addCloseDiv(); + + + Form::addOpenDiv([ + 'class' => 'col-6', + 'value' => '' + ]); + Form::addOpenDiv([ + 'class' => 'fog-pwd text-end', + 'value' => '' + ]); + + Form::addOpenAny([ + 'any' => 'a', + 'href' => 'javascript:void(0)', + 'class' => 'hover-warning', + 'value' => ' Passwort vergessen?' + ]); + Form::addCloseAny([ + 'any' => 'a' + ]); + Form::addCloseDiv(); + Form::addCloseDiv(); + + Form::addOpenDiv([ + 'class' => 'col-12 text-center', + 'value' => '' + ]); + + Form::addTypeButton([ + 'type' => 'submit', + 'class' => 'btn btn-danger mt-10', + 'value' => 'Anmelden' + ]); + Form::addCloseDiv(); + Form::addCloseDiv(); + + return Form::addForm([ + 'name' => 'loginForm', + 'action' => '/users/login', + 'method' => 'post', + 'target' => '_self' + ]); + } + + + +} \ No newline at end of file diff --git a/application/module/users/users.php b/application/module/users/users.php new file mode 100755 index 0000000..c518008 --- /dev/null +++ b/application/module/users/users.php @@ -0,0 +1,80 @@ +setUsersRegistry(); + $this->observers = new SplObjectStorage(); + } + + /** + * @desc will attach an observer to the observer storage + * @param SplObserver $observer + * @return void + */ + public function attach(SplObserver $observer): void + { + $this->observers->attach($observer); + } + + /** + * @desc will detach an observer from the observer storage + * @param SplObserver $observer + * @return void + */ + public function detach(SplObserver $observer): void + { + $this->observers->detach($observer); + } + + /** + * @desc will notify all observers + * @return void + */ + public function notify(): void + { + foreach ($this->observers as $observer) { + $observer->update($this); + } + } + + /** + * @desc will return the user registry object from the users.ini configuration + * @return object + */ + protected static function getUsersRegistry(): object + { + return self::$usersRegistry; + } + + /** + * @desc setter for the user Registry + */ + protected function setUsersRegistry(): void + { + self::$usersRegistry = Registry::getInstance()->loadModuleConfigByName(self::CONFIG_MODULE_NAME); + } +} \ No newline at end of file diff --git a/application/settings/config/database/001-acl.sql b/application/settings/config/database/001-acl.sql new file mode 100644 index 0000000..ebc8b97 --- /dev/null +++ b/application/settings/config/database/001-acl.sql @@ -0,0 +1,6 @@ +create table if not exists acl +( + acl_id int auto_increment + primary key, + acl_role varchar(255) null +) engine = InnoDB; \ No newline at end of file diff --git a/application/settings/config/database/002-account.sql b/application/settings/config/database/002-account.sql new file mode 100644 index 0000000..5ae71fa --- /dev/null +++ b/application/settings/config/database/002-account.sql @@ -0,0 +1,7 @@ +create table if not exists account +( + account_id int auto_increment + primary key, + account_name varchar(255) null, + account_active tinyint(1) default 1 null +) engine = InnoDB; \ No newline at end of file diff --git a/application/settings/config/database/003-api_registry.sql b/application/settings/config/database/003-api_registry.sql new file mode 100644 index 0000000..9ffdbf8 --- /dev/null +++ b/application/settings/config/database/003-api_registry.sql @@ -0,0 +1,8 @@ +create table if not exists api_registry +( + api_registry_id int auto_increment + primary key, + api_name varchar(255) null, + api_registered tinyint default 0 null +) engine = InnoDB; + diff --git a/application/settings/config/database/004-timeanddate.sql b/application/settings/config/database/004-timeanddate.sql new file mode 100644 index 0000000..ed346fd --- /dev/null +++ b/application/settings/config/database/004-timeanddate.sql @@ -0,0 +1,7 @@ +create table if not exists timeanddate +( + timeanddate_id int auto_increment + primary key, + timeanddate_date date default current_timestamp() not null, + timeanddate_time timestamp default current_timestamp() not null +) engine = InnoDB; diff --git a/application/settings/config/database/005-user.sql b/application/settings/config/database/005-user.sql new file mode 100644 index 0000000..ae8266b --- /dev/null +++ b/application/settings/config/database/005-user.sql @@ -0,0 +1,11 @@ +create table if not exists user +( + user_id int auto_increment + primary key, + user_firstname varchar(255) null, + user_lastname varchar(255) null, + user_pass varbinary(50) null, + user_login varchar(255) null, + user_account_active tinyint(1) default 0 not null +) engine = InnoDB; + diff --git a/application/settings/config/database/006-user_to_account.sql b/application/settings/config/database/006-user_to_account.sql new file mode 100644 index 0000000..c24715d --- /dev/null +++ b/application/settings/config/database/006-user_to_account.sql @@ -0,0 +1,10 @@ +SET foreign_key_checks = 0; +CREATE TABLE user_to_account ( + account_id int(11) DEFAULT NULL, + user_id int(11) DEFAULT NULL, + KEY user_to_account_account_account_id_fk (account_id), + KEY user_to_account_user_user_id_fk (user_id), + CONSTRAINT user_to_account_account_account_id_fk FOREIGN KEY (account_id) REFERENCES account (account_id), + CONSTRAINT user_to_account_user_user_id_fk FOREIGN KEY (user_id) REFERENCES user (user_id) +) engine = InnoDB; +SET foreign_key_checks = 1; \ No newline at end of file diff --git a/application/settings/config/database/007-timeanddate_to_account.sql b/application/settings/config/database/007-timeanddate_to_account.sql new file mode 100644 index 0000000..2de358b --- /dev/null +++ b/application/settings/config/database/007-timeanddate_to_account.sql @@ -0,0 +1,10 @@ +SET foreign_key_checks = 0; +CREATE TABLE timeanddate_to_account ( + account_id int(11) DEFAULT NULL, + timeanddate_id int(11) DEFAULT NULL, + KEY account_to_timeanddate_account_account_id_fk (account_id), + KEY account_to_timeanddate_timeanddate_timeanddate_id_fk (timeanddate_id), + CONSTRAINT account_to_timeanddate_account_account_id_fk FOREIGN KEY (account_id) REFERENCES account (account_id), + CONSTRAINT account_to_timeanddate_timeanddate_timeanddate_id_fk FOREIGN KEY (timeanddate_id) REFERENCES timeanddate (timeanddate_id) +) engine = InnoDB; +SET foreign_key_checks = 1; \ No newline at end of file diff --git a/application/settings/config/database/008-user_to_acl.sql b/application/settings/config/database/008-user_to_acl.sql new file mode 100644 index 0000000..66e6e21 --- /dev/null +++ b/application/settings/config/database/008-user_to_acl.sql @@ -0,0 +1,10 @@ +SET foreign_key_checks = 0; +CREATE TABLE user_to_acl ( + user_id int(11) NOT NULL, + acl_id int(11) NOT NULL, + KEY user_to_acl_user_user_id_fk (user_id), + KEY user_to_acl_acl_acl_id_fk (acl_id), + CONSTRAINT user_to_acl_acl_acl_id_fk FOREIGN KEY (acl_id) REFERENCES acl (acl_id), + CONSTRAINT user_to_acl_user_user_id_fk FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE +) engine = InnoDB; +SET foreign_key_checks = 1; \ No newline at end of file diff --git a/application/settings/config/database/009-account_to_api_registry.sql b/application/settings/config/database/009-account_to_api_registry.sql new file mode 100644 index 0000000..1cab779 --- /dev/null +++ b/application/settings/config/database/009-account_to_api_registry.sql @@ -0,0 +1,10 @@ +SET foreign_key_checks = 0; +CREATE TABLE account_to_api_registry ( + account_id int(11) NOT NULL, + api_registry_id int(11) DEFAULT NULL, + PRIMARY KEY (account_id), + KEY account_to_api_registry_api_registry_api_registry_id_fk (api_registry_id), + CONSTRAINT account_to_api_registry_account_account_id_fk FOREIGN KEY (account_id) REFERENCES account (account_id), + CONSTRAINT account_to_api_registry_api_registry_api_registry_id_fk FOREIGN KEY (api_registry_id) REFERENCES api_registry (api_registry_id) +) engine = InnoDB; +SET foreign_key_checks = 1; \ No newline at end of file diff --git a/application/settings/config/database/010-timeanddate_to_user.sql b/application/settings/config/database/010-timeanddate_to_user.sql new file mode 100644 index 0000000..c009fde --- /dev/null +++ b/application/settings/config/database/010-timeanddate_to_user.sql @@ -0,0 +1,10 @@ +SET foreign_key_checks = 0; +CREATE TABLE timeanddate_to_user ( + timeanddate_id int(11) NOT NULL, + user_id int(11) NOT NULL, + KEY timeanddate_to_user_timeanddate_timeanddate_id_fk (timeanddate_id), + KEY timeanddate_to_user_user_user_id_fk (user_id), + CONSTRAINT timeanddate_to_user_timeanddate_timeanddate_id_fk FOREIGN KEY (timeanddate_id) REFERENCES timeanddate (timeanddate_id), + CONSTRAINT timeanddate_to_user_user_user_id_fk FOREIGN KEY (user_id) REFERENCES user (user_id) +) engine = InnoDB; +SET foreign_key_checks = 1; diff --git a/application/settings/config/database/011-acl-data.sql b/application/settings/config/database/011-acl-data.sql new file mode 100644 index 0000000..2cf6fd8 --- /dev/null +++ b/application/settings/config/database/011-acl-data.sql @@ -0,0 +1,4 @@ +INSERT INTO acl VALUES +(1,'superuser'), +(2,'moderator'), +(3,'user'); \ No newline at end of file diff --git a/application/settings/config/database/012-add-unique-key-user.sql b/application/settings/config/database/012-add-unique-key-user.sql new file mode 100644 index 0000000..d89142a --- /dev/null +++ b/application/settings/config/database/012-add-unique-key-user.sql @@ -0,0 +1 @@ +ALTER TABLE warehouse_loach.user ADD UNIQUE KEY user_pk (user_login); \ No newline at end of file diff --git a/application/settings/config/database/013-add-account-email.sql b/application/settings/config/database/013-add-account-email.sql new file mode 100644 index 0000000..8116953 --- /dev/null +++ b/application/settings/config/database/013-add-account-email.sql @@ -0,0 +1 @@ +ALTER TABLE warehouse_loach.account ADD COLUMN account_email VARCHAR(255); \ No newline at end of file diff --git a/application/settings/config/database/200-ai_rag_collection.sql b/application/settings/config/database/200-ai_rag_collection.sql new file mode 100644 index 0000000..3f33bd0 --- /dev/null +++ b/application/settings/config/database/200-ai_rag_collection.sql @@ -0,0 +1,20 @@ +-- ============================================================================= +-- ai_rag_collection +-- +-- A named RAG knowledge base. Each collection is a logical grouping of +-- text chunks + their embeddings. The Nibiru AI module's `Rag` plugin +-- reads / writes this table via the auto-generated model in +-- application/model/ai_rag_collection.php. +-- ============================================================================= + +CREATE TABLE IF NOT EXISTS ai_rag_collection ( + ai_rag_collection_id INT(11) NOT NULL AUTO_INCREMENT, + ai_rag_collection_name VARCHAR(64) NOT NULL, + ai_rag_collection_embed_model VARCHAR(128) NOT NULL, + ai_rag_collection_embed_dim INT(11) NOT NULL, + ai_rag_collection_chunk_count INT(11) NOT NULL DEFAULT 0, + ai_rag_collection_created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + ai_rag_collection_updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (ai_rag_collection_id), + UNIQUE KEY ai_rag_collection_name_uk (ai_rag_collection_name) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; diff --git a/application/settings/config/database/201-ai_rag_chunk.sql b/application/settings/config/database/201-ai_rag_chunk.sql new file mode 100644 index 0000000..d4701de --- /dev/null +++ b/application/settings/config/database/201-ai_rag_chunk.sql @@ -0,0 +1,28 @@ +-- ============================================================================= +-- ai_rag_chunk +-- +-- One row per text chunk in a RAG collection. The embedding column stores +-- the vector as a base64-packed Float32Array (4 bytes/dim). Cosine search +-- is done in PHP after fetching all chunks for the collection — fine up +-- to ~10k chunks per collection. For larger sets, drop in a vector index +-- extension (pgvector, MySQL HeatWave LakeHouse vector) and update +-- Rag::search() accordingly. +-- ============================================================================= + +CREATE TABLE IF NOT EXISTS ai_rag_chunk ( + ai_rag_chunk_id INT(11) NOT NULL AUTO_INCREMENT, + ai_rag_chunk_collection_id INT(11) NOT NULL, + ai_rag_chunk_text MEDIUMTEXT NOT NULL, + ai_rag_chunk_metadata JSON NULL, + ai_rag_chunk_embedding LONGTEXT NOT NULL, -- base64-packed Float32Array + ai_rag_chunk_token_count INT(11) NOT NULL DEFAULT 0, + ai_rag_chunk_source VARCHAR(512) NULL, -- denormalised from metadata for indexing + ai_rag_chunk_created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (ai_rag_chunk_id), + KEY ai_rag_chunk_collection_idx (ai_rag_chunk_collection_id), + KEY ai_rag_chunk_source_idx (ai_rag_chunk_source), + CONSTRAINT ai_rag_chunk_collection_fk + FOREIGN KEY (ai_rag_chunk_collection_id) + REFERENCES ai_rag_collection (ai_rag_collection_id) + ON DELETE CASCADE +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; diff --git a/application/settings/config/database/202-ai_conversation.sql b/application/settings/config/database/202-ai_conversation.sql new file mode 100644 index 0000000..3a208aa --- /dev/null +++ b/application/settings/config/database/202-ai_conversation.sql @@ -0,0 +1,18 @@ +-- ============================================================================= +-- ai_conversation +-- +-- A persistent chat conversation. Lets you build apps where the user's +-- chat history with the AI module survives page reloads / sessions. +-- Optional — Chat plugin is happy in-memory if you don't need persistence. +-- ============================================================================= + +CREATE TABLE IF NOT EXISTS ai_conversation ( + ai_conversation_id INT(11) NOT NULL AUTO_INCREMENT, + ai_conversation_user_id INT(11) NULL, -- FK user.user_id, nullable for anonymous + ai_conversation_title VARCHAR(255) NULL, + ai_conversation_model VARCHAR(128) NOT NULL, + ai_conversation_created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + ai_conversation_updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (ai_conversation_id), + KEY ai_conversation_user_idx (ai_conversation_user_id) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; diff --git a/application/settings/config/database/203-ai_message.sql b/application/settings/config/database/203-ai_message.sql new file mode 100644 index 0000000..71a0f14 --- /dev/null +++ b/application/settings/config/database/203-ai_message.sql @@ -0,0 +1,23 @@ +-- ============================================================================= +-- ai_message +-- +-- One row per turn in an ai_conversation. Role is one of: system, user, +-- assistant, tool. token_count is best-effort (filled in by the plugin +-- when the model returns usage info; 0 otherwise). +-- ============================================================================= + +CREATE TABLE IF NOT EXISTS ai_message ( + ai_message_id INT(11) NOT NULL AUTO_INCREMENT, + ai_message_conversation_id INT(11) NOT NULL, + ai_message_role ENUM('system','user','assistant','tool') NOT NULL, + ai_message_content MEDIUMTEXT NOT NULL, + ai_message_tool_name VARCHAR(64) NULL, + ai_message_token_count INT(11) NOT NULL DEFAULT 0, + ai_message_created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (ai_message_id), + KEY ai_message_conversation_idx (ai_message_conversation_id), + CONSTRAINT ai_message_conversation_fk + FOREIGN KEY (ai_message_conversation_id) + REFERENCES ai_conversation (ai_conversation_id) + ON DELETE CASCADE +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; diff --git a/application/settings/config/navigation/main.json b/application/settings/config/navigation/main.json new file mode 100644 index 0000000..e69de29 diff --git a/application/settings/config/settings.development.ini b/application/settings/config/settings.development.ini index fb73e0a..ce6684e 100644 --- a/application/settings/config/settings.development.ini +++ b/application/settings/config/settings.development.ini @@ -11,8 +11,11 @@ caching = true [AUTOLOADER] iface.pos[] = "users" +iface.pos[] = "ai" trait.pos[] = "users" +trait.pos[] = "ai" class.pos[] = "users" +class.pos[] = "ai" class.plugin.pos[] = "" [EMAIL] diff --git a/application/settings/config/settings.production.ini.example b/application/settings/config/settings.production.ini.example new file mode 100644 index 0000000..cea1c4f --- /dev/null +++ b/application/settings/config/settings.production.ini.example @@ -0,0 +1,68 @@ +; ===================================================================== +; Main application settings — production environment. +; +; Copy to settings.production.ini on the production host and fill in +; real values. settings.production.ini SHOULD be gitignored — add it +; to .gitignore before deploying. +; +; Mirror the structure of settings.development.ini and override only +; the values that differ in production. +; ===================================================================== + +[ENGINE] +cache = "/../../application/view/cache/" +templates = "/../../application/view/templates/" +templates_c = "/../../application/view/templates_c/" +config_dir = "/../../application/view/configs/" +debug_template = "/../../application/view/templates/shared/debug.tpl" +error_template = "/../../application/view/templates/shared/error.tpl" +error_controller = "error" +debugbar = false ; OFF in production +caching = true + +[AUTOLOADER] +iface.pos[] = "users" +iface.pos[] = "ai" +trait.pos[] = "users" +trait.pos[] = "ai" +class.pos[] = "users" +class.pos[] = "ai" +class.plugin.pos[] = "" + +[SETTINGS] +pageurl = "https://your-app.example.com" +navigation = "/../../application/settings/config/navigation.json" +modulespath = "/../../application/module/" +entriesperpage = 25 +timezone = "Europe/Vienna" +smarty.css[] = "/public/css/app.min.css" +smarty.js[] = "/public/js/app.min.js" + +[DATABASE] +driver = "pdo" +hostname = "your-prod-db-host" +port = 3306 +username = "REPLACE_ME" +password = "REPLACE_ME" +basename = "your_prod_db_name" +encoding = "utf8mb4" +is.active = true + +[GENERATOR] +; In production: don't regenerate models on every request. Generate once +; locally, commit the resulting application/model/*.php files, ship. +database = false +database.overwrite = false + +[SECURITY] +password_hash = "REPLACE_WITH_A_LONG_RANDOM_SALT" + +[EMAIL] +register.smtp = 1 +register.smtp[host] = "smtp.your-host.example" +register.smtp[port] = "587" +register.smtp[username] = "REPLACE_ME" +register.smtp[password] = "REPLACE_ME" +register.from = "no-reply@your-app.example.com" +register.sender = "Your App" +register.subject = "Welcome" diff --git a/application/view/mockup/gulpfile.js b/application/view/mockup/gulpfile.js new file mode 100644 index 0000000..9e56035 --- /dev/null +++ b/application/view/mockup/gulpfile.js @@ -0,0 +1,73 @@ +// Require Gulp +var gulp = require('gulp'); // https://github.com/gulpjs/gulp | http://gulpjs.com/ + +// Require Gulp Plugins +var less = require('gulp-less'), // https://github.com/plus3network/gulp-less + minifyCSS = require('gulp-minify-css'), // https://github.com/murphydanger/gulp-minify-css + rename = require('gulp-rename'), // https://github.com/hparra/gulp-rename + concat = require('gulp-concat'), // https://github.com/contra/gulp-concat + uglify = require('gulp-uglify'), // https://github.com/terinjokes/gulp-uglify + browserSync = require('browser-sync').create(), // https://github.com/BrowserSync/browser-sync + reload = browserSync.reload; + +// Parent folder, you can change it if you have a different folder name +var parentFolder = 'template/'; + +// Concatenate the scripts in the right order +var scriptsOrder = [ + parentFolder + 'js/dev/libs/*', // Libs + parentFolder + 'js/dev/libs/plugins/*.js', // Plugins + parentFolder + 'js/dev/modules.js' // Modules +]; + +// Compile Less files +gulp.task('less', function() { + return gulp.src(parentFolder + 'less/style.less'). + pipe(less()). + pipe(minifyCSS({ + mediaMerging: true + })). + pipe(rename({ + suffix: '.min' + })). + pipe(gulp.dest(parentFolder + 'css')). + pipe(reload({ + stream: true + })); +}); + +// Concatenate JavaScript files +gulp.task('scripts', function () { + return gulp.src(scriptsOrder). + pipe(concat('all.js')). + pipe(gulp.dest(parentFolder + 'js')). + pipe(reload({ + stream: true + })); +}); + +// Concatenate and minify JavaScript files +gulp.task('scriptsMin', function () { + console.log(scriptOrder); + return gulp.src(scriptsOrder). + pipe(concat('all.js')). + pipe(uglify()). + pipe(gulp.dest(parentFolder + 'js')); +}); + +// Watch for file changes and trigger browser reload +gulp.task('watch', function () { + browserSync.init({ + server: parentFolder + }); + + gulp.watch(parentFolder + 'less/**/*.less', ['less']); + gulp.watch(parentFolder + '**/*.html').on('change', browserSync.reload); + gulp.watch(parentFolder + 'js/dev/**/*.js', ['scripts']); +}); + +// Development Build [run 'gulp dev' in your terminal] +gulp.task('dev', ['less', 'scripts', 'watch']); + +// Production Build [run 'gulp prod' in your terminal] +gulp.task('prod', ['less', 'scriptsMin']); \ No newline at end of file diff --git a/application/view/mockup/package-lock.json b/application/view/mockup/package-lock.json new file mode 100644 index 0000000..9a98aaa --- /dev/null +++ b/application/view/mockup/package-lock.json @@ -0,0 +1,7508 @@ +{ + "name": "vsdocs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vsdocs", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "browser-sync": "^2.11.1", + "gulp": "^4.0.2", + "gulp-concat": "^2.6.0", + "gulp-less": "^3.0.5", + "gulp-minify-css": "^1.2.3", + "gulp-rename": "^1.2.2", + "gulp-uglify": "^3.0.2" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", + "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accord": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/accord/-/accord-0.28.0.tgz", + "integrity": "sha512-sPF34gqHegaCSryKf5wHJ8wREK1dTZnHmC9hsB7D8xjntRdd30DXDPKf0YVIcSvnXJmcYu5SCvZRz28H++kFhQ==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.5.0", + "glob": "^7.0.5", + "indx": "^0.2.3", + "lodash.clone": "^4.3.2", + "lodash.defaults": "^4.0.1", + "lodash.flatten": "^4.2.0", + "lodash.merge": "^4.4.0", + "lodash.partialright": "^4.1.4", + "lodash.pick": "^4.2.1", + "lodash.uniq": "^4.3.0", + "resolve": "^1.5.0", + "semver": "^5.3.0", + "uglify-js": "^2.8.22", + "when": "^3.7.8" + } + }, + "node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "dev": true, + "optional": true, + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/align-text/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-diff/node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", + "dev": true, + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "optional": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "dev": true, + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "optional": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true, + "optional": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "dev": true, + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "optional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", + "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.29.3", + "browser-sync-ui": "^2.29.3", + "bs-recipes": "1.3.4", + "chalk": "4.1.2", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^4.0.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", + "dev": true + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bufferstreams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.0.1.tgz", + "integrity": "sha512-LZmiIfQprMLS6/k42w/PTc7awhU8AdNNcUerxTgr01WlP9agR2SgMv0wjlYYFD6eDOi8WvofrTX8RayjR/AeUQ==", + "dev": true, + "dependencies": { + "readable-stream": "^1.0.33" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/bufferstreams/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/bufferstreams/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/bufferstreams/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "optional": true + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", + "dev": true, + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", + "dev": true, + "dependencies": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "bin": { + "cleancss": "bin/cleancss" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "optional": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", + "dev": true, + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", + "dev": true, + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/copy-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "optional": true, + "dependencies": { + "boom": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashdash/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "dev": true, + "dependencies": { + "readable-stream": "~1.1.9" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "optional": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", + "dev": true + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/findup-sync/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==", + "dev": true, + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/getpass/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/gulp-cli/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/gulp-cli/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "node_modules/gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==", + "dev": true, + "dependencies": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-less": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-3.5.0.tgz", + "integrity": "sha512-FQLY7unaHdTOXG0jlwxeBQcWoPPrTMQZRA7HfYwSNi9IPVx5l7GJEN72mG4ri2yigp/f/VNGUAJnFMJHBmH3iw==", + "dev": true, + "dependencies": { + "accord": "^0.28.0", + "less": "2.6.x || ^2.7.1", + "object-assign": "^4.0.1", + "plugin-error": "^0.1.2", + "replace-ext": "^1.0.0", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-minify-css": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/gulp-minify-css/-/gulp-minify-css-1.2.4.tgz", + "integrity": "sha512-byBqFQM/HrZoUVYihu/03iYH4m7U5TjSGhr6/7JvpMHh9+woewsCtEp6Noif2VXB+idDoM4ECd9sw+St+KFqsg==", + "deprecated": "Please use gulp-clean-css", + "dev": true, + "dependencies": { + "clean-css": "^3.3.3", + "gulp-util": "^3.0.5", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.0", + "vinyl-bufferstream": "^1.0.1", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "node_modules/gulp-rename": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", + "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-uglify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", + "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "extend-shallow": "^3.0.2", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "isobject": "^3.0.1", + "make-error-cause": "^1.1.1", + "safe-buffer": "^5.1.2", + "through2": "^2.0.0", + "uglify-js": "^3.0.5", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "node_modules/gulp-uglify/node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", + "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", + "dev": true, + "dependencies": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/gulp-util/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-util/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-util/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-util/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/gulp-util/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "dev": true + }, + "node_modules/gulp-util/node_modules/object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-util/node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gulp-util/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-util/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/gulp-util/node_modules/vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", + "dev": true, + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "dev": true, + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw==", + "deprecated": "this library is no longer supported", + "dev": true, + "optional": true, + "dependencies": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==", + "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "dev": true, + "optional": true, + "dependencies": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indx": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz", + "integrity": "sha512-SEM+Px+Ghr3fZ+i9BNvUIZJ4UhojFuf+sT7x3cl2/ElL7NXne1A/m29VYzWTTypdOgDnWfoKNewIuPA6y+NMyQ==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "optional": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "optional": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "optional": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "optional": true + }, + "node_modules/json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "dev": true, + "optional": true, + "dependencies": { + "jsonify": "^0.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "optional": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", + "dev": true, + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "dev": true, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=0.12" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dev": true, + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/localtunnel/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", + "dev": true + }, + "node_modules/lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", + "dev": true + }, + "node_modules/lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", + "dev": true + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "dev": true + }, + "node_modules/lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", + "dev": true + }, + "node_modules/lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", + "dev": true + }, + "node_modules/lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", + "dev": true + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "dev": true + }, + "node_modules/lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", + "dev": true + }, + "node_modules/lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", + "dev": true, + "dependencies": { + "lodash._root": "^3.0.0" + } + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "dev": true + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "dev": true + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", + "dev": true + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "dev": true, + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.partialright": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", + "integrity": "sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==", + "dev": true + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, + "node_modules/lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "dev": true + }, + "node_modules/lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", + "dev": true, + "dependencies": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-error-cause": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", + "integrity": "sha512-4TO2Y3HkBnis4c0dxhAgD/jprySYLACf7nwN6V0HAHDx59g12WlRpUmFy1bRHamjGUEEBrEvCq6SUpsEE2lhUg==", + "dev": true, + "dependencies": { + "make-error": "^1.2.0" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", + "dev": true, + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", + "dev": true, + "dependencies": { + "duplexer2": "0.0.2" + } + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==", + "dev": true, + "optional": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "dev": true, + "dependencies": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "dev": true, + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dev": true, + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "optional": true + }, + "node_modules/qs": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.1.tgz", + "integrity": "sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "optional": true, + "dependencies": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "dev": true, + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", + "dev": true, + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==", + "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "dev": true, + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "optional": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true, + "optional": true + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", + "dev": true, + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "optional": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", + "dev": true, + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/uglify-js/node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", + "dev": true, + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-js/node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", + "dev": true, + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", + "dev": true, + "optional": true + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "optional": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-bufferstream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vinyl-bufferstream/-/vinyl-bufferstream-1.0.1.tgz", + "integrity": "sha512-yCCIoTf26Q9SQ0L9cDSavSL7Nt6wgQw8TU1B/bb9b9Z4A3XTypXCGdc5BvXl4ObQvVY8JrDkFnWa/UqBqwM2IA==", + "dev": true, + "dependencies": { + "bufferstreams": "1.0.1" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "dev": true, + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/vinyl-sourcemaps-apply/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==", + "dev": true + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", + "dev": true + }, + "node_modules/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/application/view/mockup/package.json b/application/view/mockup/package.json new file mode 100644 index 0000000..d4fb198 --- /dev/null +++ b/application/view/mockup/package.json @@ -0,0 +1,24 @@ +{ + "name": "vsdocs", + "version": "1.0.0", + "description": "Most advanced documentation template on ThemeForest", + "main": "gulpfile.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "documentation", + "template" + ], + "author": "VSArt", + "license": "ISC", + "devDependencies": { + "browser-sync": "^2.11.1", + "gulp": "^4.0.2", + "gulp-concat": "^2.6.0", + "gulp-less": "^3.0.5", + "gulp-minify-css": "^1.2.3", + "gulp-rename": "^1.2.2", + "gulp-uglify": "^3.0.2" + } +} diff --git a/application/view/mockup/template/404.html b/application/view/mockup/template/404.html new file mode 100644 index 0000000..6577fe2 --- /dev/null +++ b/application/view/mockup/template/404.html @@ -0,0 +1,87 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+ 4our + 0ero + 4our +
+
+

Page

+

Not

+

Found

+

We can’t seem to find the page you are looking for.

+ go back to homepage + + +
+ contact us + + +
+
+
+
+
+
+ +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/article.html b/application/view/mockup/template/article.html new file mode 100644 index 0000000..6a7b800 --- /dev/null +++ b/application/view/mockup/template/article.html @@ -0,0 +1,1227 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ +
+
+
+
+
+
+ +
+ +

Microbot Push Is A Smart Button For Dumb Devices.

+ + + + + + article featured image + + +
+

Harum, placeat! Eligendi deleniti quasi magni, aliquid, minima reprehenderit nostrum eum nesciunt illo quas, placeat dignissimos suscipit dicta optio soluta corporis facilis nihil quod in. Labore facilis error reprehenderit. Voluptates ad incidunt + sint dolore dicta dignissimos nemo eaque illo fuga modi neque a vero distinctio voluptate officia, voluptatum nostrum + quibusdam alias voluptatibus!

+

Animi sed reiciendis quaerat minus deleniti harum hic alias ipsum ullam eius soluta placeat delectus laboriosam illo dolor esse nemo, dolorum quasi facere quisquam! Tempora voluptatem porro eaque magnam + molestiae est magni nulla possimus autem a consequatur explicabo pariatur non, alias maxime, iusto hic dignissimos enim aut minima quos. Modi repellat, sapiente.

+

Expedita repellendus, incidunt nam deleniti iure distinctio ut autem, aut molestiae praesentium maiores totam error, a doloremque tempore, quaerat voluptatum laudantium. Aperiam quod rerum minima voluptates dolores quisquam + nobis tempora sapiente sunt, fuga, nulla error, quis. Ratione laudantium nulla, voluptas saepe architecto quisquam aliquam alias, dicta explicabo ipsum accusamus sunt! Ad, nesciunt?

+
+ + + +
+

Quibusdam minus libero blanditiis necessitatibus vel, explicabo. Est, recusandae, iusto. Iste, est, et? Alias assumenda temporibus, impedit aliquid quas autem! Consequuntur delectus, dolore. At nisi officiis ea esse! Obcaecati, facilis aliquam. + Atque veniam, blanditiis praesentium est minima corporis recusandae ratione assumenda animi.

+
+

Dolore, culpa assumenda maxime soluta deleniti! Molestias, aliquam nostrum? Hic labore molestias, voluptate, dicta earum facere quibusdam, fugit quas quia accusamus officia. +
+ Billye Turchetta +

+
+

Cupiditate accusamus ex perferendis quia molestiae iusto ut officia minus odio facilis numquam pariatur + laborum molestias debitis ipsam, distinctio labore aperiam, iure totam tenetur illo ipsa nesciunt! Cum perferendis harum commodi nesciunt ab ullam quibusdam, distinctio laborum tempore labore laudantium, inventore dolorem!

+

Provident aspernatur consectetur, dolor, debitis optio cumque, dignissimos recusandae beatae quasi atque dicta eaque veritatis cum hic. Vel laudantium saepe delectus consequuntur, qui voluptate molestiae minima odio maxime illo voluptatibus + iste aspernatur quod quae temporibus, inventore enim ducimus facere amet consequatur sequi.

+ + + + + + +
+ + +
+ Older Post + Newer Post +
+ + +
+

Comments (6)

+ +
+
    +
  • + +
    + +
    + user profile photo
    + + +
    +
    + +
    + Anonimous +
    + + +
      +
    • 9 likes
    • +
    • 2015-03-15
    • +
    + +
    + +

    Facere blanditiis iste animi facilis, incidunt exercitationem rerum officiis aut quisquam architecto mollitia quo accusamus debitis quam enim maiores quod, ullam temporibus, repellat nesciunt repudiandae. Earum, hic fugit. Facilis nihil + dicta quos.

    + + + + +
    + +
    + +
  • +
  • + +
    + +
    + user profile photo
    + + +
    +
    + + + + +
      +
    • 11 likes
    • +
    • 2015-02-18
    • +
    + +
    + +

    Maxime, blanditiis impedit aperiam ut. Adipisci itaque ex perferendis autem voluptates nemo, blanditiis atque saepe officia aut soluta recusandae quas eius asperiores.

    + + + + +
    + +
    + +
    +
      +
    • + +
      + +
      + user profile photo
      + + +
      +
      + + + + +
        +
      • 1 likes
      • +
      • 2015-09-15
      • +
      + +
      + +

      Eveniet, asperiores, atque ratione excepturi tempore rem, illum eius nam qui nostrum laboriosam nihil. Soluta ipsam minima dolorem labore placeat inventore temporibus.

      + + + + +
      + +
      + +
    • +
    • + +
      + +
      + user profile photo
      + + +
      +
      + + + + +
        +
      • 15 likes
      • +
      • 2015-05-10
      • +
      + +
      + +

      Doloribus impedit saepe labore eaque, autem quos laboriosam corrupti quis tempore expedita officiis perferendis quasi atque, consectetur dolorem sed vitae. Ea, consectetur.

      + + + + +
      + +
      + +
    • +
    +
    +
  • +
  • + +
    + +
    + user profile photo
    + + +
    +
    + + + + +
      +
    • 1 likes
    • +
    • 2015-09-15
    • +
    + +
    + +

    Eveniet, asperiores, atque ratione excepturi tempore rem, illum eius nam qui nostrum laboriosam nihil. Soluta ipsam minima dolorem labore placeat inventore temporibus.

    + + + + +
    + +
    + +
  • +
  • + +
    + +
    + user profile photo
    + + +
    +
    + + + + +
      +
    • 15 likes
    • +
    • 2015-05-10
    • +
    + +
    + +

    Doloribus impedit saepe labore eaque, autem quos laboriosam corrupti quis tempore expedita officiis perferendis quasi atque, consectetur dolorem sed vitae. Ea, consectetur.

    + + + + +
    + +
    + +
  • +
+

Leave a comment

+ +
+
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
+
    +
  • + +
  • +
  • + +
  • +
+
+
+
+ +
+ +
+ + +
+

Related articles

+ +
+ +
+ +
+
+ +
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/blog-grid.html b/application/view/mockup/template/blog-grid.html new file mode 100644 index 0000000..b1b0d19 --- /dev/null +++ b/application/view/mockup/template/blog-grid.html @@ -0,0 +1,957 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Latest news

+

An important part of our job is keeping you up to date and staying close to new tools, trends and workflows. So subscribe and get our fresh news shipped directly to your door.

+
+ +
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+
+ + + article image +
+

+ Consectetur adipisicing elit. Neque earum beatae ex est numquam! +

+

Reiciendis inventore culpa quo pariatur minima, voluptates hic eum vitae harum architecto similique, ipsa nam unde recusandae placeat assumenda! Repudiandae dolores.

+
+ October 28, 2015 + by + John Doe + +
+
+ +
+
+ +
+
+ + + article image +
+

+ Ducimus iusto aperiam placeat sint reiciendis velit, id saepe nobis! +

+

Distinctio dolorem odit deleniti omnis voluptate porro non saepe excepturi dicta fugit incidunt unde ipsa ab mollitia at architecto, modi illum cumque.

+
+ October 28, 2015 + by + John Doe + +
+
+ +
+
+
+
+ +
+
+ + + article image +
+

+ Molestias nam assumenda vero tenetur, libero sed distinctio in. Quibusdam! +

+

Quo quia praesentium unde voluptate porro hic ea rerum consectetur ducimus maiores, quos non veritatis ipsam aliquid. Corporis veritatis, illo repudiandae praesentium?

+
+ October 28, 2015 + by + John Doe + +
+
+ +
+
+ +
+
+ + + article image +
+

+ Ea dolore quaerat aut deleniti illo sed ratione, ipsam debitis. +

+

Praesentium beatae aliquam quia eligendi omnis vel tenetur tempore? Unde reiciendis exercitationem dolor repudiandae quam repellendus assumenda maxime labore, a fugiat id.

+
+ October 28, 2015 + by + John Doe + +
+
+ +
+
+
+
+ +
+
+ + + article image +
+

+ Consectetur adipisicing elit. Neque earum beatae ex est numquam! +

+

Veritatis quia provident, magnam nobis id, adipisci laudantium. Dolor error minima, fuga. Enim, perspiciatis praesentium distinctio reiciendis. Recusandae culpa aut odit.

+
+ October 28, 2015 + by + John Doe + +
+
+ +
+
+ +
+
+ + + article image +
+

+ Ducimus iusto aperiam placeat sint reiciendis velit, id saepe nobis! +

+

Recusandae beatae iste numquam ea neque adipisci, error quis aut illo magni unde aliquid vero mollitia fugit repudiandae, cupiditate! Aspernatur, quos, enim.

+
+ October 28, 2015 + by + John Doe + +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/blog-list.html b/application/view/mockup/template/blog-list.html new file mode 100644 index 0000000..d5fff71 --- /dev/null +++ b/application/view/mockup/template/blog-list.html @@ -0,0 +1,993 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Latest news

+

An important part of our job is keeping you up to date and staying close to new tools, trends and workflows. So subscribe and get our fresh news shipped directly to your door.

+
+ +
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+ + + article image +
+
+
+

+ Consectetur adipisicing elit. Neque earum beatae ex est numquam! +

+

Reiciendis inventore culpa quo pariatur minima, voluptates hic eum vitae harum architecto similique, ipsa nam unde recusandae placeat assumenda! Repudiandae dolores.

+
+ October 28, 2015 + by + John Doe + +
+
+
+
+ +
+
+ +
+
+
+
+ + + article image +
+
+
+

+ Ducimus iusto aperiam placeat sint reiciendis velit, id saepe nobis! +

+

Distinctio dolorem odit deleniti omnis voluptate porro non saepe excepturi dicta fugit incidunt unde ipsa ab mollitia at architecto, modi illum cumque.

+
+ October 28, 2015 + by + John Doe + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + + article image +
+
+
+

+ Molestias nam assumenda vero tenetur, libero sed distinctio in. Quibusdam! +

+

Quo quia praesentium unde voluptate porro hic ea rerum consectetur ducimus maiores, quos non veritatis ipsam aliquid. Corporis veritatis, illo repudiandae praesentium?

+
+ October 28, 2015 + by + John Doe + +
+
+
+
+ +
+
+ +
+
+
+
+ + + article image +
+
+
+

+ Ea dolore quaerat aut deleniti illo sed ratione, ipsam debitis. +

+

Praesentium beatae aliquam quia eligendi omnis vel tenetur tempore? Unde reiciendis exercitationem dolor repudiandae quam repellendus assumenda maxime labore, a fugiat id.

+
+ October 28, 2015 + by + John Doe + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + + article image +
+
+
+

+ Consectetur adipisicing elit. Neque earum beatae ex est numquam! +

+

Veritatis quia provident, magnam nobis id, adipisci laudantium. Dolor error minima, fuga. Enim, perspiciatis praesentium distinctio reiciendis. Recusandae culpa aut odit.

+
+ October 28, 2015 + by + John Doe + +
+
+
+
+ +
+
+ +
+
+
+
+ + + article image +
+
+
+

+ Ducimus iusto aperiam placeat sint reiciendis velit, id saepe nobis! +

+

Recusandae beatae iste numquam ea neque adipisci, error quis aut illo magni unde aliquid vero mollitia fugit repudiandae, cupiditate! Aspernatur, quos, enim.

+
+ October 28, 2015 + by + John Doe + +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/book.html b/application/view/mockup/template/book.html new file mode 100644 index 0000000..9e54e0e --- /dev/null +++ b/application/view/mockup/template/book.html @@ -0,0 +1,501 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Book

+

Presenting two different layouts of book overviews, very handy for projects that need more assistance.

+
+ +
+
+
+
+
+ +
+
+
+
+ +
+

Single book + + + + + +

+

Laravel Starter - is the ideal introduction to this game-changing framework. Learn best-practiced approaches to web-application development with Laravel from a seasoned professional.

+
+ + +
+
+
+ book cover
+
+

Working with Laravel

+

The definitive introduction to the Laravel PHP web development framework. Get started with a useful application example that is immediately applicable to real-world applications. Learn how to implement powerful relationships with Eloquent

+ +
+
+
+ + +
+

Grid books + + + + + +

+

Laravel is fundamentally changing the PHP web-development landscape. Laravel is bringing the paradigm-shifts that PHP developers have been craving.

+
+ + +
+
+
+
+ book cover +
+

+ KnockoutJS Essentials +

+

by: John Doe

+

year: 2015

+

type: paper

+

paperback: 364 pages

+

price: free

+
+
+
+
+
+ book cover +
+

+ Learning Highcharts +

+

by: Alise Doe

+

year: 2015

+

type: e-book

+

paperback: 364 pages

+

price: $32

+
+
+
+
+
+ + +
+
+
+
+ book cover +
+

+ KnockoutJS Essentials +

+

by: John Doe

+

year: 2015

+

type: paper

+

paperback: 364 pages

+

price: free

+
+
+
+
+
+ book cover +
+

+ Learning Highcharts +

+

by: Alise Doe

+

year: 2015

+

type: e-book

+

paperback: 364 pages

+

price: $32

+
+
+
+
+
+ +
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/boxes.html b/application/view/mockup/template/boxes.html new file mode 100644 index 0000000..5054df2 --- /dev/null +++ b/application/view/mockup/template/boxes.html @@ -0,0 +1,690 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Boxes

+

Some variations of boxes components that will greatly simplify your work.

+
+ +
+
+
+
+
+ +
+
+
+
+ +
+

Stats with icons + + + + + +

+

You may use this component to display your impressive stats and achievements.

+
+ +
+
+
+ +
+
+ +
+
+ 0 +
+
forks on GitHub
+
+ +
+
+ +
+
+ +
+
+ 0 +
+
stars on GitHub
+
+ +
+
+ +
+
+ +
+
+ 0kb
+
production weight
+
+ +
+
+ +
+
+ +
+
+ 0kb
+
development weight
+
+ +
+
+
+ +
+

Small icons + + + + + +

+
+ +
+
+ +
+ +

Components

+

Dolores, dolore! Iusto veritatis nesciunt quaerat officia eveniet sunt eligendi. Nulla ducimus expedita, voluptas beatae, ipsum itaque.

+
+ +
+
+ +
+ +

Colors

+

Architecto tempora id, reprehenderit, aliquam corporis illum in eius vero rem qui reiciendis, dolorem nam iure totam.

+
+ +
+
+
+
+ +
+ +

Customization

+

Nemo, aliquid, alias! A quod doloremque minima porro sequi, facilis velit dolorum iusto assumenda, sed, nemo provident?

+
+ +
+
+ +
+ +

Premium

+

Voluptates, rerum, iusto sit, temporibus iure autem vel esse sapiente dolorum nostrum qui dignissimos officiis ea! Possimus.

+
+ +
+
+ +
+

Small icons + + + + + +

+
+ +
+
+ +
+ box icon +

Layouts

+

This is the first example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+ box icon +

Colors

+

This is the second example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+ box icon +

Components

+

This is the third example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+
+
+ +
+ box icon +

Attention

+

This is the fourth example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+ box icon +

Most advanced

+

This is the fifth example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+ box icon +

Configs

+

This is the sixth example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+

Large icons + + + + + +

+
+ +
+
+ +
+ +

Nested

+

This is the first example of boxes with Title, Content and a small font-awesome icon. All the content is aligned center.

+
+ +
+
+ +
+ +

Colors

+

This is the second example of boxes with Title, Content and a small font-awesome icon. All the content is aligned center.

+
+ +
+
+ +
+ +

Components

+

This is the third example of boxes with Title, Content and a small font-awesome icon. All the content is aligned center.

+
+ +
+
+ +
+

With buttons + + + + + +

+
+ +
+
+ +
+

Source

+

The Bootstrap source code download includes the precompiled CSS, JavaScript, and font assets, along with source Less, JavaScript, and documentation.

+ Download Bootstrap +
+ +
+
+ +
+

Grunt

+

To install Grunt, you must first download and install node.js (which includes npm). npm stands for node packaged modules and is a way to manage development dependencies through node.js.

+ Download source +
+ +
+
+ +
+

Template

+

Start with this basic HTML template, or modify these examples. We hope you'll customize our templates and examples, adapting them to suit your needs.

+ Download Sass +
+ +
+
+ +
+

With images + + + + + +

+
+ +
+
+ +
+ box image +

Layouts

+

Nothing but the basics: compiled CSS and JavaScript along with a container.

+
+ +
+
+ +
+ box image +

Colors

+

Load the optional Bootstrap theme for a visually enhanced experience.

+
+ +
+
+ +
+ box image +

Components

+

Multiple examples of grid layouts with all four tiers, nesting, and more.

+
+ +
+
+ +
+ box image +

Headers

+

Build around the jumbotron with a navbar and some basic grid columns.

+
+ +
+
+
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/buttons.html b/application/view/mockup/template/buttons.html new file mode 100644 index 0000000..e0ab98c --- /dev/null +++ b/application/view/mockup/template/buttons.html @@ -0,0 +1,903 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Buttons

+

Buttons are convenient tools when you need more traditional actions.

+
+ +
+
+
+
+
+ +
+
+
+ +
+

Regular buttons + + + + + +

+

Huge variety of buttons with active and hover states predefined.

+
+ + + + + +
+

Outline buttons + + + + + +

+

The same variety and behavior for the outline buttons.

+
+ + + + + +
+

Rounded buttons + + + + + +

+
+ + + + + +
+

Full width buttons + + + + + +

+

Need an extremely huge button? No problem.

+
+ +
+
+ Success +
+
+ Primary +
+
+
+
+ Success +
+
+ Primary +
+
+
+
+ Success +
+
+ Primary +
+
+ +
+

Buttons with icons + + + + + +

+

You can easily use FontAwesome within this buttons.

+
+ + + + + + + + +
+

Social buttons + + + + + +

+

Few predefined sizes for the social icons.

+
+ + + + + + + + + + +
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/changelog.html b/application/view/mockup/template/changelog.html new file mode 100644 index 0000000..d98913a --- /dev/null +++ b/application/view/mockup/template/changelog.html @@ -0,0 +1,1688 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Changelog

+

Here you can find all the new features we have implemented. This page is also included in the package so you can use it to build the changelog of your awesome project.

+
+ +
+
+
+
+
+ +
+
+
+
+ +
+ +
+ + + + + + + + +
scroll to + + +
+ +
+ + +
+ +
+ +
+

+ v2.1.1 +

+

2016 - 04 - 08

+ +
+ + +
+

+ bug-fix Fixed the offset navigation on the one page docs with a sticky header.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
template/js/dev/libs/plugins/jquery.nav.js
+
template/js/dev/modules.js
+
template/js/preprod/modules.js
+
template/js/preprod/vendor.js
+
template/js/all.js
+
+
+ + +
+ + +
+ +
+

+ v2.1.0 +

+

2016 - 03 - 09

+ +
+ + +
+

+ feature Implemented the 'preprod' mode, it's something between the development and production mode. Very useful for those who want to slightly customize the JavaScript behavior without touching the vendor scripts. For more information + see the + documentation.

+

+ feature + 404 error page implemented.

+

+ feature + Text file tree implemented.

+

+ feature + Featured boxed implemented.

+

+ feature Page + preloader implemented. For more information on how to activate it on your page please see the + documentation.

+

+ feature + Audio player implemented.

+

+ feature Simple + accordion implemented.

+

+ feature + FAQ categories implemented, handy for a massive FAQ knowledge base.

+

+ feature + Recommended products widget implemented.

+

+ feature Small + browser support table implemented.

+

+ improvement Implemented the "scroll to version" functionality, now you can easily navigate to a specific version using the navigation bar. Also each version has an unique fragment identifier that permits to share the link to a specific + version.

+

+ improvement Implemented a working file status filter on the changelog page.

+

+ improvement Small CSS improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
template/img/backgrounds/14.jpg
+
template/js/preprod/custom.js
+
template/js/preprod/modules.js
+
template/js/preprod/vendor.js
+
template/less/modules/_404.less
+
template/less/modules/_accordion.less
+
template/less/modules/_audio.less
+
template/less/modules/_browsers-table.less
+
template/less/modules/_faq-article.less
+
template/less/modules/_faq-table-of-contents.less
+
template/less/modules/_featured-boxes.less
+
template/less/modules/_file-tree-text.less
+
template/less/modules/_preloader.less
+
template/less/modules/_widget-recommended-products.less
+
template/less/modules/_widget.less
+
template/404.html
+
template/home-with-preloader.html
+
template/preprod-boilerplate.html
+
template/js/preprod
+
template/css/style.css
+
template/css/style.min.css
+
template/js/dev/modules.js
+
template/js/all.js
+
template/less/global/_config.less
+
template/less/global/_general.less
+
template/less/modules/_article-comment.less
+
template/less/modules/_article.less
+
template/less/modules/_browsers.less
+
template/less/modules/_changelog.less
+
template/less/modules/_code-highlight.less
+
template/less/modules/_faq.less
+
template/less/modules/_file-tree.less
+
template/less/modules/_gif-player.less
+
template/less/modules/_languages.less
+
template/less/modules/_menu-vertical.less
+
template/less/modules/_menu.less
+
template/less/modules/_promo-title.less
+
template/less/modules/_search.less
+
template/less/modules/_steps-slider.less
+
template/less/modules/_testimonial.less
+
template/less/modules/_video-playlist-custom.less
+
template/less/style.less
+
All the HTML files were updated
+
+
+ + +
+ + +
+ +
+

+ v2.0.0 +

+

2016 - 02 - 24

+ +
+ + +
+

+ feature Configured and added a + gulp file to the project.

+

+ feature + Request demo section implemented.

+

+ feature + Mobile App features section implemented.

+

+ feature + Video section implemented.

+

+ feature Blog + list view implemented.

+

+ feature + Visual guide element implemented.

+

+ feature + Table of contents element implemented.

+

+ feature + Donate element implemented.

+

+ feature + Ask for a rate modal implemented.

+

+ feature Added social share and subscribe widgets in the footer.

+

+ feature Implemented a + sticky behavior for all the headers. For more information see the + documentation.

+

+ improvement Written a + short documentation on theme's typography.

+

+ improvement Provided links in the changelog pointing to the updated pages.

+

+ improvement Linted the JavaScript code.

+

+ improvement Minor Less and CSS improvements.

+

+ improvement Updated the documentation accordingly to the new improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
template/img/backgrounds/13.jpg
+
template/img/helpers/play-dark.png
+
template/js/dev/libs/plugins/bootstrap-rating.min.js
+
template/js/dev/libs/plugins/jquery.rating.min.js
+
template/less/modules/_donate.less
+
template/less/modules/_mobile-app-features.less
+
template/less/modules/_modal-alt.less
+
template/less/modules/_rate.less
+
template/less/modules/_socials-footer.less
+
template/less/modules/_subscribe-footer.less
+
template/less/modules/_table-of-contents.less
+
template/less/modules/_video-section.less
+
template/less/modules/_visual-guide.less
+
template/blog-list.html
+
template/home-one-page-header-fixed.html
+
template/home-one-page.html
+
template/visual-guide.html
+
gulpfile.js
+
package.json
+
template/css/style.css
+
template/css/style.min.css
+
template/js/dev/modules.js
+
template/js/all.js
+
template/less/global/_backgrounds.less
+
template/less/global/_general.less
+
template/less/global/_mixins.less
+
template/less/global/_text.less
+
template/less/modules/_browsers.less
+
template/less/modules/_button.less
+
template/less/modules/_faq.less
+
template/less/modules/_footer.less
+
template/less/modules/_forms.less
+
template/less/modules/_header.less
+
template/less/modules/_languages.less
+
template/less/modules/_menu.less
+
template/less/modules/_one-page.less
+
template/less/modules/_promo-title.less
+
template/less/modules/_steps.less
+
template/less/modules/_subscribe-form.less
+
template/less/style.less
+
All the HTML files were updated
+
index-6.html
+
+
+ + +
+ + +
+ +
+

+ v1.9.0 +

+

2016 - 02 - 12

+ +
+ + +
+

+ feature 4 Brand New Static Headers added for + web app, + mobile app and + software presentation. A + subscribe form in header is also available now.

+

+ feature Added the same variation of headers as the static ones with a + video trigger integrated for video presentations. YouTube, Vimeo and other popular video hostings supported.

+

+ feature Implemented the ' + Show Code' button for visual elements that require a code structure explanation.

+

+ improvement Switched to a more stable + video background plugin with a larger range of browser support.

+

+ improvement Added a survey for everyone who's owning a version of VSDocs to be able to submit a feature request or a bug report.

+

+ improvement Minor CSS improvements.

+

+ bug-fix Fixed the copy fragment identifier on mobile devices inside the '.container-spaced'.

+

+ bug-fix Fixed the responsiveness of the 'Gif Player' in Internet Explorer.

+

+ bug-fix Fixed the mobile dropdown menu in Internet Explorer.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
img/helpers
+
img/layout
+
img/backgrounds/10.png
+
img/backgrounds/11.jpg
+
img/backgrounds/12.jpg
+
img/backgrounds/8.jpg
+
img/backgrounds/9.jpg
+
img/helpers/play-colored.png
+
img/helpers/play-light.png
+
img/layout/ph3x2.png
+
js/dev/libs/plugins/jquery.vide.min.js
+
less/modules/_browser.less
+
less/modules/_mobile-app.less
+
less/modules/_soft-mac.less
+
less/modules/_subscribe-form.less
+
less/modules/_video-trigger-button.less
+
home-app-video-trigger.html
+
home-mobile-app.html
+
home-soft-video-trigger.html
+
home-soft.html
+
home-subscribe.html
+
home-video-trigger.html
+
home-web-video-trigger.html
+
home-web.html
+
css/style.css
+
css/style.min.css
+
js/dev/modules.js
+
js/all.js
+
less/global/_general.less
+
less/modules/_button.less
+
less/modules/_category-info.less
+
less/modules/_code-highlight.less
+
less/modules/_footer.less
+
less/modules/_gif-player.less
+
less/modules/_header-back.less
+
less/modules/_languages.less
+
less/modules/_menu-vertical.less
+
less/modules/_menu.less
+
less/modules/_page-info.less
+
less/modules/_price-list.less
+
less/modules/_tabs.less
+
less/style.less
+
All the HTML files were updated
+
js/dev/libs/plugins/videojs-bigvideo.js
+
less/libs/bigvideo.css
+
+
+ + +
+ + +
+ +
+

+ v1.8.0 +

+

2015 - 12 - 25

+ +
+ + +
+

+ feature A brand new layout for + one page documentations, with a nested side menu and smooth navigation between sections.

+

+ feature + Video header implemented.

+

+ improvement Switched to a blue theme.

+

+ improvement All the media queries are now grouped by screen breakpoints on compilation, keeping a smart LESS file structure. This results into a more lightweight CSS file.

+

+ improvement Redesigned the + Custom Video Playlist component.

+

+ improvement Added a + download button on each video from the playlist.

+

+ improvement Added a + 'Next' and 'Previous' buttons to the Custom Video Playlist's UI.

+

+ improvement Minor CSS improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
img/logos/logo-text.png
+
js/dev/libs/plugins/jquery.jscrollpane.min.js
+
js/dev/libs/plugins/jquery.mousewheel-3.0.6.min.js
+
js/dev/libs/plugins/jquery.nav.js
+
js/dev/libs/plugins/videojs-bigvideo.js
+
less/libs/bigvideo.css
+
less/libs/jquery.jscrollpane.css
+
less/modules/_one-page-nav.less
+
less/modules/_one-page.less
+
index-5.html
+
index-6.html
+
fonts/fontawesome-webfont.eot
+
fonts/fontawesome-webfont.ttf
+
fonts/fontawesome-webfont.woff
+
fonts/fontawesome-webfont.woff2
+
fonts/FontAwesome.otf
+
css/style.css
+
css/style.min.css
+
fonts/fontawesome-webfont.svg
+
js/dev/modules.js
+
js/all.js
+
less/global/_image.less
+
less/global/_layout.less
+
less/global/_media.less
+
less/libs/font-awesome.min.css
+
less/modules/_article-comment.less
+
less/modules/_before-and-after.less
+
less/modules/_book-grid.less
+
less/modules/_book.less
+
less/modules/_box.less
+
less/modules/_brands.less
+
less/modules/_browsers.less
+
less/modules/_button.less
+
less/modules/_call-to-action.less
+
less/modules/_category-info.less
+
less/modules/_changelog.less
+
less/modules/_code-highlight.less
+
less/modules/_contacts-info.less
+
less/modules/_contacts.less
+
less/modules/_faq.less
+
less/modules/_file-tree.less
+
less/modules/_footer.less
+
less/modules/_header-back.less
+
less/modules/_header.less
+
less/modules/_info.less
+
less/modules/_languages.less
+
less/modules/_list-view.less
+
less/modules/_login.less
+
less/modules/_logo.less
+
less/modules/_menu-vertical.less
+
less/modules/_menu.less
+
less/modules/_notification.less
+
less/modules/_number.less
+
less/modules/_page-info.less
+
less/modules/_panels.less
+
less/modules/_promo-title.less
+
less/modules/_rotator.less
+
less/modules/_social-share.less
+
less/modules/_steps-interactive.less
+
less/modules/_steps-slider.less
+
less/modules/_tabs.less
+
less/modules/_video-advanced.less
+
less/modules/_video-custom.less
+
less/modules/_video-playlist-custom.less
+
less/style.less
+
All the HTML files were updated
+
+
+ + +
+ + +
+ +
+

+ v1.7.0 +

+

2015 - 12 - 03

+ +
+ + +
+

+ feature + Code tabs implemented.

+

+ feature + Social share buttons added to the article.

+

+ improvement Copy to clipboard feature - now the following browsers are supported: Chrome 42+, Firefox 41+, IE 9+ and Opera 29+. Safari is not supported yet. No more flash dependence and up to 70% less JavaScript code.

+

+ improvement On click on the + comments meta, page scrolls down smoothly to the comments section.

+

+ improvement View the + language name in a label on the code highlight box.

+

+ improvement Code boxes are attachable to each other.

+

+ improvement Minor CSS improvements.

+

+ improvement Updated the documentation accordingly to the new improvements.

+

+ bug-fix 'Article tags' on small screens.

+

+ bug-fix 'Compact Browser Support' on small screens.

+

+ bug-fix Initiated the 'Before and After' slider on window load.

+

+ bug-fix Prevent the side menu from moving one pixel up on mouse hover.

+

+ bug-fix JavaScript error when the page is loaded within an iFrame.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
js/dev/libs/plugins/clipboard.min.js
+
js/dev/libs/plugins/social-likes.min.js
+
less/libs/social-likes_birman.css
+
less/modules/_social-share.less
+
css/style.css
+
css/style.min.css
+
js/dev/libs/plugins/video.js
+
js/dev/modules.js
+
js/all.js
+
less/global/_media.less
+
less/libs/prism.css
+
less/libs/sidr.css
+
less/modules/_article-comment.less
+
less/modules/_article.less
+
less/modules/_browsers.less
+
less/modules/_category-info.less
+
less/modules/_code-highlight.less
+
less/modules/_panels.less
+
less/style.less
+
All the HTML files were updated
+
js/dev/libs/plugins/ZeroClipboard.min.js
+
swf/ZeroClipboard.swf
+
+
+ + +
+ + +
+ +
+

+ v1.6.0 +

+

2015 - 11 - 20

+ +
+ + +
+

+ feature ' + Home Page' redesigned from scratch. Turned it more into a commercial/about page.

+

+ feature Implemented alternative ' + Small Boxes'.

+

+ feature Implemented the ' + Price List' component.

+

+ feature Implemented the ' + Brands' component.

+

+ feature Implemented the ' + Testimonials' component.

+

+ feature Implemented the ' + Call to Action' component.

+

+ feature Implemented the ' + FAQ - Grid View' component.

+

+ feature Implemented the ' + Extended Footer' component.

+

+ improvement Headers updated with a more logical structure.

+

+ improvement Made the footer stick to the bottom of the page. In other words, even if there is no content on the page, the footer is positioned at the bottom of the window.

+

+ improvement Minor CSS improvements.

+

+ improvement Updated the documentation accordingly to the new improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
less/modules/_brands.less
+
less/modules/_call-to-action.less
+
less/modules/_header-back.less
+
less/modules/_price-list.less
+
less/modules/_promo-title.less
+
less/modules/_testimonial.less
+
all the HTML files were updated
+
js/dev/modules.js
+
js/all.js
+
less/global/_general.less
+
less/global/_layout.less
+
less/global/_media.less
+
less/modules/_box.less
+
less/modules/_button.less
+
less/modules/_code-highlight.less
+
less/modules/_faq.less
+
less/modules/_footer.less
+
less/modules/_header.less
+
less/modules/_login.less
+
less/modules/_menu-side.less
+
less/modules/_page-info.less
+
less/modules/_rotator.less
+
less/style.less
+
css/style.min.css
+
css/style.css
+
+
+ + +
+ + +
+ +
+

+ v1.5.0 +

+

2015 - 11 - 13

+ +
+ + +
+

+ feature Added ' + Single Article' page to the template.

+

+ feature Added nested + comments module to the 'Single Article' page.

+

+ feature Working + contact form with smart data validation. A simple email template included.

+

+ improvement Minor CSS improvements.

+

+ improvement Updated the documentation accordingly to the new improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
article.html
+
mail-template-contacts.html
+
js/dev/libs/plugins/jquery.form-validator.min.js
+
less/modules/_article-comment.less
+
less/modules/_article.less
+
php/contact.php
+
blog.html
+
contacts.html
+
changelog.html
+
docs.html
+
js/dev/modules.js
+
js/all.js
+
less/global/_layout.less
+
less/modules/_contacts.less
+
less/modules/_menu.less
+
less/style.less
+
css/style.min.css
+
css/style.css
+
+
+ + +
+ + +
+ +
+

+ v1.4.0 +

+

2015 - 11 - 06

+ +
+ + +
+

+ feature Added ' + Blog' page to the template. Share your hot news with your customers.

+

+ feature Added a compact version for the + full width layouts.

+

+ improvement + Sidebar redesigned from scratch. New look, more flexibility and intelligence.

+

+ improvement The sidebar menu is shown as a dropdown on mobile devices, instead of hiding it completely.

+

+ improvement Mobile menu, off canvas menu and version component close on offclick.

+

+ improvement Minor CSS improvements and file structure optimization.

+

+ improvement Updated the documentation accordingly to the new improvements.

+

+ bug-fix Rotator over the mobile menu.

+

+ bug-fix Rotator issue in Safari, causing the texts shaking.

+

+ bug-fix Blured text on menu hover.

+

+ bug-fix Sidebar issue, when the content is smaller in height than the sidebar.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
blog.html
+
views-left-full-compact.html
+
views-right-full-compact.html
+
js/libs/plugins/jquery.resmenu.js
+
less/global/_layout.less
+
less/modules/_blog.less
+
changelog.html
+
docs.html
+
js/dev/modules.js
+
js/all.js
+
less/global/_general.less
+
less/modules/_category-info.less
+
less/modules/_header.less
+
less/modules/_languages.less
+
less/modules/_menu-vertical.less
+
less/modules/_menu.less
+
less/modules/_page-info.less
+
less/modules/_rotator.less
+
less/modules/_search.less
+
less/modules/_tags.less
+
less/style.less
+
views-left-full.html
+
views-left.html
+
views-right-full.html
+
views-right.html
+
style.css
+
style.min.css
+
+
+ + +
+ + +
+ +
+

+ v1.3.0 +

+

2015 - 10 - 22

+ +
+ + +
+

+ feature + Fragment Identifier implemented. Now you can share links to specific parts of your page, click the button and the link will be copied to the clipboard.

+

+ feature Updated the ' + Browser Support' component. You can specify which browsers are recommended or partial supported.

+

+ improvement Added icons to the ' + Numbers' component. This allows you to illustrate your stats.

+

+ improvement Updade the ' + FAQ' component with a more user friendly search input. Added the 'keyword' selector to highlight the important words from the question that may help the user to find the answers quicker.

+

+ improvement Implemented a smooth hover effect on the menu. Every detail should have its beauty.

+

+ improvement Added 'Pe-icon-7-stroke' pack to the theme. More icons, more fineness.

+

+ improvement Small CSS improvements.

+

+ improvement Updated the documentation accordingly to the new improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
less/libs/pe-icon-7-stroke.css
+
fonts/Pe-icon-7-stroke.eot
+
fonts/Pe-icon-7-stroke.svg
+
fonts/Pe-icon-7-stroke.ttf
+
fonts/Pe-icon-7-stroke.woff
+
book.html
+
buttons.html
+
code.html
+
changelog.html
+
docs.html
+
files.html
+
index.html
+
index-2.html
+
index-3.html
+
index-4.html
+
media.html
+
misc.html
+
notes.html
+
panels.html
+
steps.html
+
tutorial.html
+
views.html
+
views-left.html
+
views-left-full.html
+
views-right.html
+
views-right-full.html
+
less/modules/_browsers.less
+
less/modules/_faq.less
+
less/modules/_file-tree.less
+
less/modules/_menu.less
+
less/modules/_number.less
+
less/modules/_tabs.less
+
less/style.less
+
less/global/_media.less
+
less/modules/_category-info.less
+
style.css
+
style.min.css
+
js/dev/modules.js
+
js/all.js
+
+
+ + +
+ + +
+ +
+

+ v1.2.0 +

+

2015 - 10 - 16

+ +
+ + +
+

+ feature + Custom video player implemented. Now you can stream videos hosted anywhere.

+

+ feature + Stream custom video playlists implemented. Share your courses and seminars with your customers.

+

+ improvement Updated the documentation accordingly to the new improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
js/dev/libs/plugins/video.js
+
js/dev/libs/plugins/videojs-playlist.js
+
less/libs/videojs.css
+
less/libs/videojs-playlist.css
+
less/modules/_video-custom.less
+
less/modules/_video-playlist-custom.less
+
changelog.html
+
docs.html
+
media.html
+
less/style.less
+
style.css
+
style.min.css
+
js/dev/modules.js
+
js/all.js
+
+
+ + +
+ + +
+ +
+

+ v1.1.0 +

+

2015 - 10 - 14

+ +
+ + +
+

+ feature + Changelog page added to the template.

+

+ feature Implemented + filters on the changelog page. You can easily filter the updates by features, improvements or bug fixes.

+

+ feature Implemented the ' + Updated files' on the changelog page. This will help implementing the new updates into your existing projects.

+

+ improvement Updated the documentation accordingly to the new improvements.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
less/modules/_changelog.less
+
js/dev/libs/plugins/jquery.instafilta.min.js
+
changelog.html
+
less/global/_media.less
+
less/style.less
+
style.css
+
style.min.css
+
js/dev/modules.js
+
js/all.js
+
docs.html
+
+
+ + +
+ + +
+ +
+

+ v1.0.2 +

+

2015 - 06 - 07

+ +
+ + +
+

+ improvement Added the selected option on the 'Tendina' plugin. This will force the plugin to expand the parents of the active menu item.

+

+ improvement Improved the Copy to Clipboard function on the devices that do not support Flash. Now by clicking on copy button on those devices it will select the entire text from the box which makes it easier to manually copy it afterwards. +

+

+ improvement Updated the documentation accordingly to the new improvements.

+

+ bug-fix Fixed the YouTube playlist stream. YouTube updated the API so from now on an API key is required. Updated the documentation with more details on how to initialize an YouTube playlist.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
js/dev/libs/plugins/jquery.ytv.js
+
js/dev/modules.js
+
js/all.js
+
docs.html
+
+
+ + +
+ + +
+ +
+

+ v1.0.1 +

+

2015 - 05 - 16

+ +
+ + +
+

+ improvement More intelligent behavior of the vertical menu.

+

+ bug-fix Fixed the vertical menu, once it's fixed and too high and getting over the footer.

+

+ bug-fix Fixed tags with small corner cover.

+
+ + +
+ +
+
    +
  • + + new +
  • +
  • + + updated +
  • +
  • + + removed +
  • +
+
+ +
+
less/modules/_tags.less
+
less/modules/_menu-vertical.less
+
css/style.css
+
css/style.min.css
+
js/dev/modules.js
+
js/all.js
+
+
+ + +
+ +
+ +
+ +
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/code.html b/application/view/mockup/template/code.html new file mode 100644 index 0000000..7711ae9 --- /dev/null +++ b/application/view/mockup/template/code.html @@ -0,0 +1,980 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Code

+

Make your creation easy and intuitive with the code highlight component.

+
+ +
+
+
+
+
+ +
+
+
+
+ +
+

Simple highlight + + + + + +

+

Laudantium magni ea cupiditate vero sunt voluptatum tempora molestiae reiciendis. Facere, deleniti.

+
+ + +
+ copy
<!-- Latest compiled and minified CSS -->
+<link rel="stylesheet" href="https://path.com/to/the/compiled/style.css">
+
+<!-- Optional theme -->
+<link rel="stylesheet" href="https://path.com/to/the/chosen/theme.css">
+
+<!-- Latest compiled and minified JavaScript -->
+<script src="https://path.com/to/the/JavaScript/library.js"></script>
+
+ + +
+

Mixed code highlight + + + + + +

+

Illo assumenda delectus tempora consequatur, in, perferendis harum atque animi laboriosam a explicabo.

+
+ + +
+ copy
<script src="jquery.js"></script>
+<script src="dist/jquery.plugin.min.js"></script>
+<script>
+	jQuery(function($) {
+		// more options are listed below.
+		$('#elem').plugin(); 
+	});
+</script>
+
+ + +
+

Highlight with label + + + + + +

+

Porro accusantium dolor, sed iste totam officia optio veritatis veniam provident quam!

+
+ + +
+ copy
.token.regex,
+.token.important,
+.token.variable {
+	color: #e90;
+}
+
+.token.important,
+.token.bold {
+	font-weight: bold;
+}
+.token.italic {
+	font-style: italic;
+}
+
+ + +
+

Code highlight attached + + + + + +

+

Impedit officiis nisi velit id officia molestias cumque, labore architecto? Neque, voluptatum.

+
+ + +
+
+ copy
<!-- Latest compiled and minified CSS -->
+<link rel="stylesheet" href="https://path.com/to/the/compiled/style.css">
+
+<!-- Optional theme -->
+<link rel="stylesheet" href="https://path.com/to/the/chosen/theme.css">
+
+<!-- Latest compiled and minified JavaScript -->
+<script src="https://path.com/to/the/JavaScript/library.js"></script>
+
+
+ copy
.token.regex,
+.token.important,
+.token.variable {
+	color: #e90;
+}
+
+.token.important,
+.token.bold {
+	font-weight: bold;
+}
+.token.italic {
+	font-style: italic;
+}
+
+
+ copy
var InteractiveSteps = (function(){
+	var steps = $('.js-steps-interactive');
+
+	steps.each(function() {
+		var step = $(this);
+		var config = config = {
+			headerTag: "h4",
+		    transitionEffect: "fade",
+		    labels: {
+		    	current: ''
+		    }
+		}
+		var userConfig = step.data('config');
+
+		$.extend(true, config, userConfig);
+		steps.steps(config);
+	});
+})();
+
+
+ + +
+

Code tabs + + + + + +

+

Vero blanditiis neque quis maiores, qui. Dicta, itaque, similique. Quod, voluptas incidunt.

+
+ + +
+

HTML

+
+
+ copy
<!-- Latest compiled and minified CSS -->
+<link rel="stylesheet" href="https://path.com/to/the/compiled/style.css">
+
+<!-- Optional theme -->
+<link rel="stylesheet" href="https://path.com/to/the/chosen/theme.css">
+
+<!-- Latest compiled and minified JavaScript -->
+<script src="https://path.com/to/the/JavaScript/library.js"></script>
+
+
+

CSS

+
+
+ copy
.token.regex,
+.token.important,
+.token.variable {
+	color: #e90;
+}
+
+.token.important,
+.token.bold {
+	font-weight: bold;
+}
+.token.italic {
+	font-style: italic;
+}
+
+
+

JavaScript

+
+
+ copy
var InteractiveSteps = (function(){
+	var steps = $('.js-steps-interactive');
+
+	steps.each(function() {
+		var step = $(this);
+		var config = config = {
+			headerTag: "h4",
+		    transitionEffect: "fade",
+		    labels: {
+		    	current: ''
+		    }
+		}
+		var userConfig = step.data('config');
+
+		$.extend(true, config, userConfig);
+		steps.steps(config);
+	});
+})();
+
+
+
+ + +
+

Show code button + + + + + +

+

Exercitationem dolores magnam, amet, veniam eligendi voluptatibus.

+
+ + +
+

+ Example

+
+
+
+ +
+ box icon +

Layouts

+

This is the first example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+ box icon +

Colors

+

This is the second example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+ +
+ box icon +

Components

+

This is the third example of boxes with Title, Content and a small image-icon. Icon is aligned left.

+
+ +
+
+
+

+ Code

+
+
+ copy
<div class="row">
+	<div class="col-md-4">
+		<!-- Box -->
+		<div class="box box-small-icon helper m0">
+			<img src="img/demos/boxes/1.png" class="box-icon"  alt="box icon">
+			<h4 class="box-title">Layouts</h4>
+			<p class="box-description">This is the first example of boxes with Title, Content and a small image-icon. Icon is aligned left.</p>
+		</div>
+		<!-- End of Box -->
+	</div>
+	<div class="col-md-4">
+		<!-- Box -->
+		<div class="box box-small-icon helper m0">
+			<img src="img/demos/boxes/2.png" class="box-icon"  alt="box icon">
+			<h4 class="box-title">Colors</h4>
+			<p class="box-description">This is the second example of boxes with Title, Content and a small image-icon. Icon is aligned left.</p>
+		</div>
+		<!-- End of Box -->
+	</div>
+	<div class="col-md-4">
+		<!-- Box -->
+		<div class="box box-small-icon helper m0">
+			<img src="img/demos/boxes/3.png" class="box-icon"  alt="box icon">
+			<h4 class="box-title">Components</h4>
+			<p class="box-description">This is the third example of boxes with Title, Content and a small image-icon. Icon is aligned left.</p>
+		</div>
+		<!-- End of Box -->
+	</div>
+</div>
+
+
+ + +
+

List of supported languages + + + + + +

+

Here's the full list of languages supported by our template.

+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LanguageIncluded
Markupyes
CSSyes
C-likeyes
JavaScriptyes
ActionScriptno
Apache Configurationno
AppleScriptyes
ASP.NET (C#)yes
AutoHotkeyno
Bashno
Cno
C#yes
C++yes
CoffeeScriptyes
CSS Extrasyes
Dartno
Eiffelno
Erlangno
F#no
Fortranno
Gherkinno
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LanguageIncluded
Gityes
Gono
Groovyno
Hamlyes
Handlebarsyes
Haskellno
HTTPno
Inino
Jadeyes
Javayes
Juliano
LaTeXno
Lessyes
LOLCODEno
Markdownyes
MATLABno
NASMno
NSISno
Objective-Cyes
Pascalno
Perlyes
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LanguageIncluded
PHP Extrasyes
PowerShellno
Pythonyes
Rno
React JSXyes
reST (reStructuredText)no
Ripno
Rubyyes
Rustno
SASno
Sass (Scss)yes
Scalano
Schemeyes
Smalltalkno
Smartyyes
SQLyes
Stylusyes
Swiftyes
Twigno
TypeScriptyes
Wiki markupno
+
+ +
+
+
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/contacts.html b/application/view/mockup/template/contacts.html new file mode 100644 index 0000000..2b79108 --- /dev/null +++ b/application/view/mockup/template/contacts.html @@ -0,0 +1,441 @@ + + + + + + VSDocs - most advanced documentation template on ThemeForest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + logo + + +
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+

Contacts

+

The contact page is much more important than many give it credit. So, it’s extremely important to make sure your contact page delivers in the best way possible.

+
+ +
+
+
+
+
+ +
+
+
+
+ +
+

Still have questions? Leave us a message.

+ +
+ Your message was sent successfully. +
Thank you!
+ +
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + + +
  • +
+ +
+
+ +
+
+ +
+

Development team

+

We are available 24/24 to help you.

+ +

Sales team

+

Want to become a partner? Great.

+ +

Press

+

Discover more about VSDocs

+ +

Say Hi

+

Let's drink a coffee together.

+ +
+ +
+
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/application/view/mockup/template/css/custom.css b/application/view/mockup/template/css/custom.css new file mode 100644 index 0000000..e69de29 diff --git a/application/view/mockup/template/css/custom.min.css b/application/view/mockup/template/css/custom.min.css new file mode 100644 index 0000000..e69de29 diff --git a/application/view/mockup/template/css/style.css b/application/view/mockup/template/css/style.css new file mode 100644 index 0000000..ad1e614 --- /dev/null +++ b/application/view/mockup/template/css/style.css @@ -0,0 +1,18308 @@ +@charset "UTF-8"; +@import url(http://fonts.googleapis.com/css?family=Roboto:500,900,100,300,700,400&subset=latin,cyrillic-ext,cyrillic,latin-ext); +@import url(http://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700&subset=latin,cyrillic-ext,cyrillic,latin-ext); +/** + * Description: VSDocs - Documentation Framework + * Version: 1.0.0 + * Author: VSArt - http://www.vsart.me + * + * Summary: + * + * 0. GLOBALS + * - 0.1. MIXINS + * - 0.2. CONFIG + * - 0.3. NORMALIZE + * - 0.4. GRID + * - 0.5. BACKGROUNDS + * - 0.6. GENERAL + * - 0.7. LAYOUT + * - 0.8. TRANSITIONS + * - 0.9. TEXT + * - 0.10. IMAGE + * - 0.11. LIST + * - 0.12. FONT-AWESOME + * - 0.13. PE-ICON-7-STROKE + * - 0.14. ANIMATE + * 1. LIBS + * - 1.1. LOGO + * 2. MODULES + * - 2.1. LOGO + * - 2.2. HEADER + * - 2.3. HEADER-BACK + * - 2.4. FOOTER + * - 2.5. BUTTON + * - 2.6. TABLE + * - 2.7. FORMS + * - 2.8. SEARCH + * - 2.9. TAGS + * - 2.10. MENU + * - 2.11. MENU-VERTICAL + * - 2.12. MENU-SIDE + * - 2.13. LANGUAGES + * - 2.14. PAGE-INFO + * - 2.15. ROTATOR + * - 2.16. PANELS + * - 2.17. CATEGORY-INFO + * - 2.18. PROMO-TITLE + * - 2.19. BOX + * - 2.20. NUMBER + * - 2.21. BROWSERS + * - 2.22. NOTE + * - 2.23. MODAL + * - 2.24. CODE-HIGHLIGHT + * - 2.25. FILE-TREE + * - 2.26. SKILL + * - 2.27. STEPS + * - 2.28. STEPS-INTERACTIVE + * - 2.29. STEPS-SLIDER + * - 2.30. COLUMN-FILL + * - 2.31. BEFORE-AND-AFTER + * - 2.32. FAQ + * - 2.33. INFO + * - 2.34. INFO-DELIMITER + * - 2.35. CATEGORY-LIST + * - 2.36. TABS + * - 2.37. NAVIGATION + * - 2.38. GIF-PLAYER + * - 2.39. VIDEO + * - 2.40. VIDEO-ADVANCED + * - 2.41. VIDEO-CUSTOM + * - 2.42. VIDEO-PLAYLIST-CUSTOM + * - 2.43. LIST-VIEW + * - 2.44. GRID-VIEW + * - 2.45. BOOK + * - 2.46. BOOK-GRID + * - 2.47. SOCIAL + * - 2.48. NOTIFICATION + * - 2.49. LOGIN + * - 2.50. CONTACTS + * - 2.51. CONTACTS-INFO + * - 2.52. CHANGELOG + * - 2.53. BLOG + * - 2.54. ARTICLE + * - 2.55. ARTICLE-COMMENT + * - 2.56. PRICE-LIST + * - 2.57. BRANDS + * - 2.58. CALL-TO-ACTION + * - 2.59. ONE-PAGE + * - 2.60. ONE-PAGE-NAV + */ +/* ========================================================================== + 0. ELEMENT + ========================================================================== */ +/* ========================================================================== + Colors configuration + ========================================================================== */ +/* ========================================================================== + Fonts configuration + ========================================================================== */ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col, +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col, +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col, + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col, + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col, + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +.clearfix, +.clearfix:before, +.clearfix:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after { + content: " "; + display: table; +} +.clearfix:after, +.container:after, +.container-fluid:after, +.row:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.background-2 { + background: url(../img/backgrounds/2.jpg); +} +.background-4 { + background: url(../img/backgrounds/4.jpg); +} +.background-5 { + background: url(../img/backgrounds/5.jpg); +} +.background-gradient-grey { + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#ffffff+0,f2f2f2+95,f2f2f2+95,f2f2f2+100 */ + background: #ffffff; + /* Old browsers */ + background: -moz-linear-gradient(top, #ffffff 0%, #f2f2f2 95%, #f2f2f2 95%, #f2f2f2 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(top, #ffffff 0%, #f2f2f2 95%, #f2f2f2 95%, #f2f2f2 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, #ffffff 0%, #f2f2f2 95%, #f2f2f2 95%, #f2f2f2 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f2f2f2', GradientType=0); + /* IE6-9 */ +} +.separator { + height: 1px; + width: 100%; + background-color: #cbd3dd; + margin: 30px 0; +} +.separator.without-border { + border: none; +} +.placeholder-horizontal { + width: 100%; + height: auto; +} +.placeholder-vertical { + height: 100%; + width: auto; +} +.helper.center { + text-align: center; +} +.helper.left { + text-align: left; +} +.helper.right { + text-align: right; +} +.helper.hide { + display: none; +} +.helper.m0 { + margin: 0; +} +.helper.p0 { + padding: 0; +} +.helper.overflow-hidden-lg { + overflow: hidden; +} +.helper.mb0 { + margin-bottom: 0px; +} +.helper.mb10 { + margin-bottom: 10px; +} +.helper.mb20 { + margin-bottom: 20px; +} +.helper.mb30 { + margin-bottom: 30px; +} +.helper.mb40 { + margin-bottom: 40px; +} +.helper.mb60 { + margin-bottom: 60px; +} +.helper.mb80 { + margin-bottom: 80px; +} +.helper.mb100 { + margin-bottom: 100px; +} +.helper.mr0 { + margin-right: 0px; +} +.helper.mr10 { + margin-right: 10px; +} +.helper.mr20 { + margin-right: 20px; +} +.helper.mr30 { + margin-right: 30px; +} +.helper.mr40 { + margin-right: 40px; +} +.helper.mr60 { + margin-right: 60px; +} +.helper.ml0 { + margin-left: 0px; +} +.helper.ml10 { + margin-left: 10px; +} +.helper.ml20 { + margin-left: 20px; +} +.helper.ml30 { + margin-left: 30px; +} +.helper.ml40 { + margin-left: 40px; +} +.helper.ml60 { + margin-left: 58px; +} +.helper.mt0 { + margin-top: 0px; +} +.helper.mt10 { + margin-top: 10px; +} +.helper.mt20 { + margin-top: 20px; +} +.helper.mt30 { + margin-top: 30px; +} +.helper.mt40 { + margin-top: 40px; +} +.helper.mt60 { + margin-top: 60px; +} +.helper.pt0 { + padding-top: 0px; +} +.helper.pt10 { + padding-top: 10px; +} +.helper.pt20 { + padding-top: 20px; +} +.helper.pt30 { + padding-top: 30px; +} +.helper.pt40 { + padding-top: 40px; +} +.helper.pt60 { + padding-top: 60px; +} +.helper.pt80 { + padding-top: 80px; +} +.helper.pt90 { + padding-top: 90px; +} +.helper.pt100 { + padding-top: 100px; +} +.helper.pb0 { + padding-bottom: 0px; +} +.helper.pb10 { + padding-bottom: 10px; +} +.helper.pb20 { + padding-bottom: 20px; +} +.helper.pb30 { + padding-bottom: 30px; +} +.helper.pb40 { + padding-bottom: 40px; +} +.helper.pb60 { + padding-bottom: 60px; +} +.helper.pl0 { + padding-left: 0px; +} +.helper.pl10 { + padding-left: 10px; +} +.helper.pl20 { + padding-left: 20px; +} +.helper.pl30 { + padding-left: 30px; +} +.helper.pl40 { + padding-left: 40px; +} +.helper.pl60 { + padding-left: 60px; +} +.helper.pr0 { + padding-right: 0px; +} +.helper.pr10 { + padding-right: 10px; +} +.helper.pr20 { + padding-right: 20px; +} +.helper.pr30 { + padding-right: 30px; +} +.helper.pr40 { + padding-right: 40px; +} +.helper.pr60 { + padding-right: 60px; +} +html, +body { + height: 100%; + margin: 0 !important; +} +body { + font-size: 1em; + line-height: 100%; + font-family: 'Roboto', sans-serif; + color: #333333; +} +#content { + padding: 60px 0; +} +#content.pt0 { + padding-top: 0; +} +#content.pb0 { + padding-bottom: 0; +} +.page { + min-height: 100%; + position: relative; +} +.layout { + position: relative; +} +.layout .col-md-2, +.layout .col-md-3, +.layout .col-md-4 { + position: static; +} +.layout.with-left-sidebar .sidebar { + padding-right: 20px; +} +.layout.with-right-sidebar .sidebar { + padding-left: 20px; +} +.sidebar { + -webkit-backface-visibility: hidden; + -webkit-transform: translateZ(0); +} +.sidebar.sidebar-is-fixed { + position: fixed; + top: 30px; +} +.sidebar.sidebar-is-bottom { + position: absolute; + bottom: 0; +} +@media (min-width: 1200px) { + .container-spaced { + padding: 0 50px; + } +} +@media (min-width: 480px) { + .one-page-content .container-spaced { + padding: 0 50px; + } +} +.transition { + -webkit-transition: all 0.25s ease; + -moz-transition: all 0.25s ease; + -ms-transition: all 0.25s ease; + -o-transition: all 0.25s ease; + transition: all 0.25s ease; +} +.transition-opacity { + -webkit-transition: opacity 0.25s ease; + -moz-transition: opacity 0.25s ease; + -ms-transition: opacity 0.25s ease; + -o-transition: opacity 0.25s ease; + transition: opacity 0.25s ease; +} +.transition-background { + -webkit-transition: background-color 0.25s ease; + -moz-transition: background-color 0.25s ease; + -ms-transition: background-color 0.25s ease; + -o-transition: background-color 0.25s ease; + transition: background-color 0.25s ease; +} +.transition-color { + -webkit-transition: color 0.25s ease; + -moz-transition: color 0.25s ease; + -ms-transition: color 0.25s ease; + -o-transition: color 0.25s ease; + transition: color 0.25s ease; +} +.transition-color-background { + -webkit-transition: opacity 0.25s ease, background-color 0.25s ease; + -moz-transition: opacity 0.25s ease, background-color 0.25s ease; + -ms-transition: opacity 0.25s ease, background-color 0.25s ease; + -o-transition: opacity 0.25s ease, background-color 0.25s ease; + transition: opacity 0.25s ease, background-color 0.25s ease; +} +/* ========================================================================== + Headings + ========================================================================== */ +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'Roboto', sans-serif; + font-weight: 300; + line-height: 100%; +} +h1 { + font-size: 3em; + margin: 0 0 .5em 0; +} +h2 { + font-size: 2em; + margin: 0 0 .5em 0; +} +h3 { + font-size: 1.5em; + margin: 0 0 .5em 0; +} +h4 { + font-size: 1.17em; + margin: 0 0 .5em 0; +} +h5 { + font-size: 1.12em; + margin: 0 0 .5em 0; +} +h6 { + font-size: .83em; + margin: 0 0 .5em 0; +} +/* ========================================================================== + Paragraph + ========================================================================== */ +p { + font-size: 1em; + margin: 0 0 1em 0; + font-weight: 300; + line-height: 1.8; +} +/* ========================================================================== + Block quote + ========================================================================== */ +blockquote { + margin: 0 0 1em 0; + padding: 0 0 0 30px; + color: #808488; + font-style: italic; + border-left: 5px solid #cbd3dd; +} +/* ========================================================================== + Link + ========================================================================== */ +a { + color: #2288cc; + text-decoration: none; + font-size: inherit; +} +a:hover { + text-decoration: underline; +} +/* ========================================================================== + Mark inside text + ========================================================================== */ +.mark { + font-size: inherit; + color: inherit; + line-height: inherit; +} +.mark.bold { + font-weight: 400; +} +.mark.bolder { + font-weight: 700; +} +.mark.italic { + font-style: italic; +} +.mark.underline { + text-decoration: underline; +} +.mark.line-through { + text-decoration: line-through; +} +.mark.sup { + vertical-align: super; + font-size: 0.8em; +} +.mark.sub { + vertical-align: sub; + font-size: 0.8em; +} +.mark.small { + font-size: 0.8em; +} +.mark.help { + border-bottom: 1px dotted #808488; + cursor: help; +} +.mark.code { + font-family: monospace; +} +.mark.fill { + padding: .3em .6em; + border-radius: 4px; + vertical-align: baseline; + display: inline; + font-size: 80%; + line-height: 1; + color: white; + text-align: center; + white-space: nowrap; +} +.mark.fill i { + font-size: 70%; + vertical-align: middle; + padding: 0 4px; +} +.mark.fill.blue { + background-color: #2288cc; +} +.mark.fill.blue-light { + background-color: #48cacc; +} +.mark.fill.purple { + background-color: #8d3deb; +} +.mark.fill.green { + background-color: #44bb55; +} +.mark.fill.orange { + background-color: #ff530d; +} +.mark.fill.red { + background-color: #ff3625; +} +.mark.fill.grey { + background-color: #dae0e7; + color: #333333; +} +/* ========================================================================== + Text colors + ========================================================================== */ +a.color.blue, +p.color.blue, +h1.color.blue, +h2.color.blue, +h3.color.blue, +h4.color.blue, +h5.color.blue, +h6.color.blue, +span.color.blue { + color: #2288cc; +} +a.color.blue-light, +p.color.blue-light, +h1.color.blue-light, +h2.color.blue-light, +h3.color.blue-light, +h4.color.blue-light, +h5.color.blue-light, +h6.color.blue-light, +span.color.blue-light { + color: #48cacc; +} +a.color.purple, +p.color.purple, +h1.color.purple, +h2.color.purple, +h3.color.purple, +h4.color.purple, +h5.color.purple, +h6.color.purple, +span.color.purple { + color: #8d3deb; +} +a.color.green, +p.color.green, +h1.color.green, +h2.color.green, +h3.color.green, +h4.color.green, +h5.color.green, +h6.color.green, +span.color.green { + color: #44bb55; +} +a.color.orange, +p.color.orange, +h1.color.orange, +h2.color.orange, +h3.color.orange, +h4.color.orange, +h5.color.orange, +h6.color.orange, +span.color.orange { + color: #ff530d; +} +a.color.red, +p.color.red, +h1.color.red, +h2.color.red, +h3.color.red, +h4.color.red, +h5.color.red, +h6.color.red, +span.color.red { + color: #ff3625; +} +a.color.grey, +p.color.grey, +h1.color.grey, +h2.color.grey, +h3.color.grey, +h4.color.grey, +h5.color.grey, +h6.color.grey, +span.color.grey { + color: #99a3b1; +} +/*============================== += Labels = +==============================*/ +.image { + padding: 4px; + border: 1px solid #cbd3dd; + border-radius: 3px; + margin-bottom: 15px; + max-width: 100%; +} +.image.remove-border { + border: 0; +} +.image.isolated { + margin: 30px 0; +} +/* ========================================================================== + Unordered List + ========================================================================== */ +ul { + margin: 0; + padding: 0; + list-style: disc; + margin: 0 0 1em 1.2em; + line-height: 1.8; +} +ul ul { + margin-bottom: 0; +} +/* ========================================================================== + Ordered List + ========================================================================== */ +ol { + margin: 0; + padding: 0; + list-style: decimal; + margin: 0 0 1em 1.5em; + line-height: 1.8; +} +ol ol { + margin-bottom: 0; +} +/* ========================================================================== + Definition List + ========================================================================== */ +dl { + overflow: hidden; + margin: 0 0 1em; + font-weight: 300; + line-height: 1.8; +} +dd { + margin-left: 0; + line-height: 1.8; +} +dt { + font-weight: 500; + line-height: 1.8; +} +/*! + * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.fa-lg { + font-size: 1.33333333em; + line-height: .75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: .14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid .08em #eee; + border-radius: 0.1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: 0.3em; +} +.fa.fa-pull-right { + margin-left: 0.3em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: 0.3em; +} +.fa.pull-right { + margin-left: 0.3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +@font-face { + font-family: 'Pe-icon-7-stroke'; + src: url('../fonts/Pe-icon-7-stroke.eot?d7yf1v'); + src: url('../fonts/Pe-icon-7-stroke.eot?#iefixd7yf1v') format('embedded-opentype'), url('../fonts/Pe-icon-7-stroke.woff?d7yf1v') format('woff'), url('../fonts/Pe-icon-7-stroke.ttf?d7yf1v') format('truetype'), url('../fonts/Pe-icon-7-stroke.svg?d7yf1v#Pe-icon-7-stroke') format('svg'); + font-weight: normal; + font-style: normal; +} +[class^="pe-7s-"], +[class*=" pe-7s-"] { + display: inline-block; + font-family: 'Pe-icon-7-stroke'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.pe-7s-album:before { + content: "\e6aa"; +} +.pe-7s-arc:before { + content: "\e6ab"; +} +.pe-7s-back-2:before { + content: "\e6ac"; +} +.pe-7s-bandaid:before { + content: "\e6ad"; +} +.pe-7s-car:before { + content: "\e6ae"; +} +.pe-7s-diamond:before { + content: "\e6af"; +} +.pe-7s-door-lock:before { + content: "\e6b0"; +} +.pe-7s-eyedropper:before { + content: "\e6b1"; +} +.pe-7s-female:before { + content: "\e6b2"; +} +.pe-7s-gym:before { + content: "\e6b3"; +} +.pe-7s-hammer:before { + content: "\e6b4"; +} +.pe-7s-headphones:before { + content: "\e6b5"; +} +.pe-7s-helm:before { + content: "\e6b6"; +} +.pe-7s-hourglass:before { + content: "\e6b7"; +} +.pe-7s-leaf:before { + content: "\e6b8"; +} +.pe-7s-magic-wand:before { + content: "\e6b9"; +} +.pe-7s-male:before { + content: "\e6ba"; +} +.pe-7s-map-2:before { + content: "\e6bb"; +} +.pe-7s-next-2:before { + content: "\e6bc"; +} +.pe-7s-paint-bucket:before { + content: "\e6bd"; +} +.pe-7s-pendrive:before { + content: "\e6be"; +} +.pe-7s-photo:before { + content: "\e6bf"; +} +.pe-7s-piggy:before { + content: "\e6c0"; +} +.pe-7s-plugin:before { + content: "\e6c1"; +} +.pe-7s-refresh-2:before { + content: "\e6c2"; +} +.pe-7s-rocket:before { + content: "\e6c3"; +} +.pe-7s-settings:before { + content: "\e6c4"; +} +.pe-7s-shield:before { + content: "\e6c5"; +} +.pe-7s-smile:before { + content: "\e6c6"; +} +.pe-7s-usb:before { + content: "\e6c7"; +} +.pe-7s-vector:before { + content: "\e6c8"; +} +.pe-7s-wine:before { + content: "\e6c9"; +} +.pe-7s-cloud-upload:before { + content: "\e68a"; +} +.pe-7s-cash:before { + content: "\e68c"; +} +.pe-7s-close:before { + content: "\e680"; +} +.pe-7s-bluetooth:before { + content: "\e68d"; +} +.pe-7s-cloud-download:before { + content: "\e68b"; +} +.pe-7s-way:before { + content: "\e68e"; +} +.pe-7s-close-circle:before { + content: "\e681"; +} +.pe-7s-id:before { + content: "\e68f"; +} +.pe-7s-angle-up:before { + content: "\e682"; +} +.pe-7s-wristwatch:before { + content: "\e690"; +} +.pe-7s-angle-up-circle:before { + content: "\e683"; +} +.pe-7s-world:before { + content: "\e691"; +} +.pe-7s-angle-right:before { + content: "\e684"; +} +.pe-7s-volume:before { + content: "\e692"; +} +.pe-7s-angle-right-circle:before { + content: "\e685"; +} +.pe-7s-users:before { + content: "\e693"; +} +.pe-7s-angle-left:before { + content: "\e686"; +} +.pe-7s-user-female:before { + content: "\e694"; +} +.pe-7s-angle-left-circle:before { + content: "\e687"; +} +.pe-7s-up-arrow:before { + content: "\e695"; +} +.pe-7s-angle-down:before { + content: "\e688"; +} +.pe-7s-switch:before { + content: "\e696"; +} +.pe-7s-angle-down-circle:before { + content: "\e689"; +} +.pe-7s-scissors:before { + content: "\e697"; +} +.pe-7s-wallet:before { + content: "\e600"; +} +.pe-7s-safe:before { + content: "\e698"; +} +.pe-7s-volume2:before { + content: "\e601"; +} +.pe-7s-volume1:before { + content: "\e602"; +} +.pe-7s-voicemail:before { + content: "\e603"; +} +.pe-7s-video:before { + content: "\e604"; +} +.pe-7s-user:before { + content: "\e605"; +} +.pe-7s-upload:before { + content: "\e606"; +} +.pe-7s-unlock:before { + content: "\e607"; +} +.pe-7s-umbrella:before { + content: "\e608"; +} +.pe-7s-trash:before { + content: "\e609"; +} +.pe-7s-tools:before { + content: "\e60a"; +} +.pe-7s-timer:before { + content: "\e60b"; +} +.pe-7s-ticket:before { + content: "\e60c"; +} +.pe-7s-target:before { + content: "\e60d"; +} +.pe-7s-sun:before { + content: "\e60e"; +} +.pe-7s-study:before { + content: "\e60f"; +} +.pe-7s-stopwatch:before { + content: "\e610"; +} +.pe-7s-star:before { + content: "\e611"; +} +.pe-7s-speaker:before { + content: "\e612"; +} +.pe-7s-signal:before { + content: "\e613"; +} +.pe-7s-shuffle:before { + content: "\e614"; +} +.pe-7s-shopbag:before { + content: "\e615"; +} +.pe-7s-share:before { + content: "\e616"; +} +.pe-7s-server:before { + content: "\e617"; +} +.pe-7s-search:before { + content: "\e618"; +} +.pe-7s-film:before { + content: "\e6a5"; +} +.pe-7s-science:before { + content: "\e619"; +} +.pe-7s-disk:before { + content: "\e6a6"; +} +.pe-7s-ribbon:before { + content: "\e61a"; +} +.pe-7s-repeat:before { + content: "\e61b"; +} +.pe-7s-refresh:before { + content: "\e61c"; +} +.pe-7s-add-user:before { + content: "\e6a9"; +} +.pe-7s-refresh-cloud:before { + content: "\e61d"; +} +.pe-7s-paperclip:before { + content: "\e69c"; +} +.pe-7s-radio:before { + content: "\e61e"; +} +.pe-7s-note2:before { + content: "\e69d"; +} +.pe-7s-print:before { + content: "\e61f"; +} +.pe-7s-network:before { + content: "\e69e"; +} +.pe-7s-prev:before { + content: "\e620"; +} +.pe-7s-mute:before { + content: "\e69f"; +} +.pe-7s-power:before { + content: "\e621"; +} +.pe-7s-medal:before { + content: "\e6a0"; +} +.pe-7s-portfolio:before { + content: "\e622"; +} +.pe-7s-like2:before { + content: "\e6a1"; +} +.pe-7s-plus:before { + content: "\e623"; +} +.pe-7s-left-arrow:before { + content: "\e6a2"; +} +.pe-7s-play:before { + content: "\e624"; +} +.pe-7s-key:before { + content: "\e6a3"; +} +.pe-7s-plane:before { + content: "\e625"; +} +.pe-7s-joy:before { + content: "\e6a4"; +} +.pe-7s-photo-gallery:before { + content: "\e626"; +} +.pe-7s-pin:before { + content: "\e69b"; +} +.pe-7s-phone:before { + content: "\e627"; +} +.pe-7s-plug:before { + content: "\e69a"; +} +.pe-7s-pen:before { + content: "\e628"; +} +.pe-7s-right-arrow:before { + content: "\e699"; +} +.pe-7s-paper-plane:before { + content: "\e629"; +} +.pe-7s-delete-user:before { + content: "\e6a7"; +} +.pe-7s-paint:before { + content: "\e62a"; +} +.pe-7s-bottom-arrow:before { + content: "\e6a8"; +} +.pe-7s-notebook:before { + content: "\e62b"; +} +.pe-7s-note:before { + content: "\e62c"; +} +.pe-7s-next:before { + content: "\e62d"; +} +.pe-7s-news-paper:before { + content: "\e62e"; +} +.pe-7s-musiclist:before { + content: "\e62f"; +} +.pe-7s-music:before { + content: "\e630"; +} +.pe-7s-mouse:before { + content: "\e631"; +} +.pe-7s-more:before { + content: "\e632"; +} +.pe-7s-moon:before { + content: "\e633"; +} +.pe-7s-monitor:before { + content: "\e634"; +} +.pe-7s-micro:before { + content: "\e635"; +} +.pe-7s-menu:before { + content: "\e636"; +} +.pe-7s-map:before { + content: "\e637"; +} +.pe-7s-map-marker:before { + content: "\e638"; +} +.pe-7s-mail:before { + content: "\e639"; +} +.pe-7s-mail-open:before { + content: "\e63a"; +} +.pe-7s-mail-open-file:before { + content: "\e63b"; +} +.pe-7s-magnet:before { + content: "\e63c"; +} +.pe-7s-loop:before { + content: "\e63d"; +} +.pe-7s-look:before { + content: "\e63e"; +} +.pe-7s-lock:before { + content: "\e63f"; +} +.pe-7s-lintern:before { + content: "\e640"; +} +.pe-7s-link:before { + content: "\e641"; +} +.pe-7s-like:before { + content: "\e642"; +} +.pe-7s-light:before { + content: "\e643"; +} +.pe-7s-less:before { + content: "\e644"; +} +.pe-7s-keypad:before { + content: "\e645"; +} +.pe-7s-junk:before { + content: "\e646"; +} +.pe-7s-info:before { + content: "\e647"; +} +.pe-7s-home:before { + content: "\e648"; +} +.pe-7s-help2:before { + content: "\e649"; +} +.pe-7s-help1:before { + content: "\e64a"; +} +.pe-7s-graph3:before { + content: "\e64b"; +} +.pe-7s-graph2:before { + content: "\e64c"; +} +.pe-7s-graph1:before { + content: "\e64d"; +} +.pe-7s-graph:before { + content: "\e64e"; +} +.pe-7s-global:before { + content: "\e64f"; +} +.pe-7s-gleam:before { + content: "\e650"; +} +.pe-7s-glasses:before { + content: "\e651"; +} +.pe-7s-gift:before { + content: "\e652"; +} +.pe-7s-folder:before { + content: "\e653"; +} +.pe-7s-flag:before { + content: "\e654"; +} +.pe-7s-filter:before { + content: "\e655"; +} +.pe-7s-file:before { + content: "\e656"; +} +.pe-7s-expand1:before { + content: "\e657"; +} +.pe-7s-exapnd2:before { + content: "\e658"; +} +.pe-7s-edit:before { + content: "\e659"; +} +.pe-7s-drop:before { + content: "\e65a"; +} +.pe-7s-drawer:before { + content: "\e65b"; +} +.pe-7s-download:before { + content: "\e65c"; +} +.pe-7s-display2:before { + content: "\e65d"; +} +.pe-7s-display1:before { + content: "\e65e"; +} +.pe-7s-diskette:before { + content: "\e65f"; +} +.pe-7s-date:before { + content: "\e660"; +} +.pe-7s-cup:before { + content: "\e661"; +} +.pe-7s-culture:before { + content: "\e662"; +} +.pe-7s-crop:before { + content: "\e663"; +} +.pe-7s-credit:before { + content: "\e664"; +} +.pe-7s-copy-file:before { + content: "\e665"; +} +.pe-7s-config:before { + content: "\e666"; +} +.pe-7s-compass:before { + content: "\e667"; +} +.pe-7s-comment:before { + content: "\e668"; +} +.pe-7s-coffee:before { + content: "\e669"; +} +.pe-7s-cloud:before { + content: "\e66a"; +} +.pe-7s-clock:before { + content: "\e66b"; +} +.pe-7s-check:before { + content: "\e66c"; +} +.pe-7s-chat:before { + content: "\e66d"; +} +.pe-7s-cart:before { + content: "\e66e"; +} +.pe-7s-camera:before { + content: "\e66f"; +} +.pe-7s-call:before { + content: "\e670"; +} +.pe-7s-calculator:before { + content: "\e671"; +} +.pe-7s-browser:before { + content: "\e672"; +} +.pe-7s-box2:before { + content: "\e673"; +} +.pe-7s-box1:before { + content: "\e674"; +} +.pe-7s-bookmarks:before { + content: "\e675"; +} +.pe-7s-bicycle:before { + content: "\e676"; +} +.pe-7s-bell:before { + content: "\e677"; +} +.pe-7s-battery:before { + content: "\e678"; +} +.pe-7s-ball:before { + content: "\e679"; +} +.pe-7s-back:before { + content: "\e67a"; +} +.pe-7s-attention:before { + content: "\e67b"; +} +.pe-7s-anchor:before { + content: "\e67c"; +} +.pe-7s-albums:before { + content: "\e67d"; +} +.pe-7s-alarm:before { + content: "\e67e"; +} +.pe-7s-airplay:before { + content: "\e67f"; +} +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2015 Daniel Eden +*/ +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} +.animated.bounceIn, +.animated.bounceOut { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} +.animated.flipOutX, +.animated.flipOutY { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} +@-webkit-keyframes bounce { + 0%, + 20%, + 53%, + 80%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 40%, + 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} +@keyframes bounce { + 0%, + 20%, + 53%, + 80%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 40%, + 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} +@-webkit-keyframes flash { + 0%, + 50%, + 100% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 50%, + 100% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +@keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); + } + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +@keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); + } + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} +@-webkit-keyframes shake { + 0%, + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} +@keyframes shake { + 0%, + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +@keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes wobble { + 0% { + -webkit-transform: none; + transform: none; + } + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +@keyframes wobble { + 0% { + -webkit-transform: none; + transform: none; + } + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} +@-webkit-keyframes bounceIn { + 0%, + 20%, + 40%, + 60%, + 80%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +@keyframes bounceIn { + 0%, + 20%, + 40%, + 60%, + 80%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} +@-webkit-keyframes bounceInDown { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +@keyframes bounceInDown { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} +@-webkit-keyframes bounceInLeft { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +@keyframes bounceInLeft { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} +@-webkit-keyframes bounceInRight { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +@keyframes bounceInRight { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + 100% { + -webkit-transform: none; + transform: none; + } +} +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} +@-webkit-keyframes bounceInUp { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes bounceInUp { + 0%, + 60%, + 75%, + 90%, + 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} +@keyframes fadeOutDown { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +@keyframes fadeOutLeft { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} +@keyframes fadeOutRight { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} +@keyframes fadeOutUp { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} +@-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} +@keyframes fadeOutUpBig { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} +@-webkit-keyframes lightSpeedOut { + 0% { + opacity: 1; + } + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} +@keyframes lightSpeedOut { + 0% { + opacity: 1; + } + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} +@-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} +@-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} +@-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} +@-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} +@-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} +@-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} +@keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes rollOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} +@keyframes rollOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} +@-webkit-keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + 50% { + opacity: 1; + } +} +@keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + 50% { + opacity: 1; + } +} +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} +@-webkit-keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +@keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} +@-webkit-keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +@keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} +@-webkit-keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +@keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} +@-webkit-keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +@keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} +@-webkit-keyframes zoomOut { + 0% { + opacity: 1; + } + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + 100% { + opacity: 0; + } +} +@keyframes zoomOut { + 0% { + opacity: 1; + } + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + 100% { + opacity: 0; + } +} +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 100% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 100% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 100% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 100% { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} +@-webkit-keyframes slideInDown { + 0% { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slideInDown { + 0% { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} +@-webkit-keyframes slideInLeft { + 0% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slideInLeft { + 0% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} +@-webkit-keyframes slideInRight { + 0% { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slideInRight { + 0% { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} +@-webkit-keyframes slideInUp { + 0% { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slideInUp { + 0% { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} +@-webkit-keyframes slideOutDown { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} +@keyframes slideOutDown { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} +@-webkit-keyframes slideOutLeft { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +@keyframes slideOutLeft { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} +@-webkit-keyframes slideOutRight { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} +@keyframes slideOutRight { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} +@-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} +@keyframes slideOutUp { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} +/* ========================================================================== + 1. LIBS + ========================================================================== */ +/* + * CSS Styles that are needed by jScrollPane for it to operate correctly. + * + * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane + * may not operate correctly without them. + */ +.jspContainer { + overflow: hidden; + position: relative; +} +.jspPane { + position: absolute; +} +.jspVerticalBar { + position: absolute; + top: 0; + right: 0; + width: 16px; + height: 100%; + background: red; +} +.jspHorizontalBar { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 16px; + background: red; +} +.jspCap { + display: none; +} +.jspHorizontalBar .jspCap { + float: left; +} +.jspTrack { + background: #dde; + position: relative; +} +.jspDrag { + background: #bbd; + position: relative; + top: 0; + left: 0; + cursor: pointer; +} +.jspHorizontalBar .jspTrack, +.jspHorizontalBar .jspDrag { + float: left; + height: 100%; +} +.jspArrow { + background: #50506d; + text-indent: -20000px; + display: block; + cursor: pointer; + padding: 0; + margin: 0; +} +.jspArrow.jspDisabled { + cursor: default; + background: #80808d; +} +.jspVerticalBar .jspArrow { + height: 16px; +} +.jspHorizontalBar .jspArrow { + width: 16px; + float: left; + height: 100%; +} +.jspVerticalBar .jspArrow:focus { + outline: none; +} +.jspCorner { + background: #eeeef4; + float: left; + height: 100%; +} +/* Yuk! CSS Hack for IE6 3 pixel bug :( */ +* html .jspCorner { + margin: 0 -3px 0 0; +} +/* ========================================================================== + 2. MODULES + ========================================================================== */ +.preloader { + position: fixed; + width: 100%; + height: 100%; + background-color: white; + z-index: 9999; +} +.preloader-animation { + width: 30px; + height: 30px; + border: 1px solid #2288cc; + border-radius: 50%; + position: fixed; + left: 50%; + top: 50%; + margin-top: -15px; + margin-left: -15px; + background-color: #c5e2f5; + box-shadow: 0 0 0 33px white, 0 0 0 34px #99ccee; + backface-visibility: hidden; +} +.preloader-animation:after, +.preloader-animation:before { + content: ''; + display: block; + width: 8px; + height: 8px; + border-radius: 50%; + background-color: #2288cc; + border: 1px solid #2288cc; + left: 50%; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); + position: absolute; + background-color: #c5e2f5; +} +.preloader-animation:after { + top: -38px; + -webkit-transform-origin: 0 52px; + -moz-transform-origin: 0 52px; + -ms-transform-origin: 0 52px; + -o-transform-origin: 0 52px; + transform-origin: 0 52px; + -webkit-animation: preloader-anim 1.5s linear infinite; + -moz-animation: preloader-anim 1.5s linear infinite; + -ms-animation: preloader-anim 1.5s linear infinite; + -o-animation: preloader-anim 1.5s linear infinite; + animation: preloader-anim 1.5s linear infinite; +} +.preloader-animation:before { + bottom: -38px; + -webkit-transform-origin: 0 -44px; + -moz-transform-origin: 0 -44px; + -ms-transform-origin: 0 -44px; + -o-transform-origin: 0 -44px; + transform-origin: 0 -44px; + -webkit-animation: preloader-anim 1.3s linear infinite; + -moz-animation: preloader-anim 1.3s linear infinite; + -ms-animation: preloader-anim 1.3s linear infinite; + -o-animation: preloader-anim 1.3s linear infinite; + animation: preloader-anim 1.3s linear infinite; +} +@-moz-keyframes preloader-anim { + 0% { + -webkit-transform: rotate(-180deg) translateX(-50%); + -moz-transform: rotate(-180deg) translateX(-50%); + -ms-transform: rotate(-180deg) translateX(-50%); + -o-transform: rotate(-180deg) translateX(-50%); + transform: rotate(-180deg) translateX(-50%); + } + 100% { + -webkit-transform: rotate(180deg) translateX(-50%); + -moz-transform: rotate(180deg) translateX(-50%); + -ms-transform: rotate(180deg) translateX(-50%); + -o-transform: rotate(180deg) translateX(-50%); + transform: rotate(180deg) translateX(-50%); + } +} +@-webkit-keyframes preloader-anim { + 0% { + -webkit-transform: rotate(-180deg) translateX(-50%); + -moz-transform: rotate(-180deg) translateX(-50%); + -ms-transform: rotate(-180deg) translateX(-50%); + -o-transform: rotate(-180deg) translateX(-50%); + transform: rotate(-180deg) translateX(-50%); + } + 100% { + -webkit-transform: rotate(180deg) translateX(-50%); + -moz-transform: rotate(180deg) translateX(-50%); + -ms-transform: rotate(180deg) translateX(-50%); + -o-transform: rotate(180deg) translateX(-50%); + transform: rotate(180deg) translateX(-50%); + } +} +@keyframes preloader-anim { + 0% { + -webkit-transform: rotate(-180deg) translateX(-50%); + -moz-transform: rotate(-180deg) translateX(-50%); + -ms-transform: rotate(-180deg) translateX(-50%); + -o-transform: rotate(-180deg) translateX(-50%); + transform: rotate(-180deg) translateX(-50%); + } + 100% { + -webkit-transform: rotate(180deg) translateX(-50%); + -moz-transform: rotate(180deg) translateX(-50%); + -ms-transform: rotate(180deg) translateX(-50%); + -o-transform: rotate(180deg) translateX(-50%); + transform: rotate(180deg) translateX(-50%); + } +} +.logo-image { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + position: relative; + max-width: 100%; + height: auto; +} +.logo-image img { + display: block; + max-width: 100%; + height: 10em; + width: auto; + margin-top: -3em; +} +.footer .logo-image { + opacity: 0.8; + margin-right: 5px; +} +.one-page-logo .logo-image img { + height: 50px; +} +.login .logo-image img, +.register .logo-image img { + opacity: 0.8; + height: 10em; +} +.logo-animated { + -webkit-animation: logo-anim 12s ease-in-out forwards; + -moz-animation: logo-anim 12s ease-in-out forwards; + -ms-animation: logo-anim 12s ease-in-out forwards; + -o-animation: logo-anim 12s ease-in-out forwards; + animation: logo-anim 12s ease-in-out forwards; +} + +/* For Mozilla Firefox */ +@-moz-keyframes logo-anim { + 0%, 100% { + transform: scale(1); + } + 33% { + transform: scale(0.5); + } + 66% { + transform: scale(1.5); + } +} + +/* For WebKit browsers like Chrome and Safari */ +@-webkit-keyframes logo-anim { + 0%, 100% { + transform: scale(1); + } + 33% { + transform: scale(0.5); + } + 66% { + transform: scale(1.5); + } +} + +/* Standard syntax */ +@keyframes logo-anim { + 0%, 100% { + transform: scale(1); + } + 33% { + transform: scale(0.5); + } + 66% { + transform: scale(1.5); + } +} +.logo-text { + font-size: 2em; + line-height: 40px; + color: #808488; + text-decoration: none; + font-weight: 300; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} +.logo-text:hover { + text-decoration: none; +} +.header { + padding: 20px 0; + width: 100%; + border-bottom: 1px solid #cbd3dd; + border-top: 1px solid #cbd3dd; + z-index: 5; + background-size: cover; + -webkit-transition: background-color 0.25s ease; + -moz-transition: background-color 0.25s ease; + -ms-transition: background-color 0.25s ease; + -o-transition: background-color 0.25s ease; + transition: background-color 0.25s ease; +} +.header.small { + padding: 10px 0; +} +.header.large { + padding: 30px 0; +} +.header-one-page { + border-top: 0; + border-bottom-color: #eaedf1; + background-color: #f6f7f8; +} +.header-one-page.header-fixed { + z-index: 5; + left: 0; + border-bottom-color: #eaedf1; + background-color: #f6f7f8; +} +.header-over { + background: transparent; + position: absolute; + border: none; +} +.header-fixed { + position: fixed; + width: 100%; + background-color: #fff; + box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.1) !important; +} +.header-fixed.header-fixed-light { + background-color: #263952; +} +.header-back { + background-size: cover; + background-repeat: no-repeat; + padding: 200px 0; + margin: 0; + position: relative; +} +.header-back-large { + padding: 250px 0 270px 0; +} +.header-back-small { + padding: 140px 0 70px 0; +} +.header-back-light { + color: white; +} +.header-back-full-page { + display: table; + padding: 0; + width: 100%; + min-height: 600px; + position: relative; +} +.header-back-full-page .header-back-container { + display: table-cell; + vertical-align: middle; + padding-bottom: 40px; +} +.header-back-default { + background-image: url(../img/backgrounds/6.jpg); + background-position: bottom; +} +.header-back-simple { + background-image: url(../img/backgrounds/2.jpg); +} +.header-back-bg { + background-image: url(../img/backgrounds/1.jpg); +} +.header-back-bg-2 { + background-image: url(../img/backgrounds/3.jpg); +} +.header-back-bg-3 { + background-image: url(../img/backgrounds/5.jpg); +} +.header-back-bg-web { + background-image: url(../img/backgrounds/8.jpg); +} +.header-back-bg-app { + background-image: url(../img/backgrounds/9.jpg); +} +.header-back-bg-soft { + background-image: url(../img/backgrounds/10.png); + background-position: center bottom; +} +.header-back-video-trigger-bg { + background-image: url(../img/backgrounds/11.jpg); + background-position: center bottom; +} +.header-back-bg-subscribe { + background-image: url(../img/backgrounds/12.jpg); +} +.header-back-buttons .button { + margin-right: 20px; + min-width: 180px; +} +.header-back-buttons .button:last-child { + margin-right: 0; +} +.next-section { + position: absolute; + width: 40px; + height: 40px; + bottom: 20px; + left: 50%; + margin-left: -20px; + cursor: pointer; + font-size: 26px; + line-height: 38px; + vertical-align: middle; + text-align: center; + -webkit-animation: next-section 3s Ease-in-out infinite; + -moz-animation: next-section 3s Ease-in-out infinite; + -ms-animation: next-section 3s Ease-in-out infinite; + -o-animation: next-section 3s Ease-in-out infinite; + animation: next-section 3s Ease-in-out infinite; +} +.next-section-light { + color: white; +} +.header-back-video .header-back-container { + position: relative; + z-index: 2; + background-color: rgba(26, 26, 26, 0.6); +} +.header-back-video .video-js { + background-color: #000; +} +.header-back-web { + padding: 170px 0 0; + margin-bottom: 200px; +} +.header-back-app { + padding: 190px 0 100px; + margin-bottom: 50px; +} +.header-back-soft { + padding: 200px 0 100px; + margin-bottom: 200px; +} +@-moz-keyframes next-section { + 0% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 50% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } +} +@-webkit-keyframes next-section { + 0% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 50% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } +} +@keyframes next-section { + 0% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 50% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } +} +.footer { + padding: 40px 0; + background-color: #f6f7f8; + position: relative; +} +.footer-is-fixed { + position: absolute; + width: 100%; + bottom: 0; + left: 0; + right: 0; +} +.copyright { + margin: 0; + color: #808488; + font-size: 0.75em; +} +.copyright a { + color: inherit; +} +.slogan { + font-size: 0.75em; + line-height: 1.1; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + margin: 0; + color: #808488; +} +.footer-wrapper { + position: relative; + padding-right: 100px; +} +.scroll-top { + position: absolute; + height: 40px; + width: 40px; + border-radius: 3px; + border: 1px solid #cbd3dd; + color: #676b6e; + right: 0; + top: 2px; + text-align: center; + vertical-align: middle; + line-height: 38px; + cursor: pointer; + font-size: 18px; +} +.footer-menu { + margin: 0; + padding: 0; + list-style-type: none; + font-size: 0.75em; + margin-bottom: 5px; + font-weight: 300; +} +.footer-menu li { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + margin-right: 5px; + padding-right: 5px; + position: relative; +} +.footer-menu li:after { + position: absolute; + content: ''; + height: 9px; + width: 1px; + display: block; + right: -2px; + top: 7px; + background-color: #808488; +} +.footer-menu li:last-child { + padding: 0; + margin: 0; +} +.footer-menu li:last-child:after { + display: none; +} +.footer-menu li a { + color: #808488; +} +.docs-version { + position: absolute; + height: 40px; + width: 40px; + border-radius: 3px; + border: 1px solid #cbd3dd; + color: #676b6e; + right: 45px; + top: 2px; + text-align: center; + line-height: 38px; + cursor: pointer; + font-size: 12px; +} +.docs-version ul { + margin: 0; + padding: 0; + list-style-type: none; + position: absolute; + bottom: 45px; + width: 40px; + left: -1px; + display: none; +} +.docs-version ul:after { + content: ''; + display: block; + border-right: 1px solid #cbd3dd; + border-bottom: 1px solid #cbd3dd; + bottom: -3px; + position: absolute; + background-color: white; + left: 17px; + height: 5px; + width: 5px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.docs-version ul li { + line-height: 38px; + height: 40px; + border-left: 1px solid #cbd3dd; + border-top: 1px solid #cbd3dd; + border-right: 1px solid #cbd3dd; + background-color: white; +} +.docs-version ul li:first-child { + border-radius: 3px 3px 0 0; +} +.docs-version ul li:last-child { + border-radius: 0 0 3px 3px; + border-bottom: 1px solid #cbd3dd; +} +.docs-version ul li a { + text-decoration: none; +} +.docs-current-version { + display: block; +} +.footer-extended { + background-color: #f6f7f8; + font-size: 0.75em; + border-top: 1px solid #e4e8ed; +} +.footer-extended-container { + border-bottom: 1px solid #d1d8e1; + padding: 40px 0; +} +.footer-extended-menu-title { + color: #2288cc; + font-size: 15px; + margin-bottom: 10px; +} +.footer-extended-menu-list { + margin: 0; + padding: 0; + list-style-type: none; +} +.footer-extended-menu-list li a { + color: #666666; + line-height: 2; +} +.text-footer { + font-size: 12px; +} +.button { + display: inline-block; + vertical-align: middle; + zoom: 1; + *display: inline; + text-decoration: none; + font-size: 1em; + font-weight: 300; + color: #333333; + border: 1px solid #cbd3dd; + white-space: nowrap; + cursor: pointer; + line-height: 1; + padding: 12px 20px; + border-radius: 3px; + text-align: center; + -o-user-select: none; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; + position: relative; + background-color: #f6f7f8; + outline: none; + -webkit-transition: opacity 0.25s ease, background-color 0.25s ease; + -moz-transition: opacity 0.25s ease, background-color 0.25s ease; + -ms-transition: opacity 0.25s ease, background-color 0.25s ease; + -o-transition: opacity 0.25s ease, background-color 0.25s ease; + transition: opacity 0.25s ease, background-color 0.25s ease; +} +.button.button-icon-right i { + margin-right: 0; + margin-left: 10px; +} +.button i { + margin-right: 10px; + vertical-align: middle; +} +.button:active { + bottom: -1px; +} +.button.large { + font-size: 1.125em; + padding: 18px 42px; + border-radius: 5px; +} +.button.large.button-icon { + padding: 16px 42px 16px 22px; +} +.button.large.button-icon-right { + padding: 16px 22px 16px 42px; +} +.button.rounded { + border-radius: 21px; +} +.button.rounded.small { + border-radius: 16px; +} +.button.rounded.large { + border-radius: 27px; +} +.button.small { + font-size: 0.875em; + padding: 8px 16px; +} +.button.full { + display: block; + width: 100%; +} +.button.green, +.button.blue, +.button.blue-light, +.button.purple, +.button.orange, +.button.red { + color: white; + border: 1px solid rgba(0, 0, 0, 0.2); +} +.button.green { + background-color: #44bb55; +} +.button.green:hover { + background-color: #3da84d; +} +.button.blue { + background-color: #2288cc; +} +.button.blue:hover { + background-color: #1e79b6; +} +.button.blue-light { + background-color: #48cacc; +} +.button.blue-light:hover { + background-color: #37c2c4; +} +.button.purple { + background-color: #8d3deb; +} +.button.purple:hover { + background-color: #7f26e9; +} +.button.orange { + background-color: #ff530d; +} +.button.orange:hover { + background-color: #f34600; +} +.button.red { + background-color: #ff3625; +} +.button.red:hover { + background-color: #ff1e0b; +} +.button.stroke { + background-color: transparent; +} +.button.stroke.green { + color: #44bb55; + border-color: #44bb55; +} +.button.stroke.blue { + color: #2288cc; + border-color: #2288cc; +} +.button.stroke.blue-light { + color: #48cacc; + border-color: #48cacc; +} +.button.stroke.purple { + color: #8d3deb; + border-color: #8d3deb; +} +.button.stroke.orange { + color: #ff530d; + border-color: #ff530d; +} +.button.stroke.red { + color: #ff3625; + border-color: #ff3625; +} +.button.stroke.white { + color: white; + border-color: white; +} +.button.stroke.black { + color: #333333; + border-color: #333333; +} +.button.stroke.green:hover, +.button.stroke.blue:hover, +.button.stroke.blue-light:hover, +.button.stroke.purple:hover, +.button.stroke.orange:hover, +.button.stroke.red:hover { + color: white; +} +.button:hover { + text-decoration: none; +} +.button-list .button { + margin-right: 10px; + margin-bottom: 10px; +} +.button-list .button:last-child { + margin-right: 0; +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 12px; + font-weight: 300; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #cbd3dd; +} +.table > thead > tr > th { + vertical-align: bottom; + font-weight: 300; + font-size: 1.125em; + border-bottom: 1px solid #cbd3dd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #cbd3dd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #cbd3dd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #cbd3dd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f6f7f8; +} +.table-hover > tbody > tr:hover { + background-color: #eaedf1; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #eaedf1; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #cbd3dd; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #c7ebcc; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #a2ddaa; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #c5e2f5; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #99ccee; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #ffe4d9; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #ffc0a6; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #ffdbd8; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ffaca4; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #cbd3dd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #f6f7f8; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #f6f7f8; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 300; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; + outline: none !important; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #808488; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cbd3dd; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + font-weight: 300; +} +.form-control:focus { + outline: 0; +} +.form-control::-webkit-input-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999999; + opacity: 1; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #f6f7f8; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 300; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; + min-height: 34px; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.form-group-sm .form-control, +select[multiple].form-group-sm .form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + min-height: 32px; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 3px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 3px; +} +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.form-group-lg .form-control, +select[multiple].form-group-lg .form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + min-height: 38px; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #44bb55; +} +.has-success .form-control { + border-color: #44bb55; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .input-group-addon { + color: #44bb55; + border-color: #44bb55; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #44bb55; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #ff530d; +} +.has-warning .form-control { + border-color: #ff530d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .input-group-addon { + color: #ff530d; + border-color: #ff530d; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #ff530d; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #ff3625; +} +.has-error .form-control { + border-color: #ff3625; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #ff3625; + border-color: #ff3625; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #ff3625; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #f6f7f8; + border: 1px solid #cbd3dd; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.clearfix:before, +.clearfix:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + content: " "; + display: table; +} +.clearfix:after, +.form-horizontal .form-group:after { + clear: both; +} +.search { + position: relative; + margin-bottom: 30px; +} +.widget .search { + margin-bottom: 0; +} +.search-icon { + position: absolute; + top: 10px; + right: 10px; + color: #99a3b1; + font-size: 13px; +} +.search-input { + padding-right: 30px; + border-radius: 2px; +} +.search-minimal { + text-align: right; + position: relative; +} +.search-minimal-icon { + font-size: 20px; + line-height: 40px; + color: #808488; + cursor: pointer; + margin-right: 10px; +} +.search-minimal-input { + display: none; + position: absolute; + top: 6px; + right: 42px; + width: 180px; + height: 30px; + background-color: #f6f7f8; + border: 1px solid #cbd3dd; + border-radius: 3px; + max-width: 80%; +} +.search-minimal-input:after { + position: absolute; + content: ''; + display: block; + width: 6px; + height: 6px; + right: -4px; + top: 11px; + border-top: 1px solid #cbd3dd; + border-right: 1px solid #cbd3dd; + background-color: #f6f7f8; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.search-minimal-input input { + border: 0; + outline: none; + display: block; + height: 100%; + width: 100%; + background-color: transparent; + padding: 0 10px; + line-height: 16px; + font-size: 12px; +} +.tags { + margin: 0; + padding: 0; + list-style-type: none; + font-size: 0.75em; +} +.tag-item { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} +.tag-item a { + display: block; + color: #333333; + margin-right: 20px; + margin-bottom: 9px; + padding: 2px 12px 2px 11px; + border: 1px solid #cbd3dd; + border-right: 0; + position: relative; + border-radius: 3px 0 0 3px; +} +.tag-item a:before { + position: absolute; + content: ''; + display: block; + height: 20px; + width: 19px; + top: 3px; + right: -9px; + background-color: white; + border-radius: 0 5px 0 0; + border-top: 1px solid #cbd3dd; + border-right: 1px solid #cbd3dd; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + z-index: -1; +} +.tag-item a:after { + width: 4px; + height: 4px; + border-radius: 50%; + display: block; + content: ''; + position: absolute; + border: 1px solid #cbd3dd; + top: 11px; + right: -1px; +} +/* + Mobile Menu Core Style +*/ +.slicknav_btn { + position: relative; + display: block; + vertical-align: middle; + float: right; + padding: 0.438em 0.625em 0.438em 0.625em; + line-height: 1.125em; + cursor: pointer; +} +.slicknav_menu .slicknav_menutxt { + display: block; + line-height: 1.188em; + float: left; +} +.slicknav_menu .slicknav_icon { + float: left; + margin: 0.188em 0 0 0.438em; +} +.slicknav_menu .slicknav_no-text { + margin: 0; +} +.slicknav_menu .slicknav_icon-bar { + display: block; + width: 1.125em; + height: 0.125em; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} +.slicknav_btn .slicknav_icon-bar + .slicknav_icon-bar { + margin-top: 0.188em; +} +.slicknav_nav { + clear: both; +} +.slicknav_nav ul, +.slicknav_nav li { + display: block; +} +.slicknav_nav .slicknav_arrow { + font-size: 0.8em; + margin: 0 0 0 0.4em; +} +.slicknav_nav .slicknav_item { + cursor: pointer; +} +.slicknav_nav .slicknav_row { + display: block; +} +.slicknav_nav a { + display: block; +} +.slicknav_nav .slicknav_item a, +.slicknav_nav .slicknav_parent-link a { + display: inline; +} +.slicknav_menu:before, +.slicknav_menu:after { + content: " "; + display: table; +} +.slicknav_menu:after { + clear: both; +} +/* IE6/7 support */ +.slicknav_menu { + *zoom: 1; +} +/* + User Default Style + Change the following styles to modify the appearance of the menu. +*/ +.slicknav_menu { + font-size: 16px; +} +/* Button */ +.slicknav_btn { + margin: 5px 5px 6px; + text-decoration: none; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + background-color: #222222; +} +/* Button Text */ +.slicknav_menu .slicknav_menutxt { + color: #FFF; + font-weight: bold; + text-shadow: 0 1px 3px #000; +} +/* Button Lines */ +.slicknav_menu .slicknav_icon-bar { + background-color: #f5f5f5; +} +.slicknav_menu { + background: #4c4c4c; + padding: 5px; +} +.slicknav_nav { + color: #fff; + margin: 0; + padding: 0; + font-size: 0.875em; +} +.slicknav_nav, +.slicknav_nav ul { + list-style: none; + overflow: hidden; +} +.slicknav_nav ul { + padding: 0; + margin: 0 0 0 20px; +} +.slicknav_nav .slicknav_row { + padding: 5px 10px; + margin: 2px 5px; +} +.slicknav_nav a { + padding: 5px 10px; + margin: 2px 5px; + text-decoration: none; + color: #fff; +} +.slicknav_nav .slicknav_item a, +.slicknav_nav .slicknav_parent-link a { + padding: 0; + margin: 0; +} +.slicknav_nav .slicknav_row:hover { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + background: #ccc; + color: #fff; +} +.slicknav_nav a:hover { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + background: #ccc; + color: #222; +} +.slicknav_nav .slicknav_txtnode { + margin-left: 15px; +} +.menu { + line-height: 40px; + margin: 0; + font-size: 15px; + padding: 0; + list-style-type: none; + color: #333333; + font-weight: 300; +} +.header.header-one-page .menu > li > ul, +.header.header-one-page.header-fixed .menu > li > ul { + top: 67px; +} +.header.header-fixed .menu > li > ul { + top: 58px; +} +.menu .sf-with-ul { + padding-right: 25px; +} +.menu .sf-with-ul:after { + position: absolute; + content: '\f107'; + display: block; + top: 12px; + right: 10px; + font-size: 12px; + color: #99a3b1; + font-family: 'FontAwesome'; +} +.menu ul { + font-size: 14px; + box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1) !important; + position: absolute; + text-align: left; + display: none; + top: 100%; + left: 0; + z-index: 99; + margin: 0; + list-style-type: none; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.05); + border: 1px solid #e4e8ed; +} +.menu ul .sf-with-ul { + padding-right: 25px; + text-indent: 15px; +} +.menu ul .sf-with-ul:after { + content: '+'; + top: 13px; + right: 14px; + color: #808488; + border-radius: 0px; + width: 18px; + text-indent: 0; + height: 18px; + text-align: center; + line-height: 16px; + font-size: 14px; + -webkit-transition: color 0.25s ease; + -moz-transition: color 0.25s ease; + -ms-transition: color 0.25s ease; + -o-transition: color 0.25s ease; + transition: color 0.25s ease; +} +.menu ul .sf-with-ul:before { + display: none; +} +.menu ul .sf-with-ul:hover:after { + color: #2288cc; + border-color: #eaedf1; + content: '\f105'; + font-family: 'FontAwesome'; +} +.header-over .menu ul { + box-shadow: none; + border: 0; +} +.menu ul ul { + top: 0; + left: 100%; + margin-left: 1px; +} +.menu li { + position: relative; + white-space: nowrap; + *white-space: normal; + text-align: center; +} +.menu li:hover > ul, +.menu li.sfHover > ul { + display: block; + -webkit-transition: none; + transition: none; +} +.menu a { + display: block; + line-height: 1; + position: relative; + padding: 10px 15px; + color: inherit; + text-decoration: none; +} +.menu > li { + display: inline-block; + vertical-align: middle; + zoom: 1; + *display: inline; + position: relative; +} +.menu > li > ul { + top: 57px; + left: 50%; + margin-top: -1px; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); +} +.header-over .menu > li > ul { + top: 47px; +} +.menu > li > ul:before { + content: '\f0d8'; + display: block; + position: absolute; + width: 8px; + height: 8px; + font-family: 'FontAwesome'; + top: -14px; + left: 50%; + margin-left: -4px; + color: white; + text-shadow: 0px 0px 1px #bbb; +} +.menu > li > ul li { + background-color: white; + border-bottom: 1px solid #e4e8ed; +} +.menu > li > ul li:first-child { + border-radius: 3px 3px 0 0; +} +.menu > li > ul li:last-child { + border-radius: 0 0 3px 3px; +} +.menu > li > ul li a { + position: relative; + -webkit-transition: color 0.25s ease; + -moz-transition: color 0.25s ease; + -ms-transition: color 0.25s ease; + -o-transition: color 0.25s ease; + transition: color 0.25s ease; + padding: 15px 25px; +} +.menu > li > ul li a:hover { + color: #2288cc; +} +.menu > li > ul li a:hover:before { + opacity: 1; +} +.menu > li > ul li a:hover:not(.sf-with-ul):after { + width: 60%; +} +.menu > li > ul li a.sf-with-ul { + padding-right: 40px; +} +.menu > li > ul li a:not(.sf-with-ul):after { + position: absolute; + content: ''; + display: block; + width: 0; + height: 1px; + left: 50%; + bottom: -1px; + background-color: #42a0df; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); + -webkit-transition: width 0.25s ease; + -moz-transition: width 0.25s ease; + -ms-transition: width 0.25s ease; + -o-transition: width 0.25s ease; + transition: width 0.25s ease; +} +.menu.upper { + text-transform: uppercase; +} +.menu-label { + position: absolute; + top: -16px; + left: 50%; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 9px; + padding: 0px 8px; + height: 18px; + border-radius: 4px; + color: white; + background-color: #2288cc; + line-height: 18px; + letter-spacing: 1px; +} +.menu-label:after { + content: ''; + position: absolute; + display: block; + background-color: #2288cc; + z-index: -1; + width: 3px; + height: 3px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + bottom: -1px; + left: 50%; + margin-left: -2px; +} +.menu-light > li > a { + color: white; +} +.menu-light > li > .sf-with-ul:after { + color: #cbd3dd; +} +.sidr ul li a, +.sidr ul li span { + position: relative; +} +.sidr .sidr-class-menu-label { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + position: absolute; + border-radius: 3px; + right: 10px; + font-size: 12px; + padding: 0 12px; + background-color: #2288cc; + line-height: 22px; + top: 0; + color: white; + top: 50%; + margin-top: -11px; +} +.slicknav_menu { + background-color: transparent; + padding: 0; + display: none; +} +.slicknav_btn { + float: none; + background-color: transparent; + margin: 0; + padding: 10px; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} +.slicknav_menu .slicknav_menutxt, +.slicknav_menu .slicknav_icon { + float: none; +} +.slicknav_menu .slicknav_icon-bar { + box-shadow: none; + background-color: #808488; + height: 3px; + width: 28px; + margin-bottom: 6px; + float: none; +} +.slicknav_menu .slicknav_icon-bar:last-child { + margin: 0; +} +.slicknav_menu.menu-light .slicknav_icon-bar { + background-color: white; +} +.slicknav_nav { + color: #333333; + margin-top: 15px; + background-color: white; + border-radius: 3px; + position: relative; + overflow: visible; + box-shadow: 1px 1px 6px 0px rgba(0, 0, 0, 0.1); + position: absolute; + z-index: 99; + width: 280px; + right: 14px; + font-weight: 300; +} +.slicknav_nav:after { + display: block; + content: ''; + position: absolute; + width: 10px; + height: 10px; + background-color: white; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + right: 20px; + top: -5px; + border-radius: 2px; +} +.slicknav_nav ul { + margin: 0; + padding: 0 15px; +} +.slicknav_nav .slicknav_row { + position: relative; +} +.slicknav_nav a, +.slicknav_nav .slicknav_row { + color: inherit; + outline: none; + margin: 0; + font-size: 16px; + display: block; + border-radius: 3px; + text-align: left; + padding: 7px 15px; +} +.slicknav_nav a .menu-label, +.slicknav_nav .slicknav_row .menu-label { + top: 10px; + right: -8px; + left: auto; + line-height: 17px; + height: auto; + bottom: auto; + border-radius: 3px; + font-size: 11px; + padding: 2px 13px; +} +.slicknav_nav a .menu-label:after, +.slicknav_nav .slicknav_row .menu-label:after { + display: none; +} +.slicknav_nav a:hover, +.slicknav_nav .slicknav_row:hover { + color: inherit; + background-color: #f6f7f8; + border-radius: 3px; +} +.slicknav_nav .slicknav_arrow { + font-family: 'FontAwesome'; + font-size: 10px; + vertical-align: middle; + color: #808488; + position: relative; + top: -1px; +} +.menu-vertical-wrapper.menu-fixed { + position: fixed; + top: 0; +} +.menu-vertical-wrapper.menu-bottom { + position: absolute; + top: auto; + bottom: 0; +} +.menu-vertical { + line-height: 40px; + margin: 0; + list-style-type: none; + color: #333333; + font-weight: 300; + margin-bottom: 30px; + background-color: #f6f7f8; +} +.menu-vertical li.has-children > a { + padding-right: 40px; +} +.menu-vertical li.has-children > a:before { + content: '+'; + position: absolute; + right: 15px; + color: #808488; +} +.menu-vertical li.has-children.selected > a:before { + color: #2288cc; + content: '—'; + font-size: 12px; +} +.menu-vertical ul { + margin: 0; + padding: 0; + list-style-type: none; + line-height: 40px; +} +.menu-vertical ul li.selected > a { + color: #2288cc; +} +.menu-vertical ul a { + padding-left: 40px; +} +.menu-vertical ul ul a { + padding-left: 55px; +} +.menu-vertical ul ul ul a { + padding-left: 70px; +} +.menu-vertical > li { + position: relative; +} +.menu-vertical > li.selected > a { + color: #2288cc; +} +.menu-vertical a { + padding: 0 15px 0 20px; + display: block; + position: relative; + color: inherit; + font-size: 14px; + text-decoration: none; + line-height: inherit; + border-radius: 3px; + border-bottom: 1px solid #eaedf1; + -webkit-transition: background-color 0.25s ease; + -moz-transition: background-color 0.25s ease; + -ms-transition: background-color 0.25s ease; + -o-transition: background-color 0.25s ease; + transition: background-color 0.25s ease; +} +.menu-vertical a:hover { + background-color: #f6f7f8; +} +.vertical-menu-select { + position: relative; + padding: 0; + border: 1px solid #cbd3dd; + margin-bottom: 40px; +} +.vertical-menu-select select { + cursor: pointer; + width: 100%; + margin: 0; + background: none; + border: 1px solid transparent; + outline: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + font-size: 1em; + font-weight: 300; + color: #444; + padding: .6em 1.9em 0.6em .8em; + line-height: 1.3; +} +.vertical-menu-select select:focus { + outline: none; + background-color: transparent; + color: #222; +} +.vertical-menu-select select::-ms-expand { + display: none; +} +.vertical-menu-select:after { + content: "\e688"; + position: absolute; + display: block; + width: 30px; + height: 30px; + line-height: 30px; + right: 5px; + top: 7px; + color: #99a3b1; + font-family: 'Pe-icon-7-stroke'; + font-size: 30px; +} +.vertical-menu-select:hover { + border: 1px solid #888; +} +.sidr { + display: none; + position: absolute; + position: fixed; + top: 0; + height: 100%; + z-index: 999999; + width: 260px; + overflow-x: none; + overflow-y: auto; + font-family: "lucida grande", tahoma, verdana, arial, sans-serif; + font-size: 15px; + background: #f8f8f8; + color: #333; + -webkit-box-shadow: inset 0 0 5px 5px #ebebeb; + -moz-box-shadow: inset 0 0 5px 5px #ebebeb; + box-shadow: inset 0 0 5px 5px #ebebeb; +} +.sidr .sidr-inner { + padding: 0 0 15px; +} +.sidr .sidr-inner > p { + margin-left: 15px; + margin-right: 15px; +} +.sidr.right { + left: auto; + right: -260px; +} +.sidr.left { + left: -260px; + right: auto; +} +.sidr h1, +.sidr h2, +.sidr h3, +.sidr h4, +.sidr h5, +.sidr h6 { + font-size: 11px; + font-weight: normal; + padding: 0 15px; + margin: 0 0 5px; + color: #333; + line-height: 24px; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dfdfdf)); + background-image: -webkit-linear-gradient(#ffffff, #dfdfdf); + background-image: -moz-linear-gradient(#ffffff, #dfdfdf); + background-image: -o-linear-gradient(#ffffff, #dfdfdf); + background-image: linear-gradient(#ffffff, #dfdfdf); + -webkit-box-shadow: 0 5px 5px 3px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 5px 3px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 5px 3px rgba(0, 0, 0, 0.2); +} +.sidr p { + font-size: 13px; + margin: 0 0 12px; +} +.sidr p a { + color: rgba(51, 51, 51, 0.9); +} +.sidr > p { + margin-left: 15px; + margin-right: 15px; +} +.sidr ul { + display: block; + margin: 0 0 15px; + padding: 0; + border-top: 1px solid #dfdfdf; + border-bottom: 1px solid #ffffff; +} +.sidr ul li { + display: block; + margin: 0; + line-height: 48px; + border-top: 1px solid #fff; + border-bottom: 1px solid #dfdfdf; +} +.sidr ul li:hover, +.sidr ul li.active, +.sidr ul li.sidr-class-active { + border-top: 1px solid #fff; + line-height: 48px; +} +.sidr ul li:hover > a, +.sidr ul li:hover > span, +.sidr ul li.active > a, +.sidr ul li.active > span, +.sidr ul li.sidr-class-active > a, +.sidr ul li.sidr-class-active > span { + -webkit-box-shadow: inset 0 0 15px 3px #ebebeb; + -moz-box-shadow: inset 0 0 15px 3px #ebebeb; + box-shadow: inset 0 0 15px 3px #ebebeb; +} +.sidr ul li a, +.sidr ul li span { + padding: 0 15px; + display: block; + text-decoration: none; + color: #333333; +} +.sidr ul li ul { + border-bottom: none; + margin: 0; +} +.sidr ul li ul li { + line-height: 40px; + font-size: 13px; +} +.sidr ul li ul li:last-child { + border-bottom: none; +} +.sidr ul li ul li:hover, +.sidr ul li ul li.active, +.sidr ul li ul li.sidr-class-active { + border-top: 1px solid #fff; + line-height: 40px; +} +.sidr ul li ul li:hover > a, +.sidr ul li ul li:hover > span, +.sidr ul li ul li.active > a, +.sidr ul li ul li.active > span, +.sidr ul li ul li.sidr-class-active > a, +.sidr ul li ul li.sidr-class-active > span { + -webkit-box-shadow: inset 0 0 15px 3px #ebebeb; + -moz-box-shadow: inset 0 0 15px 3px #ebebeb; + box-shadow: inset 0 0 15px 3px #ebebeb; +} +.sidr ul li ul li a, +.sidr ul li ul li span { + color: rgba(51, 51, 51, 0.8); + padding-left: 30px; +} +.sidr ul li ul li ul li a, +.sidr ul li ul li ul li span { + padding-left: 45px; +} +.sidr ul li ul li ul li ul li a, +.sidr ul li ul li ul li ul li span { + padding-left: 60px; +} +.sidr form { + margin: 0 15px; +} +.sidr label { + font-size: 13px; +} +.sidr input[type="text"], +.sidr input[type="password"], +.sidr input[type="date"], +.sidr input[type="datetime"], +.sidr input[type="email"], +.sidr input[type="number"], +.sidr input[type="search"], +.sidr input[type="tel"], +.sidr input[type="time"], +.sidr input[type="url"], +.sidr textarea, +.sidr select { + width: 100%; + font-size: 13px; + padding: 5px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0 0 10px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + border: none; + background: rgba(0, 0, 0, 0.1); + color: rgba(51, 51, 51, 0.6); + display: block; + clear: both; +} +.sidr input[type=checkbox] { + width: auto; + display: inline; + clear: none; +} +.sidr input[type=button], +.sidr input[type=submit] { + color: #f8f8f8; + background: #333333; +} +.sidr input[type=button]:hover, +.sidr input[type=submit]:hover { + background: rgba(51, 51, 51, 0.9); +} +.menu-side-trigger { + position: relative; + margin-top: 10px; + margin-left: 10px; + height: 20px; + width: 27px; + border-bottom: 2px solid #808488; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} +.menu-side-trigger:before, +.menu-side-trigger:after { + position: absolute; + content: ''; + width: 27px; + height: 2px; + background-color: #808488; + display: block; + left: 0; +} +.menu-side-trigger:before { + top: 2px; +} +.menu-side-trigger:after { + top: 10px; +} +.menu-side-trigger-right { + float: right; + left: auto; + right: 10px; +} +.menu-side-trigger-light { + border-color: white; +} +.menu-side-trigger-light:before, +.menu-side-trigger-light:after { + background-color: white; +} +.sidr { + box-sizing: content-box; +} +.sidr a { + -webkit-transition: box-shadow 0.25s ease; + -moz-transition: box-shadow 0.25s ease; + -ms-transition: box-shadow 0.25s ease; + -o-transition: box-shadow 0.25s ease; + transition: box-shadow 0.25s ease; +} +.languages { + font-weight: 300; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + position: relative; + margin-left: 20px; +} +.language-active { + line-height: 40px; + display: block; + cursor: pointer; + font-size: 15px; +} +.language-active .fa { + font-size: 12px; + margin-left: 3px; + top: -1px; + position: relative; + color: #99a3b1; +} +.languages-light { + color: white; +} +.languages-light .fa { + color: #cbd3dd; +} +.languages-list { + display: none; + margin: 0; + padding: 0; + list-style-type: none; + position: absolute; + font-size: 14px; + top: 47px; + left: 50%; + box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1); + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); +} +.header.header-fixed .languages-list { + top: 60px; +} +.languages-list:after { + content: '\f0d8'; + display: block; + position: absolute; + width: 8px; + height: 8px; + font-family: 'FontAwesome'; + top: -14px; + left: 50%; + margin-left: -4px; + color: white; + text-shadow: 0px 0px 1px #bbb; + z-index: -1; +} +.languages-list li { + text-align: center; + background-color: white; +} +.languages-list li:first-child { + border-radius: 3px 3px 0 0; +} +.languages-list li:last-child { + border-radius: 0 0 3px 3px; +} +.languages-list li a { + color: #333333; + display: block; + border-bottom: 1px solid #e4e8ed; + padding: 15px 25px; + line-height: 1; + text-decoration: none; + -webkit-transition: color 0.25s ease; + -moz-transition: color 0.25s ease; + -ms-transition: color 0.25s ease; + -o-transition: color 0.25s ease; + transition: color 0.25s ease; +} +.languages-list li a:hover { + color: #2288cc; +} +.page-title { + font-size: 5em; + color: #1a1a1a; + font-weight: 100; + margin-bottom: 30px; +} +.page-info-simple .page-title { + font-weight: 300; + color: #333333; + font-size: 4.5em; +} +.header-back-light .page-title { + color: white; +} +.page-description { + color: #1a1a1a; + text-transform: uppercase; + font-size: 1.25em; + letter-spacing: 2px; + line-height: 1.5; + font-weight: 300; + margin-bottom: 40px; +} +.page-info-simple .page-description { + text-transform: none; + font-size: 1.5em; + letter-spacing: 0; +} +.header-back-light .page-description { + color: white; +} +.header-back-app .page-title { + margin-bottom: 50px; + font-weight: 100; +} +.header-back-app .page-description { + margin-bottom: 70px; + font-weight: 100; +} +.morphext > .animated { + display: inline-block; + color: #2288cc; + z-index: 4; + position: relative; +} +.rotator { + margin-bottom: 40px; +} +.rotator-light { + color: white; +} +.rotator-text { + font-size: 4.125em; + text-align: center; + line-height: 1.2; + font-weight: 100; +} +#content.panels { + padding: 100px 0; + background-color: #f6f7f8; +} +.panel { + background-color: white; + padding: 50px; + box-shadow: 0 0 6px rgba(153, 153, 153, 0.29); + margin-bottom: 50px; +} +.panel img { + max-width: 100%; +} +.panel:last-child { + margin-bottom: 0; +} +.panel-image { + width: 80%; +} +.panel-header { + font-size: 1.875em; + text-align: center; + line-height: 1.4; + font-weight: 300; + margin-bottom: 30px; +} +.category-info { + padding: 60px 0 20px 0; +} +.category-title { + font-size: 2.8125em; + position: relative; + font-weight: 300; + padding-right: 60px; +} +.category-description { + font-size: 1.375em; + line-height: 1.5; + margin-bottom: 20px; + font-weight: 300; + color: #808488; +} +.category-content { + color: #676b6e; +} +.fragment-identifier { + color: #cbd3dd; + display: block; + font-size: 19px; + border: 1px solid #cbd3dd; + width: 45px; + height: 45px; + text-align: center; + line-height: 45px; + position: absolute; + right: 0; + border-radius: 3px; + top: 0; + outline: none; + -webkit-transition: color 0.3s ease, border-color 0.3s ease; + -moz-transition: color 0.3s ease, border-color 0.3s ease; + -ms-transition: color 0.3s ease, border-color 0.3s ease; + -o-transition: color 0.3s ease, border-color 0.3s ease; + transition: color 0.3s ease, border-color 0.3s ease; +} +.fragment-identifier:hover { + text-decoration: none; + border: 1px solid #99a3b1; + color: #99a3b1; +} +.fragment-identifier:hover:after, +.fragment-identifier:hover:before { + opacity: 1; +} +.fragment-identifier.fragment-identifier-copied:after { + content: 'copied'; + color: #44bb55; + border-color: #44bb55; + width: 70px; + margin-left: -35px; +} +.fragment-identifier.fragment-identifier-copied:before { + border-color: #44bb55; +} +.fragment-identifier.fragment-identifier-error:after { + content: 'not supported :('; + color: #ff530d; + border-color: #ff530d; + width: 110px; + margin-left: -55px; +} +.fragment-identifier.fragment-identifier-error:before { + border-color: #ff530d; +} +.fragment-identifier:after { + content: 'copy fragment identifier'; + display: block; + position: absolute; + font-size: 13px; + width: 170px; + left: 50%; + margin-left: -85px; + top: -43px; + opacity: 0; + line-height: 1; + text-align: center; + color: #808488; + border: 1px solid #cbd3dd; + line-height: 31px; + border-radius: 3px; + -webkit-transition: color 0.3s ease, border-color 0.3s ease, opacity 0.3s ease; + -moz-transition: color 0.3s ease, border-color 0.3s ease, opacity 0.3s ease; + -ms-transition: color 0.3s ease, border-color 0.3s ease, opacity 0.3s ease; + -o-transition: color 0.3s ease, border-color 0.3s ease, opacity 0.3s ease; + transition: color 0.3s ease, border-color 0.3s ease, opacity 0.3s ease; + background-color: white; + z-index: 5; + pointer-events: none; +} +.fragment-identifier:before { + width: 4px; + height: 4px; + opacity: 0; + display: block; + position: absolute; + content: ''; + border-right: 1px solid #99a3b1; + border-bottom: 1px solid #99a3b1; + background-color: white; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: opacity 0.25s ease; + -moz-transition: opacity 0.25s ease; + -ms-transition: opacity 0.25s ease; + -o-transition: opacity 0.25s ease; + transition: opacity 0.25s ease; + top: -12px; + left: 50%; + margin-left: -2px; + z-index: 10; + pointer-events: none; +} +@media (min-width: 1200px) { + .container-fluid .fragment-identifier:after { + top: 5px; + left: auto; + right: 55px; + margin: 0; + } + .container-fluid .fragment-identifier:before { + margin: 0; + left: auto; + right: 53px; + top: 20px; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + } +} +@media (max-width: 1300px) { + .fragment-identifier:after { + top: 5px; + left: auto; + right: 55px; + margin: 0; + } + .fragment-identifier:before { + margin: 0; + left: auto; + right: 53px; + top: 20px; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + } +} +.promo-title-wrapper { + margin-bottom: 70px; + padding-top: 140px; +} +.give-it-try .promo-title-wrapper { + margin-bottom: 50px; +} +.promo-title-less-space { + padding-top: 100px; +} +.promo-title-no-icon { + padding-top: 80px; +} +.promo-title-no-icon .promo-title:before { + display: none; +} +.promo-title { + text-align: center; + font-size: 3.25em; + font-weight: 100; + color: #1a1a1a; + margin-bottom: 20px; + position: relative; +} +.promo-title:before { + position: absolute; + content: attr(data-icon); + display: block; + font-family: 'Pe-icon-7-stroke'; + font-size: 29px; + opacity: 0.3; + width: 40px; + height: 40px; + text-align: center; + top: -60px; + left: 50%; + margin-left: -20px; + speak: none; +} +.promo-description { + text-align: center; + font-size: 1.25em; + color: #808488; + max-width: 80%; + margin: 0 auto; +} +.box { + margin-bottom: 30px; + position: relative; +} +.box.box-small-icon { + padding-left: 40px; +} +.box.box-small-icon .box-title { + font-size: 1.5625em; +} +.box-small-icon-alt { + padding-left: 150px; + padding-right: 60px; + padding-top: 20px; +} +.box-small-icon-alt .box-title { + font-size: 1.5625em; +} +.box-small-icon-alt .box-icon { + position: absolute; + left: 40px; + top: 1px; + width: 80px; + height: 80px; + border: 1px solid #cbd3dd; + border-radius: 50%; + text-align: center; + font-size: 32px; + line-height: 80px; +} +.box-icon { + position: absolute; + left: 0; + top: 1px; + width: 22px; +} +.box-icon-large { + color: #2288cc; + font-size: 2.5em; + margin-bottom: 20px; + width: 75px; + height: 75px; + line-height: 75px; + border-radius: 50%; + background-color: #f6f7f8; +} +.box-title { + font-size: 2.1875em; + font-weight: 300; +} +.box-image .box-title { + font-size: 1.5625em; +} +.box-description { + font-size: 1em; + font-weight: 300; + line-height: 1.5; + color: #808488; +} +.number-box { + margin-bottom: 30px; + padding-left: 60px; + position: relative; +} +.numbers > .row > div:last-child .number-box { + border: none; +} +.number-icon { + position: absolute; + left: -15px; + top: 2px; + font-size: 3.4375em; + width: 60px; + text-align: center; + color: #99a3b1; +} +.number-wrapper { + font-size: 2.1875em; + display: block; + line-height: 40px; + font-weight: 300; +} +.number-description { + font-size: 0.8125em; + display: block; + margin-left: 3px; + line-height: 1.4; + color: #2288cc; +} +.browsers { + margin: 30px 0; + padding: 0; + list-style-type: none; +} +.browsers.browsers-compact li { + width: 18.4%; + margin-right: 2%; + border: none; +} +.browsers.browsers-compact li .browser-icon:before, +.browsers.browsers-compact li .browser-icon:after { + display: none !important; +} +.browsers:after { + clear: both; + content: ''; + display: block; +} +.browsers li { + float: left; + width: 15%; + text-align: center; + border: 1px solid #cbd3dd; + margin-right: 6.25%; + border-radius: 3px; + position: relative; +} +.browsers li:after { + content: ""; + display: block; + padding-bottom: 100%; +} +.browsers li:last-child { + margin: 0; +} +.browser-title { + margin: 0; + position: absolute; + bottom: 0; + width: 100%; + height: 30%; +} +.browser-icon { + position: absolute; + width: 100%; + top: 0; + height: 70%; +} +.browser-icon svg { + max-width: 50%; + height: 50%; + margin-top: 20%; +} +.browser-icon:before, +.browser-icon:after { + display: none; +} +li.browser-recommended .browser-icon:before, +li.browser-partial .browser-icon:before { + position: absolute; + display: none; + top: -20px; + left: 50%; + margin-left: -20px; + background-color: white; + font-size: 17px; + font-family: 'FontAwesome'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 38px; + -webkit-font-smoothing: antialiased; + width: 40px; + height: 40px; + text-align: center; + border: 1px solid; + border-radius: 50%; +} +li.browser-recommended .browser-icon:before { + display: block; + content: "\f005"; + background-color: white; + color: #44bb55; + border-color: #44bb55; +} +li.browser-partial .browser-icon:before { + display: block; + content: "\f12a"; + background-color: white; + color: #ff530d; + border-color: #ff530d; +} +li.browser-recommended .browser-icon:after, +li.browser-partial .browser-icon:after { + display: none; +} +li:hover .browser-icon:before, +li:hover .browser-icon:after { + display: none; +} +li.browser-recommended:hover .browser-icon:before, +li.browser-partial:hover .browser-icon:before { + width: 4px; + height: 4px; + border-radius: 0; + display: block; + position: absolute; + content: '' !important; + background-color: #fff; + border: 0; + border-right: 1px solid; + border-bottom: 1px solid; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + top: -13px; + left: 50%; + margin-left: -2px; + z-index: 3; + pointer-events: none; +} +li.browser-recommended:hover .browser-icon:after, +li.browser-partial:hover .browser-icon:after { + position: absolute; + content: ''; + left: 0px; + top: -41px; + width: 100%; + background-color: white; + font-size: 12px; + border-radius: 3px; + line-height: 2.4; + display: block; +} +li.browser-recommended:hover .browser-icon:after { + color: #44bb55; + border: 1px solid #44bb55; + content: 'recommended'; +} +li.browser-partial:hover .browser-icon:after { + color: #ff530d; + border: 1px solid #ff530d; + content: 'partial support'; +} +.browsers-table { + font-size: 18px; + font-weight: 300; + margin-bottom: 30px; + width: 100%; + line-height: 1.6; +} +.browsers-table-row { + border-bottom: 1px solid #cbd3dd; +} +.browsers-table-row:last-child { + border-bottom: none; +} +.browsers-table-row td { + padding: 20px 0px; +} +.browsers-table-icon { + margin-right: 15px; + font-size: 26px; + color: #808488; +} +.browsers-table-comment { + text-align: center; +} +.browsers-table-recommended { + color: #44bb55; +} +.browsers-table-partial { + color: #ff530d; +} +@media all and (max-width: 480px) { + .browsers-table-comment { + display: none; + } + .browsers-table td { + text-align: center; + } + .browsers-table-icon { + display: block; + margin: 0 0 10px 0; + } +} +.header-browser { + max-width: 970px; + margin: 110px auto -200px; + -webkit-box-shadow: 0px 0px 9px 1px rgba(0, 0, 0, 0.13); + box-shadow: 0px 0px 9px 1px rgba(0, 0, 0, 0.13); + border-radius: 3px; + overflow-y: hidden; +} +.header-browser-header { + background-color: #e8e8e8; + height: 35px; + border-bottom: 1px solid #dadada; + width: 100%; + position: relative; +} +.header-browser-dots { + position: absolute; + left: 10px; + top: 14px; + margin: 0; + padding: 0; + line-height: 7px; +} +.header-browser-dots li { + width: 8px; + height: 7px; + border-radius: 50%; + background-color: #b5b7b9; + display: inline-block; + vertical-align: middle; + zoom: 1; + *display: inline; +} +.header-browser-menu { + position: absolute; + right: 10px; + top: 11px; +} +.header-browser-menu i { + font-size: 15px; + color: #b5b7b9; +} +.header-browser-content { + position: relative; +} +.header-browser-img { + width: 100%; + max-width: 100%; + position: absolute; + top: 0; + left: 0; +} +.note { + padding: 20px 20px 20px 25px; + border: 1px solid #cbd3dd; + border-radius: 3px; + box-shadow: inset 5px 0px 0px 0px #ff530d; + margin-bottom: 30px; + position: relative; +} +.note.green { + box-shadow: inset 5px 0px 0px 0px #44bb55; +} +.note.green .note-title { + color: #44bb55; +} +.note.blue { + box-shadow: inset 5px 0px 0px 0px #2288cc; +} +.note.blue .note-title { + color: #2288cc; +} +.note.blue-light { + box-shadow: inset 5px 0px 0px 0px #48cacc; +} +.note.blue-light .note-title { + color: #48cacc; +} +.note.red { + box-shadow: inset 5px 0px 0px 0px #ff3625; +} +.note.red .note-title { + color: #ff3625; +} +.note.purple { + box-shadow: inset 5px 0px 0px 0px #8d3deb; +} +.note.purple .note-title { + color: #8d3deb; +} +.note-bounce { + -webkit-animation: note-bounce 3s Ease-in-out infinite; + -moz-animation: note-bounce 3s Ease-in-out infinite; + -ms-animation: note-bounce 3s Ease-in-out infinite; + -o-animation: note-bounce 3s Ease-in-out infinite; + animation: note-bounce 3s Ease-in-out infinite; +} +.note-pulse { + -webkit-animation: note-pulse 3s Ease-in-out infinite; + -moz-animation: note-pulse 3s Ease-in-out infinite; + -ms-animation: note-pulse 3s Ease-in-out infinite; + -o-animation: note-pulse 3s Ease-in-out infinite; + animation: note-pulse 3s Ease-in-out infinite; +} +@-moz-keyframes note-pulse { + 0% { + transform: scale3d(1, 1, 1); + } + 50% { + transform: scale3d(1.03, 1.03, 1.03); + } + 100% { + transform: scale3d(1, 1, 1); + } +} +@-webkit-keyframes note-pulse { + 0% { + transform: scale3d(1, 1, 1); + } + 50% { + transform: scale3d(1.03, 1.03, 1.03); + } + 100% { + transform: scale3d(1, 1, 1); + } +} +@keyframes note-pulse { + 0% { + transform: scale3d(1, 1, 1); + } + 50% { + transform: scale3d(1.03, 1.03, 1.03); + } + 100% { + transform: scale3d(1, 1, 1); + } +} +@-moz-keyframes note-bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-25px); + -moz-transform: translateY(-25px); + -ms-transform: translateY(-25px); + -o-transform: translateY(-25px); + transform: translateY(-25px); + } + 60% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } +} +@-webkit-keyframes note-bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-25px); + -moz-transform: translateY(-25px); + -ms-transform: translateY(-25px); + -o-transform: translateY(-25px); + transform: translateY(-25px); + } + 60% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } +} +@keyframes note-bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-25px); + -moz-transform: translateY(-25px); + -ms-transform: translateY(-25px); + -o-transform: translateY(-25px); + transform: translateY(-25px); + } + 60% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } +} +.note-close { + position: absolute; + right: 15px; + top: 15px; + color: #808488; + cursor: pointer; + font-size: 18px; +} +.note-title { + font-size: 1.375em; + color: #ff530d; +} +.note-description { + margin: 0; +} +.modal { + display: none; + width: 600px; + background-color: #f6f7f8; + border-radius: 3px; + max-width: 80%; +} +.modal-header { + background-color: #cbd3dd; + padding: 20px 25px; + position: relative; +} +.modal-header .fa.fa-times { + position: absolute; + top: 50%; + width: 20px; + height: 20px; + right: 15px; + margin-top: -10px; + cursor: pointer; + text-align: center; + line-height: 18px; +} +.modal-title { + margin: 0; +} +.modal-content { + padding: 25px; + line-height: 1.4; + font-weight: 300; +} +.modal-footer { + border-top: 1px solid #cbd3dd; + padding: 20px 25px; +} +.modal-footer.center { + text-align: center; +} +.modal-footer .button { + margin-right: 10px; +} +.modal-footer .button:last-child { + margin-right: 0; +} +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+applescript+aspnet+c+csharp+cpp+coffeescript+css-extras+git+haml+handlebars+jade+java+less+markdown+objectivec+perl+php+php-extras+python+jsx+ruby+scss+scheme+smarty+sql+stylus+swift+typescript&plugins=line-numbers */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: #333; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.namespace { + opacity: .7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +pre.line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} +pre.line-numbers > code { + position: relative; +} +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; + /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.line-numbers-rows > span { + pointer-events: none; + display: block; + counter-increment: linenumber; +} +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; +} +.code-highlight { + position: relative; + margin-bottom: 30px; +} +.code-highlight.code-highlight-with-label:after { + content: attr(data-label); + position: absolute; + display: block; + top: 4px; + right: 71px; + font-size: 0.875em; + color: #808488; + font-weight: 300; + padding: 0px 14px; + line-height: 35px; + height: 35px; + background-color: #fdfdfd; + border-radius: 3px; +} +.code-highlight :not(pre) > code[class*=language-], +.code-highlight pre[class*=language-] { + background-color: #fdfdfd; + border: 1px solid #dae0e7; +} +.code-highlight .copy-code { + font-size: 0.875em; + cursor: pointer; + top: 0; + right: 0; + font-weight: 300; + position: absolute; + border: 1px solid #dae0e7; + padding: 9px 10px; + border-radius: 0 3px 0 3px; + z-index: 2; + color: #4e5154; + background-color: #f6f7f8; + -webkit-transition: color .25s ease; + -moz-transition: color .25s ease; + -ms-transition: color .25s ease; + -o-transition: color .25s ease; + transition: color .25s ease; +} +.code-highlight .copy-code:before { + content: '\e665'; + font-family: 'Pe-icon-7-stroke'; + font-size: 16px; + vertical-align: middle; + margin-right: 4px; +} +.code-highlight .copy-code.copy-code-error, +.code-highlight .copy-code.copy-code-error:hover { + color: #ff530d; +} +.code-highlight .copy-code:hover { + color: #44bb55; +} +.code-highlight-attached { + margin-bottom: 30px; +} +.code-highlight-attached .code-highlight { + margin-bottom: 0; +} +.code-highlight-attached .code-highlight:first-child pre[class*=language-] { + border-radius: 3px 3px 0 0; +} +.code-highlight-attached .code-highlight:last-child pre[class*=language-] { + border-radius: 0 0 3px 3px; + border-bottom: 1px solid #e1e5eb; +} +.code-highlight-attached .code-highlight pre[class*=language-] { + border-bottom: 0; + margin: 0; + border-radius: 0; +} +.code-highlight-tabs.tabs .content { + padding: 0; + border: none; +} +.code-highlight-tabs.tabs.code-highlight-tabs-center .content { + padding: 35px 0; +} +.code-highlight-tabs.tabs.code-highlight-tabs-center pre { + margin: 0; +} +.code-highlight-tabs.tabs.code-highlight-tabs-center .steps { + width: 100%; + text-align: center; +} +.code-highlight-tabs.tabs.code-highlight-tabs-center .steps li { + border: 1px solid transparent; +} +.code-highlight-tabs.tabs.code-highlight-tabs-center .steps li a { + display: block; + padding: 5px 15px; +} +.code-highlight-tabs.tabs.code-highlight-tabs-center .steps li.current { + border: 1px solid #cbd3dd; + background-color: #f6f7f8; +} +.code-highlight-tabs.tabs .steps ul > li { + background-color: transparent; + border: 0; +} +.code-highlight-tabs.tabs .steps ul > li a { + color: #808488; + padding: 0 10px; +} +.code-highlight-tabs.tabs .steps ul > li.current a { + color: #2288cc; +} +.file-tree-title { + background-color: #f6f7f8; + margin: 0; + padding: 15px 20px; + border-top: 1px solid #cbd3dd; + border-left: 1px solid #cbd3dd; + border-right: 1px solid #cbd3dd; + border-radius: 3px 3px 0 0; + position: relative; + padding-right: 300px; + line-height: 1.4; +} +.file-tree-title:after { + display: block; + content: ''; + clear: both; +} +.file-tree-description { + font-size: 0.8125em; + vertical-align: middle; + color: #808488; +} +.file-tree-buttons { + position: absolute; + top: 0; + right: 0; + width: 300px; + padding: 0 20px; + line-height: 1.4; + text-align: right; + font-size: 0.875em; +} +.file-tree-buttons li { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + cursor: pointer; + padding: 15px 0; +} +.file-tree-buttons li:first-child { + margin-right: 20px; +} +.file-tree-buttons li i { + font-size: 12px; + margin-right: 4px; +} +.file-tree-list, +.file-tree-list ul { + list-style-type: none; + overflow: hidden; + margin: 0; +} +.file-tree-list { + font-size: 1em; + border: 1px solid #cbd3dd; + border-radius: 0 0 3px 3px; + padding: 20px 25px 25px; + font-weight: 300; + margin-bottom: 30px; +} +.file-tree-list ul { + padding-left: 30px; +} +.file-tree-list li { + line-height: 1.8; +} +.file-tree-list li:before { + font: normal normal normal 14px/1 'FontAwesome'; + margin-right: 8px; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transform: translate(0, 0); + display: inline-block; + vertical-align: 0px; + zoom: 1; + *display: inline; + webkit-backface-visibility: hidden; + -webkit-transform: translateZ(0) scale(1, 1); +} +.file-tree-list li.is-folder:before { + width: 16px; + content: "\f114"; + color: #2288cc; +} +.file-tree-list li.is-folder.items-expanded:before { + width: 16px; + content: "\f115"; + color: #2288cc; +} +.file-tree-list li.is-file:before { + width: 16px; + content: "\f016"; + color: #44bb55; + font-size: 15px; + text-indent: 1px; +} +.file-tree-list li.contains-items { + cursor: pointer; +} +.file-tree-list li.items-expanded { + cursor: default; +} +.file-tree-text { + list-style-type: none; + padding: 25px 30px; + margin: 0 0 30px 0; + background-color: #f6f7f8; + border-radius: 3px; + border: 1px solid #cbd3dd; + font-family: Menlo, Monaco, Consolas, 'Courier New', monos; + overflow: auto; + word-spacing: normal; + word-break: normal; + white-space: nowrap; + font-size: 14px; + line-height: 1.6; +} +.file-tree-text ul { + list-style-type: none; + font-size: inherit; + line-height: inherit; + padding: 0; + margin: 0; +} +.file-tree-text-comment { + color: #808488; +} +.skill { + margin-bottom: 30px; +} +.skill.inline .skill-title, +.skill.inline .skill-level { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + line-height: 50px; + margin: 0; +} +.skill.inline .skill-title { + margin-right: 15px; +} +.skill.inline.small .skill-title { + margin-right: 10px; +} +.skill.large .skill-title { + font-size: 2.1875em; +} +.skill.large .skill-level { + font-size: 1.25em; +} +.skill.small .skill-title { + font-size: 1em; +} +.skill.small .skill-level { + font-size: 0.625em; +} +.skill-level { + margin: 0; + padding: 0; + list-style-type: none; +} +.skill-level > li { + color: #fdc441; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + font-size: 1.25em; +} +.steps { + margin: 0 0 30px 0; + padding: 0; + list-style-type: none; +} +.step { + padding-left: 55px; + position: relative; + margin-bottom: 30px; + padding-bottom: 30px; + border-bottom: 1px solid #dae0e7; +} +.step:last-child { + margin-bottom: 0; + border: none; + padding-bottom: 0; +} +.step-title { + font-size: 1.125em; + line-height: 1.4; +} +.step-content { + font-size: 1em; + color: #808488; + font-weight: 300; +} +.step-number { + position: absolute; + left: 0; + top: -9px; + width: 41px; + height: 41px; + border-radius: 50%; + border: 1px solid #cbd3dd; + display: block; + text-align: center; + text-indent: 1px; + line-height: 41px; +} +.steps-interactive { + position: relative; + margin-bottom: 30px; + display: block; +} +.steps-interactive .content { + border-radius: 3px; + padding: 30px 30px 60px 30px; + border: 1px solid #cbd3dd; +} +.steps-interactive .content p:last-child { + margin: 0; +} +.steps-interactive .actions { + position: absolute; + bottom: 0; + width: 100%; +} +.steps-interactive .actions > ul { + margin: 0; + padding: 0; + left: 0; + right: 0; + height: 35px; + list-style-type: none; +} +.steps-interactive .actions > ul:after { + display: block; + clear: both; + content: ''; +} +.steps-interactive .actions > ul > li { + display: block; +} +.steps-interactive .actions > ul > li a { + background-color: #f6f7f8; + border-radius: 3px; + padding: 10px 15px; + color: #333333; + border: 1px solid rgba(0, 0, 0, 0.15); + display: block; + line-height: 1.2; + font-weight: 300; +} +.steps-interactive .actions > ul > li a:hover { + text-decoration: none; +} +.steps-interactive .actions > ul > li:first-child { + float: left; +} +.steps-interactive .actions > ul > li:last-child, +.steps-interactive .actions > ul > li:nth-child(2) { + float: right; +} +.steps-interactive .steps { + margin: 0; + display: block; +} +.steps-interactive .steps ul { + margin: 0; + padding: 0; + list-style-type: none; +} +.steps-interactive .steps ul > li { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + background-color: #f6f7f8; + border: 1px solid rgba(0, 0, 0, 0.15); + margin-right: 10px; + margin-bottom: 10px; + border-radius: 3px; + -webkit-transition: opacity 0.25s ease, background-color 0.25s ease; + -moz-transition: opacity 0.25s ease, background-color 0.25s ease; + -ms-transition: opacity 0.25s ease, background-color 0.25s ease; + -o-transition: opacity 0.25s ease, background-color 0.25s ease; + transition: opacity 0.25s ease, background-color 0.25s ease; +} +.steps-interactive .steps ul > li.current { + background-color: #2288cc; + outline: none; +} +.steps-interactive .steps ul > li.current a, +.steps-interactive .steps ul > li.current a:hover { + color: white; + outline: none; +} +.steps-interactive .steps ul > li a { + font-size: 0.875em; + color: #333333; + padding: 10px 15px; + display: block; +} +.steps-interactive .steps ul > li a:hover { + color: #333333; + text-decoration: none; +} +.step-interactive-title { + display: none; +} +.content { + display: block; +} +/* + * Owl Carousel - Animate Plugin + */ +.owl-carousel .animated { + -webkit-animation-duration: 1000ms; + animation-duration: 1000ms; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +.owl-carousel .owl-animated-in { + z-index: 0; +} +.owl-carousel .owl-animated-out { + z-index: 1; +} +.owl-carousel .fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +/* + * Owl Carousel - Auto Height Plugin + */ +.owl-height { + -webkit-transition: height 500ms ease-in-out; + -moz-transition: height 500ms ease-in-out; + -ms-transition: height 500ms ease-in-out; + -o-transition: height 500ms ease-in-out; + transition: height 500ms ease-in-out; +} +/* + * Core Owl Carousel CSS File + */ +.owl-carousel { + display: none; + width: 100%; + -webkit-tap-highlight-color: transparent; + /* position relative and z-index fix webkit rendering fonts issue */ + position: relative; + z-index: 1; +} +.owl-carousel .owl-stage { + position: relative; + -ms-touch-action: pan-Y; +} +.owl-carousel .owl-stage:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +.owl-carousel .owl-stage-outer { + position: relative; + overflow: hidden; + /* fix for flashing background */ + -webkit-transform: translate3d(0px, 0px, 0px); +} +.owl-carousel .owl-controls .owl-nav .owl-prev, +.owl-carousel .owl-controls .owl-nav .owl-next, +.owl-carousel .owl-controls .owl-dot { + cursor: pointer; + cursor: hand; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.owl-carousel.owl-loaded { + display: block; +} +.owl-carousel.owl-loading { + opacity: 0; + display: block; +} +.owl-carousel.owl-hidden { + opacity: 0; +} +.owl-carousel .owl-refresh .owl-item { + display: none; +} +.owl-carousel .owl-item { + position: relative; + min-height: 1px; + float: left; + -webkit-backface-visibility: hidden; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.owl-carousel .owl-item img { + display: block; + width: 100%; + -webkit-transform-style: preserve-3d; +} +.owl-carousel.owl-text-select-on .owl-item { + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.owl-carousel .owl-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -o-grab; + cursor: -ms-grab; + cursor: grab; +} +.owl-carousel.owl-rtl { + direction: rtl; +} +.owl-carousel.owl-rtl .owl-item { + float: right; +} +/* No Js */ +.no-js .owl-carousel { + display: block; +} +/* + * Owl Carousel - Lazy Load Plugin + */ +.owl-carousel .owl-item .owl-lazy { + opacity: 0; + -webkit-transition: opacity 400ms ease; + -moz-transition: opacity 400ms ease; + -ms-transition: opacity 400ms ease; + -o-transition: opacity 400ms ease; + transition: opacity 400ms ease; +} +.owl-carousel .owl-item img { + transform-style: preserve-3d; +} +/* + * Owl Carousel - Video Plugin + */ +.owl-carousel .owl-video-wrapper { + position: relative; + height: 100%; + background: #000; +} +.owl-carousel .owl-video-play-icon { + position: absolute; + height: 80px; + width: 80px; + left: 50%; + top: 50%; + margin-left: -40px; + margin-top: -40px; + background: url("owl.video.play.png") no-repeat; + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + -webkit-transition: scale 100ms ease; + -moz-transition: scale 100ms ease; + -ms-transition: scale 100ms ease; + -o-transition: scale 100ms ease; + transition: scale 100ms ease; +} +.owl-carousel .owl-video-play-icon:hover { + -webkit-transition: scale(1.3, 1.3); + -moz-transition: scale(1.3, 1.3); + -ms-transition: scale(1.3, 1.3); + -o-transition: scale(1.3, 1.3); + transition: scale(1.3, 1.3); +} +.owl-carousel .owl-video-playing .owl-video-tn, +.owl-carousel .owl-video-playing .owl-video-play-icon { + display: none; +} +.owl-carousel .owl-video-tn { + opacity: 0; + height: 100%; + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size: contain; + -moz-background-size: contain; + -o-background-size: contain; + background-size: contain; + -webkit-transition: opacity 400ms ease; + -moz-transition: opacity 400ms ease; + -ms-transition: opacity 400ms ease; + -o-transition: opacity 400ms ease; + transition: opacity 400ms ease; +} +.owl-carousel .owl-video-frame { + position: relative; + z-index: 1; +} +.steps-slider { + margin-bottom: 30px; +} +.steps-slider .owl-nav { + font-family: 'FontAwesome'; +} +.steps-slider .owl-item { + backface-visibility: visible; +} +.steps-slider .owl-prev, +.steps-slider .owl-next { + position: absolute; + bottom: 30px; + width: 40px; + height: 40px; + border: 1px solid #2288cc; + text-align: center; + border-radius: 3px; + color: #2288cc; + line-height: 38px; + background-color: white; +} +.steps-slider .owl-prev { + right: 130px; +} +.steps-slider .owl-next { + right: 30px; +} +.steps-slider-item { + border: 1px solid #cbd3dd; + border-radius: 3px; +} +.steps-slider-step { + position: absolute; + right: 80px; + bottom: 30px; + width: 40px; + height: 40px; + border: 1px solid #2288cc; + text-align: center; + border-radius: 3px; + color: #2288cc; + line-height: 38px; + background-color: white; +} +.column-fill { + background-color: #cbd3dd; + border-radius: 3px; + height: 40px; + line-height: 38px; + border: 1px solid #f6f7f8; + cursor: default; + -webkit-transition: color 0.25s ease, background-color 0.25s ease; + -moz-transition: color 0.25s ease, background-color 0.25s ease; + -ms-transition: color 0.25s ease, background-color 0.25s ease; + -o-transition: color 0.25s ease, background-color 0.25s ease; + transition: color 0.25s ease, background-color 0.25s ease; +} +.column-fill:hover { + color: white; + background-color: #808488; +} +.row-fill { + margin: 0 0 30px 0; +} +.twentytwenty-horizontal .twentytwenty-handle:before, +.twentytwenty-horizontal .twentytwenty-handle:after, +.twentytwenty-vertical .twentytwenty-handle:before, +.twentytwenty-vertical .twentytwenty-handle:after { + content: " "; + display: block; + background: white; + position: absolute; + z-index: 30; + -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); + -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); + box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); +} +.twentytwenty-horizontal .twentytwenty-handle:before, +.twentytwenty-horizontal .twentytwenty-handle:after { + width: 3px; + height: 9999px; + left: 50%; + margin-left: -1.5px; +} +.twentytwenty-vertical .twentytwenty-handle:before, +.twentytwenty-vertical .twentytwenty-handle:after { + width: 9999px; + height: 3px; + top: 50%; + margin-top: -1.5px; +} +.twentytwenty-before-label, +.twentytwenty-after-label, +.twentytwenty-overlay { + position: absolute; + top: 0; + width: 100%; + height: 100%; +} +.twentytwenty-before-label, +.twentytwenty-after-label, +.twentytwenty-overlay { + -webkit-transition-duration: 0.5s; + -moz-transition-duration: 0.5s; + transition-duration: 0.5s; +} +.twentytwenty-before-label, +.twentytwenty-after-label { + -webkit-transition-property: opacity; + -moz-transition-property: opacity; + transition-property: opacity; +} +.twentytwenty-before-label:before, +.twentytwenty-after-label:before { + color: white; + font-size: 13px; + letter-spacing: 0.1em; +} +.twentytwenty-before-label:before, +.twentytwenty-after-label:before { + position: absolute; + background: rgba(255, 255, 255, 0.2); + line-height: 38px; + padding: 0 20px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.twentytwenty-horizontal .twentytwenty-before-label:before, +.twentytwenty-horizontal .twentytwenty-after-label:before { + top: 50%; + margin-top: -19px; +} +.twentytwenty-vertical .twentytwenty-before-label:before, +.twentytwenty-vertical .twentytwenty-after-label:before { + left: 50%; + margin-left: -45px; + text-align: center; + width: 90px; +} +.twentytwenty-left-arrow, +.twentytwenty-right-arrow, +.twentytwenty-up-arrow, +.twentytwenty-down-arrow { + width: 0; + height: 0; + border: 6px inset transparent; + position: absolute; +} +.twentytwenty-left-arrow, +.twentytwenty-right-arrow { + top: 50%; + margin-top: -6px; +} +.twentytwenty-up-arrow, +.twentytwenty-down-arrow { + left: 50%; + margin-left: -6px; +} +.twentytwenty-container { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + z-index: 0; + overflow: hidden; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; +} +.twentytwenty-container img { + max-width: 100%; + position: absolute; + top: 0; + display: block; +} +.twentytwenty-container.active .twentytwenty-overlay, +.twentytwenty-container.active :hover.twentytwenty-overlay { + background: rgba(0, 0, 0, 0); +} +.twentytwenty-container.active .twentytwenty-overlay .twentytwenty-before-label, +.twentytwenty-container.active .twentytwenty-overlay .twentytwenty-after-label, +.twentytwenty-container.active :hover.twentytwenty-overlay .twentytwenty-before-label, +.twentytwenty-container.active :hover.twentytwenty-overlay .twentytwenty-after-label { + opacity: 0; +} +.twentytwenty-container * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.twentytwenty-before-label { + opacity: 0; +} +.twentytwenty-before-label:before { + content: "Before"; +} +.twentytwenty-after-label { + opacity: 0; +} +.twentytwenty-after-label:before { + content: "After"; +} +.twentytwenty-horizontal .twentytwenty-before-label:before { + left: 10px; +} +.twentytwenty-horizontal .twentytwenty-after-label:before { + right: 10px; +} +.twentytwenty-vertical .twentytwenty-before-label:before { + top: 10px; +} +.twentytwenty-vertical .twentytwenty-after-label:before { + bottom: 10px; +} +.twentytwenty-overlay { + -webkit-transition-property: background; + -moz-transition-property: background; + transition-property: background; + background: rgba(0, 0, 0, 0); + z-index: 25; +} +.twentytwenty-overlay:hover { + background: rgba(0, 0, 0, 0.5); +} +.twentytwenty-overlay:hover .twentytwenty-after-label { + opacity: 1; +} +.twentytwenty-overlay:hover .twentytwenty-before-label { + opacity: 1; +} +.twentytwenty-before { + z-index: 20; +} +.twentytwenty-after { + z-index: 10; +} +.twentytwenty-handle { + height: 38px; + width: 38px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -22px; + margin-top: -22px; + border: 3px solid white; + -webkit-border-radius: 1000px; + -moz-border-radius: 1000px; + border-radius: 1000px; + -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); + -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); + box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); + z-index: 40; + cursor: pointer; +} +.twentytwenty-horizontal .twentytwenty-handle:before { + bottom: 50%; + margin-bottom: 22px; + -webkit-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + -moz-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); +} +.twentytwenty-horizontal .twentytwenty-handle:after { + top: 50%; + margin-top: 22px; + -webkit-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + -moz-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); +} +.twentytwenty-vertical .twentytwenty-handle:before { + left: 50%; + margin-left: 22px; + -webkit-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + -moz-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); +} +.twentytwenty-vertical .twentytwenty-handle:after { + right: 50%; + margin-right: 22px; + -webkit-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + -moz-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); + box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); +} +.twentytwenty-left-arrow { + border-right: 6px solid white; + left: 50%; + margin-left: -17px; +} +.twentytwenty-right-arrow { + border-left: 6px solid white; + right: 50%; + margin-right: -17px; +} +.twentytwenty-up-arrow { + border-bottom: 6px solid white; + top: 50%; + margin-top: -17px; +} +.twentytwenty-down-arrow { + border-top: 6px solid white; + bottom: 50%; + margin-bottom: -17px; +} +.before-and-after { + margin-bottom: 30px; +} +.before-and-after img { + width: 100%; +} +.faq { + margin: 0 0 30px 0; + padding: 0; + list-style-type: none; +} +.faq-item { + border-bottom: 1px solid #cbd3dd; + margin-bottom: 20px; +} +.faq-item:last-child { + border-bottom: 0; +} +.faq-question { + font-size: 1.25em; + line-height: 1.4; + padding: 10px 30px 10px 0; + cursor: pointer; + position: relative; +} +.faq-question:before { + display: block; + content: '\f107'; + position: absolute; + right: 0; + margin-top: -16px; + top: 50%; + font-family: 'FontAwesome'; +} +.faq-question.active:before { + content: '\f106'; +} +.faq-answer { + padding: 0 0 30px 0; + display: none; +} +.faq-keyword { + color: #2288cc; +} +.faq-filter { + border-bottom: 1px solid #cbd3dd; + margin-bottom: 12px; + border-radius: 3px; + position: relative; + padding-left: 30px; +} +.faq-filter:before { + position: absolute; + content: "\f002"; + display: block; + font-family: 'FontAwesome'; + left: 0px; + top: 2px; + color: #A9A9B1; + font-size: 16px; + line-height: 49px; + padding: 0 1px; + background-color: white; +} +.faq-filter input { + width: 100%; + border: none; + display: block; + line-height: 33px; + padding: 10px 0; + outline: none; + font-weight: 300; + font-size: 1.25em; +} +.faq-filter input::-webkit-input-placeholder { + font-weight: 300; +} +.faq-filter input:-moz-placeholder { + font-weight: 300; +} +.faq-filter input::-moz-placeholder { + font-weight: 300; +} +.faq-filter input:-ms-input-placeholder { + font-weight: 300; +} +.faq-grid { + margin-bottom: 30px; +} +.faq-grid-question { + margin-bottom: 15px; + font-size: 1.25em; +} +.faq-grid-answer { + color: #808488; + line-height: 1.7; +} +.faq-grid-show-more { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + color: #2288cc; + border: 1px solid #2288cc; + padding: 0 20px; + border-radius: 25px; + line-height: 40px; + font-weight: 400; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 2px; + margin: 30px 0; +} +.faq-grid-show-more i { + font-size: 14px; + margin-left: 6px; + margin-right: -2px; +} +.faq-grid-show-more:hover { + text-decoration: none; +} +.faq-article { + margin-bottom: 30px; +} +.faq-category-title { + font-size: 2.125em; + position: relative; + padding: 20px 30px 20px 0; + margin-bottom: 15px; + border-bottom: 1px solid #cbd3dd; +} +.faq-category-title:before { + content: attr(data-icon); + color: #808488; + font-family: 'Pe-icon-7-stroke'; + display: block; + right: 0px; + font-size: 30px; + position: absolute; + speak: none; + top: 20px; + line-height: 1; +} +.faq-article-title { + padding: 15px 0; + color: #2288cc; + line-height: 1.4; + margin: 0; + font-size: 1.4375em; +} +.faq-table-of-contents { + border-radius: 3px; + margin-bottom: 30px; + border: 1px solid #cbd3dd; + padding: 30px; + background-color: #f6f7f8; + position: relative; +} +.faq-table-of-contents:before { + content: attr(data-icon); + color: #808488; + font-family: 'Pe-icon-7-stroke'; + display: block; + right: 30px; + font-size: 35px; + position: absolute; + speak: none; + top: 30px; + line-height: 1; +} +.faq-table-of-contents-title { + font-size: 1.375em; + line-height: 1.4; + font-weight: 300; + padding-right: 35px; +} +.faq-table-of-contents-list { + margin: 0; + padding: 0; + list-style-type: none; + line-height: 2; + font-weight: 300; +} +.info { + margin-bottom: 30px; +} +.info-content { + list-style-type: none; + margin: 0; + padding: 0; + border-radius: 0 0 3px 3px; +} +.info-title { + font-size: 1.5em; + line-height: 1.4; + color: white; + background-color: #2288cc; + padding: 16px 50px 16px 30px; + margin: 0; + border-radius: 3px 3px 0 0; + position: relative; +} +.info-close { + font-size: 20px; + position: absolute; + right: 18px; + top: 50%; + margin-top: -14px; + cursor: pointer; +} +.info-content-item { + padding: 20px 30px; +} +.info-content-item:nth-child(odd) { + background-color: #f6f7f8; +} +.info-content-item:nth-child(even) { + background-color: #e8eaed; +} +.info-content-item-title { + font-size: 0.875em; + font-weight: 700; + color: #333333; + line-height: 1.5; +} +.info-content-item-text { + font-size: 0.875em; + color: #333333; + line-height: 1.5; + margin-bottom: 0; +} +.info-demiliter { + padding: 30px 0; + border-bottom: 1px solid #dae0e7; + border-top: 1px solid #dae0e7; + margin-bottom: 30px; +} +.info-delimiter-title { + line-height: 42px; + font-size: 26px; + margin: 0; +} +.info-delimiter-button { + text-align: right; + text-transform: uppercase; +} +.info-delimiter-button .button { + margin-right: 15px; +} +.info-delimiter-button .button:last-child { + margin: 0; +} +.category-list { + margin-bottom: 30px; +} +.category-list-title { + font-size: 1.25em; + color: #333333; + line-height: 1.4; + background-color: #f6f7f8; + padding: 16px 30px; + margin-bottom: 0; +} +.category-list-content { + padding: 20px 30px; + list-style-type: none; + margin: 0; +} +.category-list-content-item { + padding: 5px 0; + position: relative; +} +.category-list-content-item:before { + position: absolute; + width: 5px; + height: 5px; + background-color: #cbd3dd; + content: ''; + display: block; + left: -18px; + top: 16px; +} +.category-list-content-item-text { + font-size: 1.125em; + font-weight: 300; + line-height: 1.2; +} +.tabs { + margin-bottom: 30px; + position: relative; + width: 100%; + display: block; +} +.tabs .content { + border-radius: 3px; + padding: 30px; + border: 1px solid #cbd3dd; +} +.tabs .content p:last-child { + margin: 0; +} +.tabs .steps { + margin: 0; +} +.tabs .steps ul { + margin: 0; + padding: 0; + list-style-type: none; +} +.tabs .steps ul > li { + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + background-color: #f6f7f8; + border: 1px solid rgba(0, 0, 0, 0.15); + margin-right: 10px; + margin-bottom: -1px; + border-radius: 3px; +} +.tabs .steps ul > li i { + margin-left: 2px; + margin-right: 8px; +} +.tabs .steps ul > li.current { + background-color: white; + border-bottom: 1px solid white; + outline: none; +} +.tabs .steps ul > li.current a, +.tabs .steps ul > li.current a:hover { + outline: none; +} +.tabs .steps ul > li a { + font-size: 0.875em; + color: #333333; + padding: 10px 15px; + display: block; +} +.tabs .steps ul > li a:hover { + color: #333333; + text-decoration: none; +} +.tab-title { + display: none; +} +.navigation { + margin: 0; + padding: 0; + list-style-type: none; + margin-bottom: 30px; +} +.navigation:after { + clear: both; + display: block; + content: ''; +} +.navigation-next a, +.navigation-previous a { + color: white; + border-radius: 3px; + padding: 10px 20px; + display: block; + background-color: #44bb55; + font-weight: 300; + -webkit-transition: background-color 0.25s ease; + -moz-transition: background-color 0.25s ease; + -ms-transition: background-color 0.25s ease; + -o-transition: background-color 0.25s ease; + transition: background-color 0.25s ease; +} +.navigation-next a:hover, +.navigation-previous a:hover { + text-decoration: none; + background-color: #3da84d; +} +.navigation-next { + float: right; +} +.navigation-previous { + float: left; +} +ins.play-gif { + position: absolute; + font-family: Arial, sans serif; + width: 50px; + height: 50px; + line-height: 52px; + text-align: center; + background: #222; + font-size: 18px; + color: #fff; + border-radius: 50%; + opacity: .9; + border: 4px solid #fff; + cursor: pointer; + text-decoration: none; +} +ins.play-gif:hover { + opacity: .5; +} +.gifplayer-wrapper { + position: relative; + display: inline-block; +} +.spinner { + height: 50px; + width: 50px; + margin: 0px auto; + position: absolute; + top: 50%; + left: 50%; + margin-top: -25px; + margin-left: -25px; + -webkit-animation: rotation .6s infinite linear; + -moz-animation: rotation .6s infinite linear; + -o-animation: rotation .6s infinite linear; + animation: rotation .6s infinite linear; + border-left: 6px solid rgba(255, 255, 255, 0.15); + border-right: 6px solid rgba(255, 255, 255, 0.15); + border-bottom: 6px solid rgba(255, 255, 255, 0.15); + border-top: 6px solid rgba(255, 255, 255, 0.8); + border-radius: 100%; +} +@-webkit-keyframes rotation { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(359deg); + } +} +@-moz-keyframes rotation { + from { + -moz-transform: rotate(0deg); + } + to { + -moz-transform: rotate(359deg); + } +} +@-o-keyframes rotation { + from { + -o-transform: rotate(0deg); + } + to { + -o-transform: rotate(359deg); + } +} +@keyframes rotation { + from { + transform: rotate(0deg); + } + to { + transform: rotate(359deg); + } +} +.gif-player { + border: 1px solid #cbd3dd; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; + margin-bottom: 30px; + max-width: 100%; +} +.gif-player .gifplayer-wrapper { + max-width: 100% !important; + height: auto !important; + width: auto !important; + position: relative; +} +.gif-player img { + max-width: 100%; +} +.gif-player .gp-gif-element { + position: relative !important; +} +.gif-player ins.play-gif { + font-family: 'FontAwesome'; + width: 80px; + height: 80px; + font-size: 24px; + padding-left: 5px; + line-height: 70px; + position: absolute; + left: 50% !important; + top: 50% !important; + margin-left: -40px; + margin-top: -40px; +} +.video { + max-width: 100%; + margin-bottom: 30px; +} +.fluid-width-video-wrapper { + margin-bottom: 30px; +} +/* + * YouTube TV + */ +/* + * Base Canvas + */ +.ytv-canvas { + display: block; + background: #282828; + overflow: hidden; + font-family: arial, sans-serif; +} +.ytv-canvas ::-webkit-scrollbar { + border-left: 1px solid #000; + width: 10px; +} +.ytv-canvas ::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.1); +} +/* + * Video + */ +.ytv-video { + position: absolute; + top: 0; + right: 300px; + bottom: 0; + left: 0; + height: 100%; +} +.ytv-video iframe { + width: 100%; + height: 100%; + border: none; + outline: none; + display: block; +} +/* + * List + */ +.ytv-list { + position: absolute; + top: 0; + right: 0; + bottom: 0; + height: 100%; + width: 300px; +} +.ytv-list-inner { + overflow: auto; + position: absolute; + top: 52px; + right: 0; + bottom: 0; + left: 0; + -webkit-overflow-scrolling: touch; +} +.ytv-list ul { + margin: 0; + padding: 0; + list-style-type: none; +} +.ytv-list .ytv-active a { + border-left: 2px solid #fff; + background: rgba(255, 255, 255, 0.05); +} +.ytv-list a { + display: block; + text-decoration: none; + font-size: 11px; + color: #FEFEFE; + padding: 10px; + padding-left: 8px; + border-top: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.5); + border-left: 2px solid transparent; +} +.ytv-list a b { + max-height: 45px; + overflow: hidden; + display: block; + text-overflow: ellipsis; +} +.ytv-list li:first-child a { + border-top: none; +} +.ytv-list li:last-child a { + border-bottom: none; +} +.ytv-list a:hover, +.ytv-list-header .ytv-playlists a:hover { + background: rgba(255, 255, 255, 0.05); +} +.ytv-list a:active, +.ytv-list-header .ytv-playlists a:active { + background: rgba(0, 0, 0, 0.05); +} +.ytv-list .ytv-content { + padding-left: 125px; +} +.ytv-list .ytv-thumb-stroke { + position: absolute; + top: 1px; + left: 1px; + bottom: 1px; + right: 1px; + z-index: 2; + outline: 1px solid rgba(255, 255, 255, 0.1); +} +.ytv-list .ytv-thumb { + float: left; + position: relative; + outline: 1px solid rgba(0, 0, 0, 0.5); +} +.ytv-list .ytv-thumb img { + width: 120px; + display: block; +} +.ytv-list .ytv-thumb span { + position: absolute; + bottom: 5px; + right: 5px; + color: #eee; + background: rgba(0, 0, 0, 0.7); + font-size: 11px; + font-weight: bold; + padding: 0px 4px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.ytv-views { + display: block; + margin-top: 5px; + font-size: 10px; + font-weight: normal; + opacity: 0.3; +} +.ytv-list-header { + height: 52px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} +.ytv-list-header a { + background: rgba(255, 255, 255, 0.05); + position: relative; + z-index: 10; +} +.ytv-list-header img, +.ytv-list .ytv-playlists .ytv-thumb img { + width: 30px; + vertical-align: middle; +} +.ytv-list-header span { + padding-left: 10px; + font-size: 12px; + font-weight: bold; +} +/* + * Playlists + */ +.ytv-playlists { + z-index: 9; + position: absolute; + background: #282828; + top: 52px; + left: 0; + right: 0; + bottom: 0; + overflow: auto; + display: none; +} +.ytv-playlists img, +.ytv-list-header img { + float: left; +} +.ytv-playlists a span, +.ytv-list-header a span { + white-space: nowrap; + padding-left: 10px; + display: block; + overflow: hidden; + text-overflow: ellipsis; +} +.ytv-list-header > a span { + line-height: 30px; +} +.ytv-list-header .ytv-playlists a { + background: none; +} +.ytv-playlist-open .ytv-playlists { + display: block; +} +/* + * Modifiers + */ +.ytv-relative { + position: relative; + width: 100%; + height: 100%; +} +.ytv-full { + position: fixed; + top: 0; + left: 0; + width: 100% !important; + height: 100% !important; + margin: 0 !important; +} +.ytv-arrow { + height: 10px; + width: 0; + position: relative; + top: 10px; + right: 5px; + border: 10px solid transparent; + float: right; + border-top-color: rgba(0, 0, 0, 0.4); + display: none; +} +.ytv-has-playlists .ytv-arrow { + display: inline-block; +} +.ytv-playlist-open .ytv-arrow { + border-color: transparent; + border-bottom-color: rgba(0, 0, 0, 0.4); + top: -10px; +} +.ytv-list-header a:after, +.ytv-clear:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +.ytv-canvas { + height: 420px; + margin-bottom: 30px; + background-color: white; +} +.ytv-video { + border-left: 1px solid #cbd3dd; + border-top: 1px solid #cbd3dd; + border-bottom: 1px solid #cbd3dd; +} +.ytv-playlist-open .ytv-playlists { + background-color: white; +} +.ytv-canvas ::-webkit-scrollbar { + border-left: none; + width: 6px; + margin-right: 3px; +} +.ytv-list .ytv-arrow { + display: none; +} +.ytv-canvas ::-webkit-scrollbar-thumb { + background: #cbd3dd !important; + border-radius: 3px; +} +.ytv-canvas ::-webkit-scrollbar { + border-left: 1px solid #cbd3dd !important; +} +.ytv-list-header { + box-shadow: none; + border-bottom: 1px solid #cbd3dd; +} +.ytv-list { + border: 1px solid #cbd3dd; +} +.ytv-list a { + color: #333333; + border-bottom: none; + padding: 10px 10px 0 10px; +} +li:last-child .ytv-list a { + padding: 10px; +} +.ytv-list .ytv-content { + padding-left: 130px; +} +.ytv-list .ytv-thumb { + outline: none; + border: 1px solid #cbd3dd; +} +.video-js .vjs-big-play-button:before, +.video-js .vjs-control:before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + text-align: center; +} +@font-face { + font-family: VideoJS; + src: url('../font/1.3.0/VideoJS.eot?') format('eot'); +} +@font-face { + font-family: VideoJS; + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAi0AAoAAAAADnwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAD0AAABWQLpNY2NtYXAAAAE0AAAAOgAAAUriJhC2Z2x5ZgAAAXAAAATAAAAH/CNovTZoZWFkAAAGMAAAACwAAAA2BEqUO2hoZWEAAAZcAAAAGAAAACQELwIWaG10eAAABnQAAAAPAAAAVCoAAABsb2NhAAAGhAAAACwAAAAsEBQSZm1heHAAAAawAAAAHwAAACABJgBkbmFtZQAABtAAAAElAAACCtXH9aBwb3N0AAAH+AAAALsAAAElJXNJs3icY2BkYmCcwMDKwMHowpjGwMDgDqW/MkgytDAwMDGwMjNgBQFprikMDh8ZP4owgbh6TBBhRhABAFl1B6YAAAB4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGD6K/P8PUvCREUTzM0DVAwEjG8OIBwCEVQbLAAB4nIVVzW/jRBSf5zieJE2bOPVH0jRpEidxsZumW8f20orWi6C7rKoKqSQUVUjdQ6RVAkekHi047AEOvbSqxIFed8OBO3voDSE4gRohLmi1N/Z/SHljp90uJSLRvJn5vZn3Pc8ECP7gBE4IR8is6A7+huPR8JhEAnwIQ8RnyBwhm6C7M0CLoG6AuwyRZdBxgdsZuPB9c/+Q4w73Q/rgEcc9ehDQs4ODL67x/cPRl1cMpEwj6vBRd4RQQlxL1CzREv12e9DugzEagkH44Mw5nBOBZEiF1HDXquuy6rgSRYJmyEWoUVWTLdVWBSo7rupGqAoHhWwL7KmSDLB7r7k2+inf7bb7+8rcUmUpf95oACk0kk2b0uJc+a2VrW56KbX9Tb7r94/2xdhSYt7Mw4eNRqA+IB0YkCjGCPWI9LjT64Hn96HTJ2M/vka+QJK4YjZtQC04iHAhmy2MXrT7/UDj98nGp+N7kbFvz1FukuSuZKvMv43ALwn9CcLt4fVfmCC7ubbWvLeLPo3Ve6HMP9D6x9uppXR3a6uLYvnrvEbJFBGJivHFENmabtlIIVzLFk7HRs8zDK8HxOsZnmdc9IwTz7gkRu8c0Qmy2EUtlDgbSHRttul7KAzF+HjTMHoDr+cbvdHQM3zcMzFhrAYYqxSZxVUZa0rEKiqjmyKWVVksg39JMlmAbAbG8yWmAO+wxWsGlgeKEq7rlGIMZ0melMgiRtKtaxWBqjXMBdYG1qzdiuozIEuqxWrYtahirTqu/nNXyervze9ANP3u8s7vZ5/NFUcvdueK/Nm3DNB2x+zSD9Gc+qTSvC8+kX8sfGAoyhGjssyQI8YjrDoCW0LfVLRlIfRQFiWFeWiLrXrUkjVVsy02bBwwGD3LZNGlDtLRaaczHA59Rm85/Mxsm6ZpmNd1w/ToZPO2DqoFybDkGTChUn8HWs46rCoLcIVLAsN1ewMYLrMnn8nlMmAgfV4yzRIk4148GRA4ZkC4DOFblh1PeVMKO95hRHljd52jc+gH73xqHB2socCaIA5q2S7LOGwknhn82mCOLsLxyvBN/CMdmObVezzHnFcIqQlUd1q6q6w6rTqmXFIpTpKy6qqCLAUo+DnxlONOMna16lQhXNiZU67aqlafQvoTmqZ7YtWtVucp3UvjmfQepXkNozWu199Ql0s81MZUOU2op6COFKOYAjQAt8ICCKgbJ2UTMNQKRnYTsBnh1tHpMuZgVZEE+A6gIfBGNOakpRgX6+CQ0nacN3mhEbBMPm7fYv1awhdqGK8SSkITYg9pRJ6O3Y3H78am5Qh9GBO0SYxZYPc843UfY29lCl/IVSfHV2HeaNFAbrTyq/ca3sGcwYRPwBu3bn4A4GJi+7/xjWGyS5Olo4mVOovfRDUxwKyx5E5U9zTP+FWmkoaNCA7INFGwW6yRbfIR+Rgr0naKHEUjBE1fcbE9OHUqK6riuKx/1HVNUdEeSRgjaKEmISL/FxK1NoFVtyprL+vrxhzH36lJufxKthjhSgX4PJ7gE0llOg6RRAoy84k4n5gGeSbGJ1L/2o1q72e8O+vJxa/+BL7gVBddHuDtrFIow2PO5VIx0cxVWxmBz6zMlx35fwF1Hgp/7dwn/wCHsUmOeJxjYGRgYADi2RquW+L5bb4ycDMxgMDFaZpbkGkmBsZrQIqDASwNAAmYCNZ4nGNgZGBgYgACPTAJYjMyoAJRAAXjAEx4nGNiYGBgojIGAAeMACsAAAAAAAAMAD4AUACSAKIAvgDsARIBOAFgAaYB2gIyAloCkAL2AxADPgN6A/54nGNgZGBgEGWIYGBnAAEmIOYCQgaG/2A+AwATugGLAHicXZBNaoNAGIZfE5PQCKFQ2lUps2oXBfOzzAESyDKBQJdGR2NQR3QSSE/QE/QEPUUPUHqsvsrXjTMw83zPvPMNCuAWP3DQDAejdm1GjzwS7pMmwi75XngAD4/CQ/oX4TFe4Qt7uMMbOzjuDc0EmXCP/C7cJ38Iu+RP4QEe8CU8pP8WHmOPX2EPz87TPo202ey2OjlnQSXV/6arOjWFmvszMWtd6CqwOlKHq6ovycLaWMWVydXKFFZnmVFlZU46tP7R2nI5ncbi/dDkfDtFBA2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtjlkOwjAMRDNAy1KgrMfIoUJqqKU0KVlYbk+hReKD+bCfrdHYYiR6ZeK/jkJghDEmyJBjihnmWKDAEiusUWKDLXbY44DjpDXqWbyL1Oy1oaxVKVBxcyY1JJsUaTGwcfcvNlx9HTVf6s05GRO0J7KSbCRf/i4eHPNwTcrTNLRsLfl5SKfI0VCYadVGdraDuiPyIQt15xxrd8n7h9Z9ky5Fw5b2w/gJGn7eqlSxkxV1J/mTJ8QLQRVRWgA=) format('woff'), url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMkC6TWMAAAEoAAAAVmNtYXDiJhC2AAAB1AAAAUpnbHlmI2i9NgAAA0wAAAf8aGVhZARKlDsAAADQAAAANmhoZWEELwIWAAAArAAAACRobXR4KgAAAAAAAYAAAABUbG9jYRAUEmYAAAMgAAAALG1heHABJgBkAAABCAAAACBuYW1l1cf1oAAAC0gAAAIKcG9zdCVzSbMAAA1UAAABJQABAAACAAAAAC4CAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAFQABAAAAAQAAmyhx5F8PPPUACwIAAAAAANGWKbQAAAAA0ZYptAAAAAACAAHWAAAACAACAAAAAAAAAAEAAAAVAFgABwAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQIAAZAABQAIAUQBZgAAAEcBRAFmAAAA9QAZAIQAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA8QHxFAIAAAAALgIAAAAAAAABAAAAAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADxFP//AAAAAPEB//8AAA8AAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAPgBQAJIAogC+AOwBEgE4AWABpgHaAjICWgKQAvYDEAM+A3oD/gABAAAAAAGWAZYAAgAAExE3q+oBlf7WlQADAAAAAAHWAdYAAgAOABoAAD8BJzcOAQceARc+ATcuAQMuASc+ATceARcOAdWAgCtbeAICeFtbeAICeFtIYQICYUhIYQICYaBgYHUCeFtbeAICeFtbeP6CAmFISGECAmFISGEAAgAAAAABgAGWAAMABwAANzMRIzMRMxGAVVWrVWsBKv7WASoABAAAAAABwAHAAAYAEgAiACUAAAE0JicVFzY3FAcXNjcuAScVHgElBxcjFTMXNRcGBxU2Nxc3AwcXAWAdGDQBNQsgFQEBU0EvOv7HG2VlVWtbFhosIiwbwC0tAQAdLQwvNQcHHhohKTBGZRAsD0yMG2WAa5BbEQgsChwrGwFQLS0AAAAAAQAAAAABVgGrAAUAABMVMxcRB5VWamoBQIBrAVZrAAACAAAAAAGLAasABgAMAAABLgEnFT4BJRUzFxEHAYsBHRgYHf7hVWtrAQAdLQysDC1dgGsBVmsAAAMAAAAAAcABvAAFAAwAGQAAExUzFxEHFzQmJxU+AScVHgEUBgcVPgE3LgFAVWtryx0YGB01Lzo6L0FTAQFTAUCAawFWa0AdLQysDC3YLA9MaEwPLBBlRkZlAAAABAAAAAABlgGWAAUACwARABcAADcjFTM1IyczNTM1IwEjFTM1IycVMxUzNZUqakAqKkBqAQBAaipAQCrVaiqWQCr/ACpqwCpAagAAAAQAAAAAAZYBlgAFAAsAEQAXAAA3MxUzNSM3IxUzNSMTMzUzNSM3NSMVMzVrQCpqQEBqKoAqQGoqKmqrQGqAKmr+1kAqgEBqKgAAAAACAAAAAAGrAasADwATAAABIQ4BBxEeARchPgE3ES4BAyERIQGA/wASGAEBGBIBABIYAQEYEv8AAQABqwEYEv8AEhgBARgSAQASGP7WAQAAAAYAAAAAAdYB1gAHAAwAEwAbACAAKAAAEzcmIyIGBxclLgEnBxcjFz4BNTQFJw4BFRQXMwceARc3MwcWMzI2NyfJZRYYJ0QcTgEFEEIuTtOgbBoe/uFTGh4EoJsQQi5OI1MWGCdEHE4BILAFGReHIi9HEYcVux1JKhYWkB1JKhYVFS9HEYeQBRkXhwAABQAAAAAB1gGrAA8AEwAXABsAHwAAASEOARURFBYXIT4BNRE0JgUzFSMXIzUzFyM1MzUjNTMBq/6qEhgYEgFWEhgY/phWVtbW1oBWVtbWAasBGBL/ABIYAQEYEgEAEhiqK1UrKysqKwADAAAAAAHAAasADwAnAD8AAAEhDgEVERQWFyE+ATURNCYHIzUjFTM1MxUOASsBIiY9ATQ2OwEyFh8BIzUjFTM1MxUUBisBIiYnNT4BOwEyFhUBlf7WEhkZEgEqEhkZvCArKyABDAlACQwMCUAJDAGVICsrIAwJQAkMAQEMCUAJDAGrARgS/wASGAEBGBIBABIYlQtACxYJDAwJVgkMDAkWC0ALFgkMDAlWCQwMCQAAAAYAAAAAAcABawADAAcACwAPABMAFwAANzM1IxUzNSM1MzUjFyE1IRUhNSE1FSE1QCsrKysrK1UBK/7VASv+1QEr6yqAK4ArgCqAK6srKwAAAQAAAAABwAHWACIAACUGByc2NCc3FjI2NCYiBgcUFwcmIgYUFjI3FwYVFBYyNjQmAYAZEZgCApYSNSQkNiQBApYSNSQkNRKYAiQ0JCSpARBZBxAHWBEkNyQkHAcHWBAkNiQQWAcHGyMjNSMAAgAAAAAB0gHWADcAQAAAJTY0Jzc2LwEmDwEmLwEmKwEiDwEGBycmDwEGHwEGFBcHBh8BFj8BFh8BFjsBMj8BNjcXFj8BNicHLgE0NjIWFAYBnwEBLQYEKgUINhAUCAIIVggCCBQQNQkEKwQGLQEBLQYEKwQJNRAUCAIIVggCCBQQNQkEKwQGzCAqKkAqKusKFgojBghKBwMVDQg4CQk4CA0VAwdKCAYjChYKIwYISgcDFQ0IOAkJOAgNFQMHSggGEwEqQCoqQCoAAAAAAQAAAAAB1gHWAAsAABMeARc+ATcuAScOASsCeFtbeAICeFtbeAEAW3gCAnhbW3gCAngAAAIAAAAAAdYB1gALABcAAAEOAQceARc+ATcuAQMuASc+ATceARcOAQEAW3gCAnhbW3gCAnhbSGECAmFISGECAmEB1QJ4W1t4AgJ4W1t4/oICYUhIYQICYUhIYQAAAwAAAAAB1gHWAAsAFwAgAAABDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgEnDgEiJjQ2MhYBAFt4AgJ4W1t4AgJ4W0hhAgJhSEhhAgJhCAEkNiQkNiQB1QJ4W1t4AgJ4W1t4/oICYUhIYQICYUhIYakbJCQ2JCQAAAAABwAAAAACAAFgAA0AFgAoADoATABUAFcAADc1Nh4CBw4BBwYjJzA3MjY3NiYHFRYXFjY3PgE1NCYnIxYXHgEXFAYXFjY3PgE1LgEnIxQXHgEVFAYXFjY3PgE1LgEnIxQXHgEVFAYFMz8BFTM1IxcVI+MmOyoaAgQxJRQZGzAYHgMCIB0BbQkKBAoMFg0JAQMKDwESHAoJBAoNARUOCAQKDxIcCgkECg0BFQ4IBAoPEv4lRRJAMTsMKIPaAQQdNiQoNwQBATkYFh0hAWgCNwIPCBErGSQ0EgYEEjAcITYVAg8IESsZJDQSBgQSMBwhNhUCDwgRKxkkNBIGBBIwHCE2FxwBHd9ORwAAAAAQAMYAAQAAAAAAAQAHAAAAAQAAAAAAAgAHAAcAAQAAAAAAAwAHAA4AAQAAAAAABAAHABUAAQAAAAAABQALABwAAQAAAAAABgAHACcAAQAAAAAACgArAC4AAQAAAAAACwATAFkAAwABBAkAAQAOAGwAAwABBAkAAgAOAHoAAwABBAkAAwAOAIgAAwABBAkABAAOAJYAAwABBAkABQAWAKQAAwABBAkABgAOALoAAwABBAkACgBWAMgAAwABBAkACwAmAR5WaWRlb0pTUmVndWxhclZpZGVvSlNWaWRlb0pTVmVyc2lvbiAxLjBWaWRlb0pTR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AVgBpAGQAZQBvAEoAUwBSAGUAZwB1AGwAYQByAFYAaQBkAGUAbwBKAFMAVgBpAGQAZQBvAEoAUwBWAGUAcgBzAGkAbwBuACAAMQAuADAAVgBpAGQAZQBvAEoAUwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAACAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUEcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZRFhdWRpby1kZXNjcmlwdGlvbgAAAAAA) format('truetype'); + font-weight: normal; + font-style: normal; +} +.vjs-icon-play, +.video-js .vjs-big-play-button, +.video-js .vjs-play-control { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-play:before, +.video-js .vjs-big-play-button:before, +.video-js .vjs-play-control:before { + content: '\f101'; +} +.vjs-icon-play-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-play-circle:before { + content: '\f102'; +} +.vjs-icon-pause, +.video-js .vjs-play-control.vjs-playing { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-pause:before, +.video-js .vjs-play-control.vjs-playing:before { + content: '\f103'; +} +.vjs-icon-volume-mute, +.video-js .vjs-mute-control.vjs-vol-0, +.video-js .vjs-volume-menu-button.vjs-vol-0 { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-mute:before, +.video-js .vjs-mute-control.vjs-vol-0:before, +.video-js .vjs-volume-menu-button.vjs-vol-0:before { + content: '\f104'; +} +.vjs-icon-volume-low, +.video-js .vjs-mute-control.vjs-vol-1, +.video-js .vjs-volume-menu-button.vjs-vol-1 { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-low:before, +.video-js .vjs-mute-control.vjs-vol-1:before, +.video-js .vjs-volume-menu-button.vjs-vol-1:before { + content: '\f105'; +} +.vjs-icon-volume-mid, +.video-js .vjs-mute-control.vjs-vol-2, +.video-js .vjs-volume-menu-button.vjs-vol-2 { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-mid:before, +.video-js .vjs-mute-control.vjs-vol-2:before, +.video-js .vjs-volume-menu-button.vjs-vol-2:before { + content: '\f106'; +} +.vjs-icon-volume-high, +.video-js .vjs-mute-control, +.video-js .vjs-volume-menu-button { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-high:before, +.video-js .vjs-mute-control:before, +.video-js .vjs-volume-menu-button:before { + content: '\f107'; +} +.vjs-icon-fullscreen-enter, +.video-js .vjs-fullscreen-control { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-fullscreen-enter:before, +.video-js .vjs-fullscreen-control:before { + content: '\f108'; +} +.vjs-icon-fullscreen-exit, +.video-js.vjs-fullscreen .vjs-fullscreen-control { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-fullscreen-exit:before, +.video-js.vjs-fullscreen .vjs-fullscreen-control:before { + content: '\f109'; +} +.vjs-icon-square { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-square:before { + content: '\f10a'; +} +.vjs-icon-spinner { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-spinner:before { + content: '\f10b'; +} +.vjs-icon-subtitles, +.video-js .vjs-subtitles-button { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-subtitles:before, +.video-js .vjs-subtitles-button:before { + content: '\f10c'; +} +.vjs-icon-captions, +.video-js .vjs-captions-button { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-captions:before, +.video-js .vjs-captions-button:before { + content: '\f10d'; +} +.vjs-icon-chapters, +.video-js .vjs-chapters-button { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-chapters:before, +.video-js .vjs-chapters-button:before { + content: '\f10e'; +} +.vjs-icon-share { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-share:before { + content: '\f10f'; +} +.vjs-icon-cog { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-cog:before { + content: '\f110'; +} +.vjs-icon-circle, +.video-js .vjs-mouse-display, +.video-js .vjs-play-progress, +.video-js .vjs-volume-level { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle:before, +.video-js .vjs-mouse-display:before, +.video-js .vjs-play-progress:before, +.video-js .vjs-volume-level:before { + content: '\f111'; +} +.vjs-icon-circle-outline { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle-outline:before { + content: '\f112'; +} +.vjs-icon-circle-inner-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle-inner-circle:before { + content: '\f113'; +} +.vjs-icon-audio-description { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-audio-description:before { + content: '\f114'; +} +.video-js { + /* display:inline-block would be closer to the video el's display:inline + * but it results in flash reloading when going into fullscreen [#2205] + */ + display: block; + /* Make video.js videos align top when next to video elements */ + vertical-align: top; + box-sizing: border-box; + color: #fff; + background-color: #000; + position: relative; + padding: 0; + /* Start with 10px for base font size so other dimensions can be em based and + easily calculable. */ + font-size: 10px; + line-height: 1; + /* Provide some basic defaults for fonts */ + font-weight: normal; + font-style: normal; + /* Avoiding helvetica: issue #376 */ + font-family: Arial, Helvetica, sans-serif; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + /* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when + checking fullScreenEnabled. */ +} +.video-js:-moz-full-screen { + position: absolute; +} +.video-js:-webkit-full-screen { + width: 100% !important; + height: 100% !important; +} +/* All elements inherit border-box sizing */ +.video-js *, +.video-js *:before, +.video-js *:after { + box-sizing: inherit; +} +/* List style reset */ +.video-js ul { + font-family: inherit; + font-size: inherit; + line-height: inherit; + list-style-position: outside; + /* Important to specify each */ + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; +} +/* Fill the width of the containing element and use padding to create the + desired aspect ratio. Default to 16x9 unless another ratio is given. */ +/* Not including a default AR in vjs-fluid because it would override + the user set AR injected into the header. */ +.video-js.vjs-fluid, +.video-js.vjs-16-9, +.video-js.vjs-4-3 { + width: 100%; + max-width: 100%; + height: 0; +} +.video-js.vjs-16-9 { + padding-top: 56.25%; +} +.video-js.vjs-4-3 { + padding-top: 75%; +} +.video-js.vjs-fill { + width: 100%; + height: 100%; +} +/* Playback technology elements expand to the width/height of the containing div +